본문 바로가기
BlockChain/ethereum

EVM은 무엇이고, 한계는 무엇일까?

by gamxong 2023. 3. 11.

1. EVM 이란?

EVM(Ethereum Virtual Machine)은 Go언어로 만들어진 것으로, 이더리움 블록체인에서 실행되는 가상 머신입니다. 이더리움은 스마트 계약을 실행하는 블록체인 플랫폼으로, EVM은 이 스마트 계약을 실행하는 데 사용됩니다.

 

EVM은 바이트 코드(Bytecode)를 실행하는데, Solidity와 같은 고급 언어로 스마트 컨트랙트가 작성되면, 컴파일러를 통해 이를 EVM이 이해할 수 있는 바이트 코드로 변환됩니다. EVM은 이 바이트 코드를 실행하고, 스마트 계약에서 정의된 작업을 수행합니다.

 

EVM은 이더리움의 핵심 구성 요소 중 하나로, 이더리움 네트워크의 모든 노드에서 실행됩니다. 이는 스마트 컨트랙트를 신뢰할 수 있는 상태로 유지하고, 블록체인의 상태를 변경할 수 있는 유일한 방법입니다.

 

EVM은 불변성, 보안 및 탈중앙화를 보장하기 위해 설계되었습니다. 이는 EVM이 일관성 있는 방식으로 실행되므로, 이더리움 네트워크에서 실행되는 모든 스마트 계약은 동일한 결과를 보장합니다.

 

또한 EVM 가스(Gas)라는 개념을 사용하여, 스마트 계약을 실행하는 필요한 컴퓨팅 리소스의 양을 제한합니다. 이는 스마트 계약의 악의적인 실행을 방지하고, 네트워크의 안정성을 유지하는 중요한 역할을 합니다.

 

 

 

2. EVM 아키텍처

 

1. Stack : 스택은 EVM의 주요 데이터 구조로, 컨트랙트 실행 중에 사용되는 임시 데이터 값을 저장하고 있습니다.

2. Memory : EVM에는 컨트랙트 실행 중에 데이터를 저장할 수 있는 메모리 영역도 포함되어 있습니다.

3. storage : EVM은 실행 후에 스마트 컨트랙트의 데이터를 저장할 수 있는 영구 저장 영역을 제공합니다.

 

스택, 메모리, 스토리지는 공간을 제공하는 것으로, 여러 리소스가 있습니다.



4. Program counter : 프로그램 카운터(PC)는 실행 중인 컨트랙트의 현재 명령을 추적합니다.

5. Gas : EVM은 "가스" 개념을 사용하여 스마트 계약을 실행하는 데 필요한 계산 리소스를 측정하고 제한합니다. 가스는 작업을 실행하는 데 필요한 작업의 척도이며 스마트 계약이 수행할 수 있는 계산량을 제한하는 데 사용됩니다.

6. Opcode : EVM은 EVM에서 수행할 수 있는 작업을 정의하는 단일 바이트 명령인 Opcode를 사용합니다. Opcode에는 산술 및 논리 연산, 메모리 연산 및 제어 흐름 연산이 포함됩니다.

 

 

2-1. Stack

- 모든 작동은 스택에서 수행됩니다.

- PUSH, POP, COPY, SWAP와 같은 instruction들이 이 스택에 접근할 수 있습니다.

 

2-2. Memory

- 메모리는 선형구조이며 바이트 수준에서 처리될 수 있습니다.
- MSTORE, MSTORE, MLOAD 명령으로 접근할 수 있습니다.
- 메모리의 모든 위치는 초기에 0으로 정의됩니다.

 

2-3. storage

- 저장소는 256비트 word를 256비트 word로 매핑하는 key-value 저장소입니다.
- SSTORE/SLOAD 명령으로 접근할 수 있습니다.
- 저장소의 모든 위치는 초기에 0으로 잘 정의됩니다.

 

 

2-4. EVM 실행 모델

먼저 EVM code를 받게 되면 동작을 시작하게 됩니다.

그 후 code에 맞는 명령을 실행하기 위해 카운터(PC), Stack, Memory 등에 액세스하여 명령대로 실행시킵니다.

 

 

 

3. EVM 작동 방식

 

Ethereum Virtual Machine은 일부 입력에 대한 응답으로 이전 상태에서 새로운 상태로 이동하는 상태 시스템입니다. 모든 스마트 컨트랙트 실행은 EVM의 상태(state) 변경을 트리거합니다("state transition"이라고도 함). 다음은 스마트 계약 거래 중에 발생하는 일에 대한 추상적인 수준의 개요입니다.

 

