Skip to main content
Create and verify KZG proofs for blob transactions (Proto-Danksharding).
import { KZGService, KZGLive } from 'voltaire-effect/crypto'
import { Effect } from 'effect'

const result = await Effect.runPromise(
  Effect.gen(function* () {
    const kzg = yield* KZGService
    yield* kzg.loadTrustedSetup()
    const commitment = yield* kzg.blobToKzgCommitment(blob)
    const proof = yield* kzg.computeBlobKzgProof(blob, commitment)
    const isValid = yield* kzg.verifyBlobKzgProof(blob, commitment, proof)
    return { commitment, proof, isValid }
  }).pipe(Effect.provide(KZGLive))
)

Trusted Setup

Call loadTrustedSetup() before use. Check with isInitialized().

Testing

import { KZGTest } from 'voltaire-effect/crypto'
myProgram.pipe(Effect.provide(KZGTest))
// Mock 48-byte commitment/proof, always verifies true

Interface

interface KZGServiceShape {
  readonly loadTrustedSetup: () => Effect.Effect<void>
  readonly isInitialized: () => Effect.Effect<boolean>
  readonly blobToKzgCommitment: (blob: KzgBlobType) => Effect.Effect<KzgCommitmentType>
  readonly computeBlobKzgProof: (blob: KzgBlobType, commitment: KzgCommitmentType) => Effect.Effect<KzgProofType>
  readonly verifyBlobKzgProof: (blob: KzgBlobType, commitment: KzgCommitmentType, proof: KzgProofType) => Effect.Effect<boolean>
}