EIP-8358 계정 변경 순 가스 계량 (Net Gas Metering for Account Changes)

Hegota 포함 제외 (DFI) · 수수료·가스 · 원문 상태 Draft · 2026-07-26 작성

한 트랜잭션 안에서 이더를 보낼 때, 계정마다 처음 바뀔 때만 요금을 물리고 이미 바뀐 계정은 싸게, 원래 잔액으로 돌아온 계정에는 가스를 환급해 주도록 전송 비용 규칙을 바꿉니다.

왜 필요한가

지금은 이더(ETH)를 보내는 호출(CALL)마다 사실상 9000 가스의 고정 요금이 붙습니다. 이 요금의 근거는 블록이 끝날 때 계정 상태를 기록하는 비용인데, 이 기록은 잔액이 바뀐 계정마다 한 번만 일어나지 전송 횟수만큼 일어나지 않습니다. 그래서 한 트랜잭션 안에서 같은 계정들 사이로 이더가 여러 번 오가면, 실제로는 일어나지 않을 상태 기록 비용을 반복해서 내게 됩니다. 컨트랙트 저장소(스토리지)는 EIP-2200 이후 처음 바꿀 때만 비싸고 원래 값으로 되돌리면 환급받는 순 계량(net metering)이 적용돼 있는데, 정작 이더 잔액에는 이런 규칙이 없습니다. 이더는 반복 이동이 매번 독립적인 상태 기록처럼 과금되는 유일한 자산인 셈입니다. 이 비용은 받은 이더를 그대로 넘기는 중계·라우터 컨트랙트, 초과분을 돌려주는 환불 패턴, 여러 명에게 나눠 보내는 배치 전송처럼 흔한 조합 패턴에 불리하게 작용합니다.

무엇이 바뀌나

지금

EIP-8358 이후

누구에게 영향이 있나

심층 설명

전송 비용의 계정 단위 분해

현행 CALL_VALUE는 EIP-8038 기준 ACCOUNT_WRITE + CALL_STIPEND = 11300이고, 미사용 스티펜드 2300이 돌아오면 실효 9000입니다. 이 EIP는 이를 CALL_VALUE_BASE_GAS = 4000과 계정당 CLEAN_BALANCE_CHANGE_GAS = (ACCOUNT_WRITE - CALL_VALUE_BASE_GAS) / 2 = 2500으로 분해합니다. 기본 4000은 스티펜드와 EIP-7708 전송 로그의 합산 비용 4056에 근접한 값입니다. CALL_VALUE_BASE_GAS + 2 × CLEAN_BALANCE_CHANGE_GAS = ACCOUNT_WRITE이므로 클린 계정 두 개를 바꾸는 호출은 지금과 같은 9000을 소모하고 두 계정이 모두 더티면 4000만 듭니다. 자기 자신에게 보내는 전송과 값이 있는 CALLCODE는 잔액을 바꾸지 않아 기본 4000만 냅니다. EIP-2929 계정 접근 비용, 메모리 확장 비용, 기본 호출 비용, EIP-8037 신규 계정 비용은 그대로입니다.

클린·더티 판정과 기준선

원래 잔액과 원래 논스는 트랜잭션 시작 시점 값에 보내는 사람의 가스 선차감과 논스 증가, 그리고 트랜잭션 레벨 값 전송을 반영한 값입니다. EIP-7702 권한(authorization)에 의한 변경은 포함하지 않습니다. 현재 잔액과 논스가 둘 다 원래 값과 같으면 클린, 하나라도 다르면 더티입니다. 기준선에 트랜잭션 레벨 전송을 포함하는 이유는, 그렇지 않으면 보낸 사람과 받는 사람이 이 EIP의 클린 요금을 낸 적 없이 더티로 보이거나, 기준선으로 되돌아가며 선행 과금 없는 환급을 받을 수 있기 때문입니다. 반대로 권한 처리를 제외하는 이유는 권한으로 늘어난 논스가 이후 호출에 더티 상태로 계속 보이게 하기 위해서입니다.

잔액 변경 과금과 환급 규칙

잔액이 실제로 바뀌는 계정에 대해, 클린이면 CLEAN_BALANCE_CHANGE_GAS(2500)를 물리고 더티면 아무것도 물리지 않습니다. 더티 계정의 새 잔액이 원래 잔액과 같아지고 현재 논스도 원래 값이면 BALANCE_RESET_REFUND(2500)를 환급 카운터에 더합니다. 이 카운터는 SSTORE 환급이 쓰는 트랜잭션 단위 카운터와 같아서 호출 프레임이 리버트되면 함께 되돌아갑니다. 트랜잭션 말미의 총 환급은 EIP-3529의 상한을 받습니다. 더티 판정에 논스를 넣은 이유는 계정 리프에 잔액과 논스가 함께 들어 있기 때문입니다. CREATE나 EIP-7702 권한은 잔액을 안 바꾸고 논스만 올릴 수 있는데, 이때 잔액이 원래대로 돌아와도 리프는 기록해야 하므로 환급을 막아야 합니다. 모든 환급은 같은 계정에 먼저 물린 동일 액수 이상의 요금이 선행하므로 과잉 환급이 생기지 않습니다.

