이더리움 가상머신
IT 위키
더 많은 작업
약어 EVM 은 프로젝트 관리의 획득가치기법(Earned Value Method)을 가리키기도 한다.
- 네트워크의 모든 노드가 같은 입력에 대해 같은 결과를 내야 하므로 완전히 결정적(deterministic)이다.
난수, 현재 시각, 파일 입출력처럼 노드마다 달라질 수 있는 것은 쓸 수 없다.
- 256비트 워드를 쓰는 스택 기반 머신이다. 해시 연산에 쓰는 수의 크기에 맞춘 것이다.
- 솔리디티 같은 언어로 쓴 계약이 EVM 바이트코드로 컴파일되어 블록체인에 올라가고,
호출이 들어올 때마다 모든 노드가 그 바이트코드를 실행해 상태를 갱신한다.
- 샌드박스다. 계약 코드는 호스트의 파일이나 네트워크에 닿지 못하고 EVM 안의 상태만 바꾼다.
- 명령마다 정해진 가스 비용이 있다. 실행자가 그만큼을 이더로 낸다.
- 거래를 보낼 때 가스 한도를 정하고, 실행 중 이것을 넘기면 실행이 되돌려진다(revert).
이미 쓴 가스는 돌려받지 못한다.
- 정지 문제를 우회하는 장치다. 무한 반복하는 계약이 네트워크를 멈추게 할 수 없다.
| 영역 | 수명 | 비용 |
|---|---|---|
| 스택 | 실행 중에만 | 가장 싸다. 깊이 1024 제한 |
| 메모리 | 호출이 끝나면 사라진다 | 쓴 만큼 늘어난다 |
| 저장소(Storage) | 블록체인에 영구히 남는다 | 가장 비싸다 |
저장소 쓰기가 압도적으로 비싸므로, 계약을 짤 때 상태 변수를 얼마나 건드리는지가 곧 비용이다.