1. 컨트랙트를 컴파일되어 생성된 바이트코드는 EVM의 스토리지에 로드되고 EVM의 peer-to-peer 노드에서 실행됩니다. 노드는 동일한 트랜잭션 입력을 사용하여 각 노드가 동일한 결과에 도달하도록 보장합니다(그렇지 않으면 합의에 도달할 수 없음). 

 

2. 바이트 코드가 포함된 EVM Opcode 메모리, 스토리지 및 스택과 같은 EVM state의 다른 부분과 상호 작용합니다. Opcode는 state 스토리지에서 값을 읽는 작업과 새 값을 EVM의 스토리지에 쓰기 작업을 수행합니다 .

 

3. EVM opcode는 새 값을 반환하기 전에 state 스토리지에서 얻은 값에 대한 계산을 수행합니다. 계산한 값으로 업데이트로 하여 EVM은 새로운 state로 변환됩니다 (이러한 이유로 트랜잭션을 "상태 전환"이라고 합니다). 이 새로운 상태는 다른 노드에 의해 복제되며 다른 트랜잭션이 실행될 때까지 유지됩니다.

 

 

위 그림은 t에서 t+1로 state가 변환되는 과정을 보여주고 있습니다.

이처럼 현재 상태에 input data를 넣어 EVM를 거치게 된다면 t+1처럼 새로운 상태가 업데이트 됩니다.

 

 

 

4. EVM의 한계

 

EVM은 몇 가지 이유로 비효율적이라는 평가를 받고 있습니다. 아래와 같은 이유 때문에 아직 블록체인이 대중화되지 못한다고 생각합니다.

  1. Gas 비용: EVM에서 스마트 계약을 실행하려면 Gas라는 수수료를 지불해야 합니다. 이 Gas 비용은 계약 실행에 필요한 컴퓨팅 리소스와 관련이 있습니다. 그러나 Gas 비용이 높을수록 계약 실행 비용이 증가하므로, 비싼 계약 실행은 사용자에게 부담이 될 수 있습니다. 가스 비용을 최적화하기 위해 많은 노력들을 하고 있습니다. 하지만 돈(가스비)을 내고 서비스를 즐긴다는 것은 많은 사람들에게 공감을 사기 힘들 것입니다.
  2. 스마트 컨트랙트 코드의 크기: EVM에서 실행 가능한 스마트 컨트랙트의 크기는 제한적입니다. 용량이 큰 스마트 컨트랙트는 실행에 많은 Gas 비용이 필요하며, 실행 시간이 길어질 수 있습니다. 이러한 제한은 대규모 컨트랙트 및 복잡한 컨트랙트 실행에 제한될 수 있습니다.
  3. 속도: EVM은 컴파일된 언어가 아니라 스크립트 언어를 사용합니다. 따라서 스마트 컨트랙트의 실행 속도가 느릴 수 있습니다. 또한 EVM은 모든 노드에서 실행되므로 전체 네트워크의 처리량에 제한을 가할 수 있습니다.
  4. 확장성 : 앞서 언급한 내용과 비슷하지만 결국 대용량 트래픽을 처리하기에는 시간당 처리량이 매우 낮고, 가스비의 문제점을 뜻합니다.

이러한 이유로 EVM의 한계도 분명히 존재합니다. 그러나 Ethereum 커뮤니티는 계속해서 EVM 성능을 개선하고 최적화하는 방법을 모색하고 있습니다

 

 

 

개인적인 의견으로 아무리 최적화를 하더라도 물리적으로 현재 서비스보다 좋을 수 있을까라고 생각하면 답은 아니라고 생각합니다.

 

블록체인은 효율성을 위한 것이 아닌 탈중앙적인 가치, 철학을 위해 생겨난 것으로 알고 있습니다.

그러한 철학이 많은 사람들에게 공감대를 얻으면 그때부터가 진짜 블록체인의 시대가 도래할 것이라고 생각합니다.

그것이 언제가 될 진 모르겠지만 그런 시대를 위해 대비하는 것은 좋겠다라는 생각을 합니다.

 

'BlockChain > ethereum' 카테고리의 다른 글

Ethereum storage와 keccak-256  (0) 2023.03.14
이더리움의 가스 정책에 대해 알아보자  (2) 2023.03.12

댓글