본문 바로가기
BlockChain/ethereum

이더리움의 가스 정책에 대해 알아보자

by gamxong 2023. 3. 12.

EIP - 1559 : fee market change

EIP-1559는 EIP(Ethereum Improvement Proposals) 중에서 현재까지 이더리움 내 가스 규율로서 사용하는 모델입니다.

따라서 블록체인 개발자라면 꼭 알아둬야 하는 내용이라고 볼 수 있습니다.

 

 

0. EIP-1559 수수료 모델에 대하여

EIP-1559는 2019년 4월에 처음 제안된 이후 가장 주목 받았으며 업그레이드가 기다려졌던 개선안 중 하나입니다. EIP-1559는 실제로 런던 하드포크 이후 이더리움의 거래 모델에 큰 변화를 가져오기도 했습니다.

이더리움이 PoS로 전환되었음에도 EIP-1559 수수료 체계는 계속 유지 중이므로 아래의 내용이 현재 상황에 그대로 적용됩니다.

 

1. Legacy 수수료 정책 ( Before )

이더리움의 수수료 정책이 어떻게 변화되었는지 알기 위해선 기존의 레거시 수수료 모델을 이해할 필요가 있습니다. EIP-1559 업그레이드 전, 이더리움 사용자들은 거래를 하기 위해 네트워크 혼잡도에 따라 수수료를 어림짐작으로 예측하여 제출했습니다. 이때는 블록 채굴자들이 블록 채굴 보상으로 블록에 포함되는 모든 거래들의 수수료를 가져가는 구조였기에 블록 채굴자들은 수수료가 높은 거래를 위주로 거래들을 골라 담아 갔습니다. 사용자들은 자신의 거래가 빨리 수행되기 위해선 더 높은 수수료를 내고 블록에 채택되길 기다려야했습니다.

 

여기서 가장 큰 문제점은 사용자들은 어느 정도의 수수료를 지불해야 블록에 포함되는지 모르는 점입니다. 그래서 사용자들은 거래가 빨리 수행되길 바라며 수수료 경매장에 입찰을 해나갔고, 수수료 경쟁을 스스로 심화 시켰습니다.

 

문제점은 하나 더 존재했습니다. 바로 블록의 크기입니다.

EIP-1559 업그레이드 전, 모든 블록은 동일한 블록 크기(Block Limit)를 가졌습니다. 거래가 몰리는 혼잡한 시간대나 널널한 시간대 전부 상관없이 블록은 크기가 정해져 있었기에 처리하는 트랜잭션 수량이 항상 일정했습니다. 그렇기에 거래가 몰리는 시간이면 블록을 생성하는 시간보다 처리해야할 거래 수가 많고, 거래를 담아가는 수량도 일정하기에 거래 확정 시간이 늦어질 수 밖에 없었습니다. 거래 확정이 늦어지면 사용자들은 수수료를 더 높여서 지불했고 이 또한 수수료가 상승하는 주된 원인이 되었습니다.

 

 

2. EIP-1559 수수료 정책

EIP-1559의 목적과 개선 사항은 아래와 같습니다.

  1. 사용하게 될 수수료 예측을 더 쉽게할 수 있도록 하자
  2. 블록 크기가 가변적으로 변하게 해서 수요가 급증할때 크기를 2배로 증가시켜 트랜잭션(거래) 확정 시간을 줄이자
  3. 네트워크 현재 수요에 따라 알고리즘으로 가스비가 자동 결정되게 함으로써 UX를 개선하자
  4. 사용자가 지불한 요금 중 일부가 연소(Burn)되어 이더의 희소성을 높이자. 거래 이용 증가가 곧 모든 이더 홀더들에게 이익으로 돌아갈 것이다

EIP-1559 이후 새로운 개념이 등장하는데 바로 Limittarget입니다. EIP-1559 이후에 [50% 만큼 가득차 있는] 블록의 Limit는 EIP-1559 이전에는 원래 [100% 만큼 가득차 있는] 블록의 Limit과 같다고 볼 수 있습니다. 따라서 현재 시점으로 블록이 1500만 가스를 사용했으면 gas Target이 +50% 만큼 사용했다고 말할 수 있고, 블록이 3000만 가스를 사용했으면 gas  Target이 +100% 만큼 사용했다고 말할 수 있습니다.

 

이더리움은 각 블록들이 50%만큼 가스를 사용하는 것이 가장 이상적이며 가장 적합한 목표치라 말합니다. 블록 크기를 늘리는 것도 공짜는 아니기 때문입니다. 목표치 이상을 사용하게 되면 수수료 기본 평균이 인상되고, 작게 사용하게 되면 반대로 감소합니다. 급격한 수수료 변동 폭을 줄이기 위해 수수료 기본 가격의 상승과 감소의 폭은 12.5%로 제한했습니다.

 

