EIP-7708 모든 ETH 전송에 로그 기록 (ETH Transfers Emit a Log)

콜 결정 없음 · EVM·실행 · 원문 상태 Last Call · 2024-05-17 작성

0이 아닌 모든 ETH 전송에 ERC-20 Transfer와 같은 형식의 로그를 프로토콜이 자동으로 발행해 스마트 컨트랙트 지갑의 ETH 이동까지 한 가지 방식으로 추적할 수 있게 합니다.

왜 필요한가

이더리움에서 자산 이동은 보통 로그(log)로 추적합니다. ERC-20 토큰은 전송할 때마다 Transfer 이벤트 로그를 남기므로 거래소나 지갑이 입출금을 쉽게 감지합니다. 그런데 정작 ETH 자체는 이런 로그가 없습니다. 일반 계정(EOA)이 보낸 ETH는 블록의 트랜잭션 목록에서 읽을 수 있지만 스마트 컨트랙트 지갑이 보낸 ETH는 어디에도 자동으로 기록되지 않습니다. 이 때문에 초기 거래소들이 스마트 컨트랙트 지갑에서 온 입금을 제대로 지원하지 못하거나 훨씬 늦게 처리하는 문제가 실제로 있었습니다. 이 EIP는 값을 옮기는 CALL이나 SELFDESTRUCT가 실행될 때마다 프로토콜이 로그를 자동으로 만들고 트랜잭션의 ETH 전송에도 같은 로그를 붙여 모든 ETH 이동을 하나의 메커니즘으로 추적할 수 있게 합니다.

무엇이 바뀌나

지금

EIP-7708 이후

누구에게 영향이 있나

심층 설명

로그가 발행되는 네 가지 지점

값이 0이 아닌 ETH 전송 네 가지에 LOG3과 동일한 로그가 발행됩니다. 첫째, 다른 계정으로 값을 보내는 트랜잭션입니다. 이 로그는 EVM 실행이 만드는 다른 모든 로그보다 앞에 놓입니다. 둘째, 다른 계정으로 값을 보내는 CALL로, 값 전송이 실행되는 시점에 발행됩니다. 셋째, 다른 계정을 수취인으로 하는 SELFDESTRUCT입니다. 넷째, 생성되는 계정으로 값을 보내는 CREATE와 CREATE2입니다. 테스트 케이스 목록에 따르면 값이 0인 전송, 리버트된 실행, 롤백된 내부 호출, 수수료 지급에는 로그가 발행되지 않으며 중첩 CALL의 Transfer 로그는 호출이 일어난 시간 순서대로 기록됩니다.

로그 형식은 ERC-20 Transfer와 동일

로그를 발행하는 address는 0xfffffffffffffffffffffffffffffffffffffffe(SYSTEM_ADDRESS)입니다. topics[0]은 keccak256('Transfer(address,address,uint256)') 값인 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef입니다. topics[1]은 from 주소, topics[2]는 to 주소이며 둘 다 앞을 0으로 채워 uint256 크기로 맞춥니다. data는 Wei 단위 금액을 빅엔디언 uint256으로 담습니다. 이 형식은 ERC-20 Transfer 이벤트 정의와 일치해 ERC-20 토큰 표준과 호환되지만 ABI 인코딩 같은 ERC-20 고유 기능을 명세에 끌어들이지는 않습니다. SYSTEM_ADDRESS를 발신자로 재사용한 것은 EIP-4788 같은 프로토콜 발 동작과의 일관성을 지키고 사용자 컨트랙트가 발행한 로그와 구분하기 위해서입니다.

수수료와 출금 로그를 뺀 이유

코인베이스에게 가는 우선 수수료(priority fee) 로그도 검토됐지만 제외됐습니다. 전송과는 다른 범주인 데다, 포함하면 로그 양이 폭증해 전송 로그의 고유 비용, 곧 트랜잭션 비용이 올라가고 네트워크에 과도한 부담을 주기 때문입니다. 클라이언트는 블록 헤더와 트랜잭션 영수증에서 이 금액을 이미 계산할 수 있습니다. 기본 수수료(base fee) 소각분도 같은 이유로 제외됐습니다. 소각 금액은 블록 헤더에서 이미 도출할 수 있습니다. 검증자 출금(withdrawal)도 검토됐지만 트랜잭션에 붙어 있지 않아 자연스러운 발행 지점이 없고 블록 정보에서 쉽게 도출할 수 있어 제외됐습니다. 통합된 뷰를 제공하려는 클라이언트는 집계용 RPC를 새로 노출할 수 있습니다(MAY).

SELFDESTRUCT 소각 엣지케이스는 명세하지 않음

EIP-8246 이후에는 자기 자신에게 SELFDESTRUCT를 실행하거나 selfdestruction으로 표시된 계정에 ETH를 보내는 방법으로 ETH를 소각할 수 없습니다. 따라서 이 EIP는 해당 엣지케이스를 명세하지 않습니다. 로그 발행 조건도 트랜잭션, CALL, SELFDESTRUCT 모두 '다른 계정으로' 보내는 전송으로 한정되어 있습니다.

가장 단순한 구현과 가스 비용

이 설계는 모든 ETH 전송이 어떤 형태로든 기록에 남고 그 기록을 노드 RPC 호출이나 블록 루트에 해시되는 머클 분기 요청으로 쉽게 접근할 수 있게 하는 가장 단순한 구현입니다. 보안 측면에서 ETH 전송은 이미 최소 6700가스가 들며 이는 LOG3 명령어 비용(1500가스)보다 훨씬 비쌉니다. 따라서 한 블록에 들어갈 수 있는 로그 수의 최악 사례는 이 EIP로 늘어나지 않습니다. 평균 로그 수는 어느 정도 늘어납니다.

진행 상태와 테스트

원문 상태는 라스트 콜(Last Call)이며 마감 기한은 2026-11-01입니다. 테스트 케이스는 실행 계층 명세 테스트 모음의 eip7708_eth_transfer_logs에 마련되어 있고 저장소 경로상 amsterdam 테스트 디렉터리에 들어 있습니다. 테스트는 트랜잭션 유형별 발행, CALL 계열의 발신자 귀속, CREATE 초기코드와 실패 모드, 포크 전환 경계 동작까지 다룹니다. 콜 기록으로는 08.29 AMA #14에서 논의됐고 결정은 없었습니다.

EIP 원문 · ← EIPs