저자:@Web3Mario
서론: 비탈릭은 2024년 5월 13일 EIP-7706 제안을 발표하며 기존 가스 모델에 대한 보완 방안을 제시하였으며, 이는 calldata의 가스 계산을 독립적으로 분리하고 Blob 가스와 유사한 base fee 가격 책정 메커니즘을 도입함으로써 L2의 운영 비용을 추가로 절감하는 것을 목표로 한다. 관련된 제안인 EIP-4844는 2022년 2월에 처음 제안되었으며, 두 제안 사이에는 상당한 시간적 간격이 존재하므로, 이를 바탕으로 최근 이더리움 가스 메커니즘에 대한 종합적인 개요를 제공하고자 한다.
현재 지원되는 이더리움 가스 모델 —— EIP-1559 및 EIP-4844
초기 설계에서 이더리움은 거래 수수료를 정하기 위해 단순한 경매 메커니즘을 사용하였다. 사용자는 자신의 거래에 대해 gas price를 직접 설정해야 했으며, 일반적으로 사용자가 지불하는 거래 수수료는 마이너에게 귀속되므로, 마이너는 경제적으로 최적화된 원칙에 따라 입찰가가 높은 순서대로 거래를 패키징하게 된다. (여기서 MEV는 무시한다.) 당시 핵심 개발자들은 이러한 메커니즘이 다음과 같은 네 가지 문제에 직면한다고 보았다:
l 거래 수수료 수준의 변동성과 거래의 합의 비용 간 불일치: 활성 상태의 블록체인에서는 거래 패키징 수요가 충분하여 블록이 쉽게 채워지지만, 이는 전체 수수료의 큰 변동성을 의미하기도 한다. 예를 들어 평균 Gas Price가 10 Gwei일 때, 다음 한 건의 거래를 더 수용함으로써 네트워크가 발생시키는 한계 비용은 평균 Gas Price가 1 Gwei일 때보다 10배나 크며, 이는 받아들일 수 없는 수준이다.
l 사용자에게 불필요한 지연: 각 블록에는 gaslimit이라는 하드 리밋이 있으며, 과거 거래량의 자연스러운 변동성 때문에 거래는 종종 몇 개의 블록을 기다려야만 패키징된다. 그러나 이는 전반적인 네트워크 효율성 측면에서 비효율적이다. 즉, 블록마다 수요 차이를 반영하여 한 블록은 더 크게 하고 다음 블록은 더 작게 하는 "유연성(slush)" 메커니즘이 존재하지 않는다.
l 가격 책정의 비효율성: 단순한 경매 메커니즘으로 인해 공정한 가격 발견이 비효율적이며, 이는 사용자가 적절한 가격을 책정하는 것이 어렵다는 것을 의미한다. 결과적으로 많은 경우 사용자가 과도한 수수료를 지불하게 된다.
l 블록 보상이 없는 블록체인이 불안정할 수 있음: 채굴로 인한 블록 보상을 없애고 순수하게 수수료 모델만 사용하면 여러 불안정성이 발생할 수 있다. 예를 들어, 거래 수수료를 훔치기 위한 "자매 블록(sister block)"을 채굴하거나, 보다 강력한 이기적 채굴 공격 벡터를 열 수 있다.
EIP-1559가 제안되고 시행되기까지, 가스 모델은 첫 번째 진화를 맞이했다. EIP-1559는 비탈릭 등 핵심 개발자들이 2019년 4월 13일에 제안했으며, 2021년 8월 5일 런던 업그레이드에서 채택되었다. 이 메커니즘은 경매 방식을 버리고 Base fee와 Priority fee의 이중 가격 모델을 도입하였다. Base fee는 부모 블록에서 발생한 가스 소비량과 유동적이며 재귀적인 가스 타겟(gas target) 간의 관계를 기반으로 정해진 수학 모델에 의해 정량적으로 계산된다. 직관적으로 설명하자면, 이전 블록의 가스 사용량이 사전에 정해진 가스 타겟을 초과하면 Base fee를 인상하고, 미달하면 인하한다. 이를 통해 공급과 수요의 관계를 잘 반영하면서도 적절한 가스 가격 예측을 보다 정확하게 만들 수 있다. 실수로 매우 높은 Gas Price를 설정하는 일이 없도록 할 수 있는데, Base fee는 시스템이 자동 결정하므로 사용자가 임의로 지정할 수 없기 때문이다. 구체적인 코드는 다음과 같다:

parent_gas_used가 parent_gas_target보다 클 경우, 현재 블록의 base fee는 이전 블록의 base fee에 편차 값을 더한 값이 된다. 이 편차 값은 parent_base_fee에 (이전 블록의 가스 사용량과 가스 타겟의 편차 / 가스 타겟 ÷ 상수) 중 1 이상인 값을 곱한 것이다. 반대의 경우도 유사한 논리로 동작한다.
또한 Base fee는 더 이상 마이너에게 보상되지 않고 바로 소각(destroyed)되며, 이는 ETH의 경제 모델을 통화 공급 감소(deflationary) 상태로 만들어 가치 안정성에 기여한다. 반면 Priority fee는 사용자가 마이너에게 주는 보너스 개념으로, 자유롭게 가격을 설정할 수 있으며, 이를 통해 마이너의 정렬 알고리즘을 어느 정도 재사용할 수 있게 된다.

시간이 흘러 2021년, Rollup 기술의 발전이 본격화되었다. 우리는 OP Rollup이나 ZK Rollup 모두 L2 데이터를 압축 처리한 후 증명 데이터를 calldata 형태로 체인 위에 올려 데이터 가용성(Data Availability)을 확보하거나 직접 검증을 맡긴다는 사실을 알고 있다. 이는 Rollup 솔루션이 L2의 최종성을 유지하는 과정에서 상당한 가스 비용을 부담하게 되며, 이 비용은 궁극적으로 사용자에게 전가된다. 따라서 당시 대부분의 L2 프로토콜의 사용 비용이 기대만큼 낮지 않았다.
동시에 이더리움은 블록 공간 경쟁이라는 어려움에도 직면해 있었다. 각 블록에는 Gas Limit이 존재하므로, 해당 블록 내 모든 거래의 가스 소비량 총합이 이를 초과해서는 안 된다. 현재 가스 리밋이 30,000,000이라고 할 때, 이론적으로 30,000,000 / 16 = 1,875,000바이트의 제한이 존재한다. 여기서 16은 EVM이 calldata의 각 바이트를 처리할 때 소모하는 가스량이며, 즉 단일 블록이 수용할 수 있는 데이터 규모는 약 1.79MB에 불과하다. 반면 L2 정렬기(sequencer)가 생성하는 Rollup 관련 데이터는 일반적으로 크기가 크므로, 메인체인 사용자들의 거래 확인과 경쟁하게 되어 단일 블록이 패키징할 수 있는 거래량이 줄어들고, 이는 메인체인의 TPS에 영향을 준다.
이 문제를 해결하기 위해 핵심 개발자들은 2022년 2월 5일 EIP-4844 제안을 발표했으며, 2024년 2분기 초 Dencun 업그레이드를 통해 실행되었다. 이 제안은 Blob Transaction이라는 새로운 거래 유형을 도입하는데, 기존 거래 유형과 달리 Blob data라는 새로운 데이터 유형을 추가한다. calldata와 달리 Blob data는 EVM에서 직접 접근할 수 없으며, 그 해시값(VersionedHash)만 접근 가능하다. 또한 두 가지 동반 설계가 있다. 첫째, 일반 거래에 비해 blob transaction의 GC 주기가 짧아 블록 데이터의 과도한 팽창을 방지한다. 둘째, blob data는 고유의 가스 메커니즘을 가지며, 전반적인 효과는 EIP-1559와 유사하지만, 수학 모델에서는 자연 지수 함수를 선택하여 거래 규모 변동에 대한 안정성이 더 우수하다. 자연 지수 함수의 기울기도 자연 지수 함수이므로, 네트워크 거래 규모가 급증할 때 blob 가스의 base fee가 더욱 민감하게 반응하여 거래 활동을 효과적으로 억제한다. 또한 이 함수는 중요한 특성으로, x=0일 때 함수값이 1이 된다.
base_fee_per_blob_gas = MIN_BASE_FEE_PER_BLOB_GAS * e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION)
여기서 MIN_BASE_FEE_PER_BLOB_GAS와 BLOB_BASE_FEE_UPDATE_FRACTION은 상수이며, excess_blob_gas는 부모 블록의 총 blob 가스 소비량과 TARGET_BLOB_GAS_PER_BLOCK 상수의 차이로 결정된다. 총 blob 가스 소비량이 목표치를 초과하면(e.g., 차이가 양수), e**(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION) > 1이 되어 base_fee_per_blob_gas가 증가하고, 반대의 경우 감소한다.
따라서 비교적 큰 규모의 데이터를 저비용으로 이더리움의 합의 능력을 활용해 증명하고 가용성을 보장하려는 시나리오에서, 블록의 거래 패키징 능력을 침해하지 않으면서 효율적으로 실행할 수 있다. 예를 들어 Rollup 정렬기는 blob transaction을 통해 L2의 핵심 정보를 blob data에 담고, EVM 내에서 정교한 설계를 통해 versionedHash를 이용해 체인 상 검증 로직을 구현할 수 있다.
추가적으로 현재 TARGET_BLOB_GAS_PER_BLOCK과 MAX_BLOB_GAS_PER_BLOCK의 설정은 메인넷에 제한을 두고 있다. 즉, 각 블록은 평균 3개의 blob(0.375MB) 처리를 목표로 하며, 최대 6개 blob(0.75MB)까지만 허용된다. 이러한 초기 제한은 이 EIP가 네트워크에 미치는 부담을 최소화하기 위한 것이며, 향후 더 큰 블록에서도 네트워크 신뢰성이 입증되면 향후 업그레이드를 통해 증가될 것으로 예상된다.

