Overview
Address:0x000000000000000000000000000000000000000a
Introduced: Cancun (EIP-4844)
EIP: EIP-4844
The Point Evaluation precompile verifies KZG (Kate-Zaverucha-Goldberg) polynomial commitment proofs for EIP-4844 blob transactions. It proves that a blob (up to 128KB of data) committed to by a KZG commitment evaluates to a specific value at a random point, without revealing the full blob data. This enables Proto-Danksharding, the critical stepping stone to full Ethereum sharding.
EIP-4844 introduced “blobs” - large data attachments to transactions that are stored by consensus nodes but not by execution layer. Rollups can post transaction batches as blobs (~128KB each) for ~10x cheaper than calldata, while the KZG proof ensures data availability. This precompile is the cryptographic verification that makes blob trust guarantees possible.
Without this precompile, rollups would remain economically constrained by expensive calldata (~16 gas/byte). With it, Ethereum scales to support global rollup activity at acceptable costs, making the “world computer” vision practical.
Gas Cost
Fixed:50,000 gas
Cost is constant regardless of input validity. This covers the expensive BLS12-381 pairing operation.
Input Format
Exactly 192 bytes required:- Must equal
SHA256(commitment)with first byte set to0x01 - Version byte
0x01indicates EIP-4844 blob commitment
Output Format
- Bytes 0-29: zero
- Bytes 30-31:
0x1000(4096 field elements per blob) - Bytes 32-63: BLS modulus
0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001
Usage Example
Error Conditions
- Input length ≠ 192 bytes
- Out of gas (gasLimit < 50,000)
- Versioned hash mismatch (doesn’t match SHA256(commitment) with version byte)
- Invalid KZG commitment (not valid BLS12-381 G1 point)
- Invalid KZG proof (not valid BLS12-381 G1 point)
- Invalid field elements (z or y >= BLS modulus)
Use Cases
Production Applications (Post-Cancun):- Optimism (OP Stack): Posts transaction batches as blobs instead of calldata. Reduces L1 data costs by ~90%. Each blob contains ~1000-2000 L2 transactions compressed. The Point Evaluation precompile verifies each blob’s KZG proof to ensure data availability.
- Arbitrum One: Migrated to blobs post-Cancun. Blob-based batches cost ~0.01 ETH vs ~0.10 ETH for calldata equivalents. Processes 40+ TPS on L2 while keeping L1 costs manageable.
- Base (Coinbase L2): Uses blobs exclusively for data posting. Handles 10M+ transactions/day with blob-based data availability, keeping fees under $0.01 per transaction.
- zkSync Era: Posts compressed transaction data and zk-proofs as blobs. Combines proof verification with blob data availability for maximum efficiency.
- Polygon zkEVM: Blob-based batch submission. Each blob contains validity proofs + transaction data for an entire batch.
- Starknet: Posts STARK proofs and transaction data as blobs. Cairo VM state transitions verified on L1 using blob data.
- Data availability sampling (DAS): Clients verify data by sampling random chunks
- More blobs per block: From 3-6 blobs to 64+ blobs (8MB+ per block)
- KZG multi-proofs: This precompile will verify multiple evaluation points efficiently
Implementation Details
- Zig: Uses c-kzg-4844 library with BLS12-381 pairing
- TypeScript: Wraps KZG crypto module (c-kzg bindings)
- Integration: Depends on KZG trusted setup (powers of tau ceremony)
- Curve: BLS12-381 (embedding degree 12, 381-bit prime)
- Algorithm: KZG polynomial commitment opening verification
Mathematical Background: KZG Commitments Explained
What is a Polynomial Commitment? A polynomial commitment scheme lets you commit to a polynomialp(x) with a short commitment C, then later prove p(z) = y for any point z without revealing the polynomial. Think of it like a sealed envelope containing a graph - you can prove the graph passes through specific points without opening the envelope.
KZG (Kate-Zaverucha-Goldberg) Scheme:
-
Trusted Setup: A multi-party ceremony generates powers of a secret
τ:[1]₁, [τ]₁, [τ²]₁, ..., [τ⁴⁰⁹⁵]₁(in elliptic curve group G1)- The secret
τis discarded - nobody knows it - Ethereum’s KZG ceremony had 140,000+ participants in 2023
-
Commitment: To commit to polynomial
p(x) = a₀ + a₁x + a₂x² + ... + aₙxⁿ:- Compute
C = [p(τ)]₁ = a₀[1]₁ + a₁[τ]₁ + a₂[τ²]₁ + ... + aₙ[τⁿ]₁ - This is a single 48-byte elliptic curve point (BLS12-381 G1)
- Compute
-
Opening Proof: To prove
p(z) = y:- Compute quotient polynomial:
q(x) = (p(x) - y) / (x - z) - Proof is
π = [q(τ)]₁(another 48-byte point)
- Compute quotient polynomial:
-
Verification (this precompile): Check using pairing:
e(C - [y]₁, [1]₂) = e(π, [τ]₂ - [z]₂)- This is a single BLS12-381 pairing operation (~50,000 gas)
- If equation holds, proof is valid
q(τ) * (τ - z) = p(τ) - y
This is only true if q(x) * (x - z) = p(x) - y, which means p(z) = y. Since nobody knows τ, you can’t fake a proof without actually knowing p(x).
Security: Breaking KZG requires either:
- Solving discrete log on BLS12-381 (~128-bit security)
- All trusted setup participants colluding (impossibly unlikely with 140,000+ participants)
- Higher security: ~128-bit vs ~100-bit security
- Longer term: BN254 security degrades over time, BLS12-381 more future-proof
- Standardization: BLS12-381 is industry standard (Zcash, Filecoin, Ethereum 2.0)
EIP-4844 Blob Structure and Encoding
Blob Anatomy: Each blob is 131,072 bytes (128 KB) of raw data, encoded as a polynomial for KZG commitment:- Raw size: 131,072 bytes (128 KB)
- Encoded as: 4096 field elements × 32 bytes each = 131,072 bytes
- Field elements: Values in BLS12-381 scalar field Fr (255-bit prime)
- Polynomial degree: 4095 (degree n-1 for n points)
- Commitment: Single 48-byte BLS12-381 G1 point
- Proof size: 48 bytes per evaluation point
- Split blob data into 4096 chunks of 32 bytes each
- Interpret each chunk as a field element in Fr (must be < BLS modulus)
- These 4096 values become coefficients of a degree-4095 polynomial
- Commitment is computed using KZG:
C = [p(τ)]₁
- FFT-friendly: 4096 = 2¹² allows efficient FFT operations
- Data availability sampling: Future full Danksharding will sample random subsets
- Proof size: Constant 48 bytes regardless of blob size
- Verification: Single pairing check regardless of blob size
Versioned Hash Format
0x01: EIP-4844 KZG commitments0x02: Reserved for future schemes0x03+: Reserved
Gas Cost Justification
50,000 gas covers:- BLS12-381 pairing operation (~45,000 gas equivalent)
- Field arithmetic and validation
- SHA-256 hash for versioned hash check
KZG Trusted Setup
Point evaluation requires KZG trusted setup (powers of tau):- Ceremony completed in 2023 with 140,000+ participants
- Powers: [1]₁, [τ]₁, [τ²]₁, …, [τ⁴⁰⁹⁵]₁
- Security: Safe unless all participants colluded
- Reusable across Ethereum and other systems
Test Vectors
From EIP-4844 official test suite:Complete Blob Transaction Flow
Step-by-step from rollup to verification:- Rollup Sequencer: Batches 1000+ L2 transactions, compresses to ~100KB
-
Blob Preparation:
- Encodes data as 4096 BLS field elements (polynomial coefficients)
- Computes KZG commitment:
C = [p(τ)]₁using trusted setup - Generates versioned hash:
SHA256(C)with version byte0x01
-
Transaction Submission:
- Submits Type-3 blob transaction to Ethereum
- Transaction includes: versioned_hash in
blob_versioned_hashesfield - Actual blob data sent separately to consensus layer (not in block)
-
Consensus Layer Storage:
- Beacon chain stores full blob (~128KB) in blob sidecar
- Blob stored for minimum 4096 epochs (~18 days)
- After 18 days, blob is pruned (only commitment remains on chain)
-
Verification on L1 (this precompile):
- L1 contract receives blob transaction
- Calls POINT_EVALUATION precompile with (versioned_hash, z, y, commitment, proof)
- Precompile verifies: commitment matches hash AND KZG proof is valid
- If valid, rollup contract accepts the batch
-
Long-term Storage:
- KZG commitment (48 bytes) remains on-chain forever
- Full blob (128KB) pruned after ~18 days
- Archive nodes may retain blobs longer (optional)
- Anyone who needs historical blob data must have downloaded it during 18-day window
- Data existed and was available for 18 days minimum
- The commitment is a binding commitment to specific data
- Cannot be changed retroactively (commitment is on-chain forever)
- Enough time for anyone to challenge invalid state transitions
- Target: 3 blobs per block (384 KB)
- Max: 6 blobs per block (768 KB)
- Price adjusts via EIP-1559 style mechanism
- Typical blob gas price: 1-10 wei (vs 10-50 gwei for regular gas)
- 1000x+ cheaper than calldata per byte
Related
- Crypto: KZG - KZG polynomial commitment implementation
- Crypto: BLS12-381 - BLS12-381 elliptic curve operations
- Primitives: Blob - Blob data type and utilities
- Primitives: FeeMarket (EIP-4844) - Blob gas pricing
- Yellow Paper - Appendix E
- EIP-4844: Shard Blob Transactions - Complete specification
- KZG Ceremony - Trusted setup details
- Proto-Danksharding FAQ - High-level overview
- c-kzg-4844 Library - Reference implementation