스티펜드를 가산에서 최소 보장선으로 전환

지금은 값이 있는 호출에 스티펜드 2300이 호출자가 준 가스에 더해집니다. 이 EIP에서는 63/64 규칙 적용 후의 가스 한도가 CALL_STIPEND 이상이면 그대로 진행하고 그보다 낮으면 호출받는 쪽의 가스 한도를 2300으로 올립니다. 올려 준 가스는 기본 요금이 선지불한 것이라 돌려받지 못하며 성공·리버트 시 호출자는 min(callee_gas_remaining, 원래 가스 한도)만 돌려받습니다. 잔액 부족이나 깊이 제한으로 하위 프레임에 들어가기 전에 실패하면 원래 가스 한도를 돌려받습니다. 가산 방식을 유지하면 반복 전송의 비용이 최저 1700까지 떨어질 수 있어 이를 막은 것입니다. 호환성 영향으로, 명시적 가스 한도를 준 호출은 이전보다 최대 2300 가스를 덜 받아 기존에 성공하던 실행이 실패할 수 있고 값 전송 전후로 gasleft()를 읽는 컨트랙트는 다른 값을 관찰할 수 있습니다. Solidity의 transfer·send처럼 가스를 넘기지 않는 패턴의 2300 보장은 그대로 유지됩니다.

EIP-7702 권한과 다른 계정 변경 연산과의 상호작용

유효한 EIP-7702 권한 적용은 권한자의 논스를 올리고 코드를 설정합니다. 원래 값이 권한 처리를 제외하므로, 권한이 적용된 계정은 이후 호출에서 더티이고 트랜잭션 안에서 논스가 원래 값으로 돌아갈 수 없어 환급도 받을 수 없습니다. 권한 자체의 과금은 EIP-2780의 첫 기록 ACCOUNT_WRITE 규칙 그대로입니다. 더티 여부는 수단과 무관하게 잔액·논스 비교만으로 정해지므로, CREATE·CREATE2의 값 지급, SELFDESTRUCT의 잔액 이동, 논스 변경도 해당 계정을 더티로 만듭니다. 다만 CREATE, CREATE2, SELFDESTRUCT 자체의 가스 비용은 변경을 최소화하기 위해 그대로 둡니다. DELEGATECALL과 STATICCALL은 값을 옮기지 않아 영향이 없습니다.

보안: 스티펜드 증폭과 전송 로그 폭증 방지

호출자가 준 가스를 넘어서는 가스는 가스 한도가 2300 미만일 때만 생기고 2300으로 한정되며 기본 요금이 선지불하고 반환되지 않습니다. 가장 싼 값 전송도 CALL_VALUE_BASE_GAS = 4000 > 2300이므로, 바닥 가스로 도는 피호출자가 또 다른 값 전송을 재귀적으로 일으키는 자가 증식 사슬은 불가능하고 가스 한도 G인 트랜잭션은 G를 넘는 실행을 유발할 수 없습니다. 미래의 비용 변경도 CALL_VALUE_BASE_GAS > CALL_STIPEND를 유지해야 합니다. EIP-7708 전송 로그에 대해서도, 로그를 내는 가장 싼 전송이 4000을 내는데 이는 32바이트 데이터의 LOG3 비용 1756보다 비쌉니다. 모든 환급은 같은 계정에 선행 과금이 있으므로 로그당 비용이 이 바닥 아래로 내려가지 않고 블록당 최악의 로그 볼륨은 여전히 LOG 명령어 자체가 좌우합니다.

가스 추정과 경제적 효과

합의와 무관한 효과가 두 가지 있습니다. 첫째, 한 트랜잭션 안의 반복 입출금에 값 전송 비용을 암묵적 속도 제한으로 쓰던 컨트랙트는 반복이 싸진 환경을 맞게 됩니다. 둘째, EIP-2929의 웜·콜드 접근처럼 가스 추정이 순서 의존적이 됩니다. 값 전송의 비용이 트랜잭션 안의 앞선 계정 변경에 달려 있으므로 지갑과 RPC 제공자는 트랜잭션의 실제 시작 상태를 기준으로 추정해야 합니다. 트랜잭션 레벨 값 전송의 가격은 EIP-2780의 TX_VALUE_COST가 다루고 이 EIP는 실행 중 전송에만 순 계량을 확장합니다.

진행 상태와 포크 결정

이 EIP는 Draft 상태라 명세의 수치와 규칙이 아직 바뀔 수 있습니다. 코어 개발자 콜에서는 08.13 ACDE #243에서 헤고타(Hegota) 후보로 접수(PFI)됐으나, 09.10 ACDE #245에서 낮은 평점을 이유로 EIP-8188, EIP-8115와 함께 헤고타에서 제외(DFI)됐습니다.

EIP 원문 · ← EIPs