EIP-7706을 자세히 설명하고 최신 Ethereum의 Gas 메커니즘을 정리합니다
저자 :++@Web3Mario++
서론 :Vitalik은 2024년 5월 13일 EIP-7706 제안을 발표하여 기존 Gas 모델에 대한 보완 방안을 제시하였으며, calldata의 gas 계산을 별도로 분리하고 Blob gas와 유사한 base fee 가격 책정 메커니즘을 맞춤화하여 L2의 운영 비용을 더욱 낮추었습니다. 이와 관련된 제안은 2022년 2월에 제안된 EIP-4844로 거슬러 올라가며, 시간이 많이 경과했기 때문에 관련 자료를 참고하여 최신 Ethereum Gas 메커니즘에 대한 개요를 제공하고자 합니다.
현재 지원되는 Ethereum Gas 모델------EIP-1559 및 EIP-4844
초기 설계에서 Ethereum은 거래 수수료를 가격 책정하기 위해 간단한 경매 메커니즘을 채택하였으며, 이는 사용자가 자신의 거래에 대해 적극적으로 입찰해야 함을 의미합니다. 즉, gas price를 설정해야 하며, 일반적으로 사용자가 지불하는 거래 수수료는 채굴자에게 귀속되므로, 채굴자는 경제적으로 최적의 원칙에 따라 입찰 금액에 따라 거래 패키징 순서를 결정합니다. 이는 MEV를 무시한 경우입니다. 당시 핵심 개발자들은 이 메커니즘이 다음 네 가지 문제에 직면해 있다고 보았습니다:
- 거래 수수료 수준의 변동성과 거래의 합의 비용 간의 불일치 : 활성 상태의 블록체인에서는 거래 패키징 수요가 충분하여 블록이 쉽게 채워질 수 있지만, 이는 종종 전체 수수료의 변동성이 매우 크다는 것을 의미합니다. 예를 들어 평균 Gas Price가 10 Gwei일 때, 네트워크가 하나의 블록에서 추가 거래를 수용함에 따라 발생하는 한계 비용은 평균 Gas Price가 1 Gwei일 때의 10배가 됩니다. 이는 용납할 수 없습니다.
- 사용자에게 불필요한 지연: 각 블록에는 gas limit의 경직된 제한이 있으며, 역사적 거래량의 자연스러운 변동으로 인해 거래는 종종 몇 개의 블록을 기다려야 패키징됩니다. 이는 전체 네트워크에 비효율적입니다. 즉, 하나의 블록이 더 크고 다음 블록이 더 작아지는 "완화" 메커니즘이 존재하지 않습니다.
- 가격 책정 비효율성: 간단한 경매 메커니즘을 채택함으로써 공정한 가격 발견의 효율성이 낮아졌습니다. 이는 사용자에게 합리적인 가격 책정을 어렵게 만들며, 많은 경우 사용자가 수수료를 과다 지불하게 됩니다.
- 블록 보상이 없는 블록체인 은 불안정할 것 입니다: 채굴로 인한 블록 보상을 취소하고 순수한 수수료 모델을 채택할 경우, 거래 수수료를 훔치는 "자매 블록"을 유도하거나 더 강력한 이기적 채굴 공격 벡터를 열 수 있는 등 많은 불안정성을 초래할 수 있습니다.
EIP-1559의 제안 및 실행까지 Gas 모델은 첫 번째 반복을 겪었습니다. EIP-1559는 Vitalik 등 핵심 개발자들이 2019년 4월 13일에 제안하였고, 2021년 8월 5일 런던 업그레이드에서 채택되었습니다. 이 메커니즘은 경매 메커니즘을 폐기하고 Base fee와 Priority fee의 이중 가격 책정 모델을 채택하였습니다. 여기서 Base fee는 부모 블록에서 발생한 gas 소비 상황과 변동적이며 재귀적인 gas target 간의 관계를 통해 정량적으로 계산됩니다. 직관적으로, 이전 블록에서 gas 사용량이 예정된 gas target을 초과하면 base fee를 인상하고, 미달하면 base fee를 인하합니다. 이렇게 하면 수요와 공급 관계를 잘 반영할 수 있으며, 합리적인 gas 예측이 더욱 정확해져 잘못된 조작으로 인한 천문학적인 Gas Price가 발생하지 않도록 합니다. base fee의 계산은 시스템에 의해 직접 결정되며 사용자가 자유롭게 지정하지 않습니다. 구체적인 코드는 다음과 같습니다:
여기서 parentgasused가 parentgastarget보다 클 경우, 현재 블록의 base fee는 이전 블록의 base fee에 오프셋 값을 더한 값이 됩니다. 오프셋 값은 parentbasefee에 이전 블록의 gas 총 사용량과 gas target의 오프셋을 곱한 후 gas target과 상수의 최대값으로 나눈 나머지를 취합니다. 반대로 논리는 유사합니다.
또한 Base fee는 더 이상 채굴자에게 보상으로 분배되지 않고 직접 소각되어 ETH의 경제 모델이 디플레이션 상태에 놓이게 하여 가치의 안정을 도모합니다. 반면 Priority fee는 사용자가 채굴자에게 주는 팁과 같으며 자유롭게 가격을 책정할 수 있어, 어느 정도 채굴자의 정렬 알고리즘이 재사용될 수 있습니다.
2021년으로 시간이 지나면서 Rollup의 발전이 점차 순조롭게 진행되었습니다. 우리는 OP Rollup이든 ZK Rollup이든 L2의 데이터를 압축 처리한 특정 증명 데이터를 calldata를 통해 체인에 업로드하여 데이터 가용성(Data Available)을 실현하거나 직접 체인에서 검증하도록 해야 한다는 것을 알고 있습니다. 이는 이러한 Rollup 솔루션이 L2의 최종성을 유지하는 데 큰 Gas 비용을 초래하며, 이러한 비용은 결국 사용자에게 전가됩니다. 따라서 당시 대부분의 L2 프로토콜의 사용 비용은 예상보다 낮지 않았습니다.
동시에 Ethereum은 블록 공간 경쟁의 곤경에 직면해 있었습니다. 우리는 각 블록에 Gas Limit이 존재한다는 것을 알고 있으며, 이는 현재 블록 내 모든 거래의 Gas 소비 총합이 해당 값을 초과할 수 없음을 의미합니다. 현재 Gas Limit이 30,000,000일 경우, 이론적으로 30,000,000 / 16 = 1,875,000 바이트의 제한이 존재합니다. 여기서 16은 EVM이 각 calldata 바이트를 처리하는 데 필요한 Gas 단위입니다. 즉, 단일 블록이 최대 약 1.79 MB의 데이터 규모를 수용할 수 있음을 의미합니다. L2 정렬기가 생성하는 Rollup 관련 데이터는 일반적으로 데이터 규모가 크기 때문에 다른 메인 체인 사용자의 거래 확인과 경쟁하게 되어 단일 블록이 패키징할 수 있는 거래량이 줄어들고, 이는 메인 체인의 TPS에 영향을 미칩니다.
이러한 곤경을 해결하기 위해 핵심 개발자들은 2022년 2월 5일 EIP-4844 제안을 제시하였고, 2024년 2분기 초 Dencun 업그레이드 후 시행되었습니다. 이 제안은 Blob Transaction이라는 새로운 거래 유형을 제안하였으며, 전통적인 거래 유형과 비교할 때 Blob Transaction의 핵심 아이디어는 새로운 데이터 유형인 Blob data를 보완하는 것입니다. calldata 유형과는 달리 blob data는 EVM에서 직접 접근할 수 없으며, 오직 해시만 접근할 수 있으며, VersionedHash라고도 불립니다. 또한 두 가지 동반 설계가 있습니다. 첫째, 일반 거래에 비해 blob transaction의 GC 주기가 더 짧아 블록 데이터가 지나치게 부풀어 오르지 않도록 보장합니다. 둘째, blob data는 고유의 Gas 메커니즘을 가지고 있으며, 전체적으로 EIP-1559와 유사한 효과를 나타내지만, 수학 모델에서 자연 지수 함수를 선택하여 거래 규모 변동에 대한 안정성을 더욱 향상시킵니다. 자연 지수 함수의 기울기는 또한 자연 지수 함수이므로, 네트워크 거래 규모가 어떤 상태에 있든지 간에 거래 규모가 급격히 증가할 때 blob gas의 base fee가 더욱 충분히 반응하여 거래 활발도를 효과적으로 억제합니다. 이 함수는 또한 중요한 특성을 가지고 있으며, x축이 0일 때 함수 값은 1입니다.
basefeeperblobgas = MINBASEFEEPERBLOBGAS * e**(excessblobgas / BLOBBASEFEEUPDATE_FRACTION)
여기서 MINBASEFEEPERBLOBGAS와 BLOBBASEFEEUPDATEFRACTION은 두 개의 상수이며, excessblobgas는 부모 블록에서 총 blob gas 소비와 TARGETBLOBGASPERBLOCK 상수 간의 차이에 의해 결정됩니다. 총 blob gas 소비가 목표 값을 초과하면, 즉 차이가 양수일 때 e**(excessblobgas / BLOBBASEFEEUPDATEFRACTION)가 1보다 크면 basefeeperblob_gas가 증가하고, 반대로 감소합니다.
이렇게 하면 Ethereum의 합의 능력을 활용하여 특정 규모의 데이터에 대한 증명을 보장하고자 하는 경우 저비용으로 실행할 수 있으며, 블록의 거래 패키징 능력을 침해하지 않습니다. Rollup 정렬기의 예를 들어, blob transaction을 통해 L2의 핵심 정보를 blob data에 캡슐화하고, EVM 내에서 정교한 설계를 통해 versionedHash를 활용하여 체인 상 검증 논리를 구현할 수 있습니다.
현재 TARGETBLOBGASPERBLOCK 및 MAXBLOBGASPERBLOCK의 설정은 메인넷에 제한을 가져옵니다. 즉, 각 블록의 평균 처리 목표는 3개의 blob(0.375 MB)이며 최대 6개의 blob(0.75 MB)로 제한됩니다. 이러한 초기 제한은 EIP가 네트워크에 미치는 압력을 최소화하기 위한 것이며, 네트워크가 더 큰 블록에서 신뢰성을 보일 경우 향후 업그레이드에서 증가할 것으로 예상됩니다.
실행 환경 Gas 소비 모델의 재세분화------EIP-7706
현재 Ethereum의 Gas 모델을 명확히 한 후, EIP-7706 제안의 목표 및 구현 세부 사항을 살펴보겠습니다. 이 제안은 Vitalik이 2024년 5월 13일에 제안하였습니다. Blob data와 유사하게, 이 제안은 또 다른 특수한 데이터 필드에 해당하는 Gas 모델을 분리하였으며, 이 데이터 필드는 바로 calldata입니다. 또한 관련 코드 구현 논리를 최적화하였습니다.
원리적으로 calldata의 base fee 계산 논리는 EIP-4844의 blob data에 대한 base fee와 동일하며, 지수 함수를 사용하고 부모 블록의 실제 gas 소비 값과 목표 값의 편차를 기반으로 현재 base fee의 스케일링 비율을 계산합니다.
새로운 매개변수 설계인 LIMITTARGETRATIOS=[2,2,4]에 주목할 필요가 있습니다. 여기서 LIMITTARGETRATIOS[0]는 실행 작업 유형 Gas의 목표 비율을 나타내고, LIMITTARGETRATIOS[1]은 Blob data 유형 Gas의 목표 비율을 나타내며, LIMITTARGETRATIOS[2]는 calldata 유형 Gas의 목표 비율을 나타냅니다. 이 벡터는 부모 블록에서 세 가지 유형의 gas에 해당하는 gas target 값을 계산하는 데 사용되며, 계산 논리는 다음과 같습니다. 즉, 각각 LIMITTARGETRATIOS를 사용하여 gas limit에 대해 나누기 연산을 수행합니다:
여기서 gas_limits의 설정 논리는 다음과 같습니다:
gas_limits[0]는 기존의 조정 공식을 따라야 합니다.
gaslimits[1]은 MAXBLOBGASPER_BLOCK와 같아야 합니다.
gaslimits[2]는 gaslimits[0] // CALLDATAGASLIMIT_RATIO와 같아야 합니다.
현재 gaslimits[0]는 30,000,000이며, CALLDATAGASLIMITRATIO는 4로 미리 설정되어 있습니다. 이는 현재 calldata gas target이 약 30,000,000 // 4 // 4 = 1,875,000임을 의미합니다. 또한 현재 calldata gas 계산 논리에 따라 각 비영(非零) Bytes는 16 Gas를 소비하고, 영(零) Bytes는 4 Gas를 소비합니다. 특정 calldata에서 비영(非零) 및 영(零) Bytes의 분포가 각각 50%를 차지한다고 가정할 경우, 평균적으로 1 Bytes의 calldata를 처리하는 데 10 Gas가 소모됩니다. 따라서 현재 calldata gas target은 약 187,500 Bytes의 calldata 데이터에 해당하며, 이는 현재 평균 사용량의 약 2배입니다.
이러한 설계의 이점은 calldata가 gas limit에 도달할 확률을 크게 줄이고, 경제 모델을 통해 calldata의 사용량을 비교적 일정한 상태로 유지하며, calldata의 남용을 방지하는 것입니다. 이러한 설계를 하는 이유는 L2의 발전을 위한 장애물을 제거하고, blob data와 결합하여 정렬기의 비용을 더욱 낮추기 위함입니다.