이더리움 가상 머신(이더리움 가상 머신)은 이더리움 블록체인 네트워크 전반에서 스마트 계약을 실행하는 분산형 샌드박스 런타임 환경이다. 이는 하드웨어나 운영체제와 무관하게 모든 이더리움 노드에서 코드가 일관되고 안전하게 실행되도록 보장하는 글로벌적이고 준-튜링 완전(준-튜링 완전성)한 가상 컴퓨터 역할을 한다 [1]. EVM은 이더리움의 핵심 실행 엔진으로서 거래 처리 및 스마트 계약 코드 실행을 담당하며, 이를 통해 이더리움이 탈중앙화 애플리케이션(dApp), 대표적인 토큰 표준인 ERC-20(ERC-20) 및 ERC-721(ERC-721), 탈중앙화 금융(DeFi), 대체 불가능 토큰(NFT) 및 탈중앙화 자율 조직(DAO)과 같은 복잡한 시스템을 지원할 수 있게 한다 [2]. EVM은 스택 기반(스택 기반 아키텍처) 머신으로, 약 140개의 오퍼레이션 코드(opcode)를 사용하여 산술 연산, 데이터 조작 및 제어 흐기를 수행하며, 각 오퍼레이션은 이더(ETH)로 지불되는 가스(가스)를 소비함으로써 무한 루프 및 서비스 거부 공격(DoS 공격)을 방지한다 [3]. 결정론적 실행(결정론적 실행)을 보장함으로써 모든 노드가 동일한 입력과 초기 상태에서 동일한 결과를 도출하도록 하여 탈중앙화 네트워크에서의 합의(합의)를 유지하며, 이더리움의 아키텍처는 가비지 우드(가비지 우드) 박사가 작성한 이더리움 옐로 페이퍼(옐로 페이퍼)에 공식적으로 명세되어 있다 [4]. 개발자들은 솔리디티(솔리디티)나 바이퍼(바이퍼)와 같은 고수준 언어로 스마트 계약을 작성한 후 이를 EVM 바이트코드(EVM 바이트코드)로 컴파일하며, 하드햇(하드햇), 파운드리(파운드리), 리믹스(리믹스)와 같은 도구를 사용해 테스트 및 배포한다 [5].
아키텍처 및 핵심 구성 요소
이더리움 가상 머신(이더리움 가상 머신)은 탈중앙화 네트워크 전반에서 스마트 계약을 안전하고 일관되게 실행하기 위해 설계된 분산형 샌드박스 런타임 환경이다. 이는 하드웨어나 운영체제와 무관하게 모든 노드에서 동일한 결과를 도출하도록 보장하는 글로벌적이고 준-튜링 완전성을 갖춘 가상 컴퓨터 역할을 수행한다 [1]. EVM의 핵심은 그 스택 기반 아키텍처(스택 기반 아키텍처) 와 256비트 워드 크기 에 있으며, 이는 보안, 결정론적 실행, 그리고 성능에 중대한 영향을 미친다.
스택 기반 아키텍처와 데이터 관리
EVM은 스택 기반 머신(스택 기반 머신) 으로, 계산 중 임시 데이터를 저장하고 조작하는 데 사용되는 스택(스택) 이라는 LIFO(Last-In, First-Out) 데이터 구조를 중심으로 동작한다. 스택의 최대 깊이는 1024개 항목으로 제한되며, 각 항목은 256비트 단어로 구성된다. 대부분의 EVM 오퍼레이션 코드(opcode)는 스택에서 값을 푸시하거나 팝함으로써 산술 연산을 수행한다. 예를 들어, ADD 오퍼레이션은 스택 상단의 두 값을 제거하고 그 합을 다시 스택에 푸시한다. 이 구조는 명령어 해석과 실행을 단순화하여 EVM이 다양한 하드웨어에서 일관되고 예측 가능한 방식으로 구현될 수 있도록 한다 [3].
스택 외에도 EVM은 실행 중에 데이터를 관리하기 위해 여러 저장소 영역을 유지한다:
- 메모리(메모리): 계약 실행 중 일시적으로 사용되는 비휘발성의 선형 메모리 공간이다. 함수 호출 사이에 지속되지 않으며, 메모리 확장 비용은 사용량에 따라 제곱적으로 증가한다.
- 스토리지(스토리지): 계약의 상태를 블록체인에 영구적으로 저장하는 키-값 저장소이다. 이는 가장 비용이 많이 드는 저장소이며, 상태 변경에 대한 모든 트랜잭션이 블록체인에 기록된다.
- 캘리데이터(캘리데이터): 트랜잭션과 함께 전달되는 불변의 입력 데이터이다. 스마트 계약은 이 데이터를 해석하여 호출된 함수를 결정한다. 함수 선택자는 캘리데이터의 처음 4바이트로, 함수 시그니처의 해시값을 나타낸다 [8].
256비트 워드 크기: 보안과 효율성의 균형
EVM이 256비트 단어를 기본 단위로 사용하는 것은 의도적인 설계 결정이다. 이 크기는 이더리움에서 사용되는 주요 암호화 연산에 최적화되어 있다. 주소, 해시(예: Keccak-256), 그리고 타원 곡선 서명(ECDSA on secp256k1)과 같은 연산은 256비트 값을 자연스럽게 처리하므로, 이 크기를 네이티브하게 지원하면 복잡한 워드 분할 없이 효율적으로 수행할 수 있다 [9].
그러나 이 설계는 일반적인 계산에서 비효율성을 초래한다. 대부분의 변수(예: 카운터, 잔액, 타임스탬프)는 256비트가 필요하지 않음에도 불구하고 메모리와 스토리지에서 전체 32바이트 슬롯을 차지한다. 이는 공간 낭비 와 가스 비용 증가 로 이어지며, 특히 스토리지 작업에서 가장 큰 영향을 미친다. 이더리움 공동체는 이 문제를 인식하고 있으며, EIP-7937(EIP-7937)과 같은 제안을 통해 64비트 연산을 위한 새로운 오퍼레이션 코드를 도입하여 비암호화 연산의 성능을 향상시키는 방향으로 진화하고 있다 [10].
핵심 구성 요소의 상호작용과 보안 의미
스택 기반 아키텍처와 256비트 워드 크기는 보안에도 중요한 의미를 가진다. 스택 기반 모델은 결정론적 실행을 보장하여 모든 노드가 동일한 입력과 초기 상태에서 동일한 결과를 도출하도록 하여 합의(합의) 를 유지한다. 그러나 이는 스택 언더플로우 와 오버플로우 의 위험도 내포한다. 오퍼레이션이 스택에 있는 값보다 더 많은 값을 팝하려고 하면 예기치 못한 동작이나 계약 실패로 이어질 수 있다. 이를 해결하기 위해 EIP-5450(EIP-5450)은 계약 배포 시점에 스택 높이를 정적으로 검증하여 런타임에서 스택 오류를 방지한다 [11].
또한, 256비트 단어 크기는 개발자에게 도전 과제를 제시한다. 이더리움 공동체는 이 크기를 "가장 큰 후회 중 하나"라고 언급하며, 이는 제로 지식 증명(제로 지식 증명) 시스템에서 256비트 산술이 더 크고 복잡한 회로를 필요로 하기 때문이라고 설명한다 [12]. 그럼에도 불구하고, 이 설계는 암호화 연산의 효율성이라는 근본적인 보안 요구 사항을 충족시키는 데 핵심적인 역할을 한다.
아키텍처의 진화와 미래 방향
EVM의 현재 아키텍처는 강력하지만, 확장성과 개발자 경험을 향상시키기 위한 지속적인 개선이 이루어지고 있다. 예를 들어, EIP-8024(EIP-8024)는 "스택이 너무 깊음" 오류를 해결하기 위해 새로운 오퍼레이션 코드를 제안하며, EIP-7979(EIP-7979)는 안전한 제어 흐름을 위해 구조화된 호출/리턴 메커니즘을 도입한다 [13][14]. 이러한 제안들은 EVM을 보다 안전하고 효율적이며 개발자 친화적인 환경으로 발전시키기 위한 꾸준한 노력의 일환이다.
스마트 계약 실행 및 바이트코드
이더리움 가상 머신(이더리움 가상 머신)은 스마트 계약을 실행하는 핵심 엔진으로, 개발자가 작성한 고수준 코드를 네트워크 전반에서 일관되게 실행할 수 있도록 변환하고 처리한다. 이 과정은 컴파일러를 통해 고수준 언어로 작성된 계약이 EVM이 이해할 수 있는 저수준 형식으로 변환되는 것으로 시작되며, 이후 EVM이 바이트코드를 해석하고 실행함으로써 탈중앙화 애플리케이션(dApp)의 기능을 실현한다 [1].
스마트 계약 실행 프로세스
스마트 계약의 실행은 사용자가 계약 주소로 거래를 전송할 때 시작된다. 이 거래는 입력 데이터, 즉 calldata를 포함하며, EVM은 이를 기반으로 실행할 함수를 결정한다. 구체적으로, calldata의 첫 4바이트는 함수 선택자(function selector)로, 해당 함수의 시그니처를 해시한 값이다 [8]. EVM은 이 값을 참조하여 매칭되는 함수를 찾아 실행을 개시한다.
실행 중 EVM은 스택 기반 아키텍처를 활용하여 연산을 수행한다. 모든 연산은 스택에 값을 푸시하거나 팝하는 방식으로 이루어지며, 예를 들어 ADD 연산은 스택 상단의 두 값을 꺼내 더한 후 결과를 다시 스택에 저장한다. 이 과정에서 EVM은 여러 데이터 영역을 관리한다:
- 스택: 일시적인 계산 값을 저장하며, 최대 1024개의 256비트 항목을 수용할 수 있다.
- 메모리: 함수 실행 중 사용되는 일시적이고 선형적인 메모리 공간이다.
- 스토리지: 블록체인에 영구적으로 저장되는 계약의 상태 데이터를 위한 키-값 저장소이다.
- calldata: 거래와 함께 전달되는 읽기 전용 입력 데이터로, 함수 호출 시 인수를 전달하는 데 사용된다 [17].
EVM 바이트코드와 고수준 코드의 차이점
EVM 바이트코드는 스마트 계약의 저수준 실행 형식으로, 고수준 언어로 작성된 코드와 근본적으로 다르다. 고수준 언어인 솔리디티나 바이퍼는 함수, 변수, 반복문과 같은 추상화를 제공하여 개발자가 직관적으로 코드를 작성할 수 있도록 한다. 반면, EVM 바이트코드는 기계가 해석할 수 있는 바이트 시퀀스로, 각 바이트는 opcode 또는 피연산자에 해당한다 [18].
예를 들어, 솔리디티에서 x = a + b;라는 문장은 컴파일 과정을 거쳐 PUSH, ADD, STORE와 같은 일련의 opcode로 변환된다. 이러한 opcode는 스택과 메모리를 조작하여 연산을 수행하며, 각각은 미리 정의된 가스 비용을 소비한다 [19]. 이로 인해 바이트코드는 인간이 직접 읽고 이해하기 어렵지만, EVM은 이를 정확하게 해석하여 결정론적으로 실행할 수 있다.
컴파일 프로세스와 중간 표현
스마트 계약은 고수준 코드에서 EVM 바이트코드로 변환되는 컴파일 과정을 거친다. 이 과정에서 [20]가 주로 사용되며, 코드를 최적화하고 실행 가능한 바이트코드로 생성한다 [21]. 최신 컴파일 파이프라인은 중간 표현인 Yul을 활용하여 고급 최적화를 수행할 수 있다. Yul은 EVM 바이트코드에 가까운 중간 언어로, 개발자가 특정 use case에 맞춰 최적화된 코드를 작성할 수 있도록 지원한다 [22].
또한, 컴파일 과정에서 최적화 패스를 통해 가스 소비를 줄이고 실행 효율을 높일 수 있다. 예를 들어, 변수를 패킹하여 하나의 스토리지 슬롯에 여러 값을 저장하면 SSTORE 연산의 빈번한 사용을 방지할 수 있다 [23].
EVM 바이트코드의 최신 발전
최근 이더리움 개선 제안(EIP)들은 EVM 바이트코드의 구조와 기능을 개선하고 있다. 대표적으로 EVM Object Format(EOF)을 도입하는 EIP-3540은 바이트코드에 버전 정보, 섹션 헤더, 오류 검출 기능을 추가하여 배포 시 검증, 정적 분석, 확장성을 향상시키는 것을 목표로 한다 [24]. EOF는 코드의 모듈화와 보안성을 강화하며, 미래의 확장성을 고려한 설계이다.
또한, EIP-6780은 SELFDESTRUCT opcode의 사용을 동일한 거래 내에서 생성된 계약으로 제한하여, 악성 코드가 기존 계약을 무작위로 제거하는 것을 방지한다. EIP-7761은 EXTCODETYPE opcode를 추가하여 계약의 코드 유형을 조회할 수 있도록 하여, 계약의 상태를 보다 정교하게 검사할 수 있게 한다 [25][26]. 이러한 변화들은 EVM 생태계의 보안과 기능성을 지속적으로 개선하는 방향으로 나아가고 있음을 보여준다.
가스 시스템 및 리소스 관리
이더리움 가상 머신(이더리움 가상 머신)의 핵심 기능 중 하나는 가스(가스) 시스템을 통한 리소스 관리이다. 가스는 EVM 내에서 코드 실행에 소요되는 계산 작업의 단위로, 모든 오퍼레이션 코드(opcode)는 사전 정의된 양의 가스를 소비한다. 사용자는 이더(ETH)로 가스를 지불하며, 이를 통해 무한 루프(무한 루프)나 서비스 거부 공격(DoS 공격)과 같은 악용 행위를 방지하고 네트워크의 안정성과 보안을 유지한다 [1]. 가스 시스템은 EVM이 준-튜링 완전성을 유지하면서도 무한한 계산을 방지하는 메커니즘으로 작동하며, 이는 네트워크의 합의(합의)를 보장하는 데 필수적이다.
가스 가격 책정과 오퍼코드 비용
각 EVM 오퍼코드는 그 계산 복잡성과 리소스 소비량을 반영하는 고정된 가스 비용을 갖는다. 예를 들어, 기본 산술 연산인 ADD와 SUB는 각각 3 가스 단위를 소비하며, 더 복잡한 연산인 MUL은 5 가스를 요구한다. 상태 접근 오퍼레이션(예: SLOAD, BALANCE)은 데이터베이스 읽기 및 쓰기와 관련된 비용이 높기 때문에 훨씬 더 많은 가스를 소비한다 [3]. 이러한 가스 비용은 하드웨어 성능과 네트워크 조건의 변화에 따라 지속적으로 조정되며, 이를 위해 이더리움 개선 제안(EIP)이 제안된다. 예를 들어, EIP-2929는 트랜잭션 내에서 처음 접근하는 상태(이른바 "차가운 접근")에 대한 SLOAD, BALANCE, EXTCODEHASH 등의 가스 비용을 증가시켜 실시간 저장소 지연과 상태 성장에 더 잘 대응하도록 했다 [29]. 이후 EIP-8038은 상태 접근 가스 비용을 추가로 조정하여 증가하는 이더리움 상태의 경제적 균형을 유지하려고 했다 [30]. 또한, EIP-7904는 CPU 리소스의 악용을 방지하기 위해 계산 집약적인 오퍼레이션의 가스 비용을 증가시키는 것을 제안했다 [31].
EIP-1559와 런던 하드포크: 거래 수수료 예측 가능성의 혁신
2021년 8월 5일 활성화된 런던 하드포크(런던 하드포크)는 EIP-1559를 도입함으로써 이더리움의 수수료 시장을 근본적으로 변화시켰다 [32]. 이전에는 사용자들이 블록에 거래를 포함시키기 위해 입찰하는 일종의 경매 방식을 사용했지만, 이는 네트워크 혼잡 시 변동이 심하고 예측하기 어려운 수수료로 이어졌다. EIP-1559는 이러한 모델을 이중 수수료 구조로 대체했다:
- 기본 수수료(기본 수수료): 네트워크가 결정하는 가스 단위의 수수료로, 블록 당 수요에 따라 자동으로 조정된다. 이 기본 수수료는 채굴자나 검증자에게 지급되는 것이 아니라 소각(소각)되어 유통량에서 제거된다 [33].
- 우선 순위 수수료(우선 순위 수수료) (팁): 블록 제안자에게 직접 지급되는 선택적 팁으로, 특히 혼잡한 시기에 거래 포함을 유도한다.
기본 수수료는 블록 이용률에 따라 알고리즘적으로 조정된다. 블록이 목표 크기(1500만 가스)를 초과하면 최대 12.5%까지 증가하고, 이용률이 낮으면 감소한다. 이 피드백 루프는 네트워크 혼잡을 안정화시키고 수수료 예측을 훨씬 더 쉽게 만든다 [34]. 이 변화는 거래 비용 예측 가능성을 크게 향상시켰으며, 사용자들은 과다 입찰로 인한 낭비를 줄일 수 있었다. 실제로, EIP-1559 도입 이후 이더리움 사용자들은 기본 수수료 환급과 과다 입찰 감소를 통해 약 8억 4400만 달러의 거래 수수료를 절약했다는 보고가 있다 [35]. 또한, 기본 수수료의 소각은 ETH에 통화 긴축(통화 긴축) 효과를 부여하며, 보다 지속 가능한 경제 모델을 제공한다. EIP-1559 활성화 이후 10억 달러 이상의 ETH이 소각되었다 [36].
리소스 제약과 보안 강화를 위한 지속적인 개선
런던 하드포크 이후에도 가스 회계를 더욱 정교하게 만드는 EIP들이 제안되었다. EIP-7778은 가스 환급(예: 저장소 정리로 인한 환급)을 총 블록 가스 사용량에서 제외하여 블록 가스 한도를 조작하는 것을 방지한다 [37]. EIP-8918은 환급이나 할인을 악용해 효과적인 가스 한도를 초과하는 "가스 밀수" 공격을 방지한다 [38]. 또한, EIP-8058은 동일한 계약 코드를 배포할 때 바이트코드 중복 제거 할인을 도입하여 흔한 배포 패턴의 효율성을 향상시킨다 [39]. 이러한 변화들은 가스 회계가 실제 리소스 소비를 정확히 반영하고, 경제적 악용에 저항할 수 있도록 보장한다.
가스 한도와 트랜잭션 리소스 제약
EVM은 각 트랜잭션에 대해 사용자가 설정한 가스 한도 내에서만 실행을 허용한다. 이는 무한 루프를 방지하는 핵심 메커니즘이다. 그러나 트랜잭션이 가스 한도를 초과하면 실행이 중단되고 모든 상태 변경이 취소되며, 지불된 가스는 소비된다. EIP-7825는 한 트랜잭션이 소비할 수 있는 가스에 프로토콜 수준의 하드 캡(2^24, 약 1677만 가스)을 도입하여, 극도로 크거나 복잡한 트랜잭션이 블록 공간을 독점하거나 노드 리소스를 과도하게 소모하는 위험을 완화한다 [40]. 이는 네트워크의 안정성을 향상시키고, 거대한 계산 부하로 인한 시스템 예측 가능성을 높이며, 탈중앙화를 유지하는 데 기여한다.
메모리 및 저장소 비용
가스 시스템은 메모리(메모리) 확장과 저장소(저장소) 작업에도 적용된다. 메모리 확장 비용은 사용량에 따라 제곱 함수로 증가하며, 이는 예측할 수 없고 비례하지 않는 가스 소비로 이어질 수 있다. EIP-7686은 트랜잭션의 가스 한도와 동일하게 메모리 사용을 하드 캡하는 것을 제안하여, 이 문제를 해결하고 비용 예측을 단순화한다 [41]. 저장소 작업은 EVM에서 가장 비용이 많이 드는 작업 중 하나이며, 이는 저장소를 효율적으로 사용하고 변수를 구조체(구조체)에 패킹하는 등 최적화 패턴을 장려한다. 이러한 메커니즘들은 사용자가 네트워크 리소스를 공정하게 사용하도록 하며, 스팸과 비효율적인 코드를 억제하여 이더리움 생태계의 장기적인 건강을 유지하는 데 필수적이다.
결정론적 실행과 합의 보장
이더리움 가상 머신(이더리움 가상 머신)의 핵심 설계 원칙 중 하나는 **결정론적 실행(결정론적 실행)**이다. 이는 모든 네트워크 노드가 동일한 입력과 초기 상태에서 스마트 계약을 실행할 때 반드시 동일한 결과를 도출하도록 보장하는 특성이다. 이 속성은 탈중앙화 환경에서 **합의(합의)**를 유지하기 위해 필수적이며, 이더리움 블록체인의 무결성과 신뢰성을 기반으로 한다 [18]. 결정론적 실행은 네트워크 내 모든 노드가 동일한 상태 전이를 수행하도록 강제함으로써, 중앙 통제 없이도 전 세계적으로 일관된 글로벌 상태를 유지할 수 있게 한다.
결정론성의 기술적 기반
결정론적 실행은 EVM의 여러 핵심 설계 요소를 통해 달성된다. 첫째, EVM은 스택 기반(스택 기반 아키텍처) 머신으로, 모든 연산이 명확히 정의된 오퍼레이션 코드(opcode)를 통해 스택 위에서 수행된다. 각 오퍼레이션은 입력과 현재 상태에 따라 항상 동일한 출력을 생성하며, 이는 실행의 일관성을 보장한다. 둘째, EVM은 하드웨어나 운영체제와 무관하게 동작하는 샌드박스 환경이므로, 실행 결과가 노드의 물리적 구성에 의존하지 않는다. 셋째, 모든 연산은 정해진 가스(가스) 비용을 가지며, 이는 무한 루프나 서비스 거부 공격(DoS 공격)을 방지하여 실행이 항상 종료되도록 한다. 이는 이더리움이 **준-튜링 완전(준-튜링 완전성)**하다는 의미로, 이론적으로는 무한한 계산이 가능하지만 가스 한도로 인해 실질적으로는 유한한 실행만 허용된다는 것을 나타낸다 [43].
합의 보장과 상태 전이
결정론적 실행은 이더리움의 상태 전이 함수를 수학적으로 정의하는 옐로 페이퍼에 명시되어 있다. 상태 전이 함수 Υ(σ, τ) → σ'는 현재 상태 σ와 트랜잭션 세트 τ를 입력으로 받아 새로운 상태 σ'를 출력한다. 모든 노드가 이 함수를 동일하게 적용함으로써, 네트워크는 어떤 노드가 거짓말을 하더라도 다수결을 통해 올바른 상태에 도달할 수 있다. 이 과정에서 각 노드는 트랜잭션을 검증하고 EVM을 통해 실행한 후 결과 상태를 계산한다. 이 결과가 다른 노드들과 일치하면 합의가 이루어지고, 블록이 최종적으로 승인된다. 이러한 메커니즘은 이더리움이 신뢰 없는 환경에서도 신뢰할 수 있는 계산을 수행할 수 있게 한다.
결정론성과 보안의 관계
결정론성은 보안의 핵심 요소이지만, 동시에 새로운 공격 벡터를 노출할 수 있다. 예를 들어, 결정론적인 실행 순서는 트랜잭션 순서 조작(MEV, Maximal Extractable Value)을 가능하게 하며, 검증인이나 마이너가 수익을 위해 트랜잭션 순서를 재배열할 수 있다. 또한, 결정론적인 스택 기반 아키텍처는 **재진입 공격(재진입 공격)**과 같은 취약점을 악용할 수 있게 한다. 공격자는 외부 호출을 통해 원래 함수가 상태를 업데이트하기 전에 다시 진입함으로써, 동일한 조건에서 반복적으로 자금을 인출할 수 있다. 이는 결정론적인 실행 흐름을 악용하는 대표적인 사례이다. 이를 방지하기 위해 개발자들은 **검사-효과-상호작용 패턴(검사-효과-상호작용 패턴)**을 사용하여 상태 변경을 외부 호출 전에 수행해야 한다 [44].
결정론성의 검증과 공식 모델
결정론적 실행을 신뢰하기 위해서는 EVM의 동작이 수학적으로 검증되어야 한다. 이를 위해 KEVM과 같은 공식 모델이 개발되었다. KEVM은 K 프레임워크를 사용하여 EVM의 완전한 형식적 의미론을 제공하며, 도달 가능성 논리를 통해 스마트 계약의 올바름을 증명할 수 있다. 예를 들어, ERC-20 토큰이나 MakerDAO와 같은 고도로 중요한 계약의 기능적 정확성과 보안 속성을 형식적으로 검증할 수 있다 [45]. 이와 유사하게, Lean 4 기반의 형식적 모델은 캔쿤 하드포크 사양과 일치하며, 99.99%의 공식 이더리움 실행 테스트를 통과하여 높은 정확성을 입증했다 [46]. 이러한 공식 모델은 컴파일러나 클라이언트의 정확성을 보장하고, 소스 코드에서 바이트코드에 이르는 전체 실행 스택에 대한 신뢰를 구축하는 데 기여한다.
미래의 도전과 진화
결정론성은 이더리움의 강점이지만, 확장성과의 균형을 이루는 데 어려움이 있다. 예를 들어, 현재의 EVM은 트랜잭션을 단일 스레드로 순차적으로 실행하므로 처리량이 제한된다. 반면, 솔라나의 **시일레벨(시일레벨)**과 같은 대안 실행 환경은 병렬 처리를 통해 훨씬 높은 처리량을 달성한다. 이더리움은 이러한 문제를 해결하기 위해 병렬 EVM 프로젝트를 탐색하고 있으며, 트랜잭션 간의 의존성을 분석하여 독립적인 트랜잭션을 동시에 실행하려는 시도가 있다 [47]. 또한, 무상태 클라이언트(무상태 클라이언트) 모델은 검증자가 전체 상태를 저장하지 않고도 블록을 검증할 수 있도록 하여, 노드의 하드웨어 요구 사항을 낮추고 탈중앙화를 유지하는 데 기여한다. 이 모델은 **버클 트리(버클 트리)**를 사용하여 상태 접근 증명을 생성하고, 검증자는 이 증명을 통해 상태의 정확성을 확인한다 [48]. 이러한 진화는 결정론성과 합의의 원칙을 유지하면서도, 성능과 확장성을 극대화하려는 지속적인 노력의 일환이다.
보안 취약점 및 방어 전략
이더리움 가상 머신(이더리움 가상 머신)의 설계는 결정론적 실행과 분산 합의를 가능하게 하지만, 동시에 다양한 보안 취약점을 유발할 수 있다. 스택 기반(스택 기반 아키텍처), 가스 메터링(가스), 투링 완전성(투링 완전성)과 같은 핵심 특성은 개발자에게 유연성을 제공하지만, 이를 잘못 이해하거나 구현할 경우 심각한 보안 사고로 이어질 수 있다. 주요 취약점으로는 재진입 공격(재진입 공격), 가스 고갈 공격(DoS 공격), 정수 오버플로우(정수 오버플로우) 등이 있으며, 이러한 위험을 완화하기 위한 다양한 방어 전략이 존재한다.
재진입 공격과 방어
재진입 공격(재진입 공격)은 스마트 계약의 가장 유명하고 파괴적인 취약점 중 하나로, 악의적인 계약이 외부 호출을 통해 원래 함수가 완전히 종료되기 전에 재귀적으로 다시 진입함으로써 상태 업데이트 전의 오래된 상태를 악용하는 공격이다. 이는 이더리움 가상 머신의 스택 기반(스택 기반 아키텍처) 설계와 호출 스택의 분리된 프레임 구조 덕분에 가능하다. 대표적인 사례로는 2016년 DAO 해킹이 있으며, 이때 공격자는 자금 인출 함수를 반복적으로 호출하여 계약 잔고를 모두 탈취했다 [49].
이러한 공격을 방어하기 위한 핵심 전략은 다음과 같다:
- 검사-효과-상호작용 패턴(검사-효과-상호작용 패턴): 상태 변경(예: 잔고 업데이트)을 외부 호출(예: 송금)보다 먼저 수행함으로써 재진입 시점에 이미 업데이트된 상태를 보게 하여 공격을 차단한다.
- 재진입 가드(재진입 가드): OpenZeppelin의
ReentrancyGuard와 같은 뮤텍스 잠금을 사용하여 함수가 재진입되는 것을 기술적으로 차단한다. - 안전한 송금 함수 사용:
call,send대신transfer를 사용하면 호출에 고정된 가스만 전달되어, 악성 폴백 함수의 실행을 막을 수 있다.
가스 고갈 공격과 방어
가스 메터링(가스)은 무한 루프를 방지하는 핵심 메커니즘이지만, 이는 또한 가스 고갈 공격(DoS 공격)의 표적이 될 수 있다. 이 공격은 계약의 특정 함수가 블록 가스 한도(블록 가스 한도)를 초과할 정도로 많은 가스를 소비하도록 강제함으로써 트랜잭션을 실패하게 만들고, 결과적으로 계약의 기능을 마비시키는 것을 목표로 한다. 대표적인 예로는, 사용자 목록을 반복하는 보상 분배 함수가 공격자에 의해 인위적으로 길어지면, 누구도 이 함수를 실행할 수 없게 되어 자금이 잠기게 된다 [50].
이를 방어하기 위한 전략은 다음과 같다:
- 무제한 루프 회피: 배열이나 매핑을 순회할 때 페이징(페이징)이나 배치 처리를 사용하여 반복 횟수를 제한한다.
- 푸시보다 풀 방식 선호(푸시보다 풀 방식): 사용자가 직접 자금을 요청하는 풀 모델을 사용하면, 비용과 실패 위험을 사용자에게 전가할 수 있다.
- 가스 한도 및 입력 검증: 함수 내부에서 가스 소비를 제한하거나 입력 크기를 검증하여 과도한 소비를 방지한다.
- 가스 기브핑(가스 기브핑) 방지: 외부 호출에 충분한 가스를 전달하거나, 가스 환급이 필요한 프로토콜에서는 공격자가 비용을 증가시키는 것을 방지하기 위한 설계를 한다.
정수 오버플로우 및 언더플로우
이더리움 가상 머신의 정수형은 고정된 크기를 가지며, 산술 연산의 결과가 이 범위를 벗어나면 오버플로우(정수 오버플로우) 또는 언더플로우(정수 언더플로우)가 발생하여 값이 예기치 않게 감싸진다(예: uint8의 최댓값 255에 1을 더하면 0이 됨). 공격자는 이를 악용하여 토큰 잔고를 조작하거나 무한 토큰을 생성할 수 있다. 2018년 BeautyChain 토큰의 해킹이 이 취약점을 이용한 대표적인 사례이다 [51].
이러한 취약점을 방어하기 위한 주요 변화는 솔리디티 언어의 진화이다:
- 솔리디티 0.8+의 내장 오버플로우 검사: 2020년 출시된 솔리디티 0.8.0부터 모든 산술 연산에 대해 오버플로우 및 언더플로우를 자동으로 검사하며, 발생 시 트랜잭션을 되돌린다. 이로 인해 이전에 필수적으로 사용되던 OpenZeppelin의
SafeMath라이브러리는 대부분 불필요해졌다 [52]. unchecked블록의 신중한 사용: 성능 최적화를 위해 오버플로우 검사를 일시적으로 비활성화할 수 있는unchecked블록이 제공되지만, 이를 잘못 사용하면 다시 취약점이 생길 수 있으므로 주의가 필요하다 [53].
정적 분석 및 형식적 검증 도구
보안 취약점을 조기에 발견하고 방지하기 위해 개발자들은 다양한 도구를 활용한다.
- 슬리서(슬리서): 솔리디티 코드를 분석하여 재진입, 타임스탬프 의존성, 오버플로우 등의 취약점을 탐지하는 정적 분석 도구이다. 솔리디티 코드를 EVM 의미를 반영하는 중간 표현(SlithIR)로 변환하여 데이터 흐름과 오염 분석을 수행한다 [54].
- 에키드나(에키드나): 속성 기반 퍼징 도구로, 사용자가 정의한 불변 조건을 위반하는 트랜잭션 시퀀스를 자동으로 생성한다.
hevm이라는 심볼릭 EVM 실행기를 통합하여 복잡한 호출 체인에서의 재진입이나 정수 오버플로우와 같은 에지 케이스를 탐지할 수 있다 [55]. - 형식적 검증(형식적 검증): KEVM, DafnyEVM과 같은 프로젝트는 EVM의 형식적 의미론을 제공하여, 수학적으로 계약의 올바름을 증명할 수 있다. 이는 고도로 민감한 로직에 대한 가장 강력한 보증을 제공한다 [56].
개발자 인식의 중요성
많은 취약점은 EVM의 실행 모델에 대한 오해에서 비롯된다. 개발자들이 흔히 가지는 오해로는 가스 비용을 무시하거나, 스토리지(스토리지)와 메모리(메모리)를 혼동하거나, 외부 호출(외부 호출)이 안전하다고 생각하는 것이다. 이러한 오해를 바로잡고, 가스 비용을 설계 단계부터 고려하며, 상태 변경 전 외부 호출을 피하는 등의 모범 사례를 따르는 것이 보안 강화의 첫걸음이다 [57].
개발 도구 및 생태계
이더리움 가상 머신(이더리움 가상 머신)의 개발 생태계는 고성능 도구, 강력한 테스트 프레임워크, 그리고 정적 분석 및 형식 검증 도구로 구성되어 있으며, 이는 스마트 계약(스마트 계약)의 보안성과 효율성을 극대화하는 데 기여한다. 개발자들은 솔리디티, 바이퍼와 같은 고수준 언어로 계약을 작성한 후, 이를 EVM 바이트코드(EVM 바이트코드)로 컴파일하고, 다양한 도구를 사용해 테스트, 배포, 최적화 및 보안 감사를 수행한다 [5].
주요 개발 프레임워크
하드햇(Hardhat)
하드햇은 이더리움 개발을 위한 통합 개발 환경으로, 로컬 네트워크에서 스마트 계약을 컴파일, 테스트, 디버그 및 배포할 수 있도록 지원한다. 2024년에 출시된 하드햇 v2.21.0은 Rust 기반의 Ethereum Development Runtime(EDR)을 도입하여 테스트 실행 속도를 최소 2배, 일부 프로젝트에서는 최대 10배까지 향상시켰다 [59]. 하드햇은 JavaScript/TypeScript 기반의 테스트 및 스크립팅을 지원하므로, 기존 웹 개발자들에게 익숙한 환경을 제공하며, 다양한 플러그인(플러그인)을 통해 기능을 확장할 수 있다. 예를 들어, hardhat-gas-reporter는 테스트 중 가스 소비량을 자동으로 분석하여 각 함수 및 배포 비용을 보여준다 [60].
파운드리(Foundry)
파운드리는 Rust로 구현된 고성능 개발 도구 모음으로, 컴파일, 테스트, 디버깅, 배포를 하나의 통합된 워크플로우로 제공한다. 파운드리의 핵심 장점은 솔리디티 네이티브 테스트 기능이다. 개발자는 JavaScript가 아닌 솔리디티로 테스트를 작성할 수 있어, 언어 간 전환 없이 계약의 로직을 직접 검증할 수 있다 [61]. forge test --gas-report 명령어는 상세한 가스 보고서를 생성하며, forge snapshot을 통해 가스 소비 기준선을 설정하고 커밋 간 변화를 추적할 수 있다 [62]. 2025년에 출시된 파운드리 v1.0은 성숙한 프로덕션급 도구로 자리매김했다 [63].
보안 및 정적 분석 도구
슬리서(Slither)
슬리서는 고급 정적 분석 프레임워크로, 솔리디티 및 바이퍼 계약의 취약점을 자동으로 탐지한다. 슬리서는 소스 코드를 SlithIR(Slither Intermediate Representation)이라는 중간 표현으로 변환하여, EVM의 의미론을 반영한 데이터 흐름 및 오염 분석을 수행한다. 이를 통해 재진입(재진입) 공격, 타임스탬프 의존성, 정수 오버플로우(정수 오버플로우)와 같은 취약점을 식별할 수 있다 [54]. 슬리서는 소스 코드 또는 컴파일된 아티팩트를 필요로 하며, CI/CD 파이프라인에 통합되어 코드 변경 시 자동으로 보안 검사를 수행할 수 있다 [65].
에키드나(Echidna)
에키드나는 속성 기반 퍼징(property-based fuzzing) 도구로, 사용자가 정의한 불변 조건(invariant)을 위반하는 트랜잭션 시퀀스를 자동으로 생성한다. 에키드나는 hevm이라는 Haskell 기반의 기호 실행(symbolic execution) 엔진과 통합되어 있어, 기호 입력을 사용하여 가능한 모든 실행 경로를 탐색할 수 있다. 이는 정수 오버플로우, 승인되지 않은 상태 변경, 복잡한 외부 호출 체인에서의 재진입과 같은 엣지 케이스 취약점을 발견하는 데 매우 효과적이다 [55]. 에키드나는 2023년 이후로 검증 모드(verification mode)와 탐색 모드(exploration mode)를 제공하여, 상태 전이에 대한 포괄적인 검증을 가능하게 한다 [67].
가스 최적화 및 시각화 도구
가스 최적화는 dApp(dApp)의 경제적 실현 가능성을 결정짓는 핵심 요소이다. 개발자들은 다양한 도구를 활용하여 가스 소비를 시각화하고 관리한다.
- Tenderly 가스 프로파일러: Tenderly는 트랜잭션 시뮬레이터와 디버거와 통합된 가스 프로파일러를 제공하며, 함수 호출과 개별 오퍼코드(opcode) 수준에서의 가스 소비를 시각화하는 플레임 차트를 제공한다. 이는 저장소(저장소) 쓰기, 외부 호출, 루프 반복과 같은 고비용 작업을 식별하는 데 매우 유용하다 [68].
- Foundry Gas Diff: 이 도구는 GitHub 풀 리퀘스트에 가스 소비 비교를 직접 통합하여, 팀 차원에서 가스 효율성 변화를 모니터링할 수 있도록 한다 [69].
- Solidity-Gas-Optimizoor: CLI 기반 도구로, 솔리디티 코드를 자동으로 리팩토링하여 저장소 및 함수 호출 효율성을 개선한다 [70].
형식 검증 및 고급 분석
EVM의 결정론적 실행(결정론적 실행) 모델은 형식 검증을 가능하게 한다. 이는 수학적으로 스마트 계약의 정확성을 증명하는 강력한 방법이다.
- KEVM: K 프레임워크를 사용하여 EVM의 완전한 형식적 의미론을 제공하며, 도달 가능성 논리를 통해 EVM 바이트코드 수준에서 보안 속성을 증명할 수 있다 [56].
- hevm: 기호 실행을 통해 실행 경로를 탐색하고, 재진입 저항성이나 산술 안전성과 같은 속성을 증명하거나 반례를 찾는다 [72].
- DafnyEVM: Dafny 언어로 구현된 실행 가능한 EVM 의미론으로, 자동화된 검증을 통해 안전성 및 정확성 속성을 증명한다 [73].
생태계의 지속적 진화
이더리움 개발 생태계는 지속적으로 진화하고 있다. Paradigm은 2024년에 Rust 기반의 EVM 상호작용 라이브러리인 Alloy와 EVM 실행 로직을 네이티브 컴파일할 수 있게 하는 Revmc를 출시하여, 시스템 수준의 최적화를 가능하게 했다 [74][75]. 또한, 2026년에 OpenAI와 Paradigm이 공동으로 출시한 벤치마크 도구 EVMbench는 AI 에이전트의 스마트 계약 보안 작업 수행 능력을 평가하여, 자동화된 감사 도구의 발전을 가속화하고 있다 [76].
이러한 도구들의 조합은 개발자가 EVM의 제약 조건을 깊이 이해하고, 안전하고 효율적인 dApp을 구축할 수 있도록 지원한다. 도구 사용은 더 이상 선택이 아닌, 프로덕션 환경에서의 안정성과 보안을 보장하기 위한 필수적인 실천이다.
주요 하드포크와 EVM 진화
이더리움 가상 머신(EVM)은 네트워크의 핵심 실행 엔진으로서, 주요 하드포크를 통해 지속적으로 진화해 왔다. 이러한 하드포크는 EIP(이더리움 개선 제안)을 기반으로 하며, EVM의 보안성, 효율성, 확장성을 향상시키는 것을 목표로 한다. 각 하드포크는 EVM의 오퍼코드(opcode), 가스 모델, 실행 규칙 등을 수정함으로써 스마트 계약(스마트 계약)의 동작 방식을 개선하고, 새로운 기능을 도입한다. 특히 콘스탄티노플, 이스탄불, 런던 하드포크는 EVM의 기능과 경제 모델에 중대한 변화를 가져왔다.
콘스탄티노플: 계산 및 저장소 최적화
2019년 2월 28일에 활성화된 콘스탄티노플 하드포크는 EVM의 효율성과 기능성을 크게 향상시켰다. 이 업그레이드는 다음과 같은 주요 EIP들을 도입했다:
- 비트 시프트 명령어(EIP-145):
SHL,SHR,SAR과 같은 비트 시프트 오퍼코드를 EVM에 도입하여, 비트 조작을 위한 복잡한 산술 연산의 필요성을 줄였다. 이로 인해 암호화 및 데이터 패킹 함수의 가스 소비량이 최대 300가스까지 감소하며 성능이 크게 향상되었다 [77]. - 스킨니 CREATE2(EIP-1014):
CREATE2오퍼코드를 추가하여, 송신자의 논스(nonce)가 아닌 솔트 값과 초기화 코드의 해시를 기반으로 결정론적인 주소에 계약을 배포할 수 있게 했다. 이는 상태 채널(state channel) 및 오프체인 계약 생성과 같은 확장성 솔루션에 필수적인 기능이다 [78]. - EXTCODEHASH 오퍼코드(EIP-1052): 계약의 바이트코드(바이트코드)의 keccak256 해시를 반환하는
EXTCODEHASH오퍼코드를 도입했다. 이를 통해 계약은 전체 바이트코드를 로드하지 않고도 다른 계약의 코드를 검증할 수 있어, 프록시(프록시) 패턴 및 검증 시스템에서의 효율성을 높였다 [79]. - SSTORE의 넷 가스 미터링(EIP-1283):
SSTORE연산의 가스 비용 모델을 개선하여, 단일 트랜잭션 내에서 저장소 값을 여러 번 수정할 때 가스 비용을 절감했다. 그러나 이 변경은 재진입(재진입) 취약점을 유발할 수 있다는 보안 우려로 인해 잠정적으로 연기되었다 [80].
이스탄불: 보안 및 상호운용성 강화
2019년 12월 8일에 활성화된 이스탄불 하드포크는 보안성, 상호운용성, 가스 비용 정확성을 중심으로 EVM을 개선했다. 주요 변경 사항은 다음과 같다:
- CHAINID 오퍼코드(EIP-1344): 현재 체인의 고유 식별자를 반환하는
CHAINID오퍼코드를 도입했다. 이를 통해 계약은 메인넷(메인넷)과 테스트넷(테스트넷)을 구분할 수 있어, 리플레이 공격(리플레이 공격)을 방지하고 크로스체인(크로스체인) 호환성을 향상시켰다 [81]. - BLAKE2b 프리컴파일(EIP-152): Zcash의 zk-SNARK 증명에 최적화된 BLAKE2b 해시 함수를 위한 프리컴파일 계약을 추가했다. 이는 이더리움과 Zcash 간의 효율적인 상호운용성을 가능하게 하며, 신뢰 없는 브리지(브리지) 및 크로스체인 개인정보 보호 애플리케이션을 지원한다 [82].
- 트라이 크기 종속 오퍼코드 재정가(EIP-1884): 네트워크 상태의 성장에 따라
SLOAD의 가스 비용을 200에서 800으로 증가시켰으며,BALANCE(address(this))보다 저렴한 대안으로SELFBALANCE를 도입했다. 또한EXTCODESIZE의 가스 비용을 재정가하여, 공격자가 저렴한 오퍼코드를 악용해 노드 실행을 지연시키는 서비스 거부(DoS) 공격을 완화했다 [83]. - 구조화된 넷 가스 미터링(EIP-2200):
SSTORE에 대한 "넷 가스 미터링" 개념을 공식화하여, 원래 값, 현재 값, 새로운 저장소 값에 기반한 구조화된 프레임워크를 도입했다. 이는 환불이 발행되는 시기와 부분 수정이 어떻게 계산되는지를 명확히 정의함으로써, 향후 가스 모델의 정교화를 위한 기반을 마련했다 [84].
런던: 수수료 시장 및 가스 경제 개혁
2021년 8월 5일에 활성화된 런던 하드포크는 이더리움의 트랜잭션 가격 메커니즘과 가스 회계에 혁신적인 변화를 가져왔다.
- 기준 수수료 및 수수료 소각(EIP-1559): 첫 번째 가격 경매 모델을 폐지하고, 동적으로 조정되는 기준 수수료를 도입했다. 이 기준 수수료는 네트워크 수요에 따라 블록마다 자동으로 조정되며, 채굴자나 검증자에게 지급되는 것이 아니라 소각(제거)된다. 이는 트랜잭션 수수료의 예측 가능성을 높이고, 변동성을 줄이며, 이더(ETH)에 대한 통화 긴축 압력을 부여하는 경제 모델을 도입했다 [33].
- BASEFEE 오퍼코드(EIP-3198): 스마트 계약이 현재 블록의 기준 수수료를 읽을 수 있도록
BASEFEE오퍼코드를 도입했다. 이를 통해 동적 수수료 추정, 가스 효율적인 일괄 처리, 네트워크 수요에 반응하는 온체인 차익거래 전략과 같은 새로운 사용 사례가 가능해졌다 [86]. - 가스 환불 감소(EIP-3529): 최대 가스 환불 한도를 총 가스 사용량의 50%에서 20%로 줄이고,
SELFDESTRUCT오퍼코드에 대한 환불을 폐지했다. 이 변경은 서비스 거부 공격에서 환불 메커니즘을 악용하는 것을 방지하고, 가스 회계 모델을 단순화하며, 저장소 지우기 및 계약 파괴를 통한 가스 최적화를 억제하는 것을 목적으로 했다 [87].
EVM의 지속적인 진화: EOF 및 미래 로드맵
EVM은 하드포크를 통해 지속적으로 발전하고 있으며, 미래의 업그레이드는 효율성, 보안, 개발자 경험을 더욱 향상시키는 데 중점을 두고 있다.
- EVM 객체 형식(EVM Object Format, EOF): EIP-3540 및 EIP-7692에서 제안된 EOF는 EVM 바이트코드를 위한 버전화되고 구조화된 컨테이너 형식을 제공한다. 이는 배포 시 검증, 코드 가독성 향상, 다중 코드 섹션 지원, 향후 확장성 향상을 가능하게 하며, zkEVM 및 크로스체인 시스템과의 호환성을 강화한다 [24][89].
- 스택 유효성 검사(EIP-5450): 계약 배포 시점에 정적 분석을 통해 실행 중 스택 높이가 경계 내에 있는지 보장함으로써, 스택 언더플로 및 오버플로와 같은 런타임 취약성을 제거한다 [11].
- 트랜잭션 가스 한도 제한(EIP-7825): 단일 트랜잭션이 가질 수 있는 최대 가스를 16,777,216(2^24)으로 제한하여, 과도한 계산 부하로 인해 네트워크 안정성에 영향을 줄 수 있는 위험을 완화한다 [40].
- '스펄지'(The Splurge) 로드맵: 비탈릭 부테린이 이끄는 지속적인 EVM 개선 노력으로, 계정 추상화(계정 추상화) 및 암호학적 유연성 향상과 같은 기능을 포함한다 [92].
미래 전망 및 EVM 업그레이드
이더리움 가상 머신(EVM)은 네트워크의 핵심 실행 엔진으로서, 주요 하드포크를 통해 지속적으로 진화해 왔다. 이러한 하드포크는 EIP(이더리움 개선 제안)을 기반으로 하며, EVM의 보안성, 효율성, 확장성을 향상시키는 것을 목표로 한다. 각 하드포크는 EVM의 오퍼코드(opcode), 가스 모델, 실행 규칙 등을 수정함으로써 스마트 계약(스마트 계약)의 동작 방식을 개선하고, 새로운 기능을 도입한다. 특히 콘스탄티노플, 이스탄불, 런던 하드포크는 EVM의 기능과 경제 모델에 중대한 변화를 가져왔다.
콘스탄티노플: 계산 및 저장소 최적화
2019년 2월 28일에 활성화된 콘스탄티노플 하드포크는 EVM의 효율성과 기능성을 크게 향상시켰다. 이 업그레이드는 다음과 같은 주요 EIP들을 도입했다:
- 비트 시프트 명령어(EIP-145):
SHL,SHR,SAR과 같은 비트 시프트 오퍼코드를 EVM에 도입하여, 비트 조작을 위한 복잡한 산술 연산의 필요성을 줄였다. 이로 인해 암호화 및 데이터 패킹 함수의 가스 소비량이 최대 300가스까지 감소하며 성능이 크게 향상되었다 [77]. - 스킨니 CREATE2(EIP-1014):
CREATE2오퍼코드를 추가하여, 송신자의 논스(nonce)가 아닌 솔트 값과 초기화 코드의 해시를 기반으로 결정론적인 주소에 계약을 배포할 수 있게 했다. 이는 상태 채널(state channel) 및 오프체인 계약 생성과 같은 확장성 솔루션에 필수적인 기능이다 [78]. - EXTCODEHASH 오퍼코드(EIP-1052): 계약의 바이트코드(바이트코드)의 keccak256 해시를 반환하는
EXTCODEHASH오퍼코드를 도입했다. 이를 통해 계약은 전체 바이트코드를 로드하지 않고도 다른 계약의 코드를 검증할 수 있어, 프록시(프록시) 패턴 및 검증 시스템에서의 효율성을 높였다 [79]. - SSTORE의 넷 가스 미터링(EIP-1283):
SSTORE연산의 가스 비용 모델을 개선하여, 단일 트랜잭션 내에서 저장소 값을 여러 번 수정할 때 가스 비용을 절감했다. 그러나 이 변경은 재진입(재진입) 취약점을 유발할 수 있다는 보안 우려로 인해 잠정적으로 연기되었다 [80].
이스탄불: 보안 및 상호운용성 강화
2019년 12월 8일에 활성화된 이스탄불 하드포크는 보안성, 상호운용성, 가스 비용 정확성을 중심으로 EVM을 개선했다. 주요 변경 사항은 다음과 같다:
- CHAINID 오퍼코드(EIP-1344): 현재 체인의 고유 식별자를 반환하는
CHAINID오퍼코드를 도입했다. 이를 통해 계약은 메인넷(메인넷)과 테스트넷(테스트넷)을 구분할 수 있어, 리플레이 공격(리플레이 공격)을 방지하고 크로스체인(크로스체인) 호환성을 향상시켰다 [81]. - BLAKE2b 프리컴파일(EIP-152): Zcash의 zk-SNARK 증명에 최적화된 BLAKE2b 해시 함수를 위한 프리컴파일 계약을 추가했다. 이는 이더리움과 Zcash 간의 효율적인 상호운용성을 가능하게 하며, 신뢰 없는 브리지(브리지) 및 크로스체인 개인정보 보호 애플리케이션을 지원한다 [82].
- 트라이 크기 종속 오퍼코드 재정가(EIP-1884): 네트워크 상태의 성장에 따라
SLOAD의 가스 비용을 200에서 800으로 증가시켰으며,BALANCE(address(this))보다 저렴한 대안으로SELFBALANCE를 도입했다. 또한EXTCODESIZE의 가스 비용을 재정가하여, 공격자가 저렴한 오퍼코드를 악용해 노드 실행을 지연시키는 서비스 거부(DoS) 공격을 완화했다 [83]. - 구조화된 넷 가스 미터링(EIP-2200):
SSTORE에 대한 "넷 가스 미터링" 개념을 공식화하여, 원래 값, 현재 값, 새로운 저장소 값에 기반한 구조화된 프레임워크를 도입했다. 이는 환불이 발행되는 시기와 부분 수정이 어떻게 계산되는지를 명확히 정의함으로써, 향후 가스 모델의 정교화를 위한 기반을 마련했다 [84].
런던: 수수료 시장 및 가스 경제 개혁
2021년 8월 5일에 활성화된 런던 하드포크는 이더리움의 트랜잭션 가격 메커니즘과 가스 회계에 혁신적인 변화를 가져왔다.
- 기준 수수료 및 수수료 소각(EIP-1559): 첫 번째 가격 경매 모델을 폐지하고, 동적으로 조정되는 기준 수수료를 도입했다. 이 기준 수수료는 네트워크 수요에 따라 블록마다 자동으로 조정되며, 채굴자나 검증자에게 지급되는 것이 아니라 소각(제거)된다. 이는 트랜잭션 수수료의 예측 가능성을 높이고, 변동성을 줄이며, 이더(ETH)에 대한 통화 긴축 압력을 부여하는 경제 모델을 도입했다 [33].
- BASEFEE 오퍼코드(EIP-3198): 스마트 계약이 현재 블록의 기준 수수료를 읽을 수 있도록
BASEFEE오퍼코드를 도입했다. 이를 통해 동적 수수료 추정, 가스 효율적인 일괄 처리, 네트워크 수요에 반응하는 온체인 차익거래 전략과 같은 새로운 사용 사례가 가능해졌다 [86]. - 가스 환불 감소(EIP-3529): 최대 가스 환불 한도를 총 가스 사용량의 50%에서 20%로 줄이고,
SELFDESTRUCT오퍼코드에 대한 환불을 폐지했다. 이 변경은 서비스 거부 공격에서 환불 메커니즘을 악용하는 것을 방지하고, 가스 회계 모델을 단순화하며, 저장소 지우기 및 계약 파괴를 통한 가스 최적화를 억제하는 것을 목적으로 했다 [87].
EVM의 지속적인 진화: EOF 및 미래 로드맵
EVM은 하드포크를 통해 지속적으로 발전하고 있으며, 미래의 업그레이드는 효율성, 보안, 개발자 경험을 더욱 향상시키는 데 중점을 두고 있다.
- EVM 객체 형식(EVM Object Format, EOF): EIP-3540 및 EIP-7692에서 제안된 EOF는 EVM 바이트코드를 위한 버전화되고 구조화된 컨테이너 형식을 제공한다. 이는 배포 시 검증, 코드 가독성 향상, 다중 코드 섹션 지원, 향후 확장성 향상을 가능하게 하며, zkEVM 및 크로스체인 시스템과의 호환성을 강화한다 [24][89].
- 스택 유효성 검사(EIP-5450): 계약 배포 시점에 정적 분석을 통해 실행 중 스택 높이가 경계 내에 있는지 보장함으로써, 스택 언더플로 및 오버플로와 같은 런타임 취약성을 제거한다 [11].
- 트랜잭션 가스 한도 제한(EIP-7825): 단일 트랜잭션이 가질 수 있는 최대 가스를 16,777,216(2^24)으로 제한하여, 과도한 계산 부하로 인해 네트워크 안정성에 영향을 줄 수 있는 위험을 완화한다 [40].
- '스펄지'(The Splurge) 로드맵: 비탈릭 부테린이 이끄는 지속적인 EVM 개선 노력으로, 계정 추상화(계정 추상화) 및 암호학적 유연성 향상과 같은 기능을 포함한다 [92].