실행 환경 가스 소비 모델의 추가 세분화 —— EIP-7706
현재 이더리움의 가스 모델을 명확히 한 후, 이제 EIP-7706 제안의 목적과 구현 세부사항을 살펴보자. 이 제안은 비탈릭이 2024년 5월 13일에 제안한 것으로, Blob data와 유사하게 특수한 속성을 가진 또 다른 데이터 필드인 calldata에 해당하는 가스 모델을 분리하고, 관련 코드 구현 로직을 최적화한다.
원리적으로 calldata의 base fee 계산 로직은 EIP-4844의 blob data base fee와 동일하며, 지수 함수를 사용하고 부모 블록의 실제 가스 소비량과 목표값의 편차에 따라 현재 base fee의 배율을 계산한다.

주목할 만한 새로운 파라미터인 LIMIT_TARGET_RATIOS=[2,2,4]가 도입되었다. 여기서 LIMIT_TARGET_RATIOS[0]은 실행 작업 관련 가스의 목표 비율, LIMIT_TARGET_RATIOS[1]은 Blob data 관련 가스의 목표 비율, LIMIT_TARGET_RATIOS[2]는 calldata 관련 가스의 목표 비율을 나타낸다. 이 벡터는 부모 블록 내 세 가지 유형의 가스에 대한 가스 타겟 값을 계산하는 데 사용되며, 계산 로직은 다음과 같다. 즉 gas limit을 각각의 LIMIT_TARGET_RATIOS 값으로 나누는 것이다:

gas_limits의 설정 로직은 다음과 같다:
gas_limits[0]은 기존 조정 공식을 따라야 한다
gas_limits[1]은 MAX_BLOB_GAS_PER_BLOCK과 같아야 한다
gas_limits[2]은 gas_limits[0] // CALLDATA_GAS_LIMIT_RATIO와 같아야 한다
현재 gas_limits[0]이 30,000,000이고, CALLDATA_GAS_LIMIT_RATIO가 4로 미리 설정되어 있으므로, 현재 calldata 가스 타겟은 30,000,000 // 4 // 4 = 1,875,000이 된다. 현재 calldata 가스 계산 방식에 따르면, 비제로 바이트는 1바이트당 16 가스, 제로 바이트는 4 가스를 소모한다. 특정 calldata에서 비제로와 제로 바이트가 각각 50%씩 차지한다고 가정하면, 평균적으로 1바이트의 calldata 처리에 10 가스가 필요하다. 따라서 현재 calldata 가스 타겟은 약 187,500바이트의 calldata 데이터에 해당하며, 이는 현재 평균 사용량의 약 2배이다.
이러한 설계의 장점은 calldata가 가스 리밋에 도달할 확률을 크게 줄이고, 경제 모델을 통해 calldata 사용량을 안정적으로 유지하며, calldata의 남용을 방지할 수 있다는 점이다. 이러한 설계는 결국 L2의 발전을 위한 장애물을 제거하고, blob data와 결합하여 정렬기 비용을 추가로 절감하는 데 목적이 있다.















