블록체인 학습
0 XP

Chapter 2: 스마트 컨트랙트 첫걸음

EVM과 가스

스마트 컨트랙트는 어디서 돌아갈까요? EVM(Ethereum Virtual Machine)이라는 가상 컴퓨터 위에서 실행됩니다. 전 세계 모든 노드가 똑같은 EVM을 돌리기 때문에, 같은 코드는 어디서나 같은 결과를 냅니다.

EVM: 모두가 공유하는 가상 컴퓨터

직접 쓴 Solidity 코드는 그대로 실행되지 않습니다. 먼저 EVM이 이해하는 바이트코드(bytecode)로 번역(컴파일)된 뒤, 각 노드의 EVM이 그 명령을 한 단계씩 실행합니다. 모든 노드가 같은 EVM 규칙을 따르므로, 누가 실행하든 결과가 동일하게 재현됩니다. 이 '결정성(determinism)'이 신뢰의 바탕입니다.

실행 비용을 매기는 가스

공용 컴퓨터를 공짜로 쓰게 하면 누군가 무한 반복 코드로 네트워크를 마비시킬 수 있습니다. 그래서 gas(가스)라는 개념을 둡니다.

  • 코드의 각 동작에는 gas(연산 비용)가 매겨집니다.
  • 실행을 요청한 사람이 그 비용을 냅니다.
  • 복잡한 작업일수록 더 많은 gas가 듭니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract GasExample {
    uint256 public total;
 
    // 반복이 많을수록 더 많은 gas 가 든다
    function addMany(uint256 n) public {
        for (uint256 i = 0; i < n; i++) {
            total += 1;
        }
    }
}

위 addMany는 n이 커질수록 반복이 늘어 gas도 늘어납니다. 똑같은 결과라도 더 단순하게 짜면 gas를 아낄 수 있다는 점이, 나중에 배울 '가스 최적화'의 출발점입니다.

예제에 나온 function(동작을 묶는 단위)과 for(같은 일을 여러 번 반복하는 문법)는 각각 Chapter 5와 Chapter 6에서 본격적으로 다룹니다. 지금은 문법을 외울 필요 없이 일을 많이 시킬수록 gas가 많이 든다는 감각만 잡으면 충분합니다.

기본 수수료와 우선 수수료

가스로 계산된 수수료는 한 사람에게 통째로 가지 않습니다. 지금의 이더리움에서는 수수료가 두 부분으로 나뉩니다.

  • 기본 수수료(base fee): 네트워크 혼잡도에 따라 자동으로 정해지는 몫으로, 누구에게도 지급되지 않고 **소각(burn)**됩니다.
  • 우선 수수료(priority fee): 이용자가 얹어 주는 팁으로, 그 블록을 만든 **검증자(validator)**에게 돌아갑니다.

수수료 전체가 보상이 되는 것은 아닙니다. 기본 수수료는 사라지고 우선 수수료만 검증자의 몫이 됩니다. 급할 때 우선 수수료를 높이면 트랜잭션이 더 빨리 처리되는 이유도 여기에 있습니다.