본문으로 건너뛰기
Change page

이더리움 가상 머신(EVM)

이더리움 가상 머신(EVM)은 모든 이더리움 노드에서 일관되고 안전하게 코드를 실행하는 탈중앙화된 가상 환경입니다. 노드는 EVM을 실행하여 스마트 컨트랙트를 실행하며, 작업에 필요한 컴퓨팅 노력을 측정하기 위해 "가스"를 사용하여 효율적인 리소스 할당과 네트워크 보안을 보장합니다.

전제 조건

EVM을 이해하려면 바이트 (opens in a new tab), 메모리 (opens in a new tab), 스택 (opens in a new tab)과 같은 컴퓨터 과학의 일반적인 용어에 대한 기본적인 지식이 필요합니다. 또한 해시 함수 (opens in a new tab)머클 트리 (opens in a new tab)와 같은 암호학/블록체인 개념에 익숙하면 도움이 됩니다.

원장에서 상태 머신으로

'분산 원장'이라는 비유는 암호학의 기본 도구를 사용하여 탈중앙화된 통화를 가능하게 하는 비트코인과 같은 블록체인을 설명하는 데 자주 사용됩니다. 원장은 누군가가 원장을 수정하기 위해 할 수 있는 일과 할 수 없는 일을 규정하는 일련의 규칙을 준수해야 하는 활동 기록을 유지합니다. 예를 들어, 비트코인 주소는 이전에 받은 것보다 더 많은 비트코인을 사용할 수 없습니다. 이러한 규칙은 비트코인 및 기타 여러 블록체인의 모든 트랜잭션을 뒷받침합니다.

이더리움에는 거의 동일한 직관적인 규칙을 따르는 자체 기본 암호화폐(이더)가 있지만, 훨씬 더 강력한 기능인 스마트 컨트랙트도 가능하게 합니다. 이 더 복잡한 기능을 설명하려면 더 정교한 비유가 필요합니다. 분산 원장 대신, 이더리움은 분산 상태 머신 (opens in a new tab)입니다. 이더리움의 상태는 모든 계정과 잔액뿐만 아니라, 미리 정의된 규칙 세트에 따라 블록마다 변경될 수 있고 임의의 기계 코드를 실행할 수 있는 머신 상태(machine state)를 보유하는 대규모 데이터 구조입니다. 블록마다 상태를 변경하는 구체적인 규칙은 EVM에 의해 정의됩니다.

A diagram showing the make up of the EVM 다이어그램 출처: Ethereum EVM illustrated (opens in a new tab)

이더리움 상태 전환 함수

EVM은 수학 함수처럼 작동합니다. 입력이 주어지면 결정론적 출력을 생성합니다. 따라서 이더리움이 상태 전환 함수를 가지고 있다고 더 공식적으로 설명하는 것이 매우 도움이 됩니다.

Y(S, T)= S'

유효한 이전 상태 (S)와 유효한 트랜잭션의 새로운 세트 (T)가 주어지면, 이더리움 상태 전환 함수 Y(S, T)는 새로운 유효한 출력 상태 S'를 생성합니다.

상태

이더리움의 맥락에서 상태는 수정된 머클 패트리샤 트라이라는 거대한 데이터 구조로, 모든 계정을 해시로 연결하고 블록체인에 저장된 단일 루트 해시로 축소할 수 있도록 유지합니다.

트랜잭션

트랜잭션은 계정에서 암호학적으로 서명된 명령입니다. 트랜잭션에는 메시지 호출을 초래하는 트랜잭션과 컨트랙트 생성을 초래하는 트랜잭션의 두 가지 유형이 있습니다.

컨트랙트 생성은 컴파일된 스마트 컨트랙트 바이트코드를 포함하는 새로운 컨트랙트 계정의 생성으로 이어집니다. 다른 계정이 해당 컨트랙트에 메시지 호출을 할 때마다, 그 바이트코드가 실행됩니다.

EVM 명령어

EVM은 1024개 항목의 깊이를 가진 스택 머신 (opens in a new tab)으로 실행됩니다. 각 항목은 256비트 단어(word)이며, 이는 256비트 암호학(예: 케착-256 해시 또는 secp256k1 서명)과 쉽게 사용할 수 있도록 선택되었습니다.

실행 중에 EVM은 트랜잭션 간에 유지되지 않는 일시적인 메모리(단어 주소 지정 바이트 배열 형태)를 유지합니다.

임시 스토리지

임시 스토리지는 TSTORETLOAD 연산 코드를 통해 접근하는 트랜잭션별 키-값 저장소입니다. 동일한 트랜잭션 동안 모든 내부 호출에 걸쳐 유지되지만 트랜잭션이 끝나면 지워집니다. 메모리와 달리 임시 스토리지는 실행 프레임이 아닌 EVM 상태의 일부로 모델링되지만, 전역 상태에 커밋되지는 않습니다. 임시 스토리지는 트랜잭션 중 내부 호출 간에 가스 효율적인 임시 상태 공유를 가능하게 합니다.

스토리지

컨트랙트에는 해당 계정과 연결되고 전역 상태의 일부인 머클 패트리샤 스토리지 트라이(단어 주소 지정 단어 배열 형태)가 포함되어 있습니다. 이 영구 스토리지는 단일 트랜잭션 기간 동안만 사용할 수 있고 계정의 영구 스토리지 트라이의 일부를 구성하지 않는 임시 스토리지와 다릅니다.

연산 코드

컴파일된 스마트 컨트랙트 바이트코드는 XOR, AND, ADD, SUB 등과 같은 표준 스택 작업을 수행하는 여러 EVM 연산 코드로 실행됩니다. EVM은 또한 ADDRESS, BALANCE, BLOCKHASH 등과 같은 여러 블록체인 전용 스택 작업도 구현합니다. 연산 코드 세트에는 임시 스토리지에 대한 접근을 제공하는 TSTORETLOAD도 포함되어 있습니다.

A diagram showing where gas is needed for EVM operations 다이어그램 출처: Ethereum EVM illustrated (opens in a new tab)

EVM 구현

EVM의 모든 구현은 이더리움 황서에 설명된 사양을 준수해야 합니다.

이더리움의 10년 역사 동안 EVM은 여러 차례 개정되었으며, 다양한 프로그래밍 언어로 된 여러 EVM 구현이 존재합니다.

이더리움 실행 클라이언트에는 EVM 구현이 포함되어 있습니다. 또한 다음과 같은 여러 독립형 구현도 있습니다.

더 읽을거리

튜토리얼: 이더리움 가상 머신(EVM) / 이더리움 연산 코드