EIP-8131 통합 트랜잭션 콘텐츠 바닥 요금 (Unified Transaction Content Floor)
Hegota 포함 검토 (CFI) · 수수료·가스 · 원문 상태 Draft · 2025-01-21 작성
트랜잭션에서 사용자가 채우는 모든 바이트(콜데이터, 액세스 리스트, EIP-7702 승인, 블롭 해시)에 바이트당 64가스의 최저 요금을 매깁니다. 블록 하나에 담길 수 있는 최악의 데이터 양이 산술적으로 제한됩니다.
왜 필요한가
모든 노드는 평균 블록이 아니라 공격자가 만들 수 있는 가장 큰 블록을 감당해야 합니다. 그래서 EIP-7623은 콜데이터 바이트에 바닥 가격(floor)을 도입했고 EIP-7976은 이 요율을 0 바이트와 비0 바이트 구분 없이 바이트당 64가스로 올렸으며 EIP-7981은 같은 요율을 액세스 리스트 바이트까지 넓혔습니다. 그런데 EIP-7702의 승인 튜플(개당 최대 108바이트)과 EIP-4844의 블롭 버전 해시(개당 32바이트)는 대응하는 바닥 요금 없이 추가되어 지금도 바닥 가격을 전혀 내지 않습니다. 또 필드가 하나 늘 때마다 별도의 EIP와 별도의 상수가 필요했습니다. 이 EIP는 EIP-7976과 EIP-7981을 하나의 바이트당 규칙으로 합치고 승인 튜플과 블롭 해시의 공백도 같은 규칙으로 메웁니다. 앞으로 생기는 가변 길이 필드도 자동으로 같은 요율이 적용되고 최악의 블록 콘텐츠 크기에는 산술만으로 증명할 수 있는 상한이 생깁니다.
무엇이 바뀌나
지금
- 콜데이터는 EIP-7623/7976, 액세스 리스트는 EIP-7981 등 필드마다 다른 EIP와 상수로 바닥 가격을 매깁니다
- EIP-7702 승인 튜플과 EIP-4844 블롭 버전 해시는 바닥 가격을 전혀 내지 않습니다
- 새 가변 길이 필드가 생길 때마다 전용 EIP가 또 필요합니다
EIP-8131 이후
- 사용자가 채우는 모든 콘텐츠 바이트가 동일하게 바이트당 64가스의 바닥 요금을 냅니다
- 하나의 공식이 EIP-7976과 EIP-7981을 대체하고 승인 튜플과 블롭 해시의 공백을 메웁니다
- 블록당 공격자 제어 콘텐츠가 block_gas_limit / 64, 즉 60M 가스 기준 약 0.89MB로 제한됩니다
누구에게 영향이 있나
- 일반 사용자: 새 바닥 가격에 걸리는 트랜잭션은 메인넷 전체의 4% 미만입니다. 단순 ETH 전송(21,000가스)과 일반 토큰 전송은 변화가 없습니다.
- 지갑·앱 개발자: 지갑과 eth_estimateGas는 반드시 새 바닥 가격을 함께 계산해야 합니다. 계산하지 않으면 바닥에 걸리는 트랜잭션의 추정치가 낮아져 제출이 거부됩니다.
- EIP-7702 스마트 계정 사용자·번들러: 승인 튜플이 새로 과금되면서 타입 4 트랜잭션의 바닥 적용 비율이 0.04%에서 20.63%로 오르고 평균 바닥 가격이 240k에서 587k 가스로 오릅니다.
- 클라이언트 팀: 하드포크가 필요한 변경입니다. 인트린식 가스 계산은 그대로 두고 바닥 가격 공식만 바꿉니다.
심층 설명
하나의 바닥 가격 공식
tx_floor = TX_BASE + FLOOR_GAS_PER_BYTE × (len(tx.data) + ACCESS_LIST_ADDRESS_BYTES × 주소 수 + ACCESS_LIST_STORAGE_KEY_BYTES × 스토리지 키 수 + AUTH_TUPLE_BYTES × 승인 수 + BLOB_VERSIONED_HASH_BYTES × 블롭 해시 수). 상수는 TX_BASE = 21000, FLOOR_GAS_PER_BYTE = 64, ACCESS_LIST_ADDRESS_BYTES = 20, ACCESS_LIST_STORAGE_KEY_BYTES = 32, AUTH_TUPLE_BYTES = 108, BLOB_VERSIONED_HASH_BYTES = 32입니다. 해당 트랜잭션 타입에 없는 필드는 개수가 0이므로 0을 기여합니다. 길이가 아닌 개수만으로 바닥 가격을 계산할 수 있습니다.
과금 방식: max(인트린식, 바닥)
검증 시 tx.gas >= max(intrinsic, tx_floor)를 요구하고 정산 시 tx.gasUsed = max(execution_gas_used, tx_floor)로 둡니다. EIP-7623이 도입한 max(intrinsic, floor) 구조를 그대로 유지합니다. 인트린식 가스 자체는 바꾸지 않습니다. EIP-2028의 표준 요율(0 바이트 4가스, 비0 바이트 16가스)은 EVM과 상태 작업의 비용이고 대역폭 방어를 위한 바닥 요율과는 목적이 다르기 때문입니다. 표준 요율을 올리면 비0 데이터가 있는 모든 트랜잭션의 비용이 오르지만 이 EIP가 노리는 대역폭 방어는 나아지지 않습니다.
왜 모든 필드에 같은 64가스인가
모든 콘텐츠 바이트를 같은 요율로 매기면 공격자가 어떤 필드, 어떤 바이트 값을 고르든 바닥에서 가스당 1/64 바이트라는 결과가 같아집니다. 최악의 경우가 B = block_gas_limit / 64로 수렴하고 이 상한은 네트워크 압축기나 공격 전략, 콘텐츠 구성과 무관하게 성립합니다. 60M 가스 한도 기준 블록당 공격자 제어 콘텐츠는 약 0.89MB입니다. content_bytes_per_tx × 64 ≤ tx_floor ≤ tx.gasUsed이므로 블록 전체로 합산하면 sum(content_bytes) ≤ block_gas_limit / 64가 산술만으로 증명됩니다. 봉투와 서명 같은 암묵적 바이트는 60M 기준 최대 약 372KB로 MAX_RLP_BLOCK_SIZE보다 훨씬 작습니다.
콘텐츠만 과금하고 봉투는 TX_BASE로 흡수
RLP 인코딩 전체(봉투, 서명 포함)에 과금하면 봉투가 더 작은 레거시 트랜잭션이 같은 내용의 EIP-1559 트랜잭션보다 무조건 싸집니다. 콘텐츠만 과금하면 타입 대칭이 됩니다. 같은 내용을 담은 두 트랜잭션은 타입과 무관하게 같은 바닥 가격을 냅니다. 봉투, 서명, 타입 접두사는 현재까지 정의된 모든 타입에서 합쳐도 최대 약 130바이트이고 64가스 요율로 약 8,300가스라서 TX_BASE = 21,000 안에 들어갑니다. 봉투를 따로 과금하면 모든 ETH 전송에 약 5,000가스가 더 붙는 퇴행이 생기므로 TX_BASE가 암묵적으로 커버하는 것으로 처리합니다.
승인 튜플은 상수 108바이트로 계산
AUTH_TUPLE_BYTES = 108은 EIP-7702 승인 튜플의 최대 RLP 크기입니다(리스트 헤더 2B + chain_id 9B + 주소 21B + 논스 9B + y_parity 1B + r 33B + s 33B). len(rlp_encode(auth)) 대신 상수를 쓰면 실제 인코딩 없이 개수만으로 바닥 가격을 계산할 수 있습니다. 대신 chain_id가 1이고 논스가 작은 전형적인 메인넷 승인은 약 1,024가스를 더 내게 됩니다.
메인넷 영향: 전체 바인드 비율 1.49%에서 3.28%로
2026년 5월 메인넷 블록 1,500개(441,271개 트랜잭션) 표본 기준으로, 바닥 가격이 실제 가스 사용량을 결정하는 트랜잭션(바인드)의 비율은 전체 1.49%에서 3.28%로 오르고 네트워크 총 가스는 3.56% 늘어납니다. 상승은 이 EIP가 겨냥한 곳에 집중됩니다. 타입 4(SetCode)는 승인당 108B × 64가스 = 6,912가스가 새로 붙어 바인드 비율이 0.04%에서 20.63%로 뜁니다. 타입 3(블롭 운반)은 이미 60.05%가 바닥에 걸려 있고 블롭 해시 과금으로 평균 바닥이 69k에서 84k로 오릅니다. 트래픽의 98.3%인 레거시·EIP-2930·EIP-1559는 바인드 비율 변화가 최대 약 1.7%p입니다. 68B 콜데이터에 약 50k 가스를 쓰는 전형적인 토큰 전송의 바닥은 25,352가스로 실제 사용량보다 낮아 영향이 없습니다.
상태와 포크 논의
이 EIP는 Draft 상태라서 수치와 설계가 아직 바뀔 수 있습니다. 코어 개발자 콜에서는 09.24 ACDE #246에서 EIP-8131과 이와 묶인 BAL 바이트 플로어 EIP를 헤고타(Hegota) 포크 포함 검토 대상(CFI)으로 올렸습니다. 포함 검토는 최종 확정이 아니라 다음 단계로 넘어갔다는 뜻입니다.