개요

EVM 트랜잭션 수수료 모델은 자동차 연료 비유가 직관적임 Gas는 연료, 트랜잭션 수행은 목적지까지 주행이라는 맥락으로 이해하면 됨 핵심은 두 파라미터, Gas Limit와 Gas Price이며 EIP-1559 이후에는 Base Fee와 Priority Fee로 세분됨

핵심 개념

  • Gas Limit

    • 이 트랜잭션이 최대 얼마만큼의 연산을 사용할 수 있는지에 대한 상한
    • 단순 ETH 송금은 21,000 가스 고정값 수준
    • 컨트랙트 실행은 로직 복잡도, 저장소 접근, 반복 등에 비례해 증가
    • 사용하지 않은 가스는 환불, 부족하면 Out of Gas로 실패 후 사용한 가스 비용만큼 청구
  • Gas Price

    • 가스 1단위당 지불 단가, 단위는 Gwei (1 Gwei = 0.000000001 ETH)
    • 네트워크 혼잡도에 따라 경쟁적으로 책정하는 입찰값 성격
    • 높으면 포함 우선순위 상승, 낮으면 대기 또는 드롭 가능성

동작 원리

  • 블록 프로듀서는 더 높은 보상을 주는 트랜잭션부터 포함하려는 경향
  • 가스가 실행 중 소진되면 즉시 중단하고 상태 변경은 리버트 처리, 이미 사용된 가스 비용은 청구됨
  • 가스 단가가 지나치게 낮으면 멤풀에서 장시간 대기하거나 노드 정책에 따라 제거될 수 있음
  • 블록체인에 포함되지 않은 트랜잭션은 수수료 지불도 발생하지 않음

EIP-1559 이후의 구조

  • Base Fee
    • 네트워크 혼잡도에 따라 프로토콜이 자동 조정하는 최소 수수료 성분
    • 블록에 포함되면 소각됨
  • Priority Fee
    • 블록 프로듀서에게 주는 팁
    • 빠른 포함을 원할 때 상향
  • 트랜잭션 필드
    • maxFeePerGas, maxPriorityFeePerGas 지정
    • 실제 지불 단가인 effectiveGasPrice는 min(maxFeePerGas, baseFee + priorityFee)에 의해 결정됨
  • 기존 gasPrice 단일 필드는 레거시 호환 목적, 현재는 타입2 트랜잭션 사용 권장

수수료 계산

  • 기본식
    • 총 수수료 = Gas Used × 단가
  • 레거시 가정
    • 단가 = Gas Price
  • EIP-1559 가정
    • 단가 = effectiveGasPrice = min(maxFeePerGas, baseFee + priorityFee)
    • 총 수수료는 Gas Used × effectiveGasPrice이며, baseFee는 소각, priorityFee는 블록 프로듀서에게 전달

예시

  • 단순 송금 케이스
    • Gas Used 21,000, Gas Price 20 Gwei 가정
    • 총 수수료 = 21,000 × 20 Gwei = 420,000 Gwei = 0.00042 ETH
  • EIP-1559 케이스
    • baseFee 15 Gwei, priorityFee 2 Gwei, maxFeePerGas 30 Gwei, Gas Used 21,000
    • effectiveGasPrice = min(30, 15 + 2) = 17 Gwei
    • 총 수수료 = 21,000 × 17 Gwei = 357,000 Gwei = 0.000357 ETH

실패와 대기 시나리오

  • Gas Limit이 너무 낮은 경우
    • 실행 도중 가스 소진으로 즉시 중단, 상태 리버트
    • 사용한 가스 비용은 청구
    • 블록에는 실패 상태로 기록
  • Gas Price가 너무 낮은 경우
    • 멤풀 대기 또는 노드 정책에 따라 드롭
    • 블록 미포함, 비용 지불 없음
    • 익스플로러에서 pending으로 보일 수 있으나 확정 아님

한눈에 비교

상황부족한 것블록 포함비용상태
Out of GasGas Limit(연산량 상한)포함됨사용된 가스만큼 지불Fail 및 Revert
UnderpricedGas Price 또는 effectiveGasPrice포함 안 됨0Pending → Drop

주의와 베스트 프랙티스

  • Gas Limit는 노드의 estimateGas 결과를 기본으로, 약간의 마진 추가 권장
  • 반복적 저장소 쓰기나 루프가 있는 컨트랙트는 가스 변동성 큼, 경계 케이스에 대한 사전 시뮬레이션 필요
  • EIP-1559 사용 시 maxFeePerGas는 baseFee 변동을 흡수할 수 있도록 여유 있게, maxPriorityFeePerGas는 시장 상황에 맞춰 설정
  • 멤풀 장기 대기 시 동일 nonce로 수수료를 상향해 트랜잭션 교체하는 전략 유효
  • 실패 트랜잭션도 가스 비용 발생 가능, 리트라이 시 원인 분석 후 수정 재전송 권장

요약

  • Gas Limit은 작업량 상한, 부족하면 Out of Gas로 실패하며 이미 사용한 가스 비용 청구
  • Gas Price는 단가, 낮으면 대기 또는 드롭으로 블록 미포함
  • EIP-1559 이후 수수료는 baseFee 소각 + priorityFee 보상 구조이며, effectiveGasPrice에 의해 실제 지불 단가 결정

참고자료