EIP-3651 웜 상태로 시작하는 COINBASE (Warm COINBASE)

최종 확정 · 수수료·가스 · 원문 상태 Final · 2021-07-12 작성

블록 제안자의 보상 주소인 COINBASE를 트랜잭션 시작 시점부터 웜(warm) 상태로 두어 이 주소에 접근할 때 드는 가스비를 실제 비용에 맞게 낮춥니다.

왜 필요한가

블록을 만드는 제안자의 보상 주소인 COINBASE로 ETH를 직접 보내는 지불 방식이 점점 늘고 있습니다. 조건이 맞을 때만 지불하는 조건부 지불이 가능하고 실패해서 되돌려질(revert) 트랜잭션이면 지불도 자동으로 취소되는 장점이 있기 때문입니다. 그런데 EIP-2929가 도입한 접근 목록(access list) 체계에서 COINBASE 주소는 트랜잭션 시작 시점에 콜드(cold, 아직 읽지 않은 상태)로 분류되어 첫 접근에 비싼 가스비를 내야 합니다. 노드는 어차피 이 주소를 항상 읽어야 하므로, 실제 비용보다 비싸게 매겨진 셈입니다. 이 가격 불일치가 이어지면 ETH 대신 ERC-20 토큰 같은 다른 수단으로 지불할 유인이 생기는데, 이더리움에서 트랜잭션 비용을 내는 기본 수단은 ETH여야 한다는 것이 이 제안의 문제의식입니다.

무엇이 바뀌나

지금

EIP-3651 이후

누구에게 영향이 있나

심층 설명

명세: accessed_addresses에 COINBASE 추가

트랜잭션 실행이 시작될 때 accessed_addresses가 COINBASE 명령어(0x41)가 반환하는 주소도 포함하도록 초기화됩니다. EIP-2929 체계에서 이 집합에 든 주소는 웜으로 취급되어 이후 접근에 웜 비용이 적용됩니다. 명세 변경은 이 한 줄이 전부인 작은 EIP입니다.

근거: 어차피 항상 로드되는 주소

처음부터 웜으로 초기화되는 주소들은 트랜잭션 검증 시작 시점에 이미 로드되어 있어야 하는 주소들입니다. ORIGIN 주소는 잔액을 가스 한도와 가스 가격에 견주어 확인하려고 항상 로드되고 tx.to 주소는 실행을 시작하려고 항상 로드됩니다. COINBASE 주소 역시 블록 보상과 트랜잭션 수수료를 받는 주소이므로 항상 로드되어야 합니다. 따라서 웜으로 두는 것이 실제 읽기 비용과 맞습니다.

동기: 코인베이스 직접 지불과 가격 불일치

COINBASE로 직접 지불하면 조건부 지불이 가능해지고 되돌려질 트랜잭션의 지불이 암묵적으로 취소되는 이점이 있어 사용이 늘고 있습니다. 그러나 EIP-2929의 접근 목록 체계에서 COINBASE는 콜드로 시작하므로 접근 가격이 과대 책정되어 있습니다. 원문은 이 불일치가 ETH 대신 ERC-20 같은 대체 지불 수단을 쓸 유인이 될 수 있으며 이더리움에서 트랜잭션 지불의 기본 수단은 ETH여야 한다고 밝힙니다.

호환성과 보안

원문은 이 변경으로 생기는 알려진 하위 호환성 문제가 없고 알려진 보안 고려 사항도 없다고 밝힙니다.

상태와 선행 조건

이 EIP의 상태는 Final로, 내용이 확정되었습니다. EIP-2929를 선행 조건(requires)으로 두며 콜드·웜 접근 비용 체계 위에서 동작합니다.

EIP 원문 · ← EIPs