EIP-4844 샤드 블롭 트랜잭션 (Shard Blob Transactions)

최종 확정 · 확장성·데이터 · 원문 상태 Final · 2022-02-25 작성

롤업이 쓸 대용량 데이터를 '블롭'이라는 전용 공간에 담는 새 거래 형식을 도입합니다. 블롭은 일반 수수료와 분리된 자체 수수료 시장이 있으며 일정 기간 뒤 지울 수 있어 저장 부담이 적습니다.

왜 필요한가

이더리움 본체(L1)의 수수료가 오랫동안 높아, 거래를 밖에서 모아 처리하는 롤업(rollup)이 사실상 유일한 신뢰 불요 확장 수단으로 자리잡았습니다. 옵티미즘과 아비트럼은 L1보다 약 3~8배, ZK 롤업은 약 40~100배 싼 수수료를 제공하지만 많은 사용자에게는 이마저도 비쌉니다. 근본 해법인 데이터 샤딩(data sharding)은 블록당 약 16MB의 전용 데이터 공간을 더해 주지만 구현과 배포에 상당한 시간이 걸립니다. 이 EIP는 그때까지의 징검다리로, 샤딩에서 쓸 거래 형식을 먼저 도입하되 실제 샤딩은 하지 않습니다. 데이터는 비콘 체인의 모든 합의 노드가 전부 내려받지만 비교적 짧은 기간 뒤 지울 수 있습니다. 블록당 목표 약 0.375MB, 상한 약 0.75MB로 양을 제한합니다. 롤업이 데이터 처리 방식을 한 번만 바꾸면 이후 샤딩으로 그대로 이어지도록 설계했습니다.

무엇이 바뀌나

지금

EIP-4844 이후

누구에게 영향이 있나

심층 설명

블롭 거래: 타입 0x03의 새 거래 형식

EIP-2718 방식의 새 거래 타입 BLOB_TX_TYPE(0x03)을 추가합니다. 페이로드 본문은 [chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, max_fee_per_blob_gas, blob_versioned_hashes, y_parity, r, s]의 RLP 직렬화입니다. to는 nil일 수 없어 블롭 거래로는 컨트랙트를 생성할 수 없습니다. 블롭 하나는 BYTES_PER_FIELD_ELEMENT(32) × FIELD_ELEMENTS_PER_BLOB(4096) 바이트이고 거래에는 블롭이 최소 1개 있어야 합니다. blob_versioned_hashes는 kzg_to_versioned_hash의 출력 목록으로, 각 해시의 첫 바이트는 VERSIONED_HASH_VERSION_KZG(0x01)여야 합니다. 서명은 BLOB_TX_TYPE과 서명 제외 필드의 RLP를 이어 붙인 값의 keccak256 다이제스트에 대해 만듭니다.

블롭 가스: EIP-1559식 독립 수수료 시장

블롭 값은 일반 가스와 별개인 '블롭 가스'로 매깁니다. 블롭 1개는 GAS_PER_BLOB(2**17) 블롭 가스를 쓰고 블록당 목표는 TARGET_BLOB_GAS_PER_BLOCK(393216, 블롭 3개), 상한은 MAX_BLOB_GAS_PER_BLOCK(786432, 블롭 6개)입니다. 헤더에 blob_gas_used와 excess_blob_gas라는 64비트 필드 2개를 추가하고 블롭 기본요금은 fake_exponential로 MIN_BASE_FEE_PER_BLOB_GAS × e^(excess_blob_gas / BLOB_BASE_FEE_UPDATE_FRACTION)을 근사해 구합니다. BLOB_BASE_FEE_UPDATE_FRACTION(3338477)은 블록당 최대 변화율을 약 1.125배로 묶습니다. 블롭 수수료는 실행 전에 보내는 쪽 잔고에서 빼서 소각하고 거래가 실패해도 돌려주지 않습니다. 사용량이 어떻게 분포하든 총량이 같으면 같은 식으로 반응해 기존 EIP-1559보다 안정적이라고 원문은 설명합니다.

BLOBHASH 명령어

새 명령어 BLOBHASH(옵코드 HASH_OPCODE_BYTE = 0x49)를 추가합니다. 스택 맨 위에서 index를 빅엔디언 uint256으로 읽어, index가 블롭 개수보다 작으면 tx.blob_versioned_hashes[index]로, 아니면 0으로 채운 bytes32로 바꿔 놓습니다. 가스 비용은 HASH_OPCODE_GAS(3)입니다. 블롭 내용은 EVM 실행에서 접근할 수 없고 이 버전 해시만 읽을 수 있으므로, 컨트랙트는 이 값을 기준점 삼아 나중에 제출되는 KZG 증명을 검증합니다.

포인트 평가 프리컴파일

