EIP-7934 RLP 실행 블록 크기 상한 (RLP Execution Block Size Limit)

최종 확정 · 네트워크·노드 · 원문 상태 Final · 2025-04-16 작성

블록을 RLP로 인코딩했을 때의 크기에 프로토콜 차원의 상한을 둡니다. 전체 한도 10 MiB에서 비콘 블록 몫 2 MiB를 뺀 크기를 넘는 블록은 무효로 처리합니다.

왜 필요한가

지금 이더리움은 블록의 인코딩된 크기에 엄격한 상한을 두지 않습니다. 그래서 아주 큰 블록이 만들어지면 네트워크에 퍼지는 속도가 느려지고 일시적인 체인 분기(포크)와 리오그 위험이 커집니다. 악의적인 행위자가 일부러 거대한 블록을 만들어 네트워크 성능을 떨어뜨리는 서비스 거부(DoS) 공격에 쓸 수도 있습니다. 게다가 합의 계층(CL)의 가십 프로토콜은 10 MiB를 넘는 블록을 아예 전파하지 않아서 큰 블록이 네트워크 단절이나 서비스 거부 상황을 일으킬 수 있습니다. 이 제안은 블록 크기에 프로토콜 수준의 상한을 두어 블록 검증 시간을 노린 공격에 대한 저항력을 높이고 비콘 블록 크기를 위한 2 MiB 여유분을 명시해 네트워크 구성 요소 사이의 호환성을 지킵니다.

무엇이 바뀌나

지금

EIP-7934 이후

누구에게 영향이 있나

심층 설명

상수 정의

세 개의 상수를 도입합니다. MAX_BLOCK_SIZE는 10 MiB(10,485,760바이트), SAFETY_MARGIN은 2 MiB(2,097,152바이트)이고 MAX_RLP_BLOCK_SIZE는 MAX_BLOCK_SIZE - SAFETY_MARGIN으로 계산합니다. RLP 인코딩 크기가 MAX_RLP_BLOCK_SIZE를 넘는 블록은 모두 무효로 간주해야 합니다. 2 MiB 여유분은 비콘 블록 크기를 명시적으로 감안한 것입니다.

검증 함수

프로토콜에 추가되는 검사는 exceed_max_rlp_block_size(block) 형태로, len(rlp.encode(block)) > MAX_RLP_BLOCK_SIZE이면 참을 반환합니다. 참이면 그 블록은 무효이며 거부되어야 하고 블록 생성 단계에서도 그런 블록을 만들지 않아야 합니다.

프로토콜 동작 변경

두 가지가 바뀝니다. 첫째, 블록 생성에서 검증자는 자신이 만드는 블록의 RLP 인코딩 총 크기가 MAX_RLP_BLOCK_SIZE를 넘지 않도록 보장해야 합니다. 둘째, 블록 검증에서 노드는 RLP 인코딩 크기가 MAX_RLP_BLOCK_SIZE를 넘는 블록을 거부해야 합니다. 모든 클라이언트 구현이 이 검사를 블록 검증과 전파 과정에 통합해야 하며 이 한도는 가스 관련 지표와 무관하게 독립적으로 적용됩니다.

왜 10 MiB인가

10 MiB 상한은 이더리움 합의 계층 가십 프로토콜의 제약과 맞춘 값입니다. 10 MiB를 크게 넘는 블록은 합의 계층이 방송하지 않아 네트워크 단절이나 서비스 거부 상황으로 이어질 수 있습니다. 여기에 2 MiB 여유분을 더해 비콘 블록 크기를 명시적으로 반영함으로써 네트워크 구성 요소 전반에서 일관된 블록 전파와 호환성을 보장합니다.

하위 호환성과 보안

이 변경은 새 한도보다 큰 블록과는 하위 호환되지 않습니다. 검증자와 채굴자는 블록 구성 로직이 이 한도를 엄격히 지키도록 해야 합니다. 보안 측면에서는 최대 블록 크기를 제한하는 것 자체가 의도적인 거대 블록 공격에 대한 기본적인 방어가 됩니다. 이 EIP의 상태는 Final로, 명세가 확정되었습니다.

EIP 원문 · ← EIPs