viem-goviem-go

defineKzg

Creates a Kzg implementation from individual functions

defineKzg

Creates a Kzg implementation from individual functions. This is useful when working with external KZG libraries that expose separate functions rather than a unified interface.

Import

import "github.com/ChefBingbong/viem-go/utils/kzg"

Usage

import "github.com/ChefBingbong/viem-go/utils/kzg"
import "github.com/ethereum/c-kzg-4844/bindings/go"
kzgImpl := kzg.DefineKzg(kzg.DefineKzgParams{
BlobToKzgCommitment: func(blob []byte) ([]byte, error) {
var b ckzg.Blob
copy(b[:], blob)
commitment, err := ckzg.BlobToKZGCommitment(&b)
if err != nil {
return nil, err
}
return commitment[:], nil
},
ComputeBlobKzgProof: func(blob, commitment []byte) ([]byte, error) {
var b ckzg.Blob
var c ckzg.Bytes48
copy(b[:], blob)
copy(c[:], commitment)
proof, err := ckzg.ComputeBlobKZGProof(&b, c)
if err != nil {
return nil, err
}
return proof[:], nil
},
})

Returns

  • Type: kzg.Kzg

A KZG implementation that can be used for blob operations.

Parameters

params (required)

  • Type: kzg.DefineKzgParams

Parameters for defining a KZG interface.

params := kzg.DefineKzgParams{
BlobToKzgCommitment: func(blob []byte) ([]byte, error) {
// Implementation
},
ComputeBlobKzgProof: func(blob, commitment []byte) ([]byte, error) {
// Implementation
},
}
kzgImpl := kzg.DefineKzg(params)

params.BlobToKzgCommitment (required)

  • Type: func(blob []byte) ([]byte, error)

Function that converts a blob to a KZG commitment.

BlobToKzgCommitment: func(blob []byte) ([]byte, error) {
var b ckzg.Blob
copy(b[:], blob)
commitment, err := ckzg.BlobToKZGCommitment(&b)
if err != nil {
return nil, err
}
return commitment[:], nil
}

params.ComputeBlobKzgProof (required)

  • Type: func(blob []byte, commitment []byte) ([]byte, error)

Function that computes the KZG proof for a blob.

ComputeBlobKzgProof: func(blob, commitment []byte) ([]byte, error) {
var b ckzg.Blob
var c ckzg.Bytes48
copy(b[:], blob)
copy(c[:], commitment)
proof, err := ckzg.ComputeBlobKZGProof(&b, c)
if err != nil {
return nil, err
}
return proof[:], nil
}

Functions

DefineKzg

Creates a KZG implementation from individual functions:

kzgImpl := kzg.DefineKzg(params)

DefineKzgFromInterface

Wraps an existing Kzg implementation:

kzgImpl := kzg.DefineKzgFromInterface(existingKzg)

Notes

  • This function does not load the trusted setup (use SetupKzg for that)
  • Useful for wrapping external KZG libraries
  • The returned KZG implementation can be used for blob operations