[basic] 이더리움 맛보기 <4> EVM

captaink.eth | 강선장
5 min readAug 4, 2022

--

EVM 개요도, 출처: Ethereum EVM illustrated

앞서 이더리움은 상태 변환 시스템(state transition system)이라는 설명을 드렸었습니다. 어렵게 생각할 것 없이 PC에서 문서를 수정하는 과정에 빗대에 설명을 드릴 수 있을 것 같습니다:

  1. 컴퓨터에 저장되어 있는 문서 파일을 연다 = 이전 블록의 스테이트(=어카운트 데이터)를 불러온다
  2. 입력장치를 통해 작업을 수행한다 = 트랜잭션에 코드를 넣어 보낸다
  3. PC는 입력장치의 신호를 해석해 화면에 반영한다 = 각 노드는 트랜잭션의 코드를 수행한다
  4. 수정된 내용을 저장한다 = 트랜잭션 결과를 어카운트에 저장하고 블록에 올린다

3에 있는 PC는 입력 신호를 읽고 해석해서 결과 값을 산출해내는 역할을 합니다. 이처럼 특정 환경(운영체제, 브라우저, 응용 프로그램)에서 작업을 수행하는 개체를 가상머신(virtual machine)이라고 부르며, 이더리움에선 이 역할을 각 노드가 수행합니다.

다시 말하면, EVM(Ethereum Virtual Machine)이란 이더리움 블록을 기록하는 노드들의 집합을 의미합니다.

Blockchain and Mining

출처: Ethereum Whitepaper

The main difference between Ethereum and Bitcoin with regard to the blockchain architecture is that, unlike Bitcoin, Ethereum blocks contain a copy of both the transaction list and the most recent state. … The basic block validation algorithm in Ethereum is as follows:

5. Let S[0] be the state at the end of the previous block.

6. Let TX be the block's transaction list, with n transactions. For all i in 0...n-1, set S[i+1] = APPLY(S[i],TX[i]). If any applications returns an error, or if the total gas consumed in the block up until this point exceeds the GASLIMIT, return an error.

7. Let S_FINAL be S[n], but adding the block reward paid to the miner.

… A commonly asked question is “where” contract code is executed, in terms of physical hardware. This has a simple answer: the process of executing contract code is part of the definition of the state transition function, which is part of the block validation algorithm, so if a transaction is added into block B the code execution spawned by that transaction will be executed by all nodes, now and in the future, that download and validate block B.

그럼 EVM, 즉 노드들이 어떻게 코드를 수행하고 결과 값을 기록하는 걸까요? 채굴 과정을 보시면 이해가 되실 것 같습니다. 중요한 과정만 설명 드리자면:

5. S[0]이 이전 블록의 마지막 스테이트라 가정한다.

6. TX가 현재 생성하려는 블록의 트랜잭션 리스트라 하고, n 개의 트랜잭션들을 가지고 있다고 한다. 트랜잭션을 수행하여 스테이트를 산출하고, 해당 스테이트를 토대로 다음 트랜잭션을 수행한다. 이를 n-1회 반복하며, 에러가 발생하거나 가스가 부족하면 에러를 리턴한다.

7. 6의 작업을 반복한 최종 스테이트를 S[n]이라 하며, 마지막에 블록 보상 트랜잭션을 추가하여 최종 스테이트인 S_FINAL 을 산출한다.

6번 과정에서 트랜잭션을 수행하고 스테이트의 값을 내는 과정이 바로 코드를 수행하고 결과 값을 기록하는 EVM의 작동 과정입니다.

해당 작업을 수행하는 것은 트랜잭션들의 해시를 통해 최종적으로 블록의 논스를 찾아내는 과정 즉, PoW 행위이기도 하므로 해당 작업에 대한 보상이 주어지는 것이구요.

이더리움은 어카운트 개념을 도입하여 스테이트를 다채롭게 만들고, 가스 개념을 도입하려 코드에 루프문 구현이 가능하도록 하면서 효율성을 크게 높였습니다. 사실상 컴퓨터와 비슷한 구조를 가진 EVM에서 다채로운 dapp들이 만들어지기 시작했고, 지금의 생태계를 만들었습니다.

앞으로는 다양한 이더리움의 dapp들을 살펴볼 예정입니다.

👈🏻 이전 게시물: <3> Ethereum Accounts

저는 다음 두 채널에서 활동하고 있습니다. 언제든 편하게 와서 소통해주세요.

Treasure Hunt: https://t.me/look4treasure
고로치 같이투자 소통방: https://t.me/gachi2job1

--

--