EIP-7609 TLOAD/TSTORE 기본 비용 인하 (Decrease base cost of TLOAD/TSTORE)

포함 제외 (DFI) · 수수료·가스 · 원문 상태 Stagnant · 2024-02-01 작성

임시 저장소 명령어 TLOAD/TSTORE의 기본 가스 비용을 낮추는 대신, 슬롯을 많이 쓸수록 추가 비용이 붙는 초선형 가격 모델을 도입해 흔한 사용은 싸게, 남용은 비싸게 만듭니다.

왜 필요한가

EIP-1153이 도입한 임시 저장소(transient storage)는 트랜잭션이 끝나면 지워지는 저장 공간입니다. 처음 설계할 때는 제안을 단순하게 유지하고 서비스 거부 공격(DoS) 우려를 막으려고 일반 저장소의 웜(warm) 접근과 같은 가격을 매겼습니다. 그런데 임시 저장소는 가스 환불 계산과 얽히지 않고 실제 데이터베이스를 건드리지 않으며 메모리와 달리 호출마다 새로 할당할 필요도 없습니다. 지금 가격이 실제 비용보다 근본적으로 비싸다는 뜻입니다. 특히 임시 저장소의 첫 몇 슬롯이 충분히 싸지면 스마트컨트랙트 취약점 중 가장 크고 피해가 큰 유형인 재진입 공격(reentrancy) 방어를 프로그래밍 언어 차원에서 기본으로 켤 수 있는데, 지금 가격은 그러기에 부담이 큽니다. 이 EIP는 할당량에 비례해 추가 가스를 물리는 방식으로 바꿔 컨트랙트당 약 95슬롯 미만을 쓰는 흔한 경우는 지금보다 싸게 만들고 임시 저장소를 이용한 DoS는 감당하기 어렵게 비싸게 만듭니다.

무엇이 바뀌나

지금

EIP-7609 이후

누구에게 영향이 있나

심층 설명

가스 명세: G_LOW 5, G_MID 8, SLOPE 1

TLOAD의 가스 비용은 5가스(G_LOW)로 고정합니다. TSTORE는 8가스(G_MID)에 expansion_cost를 더한 값입니다. expansion_cost는 키가 임시 저장소 매핑에 아직 없을 때 1가스(SLOPE) x len(transient storage mapping)으로 계산하고 이미 있는 키면 0가스입니다. 즉 새 슬롯을 할당할 때마다 현재까지 할당된 슬롯 수에 비례한 추가 비용이 붙어 총비용이 슬롯 수의 제곱에 비례해 늘어나는 초선형(superlinear) 구조가 됩니다.

벤치마크 근거

벤치마킹에서 TLOAD는 MUL 명령어와 비슷한 CPU 시간을, TSTORE는 그 약 1.5배를 쓰는 것으로 측정됐습니다. 이 결과에 맞춰 TLOAD에 G_low, TSTORE에 G_mid 값을 골랐습니다. 현행 가격이 웜 스토리지 접근과 같게 책정된 것과 달리, 실제 연산 비용에 가깝게 맞춘 것입니다.

왜 임시 저장소가 과대책정인가

EIP-1153 개발 당시 가격을 웜 스토리지 로드·스토어와 같게 둔 이유는 제안의 개념적 단순함, 그리고 임시 저장소를 과도하게 할당하거나 리버트 시 상태를 되돌리는 비용에 대한 DoS 우려 두 가지였습니다. 그러나 임시 저장소는 가스 환불과 상호작용하지 않고 물리 데이터베이스와도 상호작용하지 않으며 호출마다 새로 할당해야 하는 메모리와 달리 컨트랙트 로드 시 한 번만 할당하면 됩니다. 이 EIP의 모델은 컨트랙트당 약 95슬롯 미만을 쓰는 흔한 경우에 현행보다 싸면서도 임시 저장소를 이용한 DoS를 감당하기 어렵게 비싸게 만듭니다.

DoS 한도 분석

30m 가스 기준으로 단일 컨트랙트가 할당할 수 있는 임시 슬롯은 약 7,739개(x(x-1)/2*1 + 8*x = 30_000_000의 해)로 총 248KB입니다. TSTORE 비용이 콜드 컨트랙트 호출 비용(2600가스)을 넘는 시점마다 새 컨트랙트를 호출하는 전략을 쓰면 컨트랙트당 2600슬롯, 트랜잭션당 약 8.8회 호출로 최대 약 23,000슬롯, 총 736KB까지 할당할 수 있습니다. 현행 가스 체계가 메모리로 약 9.6MB(30_000_000 / 100 * 32)를 할당할 수 있게 하는 것과 비교하면 오히려 총량이 줄어 이 EIP가 임시 저장소 자원 사용에 더 강한 상한을 겁니다. 참고로 SSTORE로 한 트랜잭션에서 할당 가능한 메모리는 48KB(30_000_000 / 20_000 * 32)입니다. 이 상한은 가스 한도에 선형으로 비례해 앞으로 블록 가스 한도가 오를 때도 유용한 성질입니다.

호환성과 선행 요건

하위 호환성 문제는 발견되지 않았습니다. 이 제안은 임시 저장소 자체를 도입한 EIP-1153을 선행 요건(requires)으로 둡니다. 기존에 배포된 컨트랙트의 동작 의미는 바뀌지 않고 가스 비용 계산만 달라집니다.

현재 상태: Stagnant, 헤고타 후보 탈락

원문 상태는 Stagnant(진행 정체)로, 작성자 활동이 멈춘 제안입니다. 코어 개발자 콜에서도 2026년 8월 13일 ACDE #243에서 EIP-7609는 후보로 접수되지 않았고 챔피언(champion, 제안을 책임지고 밀어붙이는 담당자)이 콜에 없어 nixo가 제안자에게 연락하고 안 되면 PR을 닫기로 했습니다. 이어 8월 27일 ACDE #244에서 콜에서 대변할 챔피언이 없다는 이유로 헤고타 포크 후보에서 빠졌습니다. 아무도 나서지 않은 제안은 검토 대상에서 떨어진다는 뜻으로, 현재로서는 포크 포함 일정이 없습니다.

EIP 원문 · ← EIPs