Skip to main content

Try it Live

Run Blob examples in the interactive playground
import { Kzg, Blob } from 'tevm';

const blob = Blob.fromData(data);
const commitment = Kzg.Commitment(blob);

console.log(commitment.length); // 48
console.log(Blob.Commitment.isValid(commitment)); // true
Note: Requires c-kzg-4844 library integration (coming soon).

KZG Commitment Scheme

KZG commitments use polynomial commitment scheme over BLS12-381 curve:
  1. Blob as Polynomial - 4096 field elements become polynomial coefficients
  2. Commitment - Evaluate polynomial at secret point (from trusted setup)
  3. Binding - Computationally infeasible to find different blob with same commitment

Security Properties

import { Kzg, Blob } from 'tevm';

// Different data = different commitments
const blob1 = Blob.fromData(data1);
const blob2 = Blob.fromData(data2);

const commitment1 = Kzg.Commitment(blob1);
const commitment2 = Kzg.Commitment(blob2);

// Commitments differ (binding property)
console.log(Blob.equals(commitment1, commitment2)); // false

// Cannot forge commitment for different data
const proof1 = Kzg.Proof(blob1);
console.log(Kzg.verify(blob1, commitment1, proof1)); // true
console.log(Kzg.verify(blob2, commitment1, proof1)); // false (wrong blob)

Commitment Utilities

Blob.Commitment Namespace

import { Kzg, Blob } from 'tevm';

const commitment = Kzg.Commitment(blob);

// Validate commitment size
console.log(Blob.Commitment.isValid(commitment)); // true

// Convert to versioned hash
const versionedHash = Blob.toVersionedHash(commitment);
console.log(versionedHash[0]); // 0x01 (version byte)

See Also