주소 POINT_EVALUATION_PRECOMPILE_ADDRESS(0x0A)에 KZG 증명 검증 프리컴파일을 추가합니다. 비용은 POINT_EVALUATION_PRECOMPILE_GAS(50000)입니다. 입력은 정확히 192바이트로 versioned_hash(32) | z(32) | y(32) | commitment(48) | proof(48) 순서입니다. 먼저 kzg_to_versioned_hash(commitment)가 versioned_hash와 같은지 확인하고 verify_kzg_proof로 커미트먼트가 가리키는 다항식 p에 대해 p(z) = y임을 검증합니다. 입력 필드 엘리먼트는 BLS_MODULUS보다 엄격히 작아야 하며 성공 시 FIELD_ELEMENTS_PER_BLOB(4096)과 BLS_MODULUS를 각각 32바이트 빅엔디언으로 이어 반환합니다. 모듈러스를 반환하는 이유는, 양자 안전을 위해 머클 트리와 STARK 같은 새 커미트먼트 버전이 생겨도 컨트랙트가 업그레이드 없이 새 형식을 쓸 수 있게 하기 위해서입니다.

합의 레이어: 사이드카와 18일 보관

블롭은 비콘 블록 본문에 통째로 들어가지 않고 '사이드카(sidecar)'로 따로 전파되며 블록에서는 참조만 합니다. is_data_available() 검사를 블랙박스로 둔 설계라, 전체 샤딩에서 이를 데이터 가용성 샘플링(DAS)으로 바꾸면 모든 비콘 노드가 블롭 전부를 내려받지 않아도 됩니다. 블롭 보존은 합의 레이어의 몫이고 실행 레이어는 책임지지 않습니다. 사이드카는 MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS(4096 에포크, 약 18일) 동안 보관해야 하는데, 이는 실행 페이로드 이력에 제안된(아직 미구현) 1년 로테이션보다 훨씬 짧습니다. 대역폭은 비콘 블록당 최대 약 0.75MB 늘어납니다. 원문은 오늘날 이론상 최대 블록 크기(30M 가스 ÷ 칼데이터 바이트당 16가스 = 1.875MB)와 비교할 때 최악의 경우 대역폭을 크게 키우지 않고 머지 이후 블록 시간이 고정되어 큰 블록이 전파될 시간도 보장된다고 평가합니다.

네트워킹: 두 가지 표현과 멤풀 DoS 방어

블롭 거래는 네트워크 표현이 두 가지입니다. 멤풀 전파(PooledTransactions)에서는 페이로드를 rlp([tx_payload_body, blobs, commitments, proofs])로 감싸 블롭·커미트먼트·증명을 함께 보냅니다. 받는 노드는 blob_versioned_hashes, blobs, commitments, proofs의 개수가 모두 같은지, kzg_to_versioned_hash(commitments[i])가 해당 버전 해시와 일치하는지, 커미트먼트가 블롭·증명과 맞는지 검증해야 합니다(verify_blob_kzg_proof_batch로 일괄 검증 가능). 블록 본문 응답(BlockBodies)에서는 표준 페이로드만 씁니다. 데이터가 커서 멤풀 DoS 위험이 있으므로 노드는 블롭 거래를 자동 재전파해서는 안 되고 NewPooledTransactionHashes로 알린 뒤 GetPooledTransactions 요청이 올 때만 보냅니다. 거래 교체 규칙에는 블롭 가스 기본요금 1.1배 인상 요건을 권장하며 EIP-5793이 공지에 타입과 크기를 더해 제어를 더 세밀하게 만듭니다.

전체 샤딩으로 가는 설계와 롤업 활용법

이 EIP는 전체 샤딩에서 쓸 것과 똑같은 거래 형식을 미리 도입해, 롤업이 데이터 처리 방식을 한 번만 바꾸면 되게 합니다. 이미 끝낸 일은 새 거래 타입, 전체 샤딩에 필요한 실행 레이어 로직 전부, 실행·합의 교차 검증 로직 전부, BeaconBlock 검증과 샘플링의 레이어 분리, 자체 조정형 블롭 기본요금입니다. 남은 일은 2차원 샘플링을 위한 커미트먼트의 저차수 확장, 데이터 가용성 샘플링 구현, PBS(제안자·빌더 분리), 검증자별 보관 증명(proof of custody) 등입니다. 롤업 활용법도 제시합니다. 옵티미스틱 롤업은 사기 증명 때만 칼데이터로 블롭 값 몇 개를 불러와 KZG 증명과 포인트 평가 프리컴파일로 검증하고 ZK 롤업은 블롭 커미트먼트와 자체 증명 시스템의 커미트먼트가 같은 데이터를 가리킨다는 동치 증명(proof of equivalence)을 씁니다. 이 EIP는 Final 상태로 명세가 확정되어 있습니다.

EIP 원문 · ← EIPs