EIP-7587 RIP용 프리컴파일 주소 예약 (Reserve Precompile Address Range for RIPs)
최종 확정 · EVM·실행 · 원문 상태 Final · 2023-12-21 작성
L2의 롤업 개선 제안(RIP)이 쓸 프리컴파일 주소 구간(0x0100~0x01ff)을 미리 떼어 두어 EIP가 정하는 프리컴파일과 주소가 겹치지 않게 합니다.
왜 필요한가
이더리움에는 프리컴파일(precompile)이라는 특수 계약이 있습니다. 자주 쓰이는 복잡한 연산을 정해진 주소에 내장해 빠르고 싸게 처리하는 기능입니다. 지금까지 프리컴파일 주소는 이더리움 본체(L1)의 개선 제안 절차인 EIP로만 정해 왔습니다. 그런데 이더리움 위에서 돌아가는 2층 네트워크(L2, 레이어 2)들이 롤업 개선 제안(RIP, Rollup Improvement Proposal)이라는 별도 절차로 자기들만의 프리컴파일을 배포하기 시작했습니다. 두 절차가 같은 주소를 서로 다른 기능에 배정하면 충돌이 생깁니다. 그래서 RIP가 쓸 주소 구간을 미리 예약해 충돌 가능성을 없앨 필요가 생겼습니다.
무엇이 바뀌나
지금
- 프리컴파일 주소는 EIP 절차로만 정해지고 RIP용으로 떼어 둔 구간이 없습니다
- L2가 RIP로 프리컴파일을 추가하면 나중에 EIP가 같은 주소를 다른 기능에 쓸 위험이 있습니다
- RIP 프리컴파일 목록을 누가 관리할지 정해져 있지 않습니다
EIP-7587 이후
- 0x0100부터 0x01ff까지의 주소 구간이 RIP 프로세스 전용으로 예약됩니다
- RIP 프로세스가 이 구간 안에서 자체 프리컴파일 목록을 관리합니다
- EIP 프로세스는 자기 몫의 255개 주소를 충돌 걱정 없이 계속 씁니다
누구에게 영향이 있나
- L2(롤업) 팀: 예약된 구간 안에서 RIP 프리컴파일 주소를 배정할 수 있어 L1 쪽 변경과 충돌할 걱정이 없어집니다.
- EIP 저자·클라이언트 팀: 0x0100~0x01ff 구간을 새 EIP 프리컴파일에 쓰지 않으면 되고 RIP 프리컴파일 목록을 관리할 부담도 지지 않습니다.
- 지갑·앱 개발자: 같은 주소가 L1과 L2에서 서로 다른 기능을 뜻하는 상황을 피할 수 있어 여러 체인을 지원하는 코드가 단순해집니다.
- 일반 사용자: 직접 체감하는 변화는 없지만 주소 충돌로 생길 수 있는 사고를 미리 막는 안전장치입니다.
심층 설명
예약 구간 명세
주소 `0x0000000000000000000000000000000000000100`부터 `0x00000000000000000000000000000000000001ff`까지의 구간을 RIP 프로세스용으로 예약합니다. 이 구간에 속하는 주소는 256개입니다. 기존 L1 프리컴파일이 쓰는 낮은 주소 구간(0x01 이후)과 겹치지 않는, 바로 위의 연속 구간입니다. 명세 자체는 이 한 문장이 전부이며 특정 프리컴파일의 동작을 정의하지는 않습니다.
배경: L2의 RIP 배포 시작
L2들이 RIP를 실제로 배포하기 시작하면서 RIP가 쓰는 프리컴파일 주소와 EIP가 쓰는 프리컴파일 주소 사이에 충돌이 없도록 보장할 필요가 생겼습니다. 이 EIP는 그 보장을 위해 RIP 프로세스가 쓸 주소 범위를 예약하는 것이 목적입니다.
설계 의도: 레지스트리 분리
범위를 예약하면 RIP 프로세스가 자체 프리컴파일 레지스트리를 유지할 수 있습니다. 이 레지스트리의 프리컴파일들은 L1 메인넷에 반드시 배포되는 것은 아닙니다. 한편 EIP 프로세스는 RIP 프리컴파일 레지스트리를 관리할 의무에서 벗어나면서도 자기 용도로 쓸 255개 주소를 그대로 확보합니다. 즉 두 절차가 서로의 주소 배정을 조회하거나 조정하지 않아도 되는 구조를 만듭니다.
메타 EIP, 호환성과 보안
이 제안은 타입이 Meta인 EIP로, 프로토콜 코드를 바꾸는 것이 아니라 주소 배정에 관한 절차적 약속을 정합니다. 하위 호환성 문제는 발견되지 않았고(No backward compatibility issues found), 보안 고려 사항도 없음(Nil)으로 기재되어 있습니다. 상태는 Final로, 내용이 확정되어 더 바뀌지 않습니다.