EIP-8372 정규화 상태 가스 한도 (Normalized state gas limit)
포함 제안 (PFI) · 수수료·가스 · 원문 상태 Draft · 2026-08-06 작성
EIP-8037의 상태 가스에 블록 한도와 다른 별도 한도를 주고 사용량을 정규화해 블록 가스 사용량을 계산합니다. 포크 시점에 상태 바이트 가격(CPSB)과 한도 비율을 수요 추정에 맞춰 한 번 보정합니다.
왜 필요한가
EIP-8037은 계약 배포나 저장처럼 블록체인에 영구 데이터를 남기는 작업에 상태 가스(state gas)라는 별도 계정을 두되, 실행 가스와 같은 블록 한도를 쓰고 둘 중 큰 쪽을 블록의 가스 사용량으로 삼습니다. 이때 상태 1바이트의 가격인 CPSB(cost per state byte)가 목표치인 50% 사용률에 해당하는 상태량을 정합니다. 그런데 사용자들이 가스 예산의 절반을 꼭 상태 생성에 쓰리라는 보장이 없습니다. 수요가 예상보다 낮으면 의도한 것보다 상태가 적게 만들어지고, 수요가 예상보다 높으면 상태 가스가 병목이 되어 실행 가스 소비까지 눌립니다. 이 제안은 가격과 한도를 수요에 따라 계속 조정하는 장기 방향(EIP-7999) 대신, 하드포크 시점에 한 번만 보정하는 단순한 방식을 택합니다.
무엇이 바뀌나
지금
- 실행 가스와 상태 가스가 같은 블록 한도를 쓰고, 둘 중 큰 누적값이 블록 gas_used가 됩니다
- 상태 수요가 예상보다 낮으면 목표보다 적은 상태가 만들어집니다
- 상태 수요가 예상보다 높으면 상태 가스가 병목이 되어 실행 가스가 덜 쓰입니다
EIP-8372 이후
- 상태 가스에 블록 가스 한도의 일정 비율(STATE_GAS_LIMIT_SCALE%)로 정한 별도의 원시 한도가 생깁니다
- 상태 가스 사용량을 정규화한 값과 실행 가스 중 큰 쪽이 블록 gas_used가 됩니다
- 포크 시점에 CPSB와 한도 비율을 수요 추정에 맞춰 함께 보정하고 활성화 후에는 고정됩니다
누구에게 영향이 있나
- 클라이언트 팀: 블록 검증에 상태 가스 한도 검사와 정규화된 gas_used 계산을 구현해야 합니다. 합의에 영향을 주는 변경이라 예정된 네트워크 업그레이드가 필요합니다.
- 블록 빌더: 트랜잭션을 담을 때 새 CPSB와 원시 상태 가스 한도를 기준으로 남은 상태 가스를 계산해야 합니다.
- 지갑·앱 개발자: 가스 추정 도구가 새 CPSB와 정규화된 블록 단위 계산을 반영해야 수수료 예측이 맞습니다.
- 사용자: 상태를 만드는 작업의 바이트당 가격이 수요 추정에 맞게 조정되어, 상태 생성과 일반 실행이 서로를 덜 밀어내게 됩니다.
심층 설명
EIP-8037의 두 가지 실패 모드
EIP-8037은 실행 가스와 상태 가스에 같은 블록 한도를 주고 둘 중 큰 누적값을 블록 gas_used로 씁니다. 따라서 CPSB가 50% 상태 가스 목표에 해당하는 상태 바이트 수를 결정합니다. 선택된 CPSB에서 상태 수요는 두 자원이 공통 50% 목표에 함께 접근하는 수준보다 낮을 수도, 높을 수도 있습니다. 상대적으로 낮으면 의도보다 상태가 적게 생성되고 상대적으로 높으면 상태 가스가 병목이 되어 실행 가스 소비가 억제됩니다. 두 가스가 하나의 공통 기본 수수료(base fee)를 쓰기 때문에 가격과 수요의 불일치는 상태 성장량만이 아니라 어느 차원이 공통 목표에 먼저 닿는지, 다른 차원이 저활용되는지까지 좌우합니다.
파라미터
EIP-8037의 파라미터 표를 갱신합니다. CPSB는 TBD, STATE_GAS_LIMIT_SCALE은 TBD, STATE_GAS_LIMIT_SCALE_DENOMINATOR는 100입니다. CPSB와 STATE_GAS_LIMIT_SCALE은 양의 정수여야 하고 STATE_GAS_LIMIT_SCALE은 원시 상태 가스 한도를 블록 가스 한도의 백분율로 지정합니다. 분모 100은 1퍼센트포인트 단위의 보정 단계를 주는데, 수요 추정의 불확실성을 고려하면 충분히 세밀한 단위입니다.
트랜잭션 검증 변경
EIP-8037의 state_gas_available 정의가 갱신됩니다. state_gas_limit = block_env.block_gas_limit * STATE_GAS_LIMIT_SCALE // STATE_GAS_LIMIT_SCALE_DENOMINATOR로 원시 상태 가스 한도를 구하고 state_gas_available = state_gas_limit - block_output.block_state_gas_used로 남은 상태 가스를 계산합니다. 상태 가스 한도가 블록 가스 한도와 같다는 전제가 사라지고 블록 가스 한도의 비율로 정해진 별도 한도가 기준이 됩니다.
블록 단위 가스 계산과 정규화
블록 단위 gas_used 계산이 바뀝니다. normalized_block_state_gas_used = (block_output.block_state_gas_used * STATE_GAS_LIMIT_SCALE_DENOMINATOR) // STATE_GAS_LIMIT_SCALE로 원시 상태 가스 사용량을 정규화한 뒤, gas_used = max(block_output.block_execution_gas_used, normalized_block_state_gas_used)로 정합니다. 블록 유효성 조건은 두 가지입니다. 원시 상태 가스 사용량이 state_gas_limit 이하여야 하고 gas_used가 블록 가스 한도 이하여야 합니다. block_state_gas_used 카운터는 계속 원시 상태 가스 단위로 집계되며 새 블록 헤더 필드나 트랜잭션 필드는 도입되지 않습니다.
보정 방법론
활성화 시점에 한 번 최선의 보정을 합니다. 먼저 target_state_growth_per_year와 expected_block_gas_limit를 정한 뒤 baseline_cpsb = expected_block_gas_limit * blocks_per_year // (2 * target_state_growth_per_year)를 도출합니다. blocks_per_year와 baseline_cpsb는 합의 파라미터가 아니라 분석용 값입니다. baseline_cpsb에서의 기대 수요를 목표와 비교해 세 가지 보정 중 하나를 고릅니다. 수요가 목표와 맞으면 스케일링이 필요 없고 낮으면 CPSB와 원시 상태 가스 한도를 함께 줄이고 높으면 함께 키웁니다. 실제 CPSB는 관찰된 수요 탄력성으로 기대 상태 성장이 목표에 가깝도록 고르고 STATE_GAS_LIMIT_SCALE = CPSB * STATE_GAS_LIMIT_SCALE_DENOMINATOR // baseline_cpsb로 한도 비율을 맞춥니다. CPSB와 원시 한도를 비례해 바꾸면 목표 상태 바이트 수에 배정되는 정규화된 상태 가스가 보존되므로, 블록 공간 배분은 그대로 두고 가격만 수요에 맞게 조정하는 효과가 납니다. 이는 가격과 한도를 수요에 따라 동적으로 조정하는 EIP-8075의 수동적이고 일회성인 유사물로 볼 수 있습니다.
호환성과 보안 고려사항
합의에 중요한 블록 검증 규칙을 바꾸므로 예정된 네트워크 업그레이드가 필요합니다. 활성화 후 새 규칙을 구현하지 않은 클라이언트는 트랜잭션 포함 여부, 블록 유효성, 헤더의 gas_used 값에서 다른 결론을 낼 수 있습니다. 활성화 이전 블록, 트랜잭션 형식, EIP-8037의 저수지(reservoir) 모델, 트랜잭션 단위 가스 계산, 영수증 의미는 바뀌지 않습니다. 가장 큰 위험은 파라미터 오보정입니다. 보정이 틀리면 한쪽 실패 모드에서 다른 쪽 실패 모드로 옮겨갈 수 있고 이후 하드포크 없이는 고칠 수 없으므로 선택된 파라미터는 그럴듯한 수요 탄력성 범위에서 스트레스 테스트해야 합니다. 다만 원시 한도와 CPSB가 비례해 움직이므로 최대 상태 바이트 용량은 정수 반올림 수준에서 보정 방식과 무관하게 거의 일정합니다.
진행 상태와 포크 논의
이 EIP는 Draft 상태라 내용이 아직 바뀔 수 있고 핵심 상수인 CPSB와 STATE_GAS_LIMIT_SCALE도 TBD입니다. 코어 개발자 콜에서는 2026년 8월 13일 ACDE #243에서 헤고타(Hegota) 후보로 접수됐습니다. 글램스테르담 이후 상태 생성 수요에 맞춰 포크 시점에 한 번 가격을 보정하자는 취지입니다. 9월 10일 ACDE #245에서는 DFI하지 않고 넓은 지지를 받는 EIP-8368(CPSB 재조정)과 함께 결정하기로 했으며 글램스테르담 배포 후 수요 반응을 관찰해 판단할 수 있다고 정리했습니다. 9월 24일 ACDE #246에서는 메인넷 글램스테르담 데이터가 포크 후 30일 이상 쌓일 때까지 EIP-8368과 함께 PFI로 남기기로 했습니다. 실측 데이터 없이는 결정하지 않겠다는 뜻입니다.