예를 들어 봅시다.  본인은 수수료 20 Gwei에 거래를 제출했습니다. 현재 블록의 기본 수수료가 20 Gwei였기 때문입니다. 이때, 제출한 시점에 갑자기 네트워크가 혼잡(가스 스파이크)해졌습니다. 하지만 갑자기 기본 수수료가 증가하지는 않습니다. 대신 몰리는 거래량을 수용하기 위해 블록의 크기가 커집니다. 2번째 블록이 커졌기에 커지는 만큼 다음 3번째 블록의 기본 수수료가 증가하여 22.5 Gwei가 되었습니다. 3번째 블록에서도 거래가 몰려 블록 크기가 커졌기에 4번째 블록 또한 기본 수수료가 25 Gwei로 높아집니다. 하지만 혼잡도가 높진 않아 블록 크기가 줄어들었습니다. 이때 본인은 20 Gwei의 수수료를 제출했기에 2번째 블록에서 거래가 확정되었습니다.

 

 

2-1. BaseFee

블록에 트랜잭션을 포함하기 위해 필요한 최소 가스 가격입니다(가스 단위당 Gwei). 블록에 포함되는 트랜잭션(거래)들은 모두 기본적으로 BaseFee를 기반으로 gasPrice(가스 가격)이 측정도비니다. BaseFee(기본료)는 이더리움 네트워크의 혼잡도에 따라 프로토콜에 의해 알고리즘적으로 설정됩니다.

블록에서 가스의 50% 이상 사용되면 BaseFee는 증가하고, 50% 미만으로 사용이 감소하면 기본료도 감소됩니다. 사용이 증가하고 감소하고는 부모 블록의 parentGasUsed와, parentGasTarget 값을 참고하여 결정됩니다. gasTarget이란 부모 블록보다 gas를 얼마나 더 소비했는지(gasUsed)를 나타내는 측정 값 입니다. 즉, parentGasTarget이 50%보다 크기가 높으면 블록의 BaseFee가 증가하고, parentGasTarget 값이 50%보다 크기가 낮으면 블록의 BaseFee가 감소합니다. 블록의 BaseFee는 부모 블록에 비해 블록이 가득찼는지를 기준으로 ±12.5%까지 크기가 변동될 수 있습니다. 즉 BaseFee(기본료)가 부모의 BaseFee를 기준으로 ±12.5까지 변동이 가능하다고 예측이 가능한 것입니다.

 

2-2. PriorityFee

사용자가 거래를 블록에 포함시기위해 채굴자에게 직접 지불하는 가스 가격(가스 단위당 Gwei)으로 급행료 또는 팁(Tip)이라고 부르기도 합니다.

채굴자의 채굴 보상이 트랜잭션의 모든 gasPrice를 받는 것에서 트랜잭션의 모든 PriorityFee를 받는 것으로 변경되었습니다. PriorityFee는 사용자가 직접 설정하며 PriorityFee를 많이 내는 사람일수록 더 빨리 블록에 포함됩니다.

 

레거시때의 수수료 경쟁과 다른게 뭔지 궁금할거라 생각합니다. 팁은 보통 1~3 Gwei 밖에 되지 않으며 이더리움 연구소에서 추천하는 가격은 2 Gwei라고 합니다. 2 Gwei는 절대 적은 금액이 아니며 블록에 빠르게 포함가능한 수치입니다. 팁 또한 변동 폭이 적으니 레거시때보다 수수료 경쟁이 완화되었고 사용자 편의 환경이 훨씬 상향되었다고 말할 수 있겠습니다.

 

2-3. MaxFee

사용자가 트랜잭션에 대해 지불할 의사가 있는 최대 가스 가격(가스 단위당 Gwei)으로 트랜잭션을 제출할때 사용자가 직접 설정합니다. MaxFee는 BaseFee보다 낮게 설정할 수 없습니다.

 

 

 

3. 수수료 계산 방법

트랜잭션을 처리할때 사용자는 BaseFee와 PriorityFee를 수수료로 주게되는데, 채굴자들이 수수료를 높이는 조작 행위를 방지하기 위해 BaseFee는 소각됩니다. 또한 제출하는 수수료의 최대 금액을 사용자가 직접 설정하여 수수료 지불의 제한선을 두었습니다.

사용자는 잔고를 확인 한 뒤 최대로 지불할 수 있는 두 개 값을 설정합니다. 이때 두 값의 최대값을 maxFeePerGas와 maxPriorityFeePerGas라고 합니다.

 

