Ethereum Virtual Machine
- 이더리움에서 사용되는 가상 머신
- 모든 이더리움 노드에서 코드를 일관되고 안전하게 실행하는 분산형 가상 환경
EVM은, 블록이 추가될 때 state를 어떻게 변경할지에 대한 규칙을 정의하고 있다.
-> 수학적 함수 같은 것
EVM 구조

Machine state (volatile)
휘발성 메모리에 해당하며, 스마트 컨트랙트 실행 중에만 유지됨
블록이 끝나면 사라진다.
- PC : 현재 실행 중인 명령어의 위치, 스마트 컨트랙트 코드의 어느 줄을 실행 중인지 추적함
- Stack : 연산을 수행할 때 사용되는 스택 -> EVM은 레지스터 기반이 아닌 스택 기반의 머신
- Gas available : 현재 트랜젝션이 사용할 수 있는 가스의 양 -> 가스가 부족하면 실행 중단
- Memory : 실행 중인 트랜잭션만 사용하는 임시 메모리 (배열, 문자열 등 데이터)

Virtual ROM (immutable)
- EVM Code가 저장되어 있다.
- 스마트 컨트랙트를 구성하는 바이트 코드
- 변경할 수 없는 읽기 전용 데이터
- 디플로이 (배포) 된 후에는 수정할 수 없음
World state (persistent)
- 각 계정 EOA or CA의 영속적인 저장소
- 스마트 컨트랙트의 상태 변수들이 저장됨
- 블록체인 전체 상태에 영향을 줌
State Trasition Function
EVM은 수학적 함수처럼 동작한다.
입력이 주어지면 항상 결정적인 (예측 가능한) 출력을 생성한다.
따라서 이더리움을 보다 형식적으로 상태 전이 함수로 설명하는 것이 유용함
Y(S, T)= S'
유효한 이전 상태 S, 유효한 트랜젝션 집합 T가 주어지면, 이더리움 상태 전이 함수 Y(S,T) 는 새로운 유요한 출력 상태 S'를 생성한다
[ 개인적인 생각 ]
컴퓨터이션 이론과 관련된 생각이 들었다.
나중에, 복잡한 솔리디티 코드 등을 짜게 된다면 상태 다이어그램 등, 컴퓨테이션 이론에서 배웠던걸 사용할 날이 올 것 같다.
State
이더리움에서 'state'란 매우 거대한 데이터 구조
Modified Merkle Patricia Trie라는 구조를 사용한다.
이 구조는 모든 계정을 해시로 연결하여 하나의 루트 해시로 축약할 수 있다.
이 루트 해시는 블록체인 상에 저장된다.
Transactions
트랜젝션은 계정에서 보내는 암호화된 서명 명령 (Instruction)
- Message Call을 발생시키는 트랜젝션
- 스마트 컨트랙트 생성을 발생시키는 트랜젝션 -> CA 생성
EVM Instruction

EVM은 스택 기반 머신으로, 1024개의 아이템을 저장할 수 있다.
* 각 아이템은 256bit (32byte) 정수 -> 이더리움 암호화 연산 (Keccak0256해시 등)과 호환
Transient memory (휘발성 메모리)
- 트랜잭션 실행 중에만 존재하는 메모리 (트랜잭션 끝나면 사라짐)
- 바이트 배열(byte array)로 구성된 워드 주소 기반 메모리 (word-addressed)
- 일반적인 배열, 문자열, 중간 계산 결과 등 저장에 사용
Storage (영구 저장소)
- 각 스마트 컨트랙트 계정에 연결된 Merkle Patricia Trie 구조
- 글로벌 상태(state)의 일부로, 트랜잭션이 끝나도 유지됨
- 변수 값 저장 등 장기적인 상태 추적에 사용됨
Gas (가스의 필요성)
- EVM의 각 명령어는 가스를 소비합니다.
- 이는 무한 루프 방지와 노드의 리소스 남용을 방지하기 위한 것
- 예시:
- ADD 같은 단순 연산은 적은 가스 소모
- SSTORE 같은 저장 연산은 많은 가스 소모
- 가스가 부족하면 실행이 중단(Revert)됩니다.
'Hacking > Web3' 카테고리의 다른 글
| PoW | PoS | DPoS (0) | 2025.05.25 |
|---|---|
| DeFi (0) | 2025.05.25 |
| Bitcoin Node (0) | 2025.05.25 |
| PoS | 지분증명 (0) | 2025.05.25 |
| DApp (0) | 2025.05.25 |