EIP-2780 자원 기반 트랜잭션 기본 가스 분해 (Resource-Based Intrinsic Transaction Gas)
포함 확정 (SFI) · 수수료·가스 · 원문 상태 Last Call · 2020-07-11 작성
모든 트랜잭션이 똑같이 내던 기본 가스 21,000을 실제 쓰는 자원별 항목으로 분해합니다. 기존 계정으로 보내는 ETH 전송은 21,000 그대로이고 새 계정을 만드는 트랜잭션은 상태 증가 비용을 추가로 냅니다.
왜 필요한가
지금은 모든 트랜잭션이 무엇을 하든 기본으로 똑같이 21,000 가스를 냅니다. 이미 있는 계정에 보내는 0원짜리 트랜잭션과 새 계정을 만들면서 돈을 보내는 트랜잭션이 같은 값을 냅니다. 후자는 계정을 하나 더 건드리고 잔액을 새로 쓰고 로그를 남기고 블록체인이 영구히 보관해야 하는 상태(state)를 늘리는데도 그렇습니다. 하나의 고정 상수가 가장 단순한 경로에는 비싸게, 실제로 오래가는 자원을 쓰는 경로에는 싸게 매겨져 있는 셈입니다. 이 제안은 그 상수를 서명 확인, 계정 접근, 잔액 기록, 새 계정 생성 같은 이름 붙은 항목으로 쪼개서 각 트랜잭션이 실제로 한 일만큼 내게 만듭니다. 비용을 가스 체계의 다른 곳에서 쓰는 것과 같은 단위로 매겨 두면, 나중에 개별 항목 가격이 바뀔 때 별도의 상수를 다시 계산하지 않아도 자동으로 반영되는 장점도 있습니다.
무엇이 바뀌나
지금
- 모든 트랜잭션이 내용과 관계없이 기본 21,000 가스를 냅니다
- 새 계정을 만들어 상태를 영구히 키우는 전송도 추가 비용이 없습니다
- EIP-7702 승인은 최악의 경우를 가정한 비용을 미리 받고 나중에 환불합니다
EIP-2780 이후
- 서명 확인, 계정 접근, 잔액 기록 등 항목별로 가격을 매깁니다. 기존 EOA로 보내는 ETH 전송은 21,000 그대로입니다
- 새 계정을 만드는 전송은 상태 가스 183,600을 추가로 냅니다
- 승인 비용은 실제 발생한 작업만큼만 실행 시점에 부과합니다
누구에게 영향이 있나
- 사용자: 기존 계정으로 보내는 ETH 전송은 21,000 그대로입니다. 자기 전송(12,000)과 0원 트랜잭션(15,000)은 싸지고 새 계정을 만드는 전송은 상태 가스 183,600을 추가로 냅니다.
- 지갑·앱 개발자: 고정 21,000을 가정한 가스 추정과 수수료 로직을 전부 갱신해야 합니다. 특히 새 계정을 만드는 트랜잭션의 상태 가스를 반영해야 합니다.
- 클라이언트 팀: 고유 가스와 런타임 가스의 2단계 과금, 사전 실행 단계, LIFO 상태 가스 환급을 구현해야 합니다.
- 검증자·블록 빌더: 유효성이 상태와 무관한 고유 가스만으로 결정되므로 트랜잭션을 실행해 보지 않고도 포함 여부를 판단할 수 있습니다.
심층 설명
새 상수와 참조 상수
이 EIP가 새로 정의하는 값은 둘입니다. TX_BASE_COST(12,000)는 발신자 비용으로 ECDSA 복구, 발신자 계정 접근과 쓰기, 트랜잭션 바이트의 블록 포함을 묶은 것이고 TX_VALUE_COST(6,000)는 수신자 잔액 쓰기와 EIP-7708 전송 로그를 묶은 것입니다. 나머지는 다른 EIP의 값을 참조합니다. EIP-8038에서 COLD_ACCOUNT_ACCESS(3,000), WARM_ACCESS(100), ACCOUNT_WRITE(9,000), CREATE_ACCESS(12,000)를, EIP-8037에서 EXECUTION_PER_AUTH_BASE_COST(7,816), 새 계정 리프의 상태 가스 STATE_BYTES_PER_NEW_ACCOUNT × CPSB(183,600), 23바이트 위임 표시의 상태 가스 STATE_BYTES_PER_AUTH_BASE × CPSB(35,190)를 가져옵니다. 두 상태 가스 곱은 CPSB가 바뀌면 함께 바뀝니다.
고유 가스 산정 규칙
tx.sender에는 TX_BASE_COST를 실행 가스로 부과합니다. tx.to는 유형별로 나뉩니다. 자기 전송(tx.sender == tx.to)이면 비용이 없고 None(컨트랙트 생성)이면 CREATE_ACCESS, 그 외에는 COLD_ACCOUNT_ACCESS를 부과합니다. tx.value는 0이거나 자기 전송이거나 컨트랙트 생성이면 비용이 없고(생성 트랜잭션의 수신자 잔액 쓰기는 CREATE_ACCESS에 이미 포함), 그 외에는 TX_VALUE_COST를 부과합니다. EIP-7702 승인(authorization) 1건마다 EXECUTION_PER_AUTH_BASE_COST(7,816)를 부과합니다. 수신자 접근과 승인 안의 권한자(authority) 접근은 액세스 리스트로 미리 데워져 있어도 무조건 콜드 요금으로 매깁니다. 상태를 읽지 않고도 고유 가스를 계산할 수 있게 하기 위해서입니다. 콜데이터와 액세스 리스트 과금은 바뀌지 않습니다.
런타임 가스와 사전 실행 단계
고유 가스 검사를 통과하면 첫 EVM 프레임에 들어가기 전의 사전 실행 단계에서 상태 의존 비용을 부과합니다. 먼저 EIP-8037에 따라 가스를 gas_left와 state_gas_reservoir로 나누고 카운터를 초기화합니다. 이어 EIP-7702 승인을 처리하고 수신자를 EIP-7928 블록 수준 액세스 리스트에 추가한 뒤 나머지 계정 생성·접근 비용을 적용합니다. 이 단계에서 가스가 모자라도 트랜잭션은 무효가 되지 않습니다. 블록에 포함되고 논스가 올라가고 소비한 가스를 지불하되, 위임을 포함한 사전 실행의 상태 변경은 전부 되돌립니다. 반면 첫 프레임에 들어간 뒤 가스가 모자라면 사전 실행에서 적용된 위임은 EIP-7702 규칙대로 유지되고 그 상태 가스도 소비된 채 남습니다. 컨트랙트 생성 트랜잭션의 initcode가 revert하거나 예외로 중단되면, 런타임에 부과된 상태 가스는 EIP-8037의 LIFO 순서로 환급됩니다. gas_left에서 끌어온 몫은 gas_left로, 나머지는 state_gas_reservoir로 돌아갑니다.
EIP-7702 승인 처리 비용
유효한 승인마다 권한자별로 최대 한 번씩 부과합니다. 권한자 계정이 없으면 새 계정 리프에 STATE_BYTES_PER_NEW_ACCOUNT × CPSB(183,600) 상태 가스를, 트랜잭션 안에서 그 권한자에 처음 쓰는 경우 ACCOUNT_WRITE(9,000) 실행 가스를 부과합니다. 단 권한자가 tx.sender이거나(TX_BASE_COST가 커버), 앞선 유효한 승인이 이미 썼거나, 값이 실린 트랜잭션의 tx.to이면(TX_VALUE_COST가 커버) 건너뜁니다. 0이 아닌 위임 대상을 설정하는데 트랜잭션 시작 시 위임 표시가 없었고 앞선 승인도 설정하지 않았다면 STATE_BYTES_PER_AUTH_BASE × CPSB(35,190) 상태 가스를 부과합니다. 표시를 지워도 환불되지 않고 시작 시 있던 표시는 지웠다 다시 설정해도 재부과되지 않습니다. 이 방식이 기존의 PER_EMPTY_ACCOUNT_COST 일괄 선부과와 환불을 대체합니다.
대표 사례별 비용
기존 EOA로 보내는 ETH 전송은 실행 가스 21,000으로 지금과 같습니다. 자기 전송은 12,000, 기존 EOA나 빈 계정에 보내는 0원 트랜잭션은 15,000입니다. 새 계정을 만드는 ETH 전송은 실행 가스 21,000에 상태 가스 183,600이 더해집니다. 컨트랙트 생성 트랜잭션은 값 유무와 관계없이 고유 가스 24,000이고 배포 주소가 없던 경우에만 상태 가스 183,600을 런타임에 냅니다. 7702 위임 계정으로 보내는 전송은 위임 대상 코드를 읽는 접근(콜드 3,000, 웜 100)이 런타임에 더해져 콜드 기준 24,000 + 실행이 됩니다. 가치가 서로 다른 콜드 계정으로 이동하는 모든 경로에서 분해된 비용의 합은 기존 21,000 이상이고 상태를 키우는 트랜잭션은 상태 가스를 더 내므로, 블록당 자원 소비를 늘리는 싼 경로는 생기지 않습니다.
측정 기반 가격 산정
가격은 EIP-8038과 같은 방법으로 측정한 클라이언트 실행 시간에서 도출했습니다. EEST의 test_ether_transfers_onchain_receivers 벤치마크로 수신자 유형(자기 자신, 기존 EOA, 공유·고유 코드 컨트랙트, 7702 위임 계정)과 값 유무를 바꿔 가며 블록을 만들고 Besu, Erigon, Ethrex, Geth, Nethermind, Reth 여섯 클라이언트에서 반복 실행했습니다. 블록 실행 시간을 비음수 최소제곱(NNLS) 회귀로 트랜잭션 1건의 시간으로 추정한 뒤 75 Mgas/s 기준으로 가스로 환산했습니다. 데이터는 2026년 9월 25일부터 10월 12일까지 수집했습니다. 그 결과 TX_BASE_COST 12,000과 TX_VALUE_COST 6,000이 선정돼 0원 전송 15,000, 값 전송 21,000이 나옵니다. 선정값은 모든 클라이언트·사례의 정확한 최댓값이 아니라 측정에 기반한 가격 목표입니다.
하위 호환성
이 EIP는 하위 호환되지 않습니다. 합의 수준의 가스 재조정이라 네트워크 업그레이드에서만 활성화할 수 있습니다. 고정 21,000 기본값을 가정한 지갑, RPC, 가스 추정기는 모두 갱신해야 하고 특히 새 계정을 만드는 트랜잭션에 붙는 상태 가스를 반영해야 합니다. EIP-7623의 콜데이터 비용 하한도 고정 21,000 대신 트랜잭션별로 분해된 기본값 위에 놓이도록 바뀝니다.
진행 상황과 콜 결정
원문 상태는 Last Call이고 마감은 2026-11-01입니다. 코어 개발자 콜 경과입니다. 07.02 ACDE #240에서 논의됐으나 결정은 없었습니다. 07.06 ACDT #86에서 프리즈 이후에는 EIP-8038·2780의 가스비 같은 파라미터 단독 변경만 허용하고 구조 변경은 막기로 확정했습니다. 상수 값은 손봐도 설계는 바꾸지 않는다는 뜻입니다. 07.27 ACDT #89에서 EIP-2780을 반대 없이 데브넷8에 포함하기로 했습니다(SFI). 08.13 ACDE #243에서 가스 재조정 수치가 최종 확정됐고 스펙 변경이 필요 없으며 글램스테르담의 200M 가스 한도가 확인됐습니다. 클라이언트가 코드를 바꾸지 않아도 된다는 뜻입니다.