3-1. maxFeePerGas

maxFeePerGas는 자신이 최대로 허용할 수 있는 가스의 최대 가격입니다.

본인이 현재 트랜잭션을 제출한다고 가정해봅시다. 본인은 현재 이미 생성된 부모 블록의 BaseFee 값은 알 수 있지만, 본인이 제출할 트랜잭션이 어떤 블록에 담길지는 알 수 없기에, 담길 블록의 BaseFee를 알 수 없는 상태입니다. BaseFee를 알 수 없으니 최대로 지불할 수있는 MaxFee 값을 정할 것입니다. 본인은 Max값을 200 Gwei로 제출했습니다. 막상 거래가 확정되고 확인한 BaseFee는 100 Gwei 였습니다. 본인은 수수료를 100 Gwei 더 높게 설정했지만 이것은 채굴자에게 모두 지불 되지않고 초과된 100 Gwei는 다시 환불됩니다.

 

이때 중요한 점은 MaxFee를 BaseFee보다 낮게 설정하면 거래가 처리되지 않거나 계속 pending 상태로 머물러 있습니다. 그렇다면 MaxFee는 얼마를 측정해야 좋을까요? 아래의 공식으로 MaxFee를 구할 수 있습니다.

 

MaxFee = ( BaseFee * 2 ) + maxPriorityFee

 

 

3-2. maxPriorityFeePerGas

maxPriorityFeePerGas는 채굴자에게 줄 수 있는 팁의 최대값 입니다. maxPriorityFeePerGas을 0으로 설정하면 채굴자에게 주어지는 이더가 없기 때문에 채굴자가 트랜잭션을 후순위로 처리할 가능성이 높습니다.

 

본인이 현재 트랜잭션을 제출한다고 가정해봅시다. BaseFee가 100 Gwei 인데 maxFeePerGas를 300 Gwei로 주고, maxPriorityFeePerGas를 5 Gwei로 입력하여 트랜잭션을 제출하였습니다. 100 Gwei(BaseFee) + 5 Gwei(maxPriorityFeePerGas) = 105 Gwei를 최종 지불하게 됩니다. 이때 채굴자는 오직 팁만 보상으로 가질 수 있기에 실제로 채굴자에게 지급되는 금액은 5 Gwei 입니다. 100 Gwei는 소각되고, 초과 지출한 200 Gwei는 환불됩니다.

 

실제로 채굴자에게 지급되는 금액은 maxPriorityFeePerGas 값과 maxFeePerGas에서 BaseFee를 뺀 값 두개 중에 가장 최소값이 지불 됩니다.

  • PriorityFee can be paid from (maxFeePerGas — BaseFeePerGas), and it cannot be greater than maxPriorityFeePerGas.
  • So technically + 수학적으로, (BaseFeePerGas + maxPriorityFeePerGas) can be greater than maxFeePerGas

 

 

3-3. Legacy와의 비교

EIP-1559 이전(Legacy)의 수수료를 구하는 법은 아래와 같습니다.

Transaction Fee = gasPrice * gasLimit

 

EIP-1559 이후는 gasPrice가 사라지고 BaseFee와 PriorityFee를 더한 금액에서 사용한 가스만큼을 곱한 금액이 최종 지불하는 수수료입니다.

Transaction Fee = ( BaseFee + PriorityFee ) * gasUsed

 

BaseFee는 프로토콜에서 자동적으로 산출되기에 레거시 때보다 수수료 급등 현상을 막을 수 있고, 수수료가 어느 정도인지 예측할 수 있게 되어 사용자에게 편의를 제공합니다.

 

 

3-4. 이더리움 소각

EIP-1559가 주목과 지지를 받게된 주된 이유는 사용자가 지불한 수수료 중 일부가 소각되어 채굴자에게만 집중되어 있던 보상을 이더리움 네트워크 사용자 전체에게 돌아가도록 한다는 기능이 있어서 입니다. 사용자는 BaseFee와 PriorityFee를 수수료로 지불하며 채굴자에게는 보상으로 PriorityFee만 주어지고 BaseFee는 모두 소각됩니다. 사용자들의 거래량이 많아질수록 비례하여 이더가 소각되므로 이더의 희소성이 증가하여 가격이 상승하는 것 입니다. 이더리움 네트워크의 모든 사용자들에게 균등하게 보상이 주어지는 것 입니다.

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

Ethereum storage와 keccak-256  (0) 2023.03.14
EVM은 무엇이고, 한계는 무엇일까?  (1) 2023.03.11

댓글