EIP-7954 컨트랙트 최대 크기 64KiB로 상향 (Increase Maximum Contract Size)

콜 결정 없음 · EVM·실행 · 원문 상태 Last Call · 2025-06-09 작성

이더리움에 배포할 수 있는 컨트랙트 코드의 최대 크기를 24KiB에서 64KiB로, 컨트랙트를 만들 때 실행하는 초기화 코드(initcode)의 최대 크기를 48KiB에서 128KiB로 올립니다.

왜 필요한가

이더리움에서는 컨트랙트 코드가 24KiB(24,576바이트)를 넘으면 배포할 수 없습니다. 이 제한은 EIP-170에서 정해졌습니다. 컨트랙트를 새로 만들 때 한 번만 실행되는 초기화 코드(initcode)에도 EIP-3860이 정한 48KiB 제한이 따로 있습니다. 원문은 24KiB 제한이 복잡한 컨트랙트와 애플리케이션에는 지나치게 빡빡할 수 있다고 지적합니다. 기능이 많아질수록 코드가 길어지는데, 상한에 닿으면 기능을 더 넣을 수 없습니다. 이 제안은 코드 제한을 64KiB로, 초기화 코드 제한을 128KiB로 올려 기능이 더 풍부한 컨트랙트를 배포할 수 있게 합니다. 동시에 블록과 상태(state) 크기가 늘어나는 정도는 합리적인 범위 안에 두려 합니다. 제안서는 두 상한값 외에는 아무것도 바꾸지 않습니다.

무엇이 바뀌나

지금

EIP-7954 이후

누구에게 영향이 있나

심층 설명

컨트랙트 코드 크기 제한: 0x6000에서 0x10000으로

EIP-170이 정한 컨트랙트 코드 크기 상한을 24KiB(0x6000 바이트, 24,576바이트)에서 64KiB(0x10000 바이트, 65,536바이트)로 바꿉니다. 이 상한은 배포가 끝난 뒤 체인에 저장되는 컨트랙트 코드에 적용됩니다. 바뀌는 것은 상한값 하나뿐이며 제한을 검사하는 방식이나 다른 프로토콜 규칙은 손대지 않습니다. 원문은 이 점을 단순함(Simplicity)이라는 설계 근거로 따로 적어 두었습니다. 활성화 뒤에는 코드가 24KiB를 넘고 64KiB 이하인 컨트랙트를 배포할 수 있습니다.

initcode 크기 제한: 0xC000에서 0x20000으로

EIP-3860이 정한 initcode 크기 상한을 48KiB(0xC000 바이트, 49,152바이트)에서 128KiB(0x20000 바이트, 131,072바이트)로 바꿉니다. initcode는 컨트랙트를 새로 만들 때 한 번 실행되는 초기화 코드로, 실행 결과로 실제 저장될 컨트랙트 코드가 정해집니다. 이 제안은 코드 상한과 initcode 상한을 함께 올립니다. 기존에는 initcode 제한이 코드 제한의 두 배(24KiB 대 48KiB)였습니다. 이 비율은 새 값(64KiB 대 128KiB)에서도 그대로 유지됩니다.

설계 근거: 유연성, 하위 호환, 단순함

원문은 세 가지 근거를 듭니다. 첫째, 개발자 유연성입니다. 더 복잡한 컨트랙트와 기능을 구현할 수 있습니다. 둘째, 하위 호환성입니다. 이미 배포된 컨트랙트는 전혀 영향을 받지 않습니다. 셋째, 단순함입니다. 크기 상한만 바꾸고 다른 프로토콜 수정은 하지 않습니다. 동기(Motivation) 절은 64KiB라는 값을 고른 이유로, 더 풍부한 기능의 컨트랙트를 허용하면서도 블록과 상태 증가를 합리적인 제약 안에 둘 수 있다는 점을 듭니다.

활성화 방식과 기존 컨트랙트

이 변경은 프로토콜 차원에서 하위 호환되지 않으므로 네트워크 업그레이드(하드포크)로 활성화해야 합니다. 활성화 전까지는 24KiB를 넘는 컨트랙트를 배포할 수 없고 활성화 뒤에는 24KiB 초과 64KiB 이하 컨트랙트를 배포할 수 있습니다. 이미 체인에 있는 컨트랙트는 영향을 받지 않습니다. 클라이언트 구현 입장에서는 EIP-170과 EIP-3860에서 가져온 상수값 두 개를 바꾸는 작업이며 원문은 그 밖의 프로토콜 수정이 없다고 밝힙니다.

보안 고려: 서비스 거부(DoS) 위험

원문은 상한을 올리면 큰 컨트랙트를 이용한 서비스 거부(DoS) 공격 위험이 조금(marginally) 커질 수 있다고 인정합니다. 다만 새 상한인 64KiB도 여전히 보수적인 값이라고 평가합니다. 동기 절에서도 블록과 상태 증가를 합리적인 제약 안에 둔다는 점을 강조합니다. 원문에 별도의 완화책이나 추가 가스 규칙은 적혀 있지 않습니다. 크기 상한 자체가 방어 수단이고 그 값을 어디에 둘지가 이 제안의 핵심 판단입니다.

진행 상태: Last Call과 코어 개발자 콜

원문 상태는 Last Call이고 마지막 검토 마감일(last-call-deadline)은 2026-11-01입니다. 제안은 2025-06-09에 만들어졌고 Giulio Rebuffo와 Ben Adams가 썼습니다. 코어 개발자 콜에서는 10.08 ACDE #247에서 논의했지만 결정은 없었습니다. 어느 네트워크 업그레이드에 포함할지는 아직 정해지지 않았습니다. 활성화에는 하드포크가 필요하므로 실제 적용 시점은 포크 일정 결정을 기다려야 합니다.

EIP 원문 · ← EIPs