EVM (Ethereum Virtual Machine)

1 minute read

EVM

  • 스마트 컨트랙트 배포 및 실행을 처리하는 이더리움의 일부
  • JVM과 비슷하게 바이트코드로 컴파일된 프로그래밍 언어의 인터프리터와 비슷한 계산 엔진
  • 유사 튜링 완전 상태 머신 (넘겨진 가스량에 따라 유한 번의 계산을 수행하기 때문)

    EVM의 경우 단일 스레드 머신처럼 동작하는데, 가스량 같은 연산 제한 방식이 없다면 무한 루프의 코드가 실행될 수 있게 되고, 그 경우 전체 이더리움 클라이언트가 무한루프에 빠지게 되면서 (Halting Problem) 이더리움을 사용할 수 없게 된다.

  • 스택 기반 아키텍처, 완전한 가상 환경
  • 트랜잭션 기반 상태 머신 : 트랜잭션을 통한 스마트 컨트랙트 코드의 실해 결과로 유효한 상태 변화를 이더리움 상태를 업데이트 함

실행 과정

  1. 트랜잭션이 스마트 컨트랙트 코드를 실행하면, 생성중인 현재 블록 및 처리 중인 특정 트랜잭션과 관련하여 필요한 모든 정보로 EVM이 인스턴스화 된다.
    • EVM의 프로그램 코드 ROM에 컨트랙트 계정 코드가 로드된다.
    • PC (프로그램 카운터) 0으로 설정된다.
    • 스토리지 역시 컨트랙트 계정의 스토리지에서 로드된다. (EOA의 경우 코드와 스토리지가 없다)
    • 메모리는 모두 0으로 설정, 모든 블록 및 환경 변수가 설정된다. (가스 공급량 등)
  2. 코드가 실행되면서 작업의 가스 비용에 따라 가스 공급량이 감소한다.
    1. 성공적으로 끝나기 전에 공급된 가스량을 모두 소비한 경우 OOG(Out of Gas) 예외가 발생하며 트랜잭션이 중단된다.
      • 이더리움 상태는 변경되지 않는다.
      • 송금자의 논스는 증가하며, 가스로 보낸 이더량만큼 감소한다.
    2. 성공적으로 완료된 경우
      • 인스턴스화된 EVM에 적용된 변경 사항이 실제 월드 EVM에 업데이트된다.
  3. CA -> CA 호출이 일어난 경우 새로운 EVM이 호출한 CA의 EVM 샌드박스 기준으로 인스턴스화 된다. (2의 과정 반복)

트랜잭션이 성공하는 경우 상위 레벨의 EVM에 하위 레벨 EVM이 업데이트 된다고 생각하면 될 듯 하다.

출처
안드레아스 M. 안토노풀로스, 개빈 우드, 마스터링 이더리움, 제이펍, 2019-05-23

Categories:

Updated: