**이더리움 가상 머신(EVM)**은 이더리움 네트워크에서 스마트 컨트랙트를 실행하는 분산형 컴퓨팅 엔진입니다. EVM은 규칙을 적용하고 네트워크 전반에 걸쳐 일관성을 유지함으로써 스마트 컨트랙트 내의 코드가 의도한 대로 정확하게 실행되도록 보장합니다. [1][2]
가상 머신(VM)은 이름에서 알 수 있듯이 실제 컴퓨터의 가상화와 관련이 있습니다. EVM 블록체인은 이더리움 기반 스마트 컨트랙트를 위한 인프라로 설계되었습니다. 초기에는 암호화폐 공간에 위협이 되는 서비스 거부 공격을 피하기 위해 구축되었습니다. [3]
이더리움 가상 머신(EVM)은 개빈 우드가 이더리움에서 작업하는 동안 설계했습니다. C++로 작성되고 LLVM 프로젝트 컴파일러를 사용하는 EVM은 지속적으로 작동하는 특수한 상태 머신이며, 불변의 작업은 이더리움 블록체인의 각 블록 상태를 결정합니다. [1]
이더리움 가상 머신(EVM)은 이더리움 네트워크의 기본 구성 요소입니다. EVM은 이더리움을 비트코인과 같은 분산 원장 그 이상으로 만드는 핵심 기능입니다. 이더리움 블록체인의 중추를 형성하는 EVM은 개발자에게 Solidity, Vyper, Python 및 Yul과 같은 언어로 스마트 컨트랙트 및 DApp(탈중앙화 애플리케이션)을 만들 수 있는 런타임 환경을 제공합니다.[1][4]
EVM은 네트워크의 모든 노드에 액세스할 수 있고, 스마트 컨트랙트 실행을 처리하며, 보고된 주요 가동 중지 시간 없이 이더리움 블록체인의 모든 트랜잭션을 처리합니다.[1]
EVM opcode는 EVM이 스마트 컨트랙트 또는 트랜잭션의 특정 작업을 실행하는 데 도움이 됩니다. 효율성을 목표로 EVM은 바이트코드를 opcode로 변환하며, 각 opcode는 바이트코드에서 1바이트가 할당됩니다. 각 opcode 작업에는 EVM에서 사용할 특정 양의 가스가 필요합니다.[4]
스마트 컨트랙트가 실행될 때마다 EVM은 이더리움 네트워크의 새로운 상태를 계산하여 계정 잔액, 스마트 컨트랙트의 데이터 스토리지, 계정 및 컨트랙트 수준의 트랜잭션을 업데이트합니다. 이러한 모든 기능은 호출된 상태 내부에 존재하는 것입니다. EVM은 이러한 스마트 컨트랙트가 존재하고 서로 상호 작용할 수 있는 환경이며, EVM은 이더리움 네트워크에 연결된 수천 개의 CPU 리소스를 결합합니다. EVM은 Solidity를 직접 실행할 수 없으므로 코드는 opcode라는 머신 명령어로 컴파일되고 opcode를 사용하려면 가스가 필요합니다.[4][8]
가스의 주요 목적은 이더리움 네트워크의 각 노드에서 수행하는 스마트 컨트랙트 작업 계산에 대한 수수료 역할을 하는 것입니다. 계산 수수료는 공격자가 네트워크를 중단하기 위해 긴 계산 시간이 필요한 많은 복잡한 컨트랙트를 배포하는 것을 방지합니다. 이러한 수수료는 이러한 유형의 DDoS(분산 서비스 거부) 공격을 실행하는 데 너무 비싸게 만듭니다.
가스는 또한 트랜잭션의 정보가 유효한지 보장하는 검증자에 대한 보상 역할을 합니다. 네트워크 활동이 높을 때 사람들은 트랜잭션을 실행하고 검증하기 위해 가스 한도를 높입니다. 이러한 방식으로 검증자는 멤풀에서 더 높은 가스 한도를 가진 트랜잭션을 선택합니다.[4]
가상 머신은 기본적으로 실행 코드와 실행 머신 사이에 추상화 수준을 만듭니다. 이 계층은 소프트웨어의 이식성을 개선하고 애플리케이션이 서로 분리되고 호스트와 분리되도록 하는 데 필요합니다.
Solidity와 같은 스마트 컨트랙트 언어는 EVM에서 직접 실행할 수 없습니다. 대신 opcode라는 저수준 머신 명령어로 컴파일됩니다. 이러한 opcode를 통해 EVM은 튜링 완전이 될 수 있습니다. opcode는 1바이트이므로 최대 256개(16²)의 opcode만 있을 수 있습니다.
모든 컨트랙트 실행은 이더리움 노드를 실행하는 모든 사람이 실행하므로 공격자는 계산 비용이 많이 드는 작업을 많이 포함하는 컨트랙트를 만들어 네트워크 속도를 늦추려고 할 수 있습니다. 이러한 공격이 발생하는 것을 방지하기 위해 모든 opcode에는 자체 기본 가스 비용이 있습니다.
이 바이트코드의 끝에는 Solidity에서 만든 메타데이터 파일의 Swarm 해시가 추가됩니다. Swarm은 분산 스토리지 플랫폼 및 콘텐츠 배포 서비스 또는 더 간단히 말하면 분산 파일 스토리지입니다. 메타데이터 파일에는 컴파일러 버전 또는 컨트랙트 기능과 같은 컨트랙트에 대한 다양한 정보가 포함되어 있습니다. 이것은 실험적인 기능이며 많은 컨트랙트가 메타데이터를 Swarm 네트워크에 공개적으로 업로드하지 않았습니다.[1][3][5][6]
EVM은 스마트 컨트랙트를 실행하여 탈중앙화 애플리케이션(DApp)이 중개자 없이 자율적으로 실행될 수 있도록 합니다.[4][7]
EVM은 DeFi 애플리케이션에 전원을 공급하여 기존 은행 없이 대출, 차입 및 거래와 같은 금융 서비스를 용이하게 합니다.[4][7]
ERC-20 토큰을 포함한 디지털 토큰의 생성 및 관리, 다양한 블록체인 프로젝트에 널리 사용됩니다.[4]
EVM 호환 체인을 통해 서로 다른 블록체인 네트워크 간의 상호 운용성이 가능합니다.[4][7]
탈중앙화 자율 조직(DAO)이 EVM을 관리합니다. DAO는 중앙 권한이 없는 커뮤니티 프로젝트로, 회원에게 프로젝트에 대한 완전한 제어권을 제공합니다. 자율적일 뿐만 아니라 DAO는 투명합니다. 스마트 컨트랙트는 지침을 규정하고 코딩된 지침에 따라 정책을 구현합니다. DAO 활동은 액세스 가능하고 검증 가능하며 공개 감사를 받을 수 있으므로 참가자는 프로토콜이 실행되는 방식을 배울 수 있습니다. [7]
이더리움 외에 다른 체인도 가상 머신을 제공합니다. 몇 가지 예로는 Algorand 가상 머신(AVM), NEO 가상 머신(NeoVM) 및 비트코인 네트워크 위에 구축되어 개발자가 탈중앙화 애플리케이션을 위한 스마트 컨트랙트 코드를 작성할 수 있도록 하는 Rootstock 가상 머신(RSK)이 있습니다.[4]
개발자는 네트워크의 나머지 부분에 미치는 영향이나 노드 컴퓨터에서 호스팅되는 데이터 또는 개인 파일과 문제가 발생할 가능성에 대해 걱정하지 않고 코드를 실행할 수 있습니다. 또한 분산 합의를 통해 다양한 컴퓨팅 환경에서 복잡한 스마트 컨트랙트를 실행할 수 있습니다. 이를 통해 단일 노드의 오류가 DApp 또는 스마트 컨트랙트 실행에 부정적인 영향을 미치지 않도록 할 수 있습니다. EVM 코드는 모든 노드에서 동일하게 유지되기 때문입니다.
EVM이 만드는 결과의 신성함은 DApp 및 스마트 컨트랙트 이더리움 생태계의 지속 가능한 확장에 적합합니다. 여기에 개발자가 선택할 수 있는 표준 코드 라이브러리, 점점 더 많은 EVM 호환 레이어 2 블록체인 및 잠재적인 EVM 사용 사례가 많기 때문에 EVM이 Web3 개발에 선호되는 플랫폼인 이유를 쉽게 알 수 있습니다.[1]
고려해야 할 가장 중요한 단점은 이더리움 네트워크에서 스마트 컨트랙트를 실행하는 데 드는 높은 트랜잭션 수수료 또는 가스 비용입니다. ETH로 지불되는 이러한 수수료는 컨트랙트의 복잡성과 실행 당시의 네트워크 혼잡도에 따라 다르므로 개발자와 기업가가 그에 따라 서비스 가격을 책정해야 합니다.
또한 Solidity는 EVM에서 코딩하는 데 가장 선호되는 언어이므로 개발자는 이에 대한 적절한 경험이 있어야 하고 이를 사용하여 효율적인 스마트 컨트랙트를 만들 수 있는 기술 전문성이 있어야 합니다. 개발자가 다른 언어를 사용하여 코딩하기로 선택한 경우 EVM이 어쨌든 컴파일하므로 코드에 내재된 반복을 해결하는 데 주의해야 합니다. 스마트 컨트랙트를 나중에 업그레이드할 수 있지만 원래 스마트 컨트랙트의 주소를 참조하는 중간 스마트 컨트랙트를 만드는 데 관련된 보안 위험이 있습니다.[1]