피드로 돌아가기
Dev.toBackend
원문 읽기
REVM의 Frame 구조 분석을 통한 EVM 실행 환경 격리 설계
REVM Source Code - Frame Part 1
AI 요약
Context
컨트랙트 호출마다 독립적인 실행 환경을 제공하는 구조적 설계 필요. EOA 간 단순 전송과 달리 컨트랙트 호출 시 상태 격리 및 리소스 관리가 핵심 과제. 각 호출 프레임 간의 상호 간섭을 방지하는 메커니즘 요구.
Technical Solution
- CALL, STATICCALL, DELEGATECALL 발생 시마다 독립적인 Frame을 생성하여 스택에 푸시하는 구조
- Bytecode, Stack, PC, Gas, Memory 등 실행에 필요한 핵심 리소스를 Frame 단위로 격리하여 독립성 확보
- Revert 발생 시 상태 복구를 위해 JournalCheckpoint를 활용한 스냅샷 및 롤백 전략 적용
- Rust의 제네릭과 Trait Bound를 사용하여 InterpreterTypes에 따라 유연하게 대응하는 EthFrame 설계
- 메모리 확장 시 32바이트 배수 단위로 리사이징하며 Gas 비용을 동적으로 계산하는 resize_memory 로직 구현
- 빈번하지 않은 메모리 확장 경로에 @cold 속성을 부여하여 CPU 캐시 효율을 높인 최적화 설계
Key Takeaway
상태 격리가 필요한 가상 머신 설계 시 스택 기반의 프레임 구조와 체크포인트 시스템을 결합하여 안정적인 상태 전이와 복구 능력을 확보할 수 있음.
실천 포인트
가상 머신 메모리 확장 구현 시 32바이트와 같은 고정 단위 배수를 활용하고, 확장 로직을 Cold Path로 분리하여 실행 경로를 최적화할 것