90 lines
1.8 KiB
Markdown
90 lines
1.8 KiB
Markdown
This package wraps the c-kzg C code in C++ NAPI bindings which allow it to be imported into a NodeJS program.
|
|
|
|
Spec: https://github.com/ethereum/consensus-specs/blob/dev/specs/eip4844/polynomial-commitments.md
|
|
|
|
# Usage
|
|
|
|
Install this library with
|
|
|
|
```sh
|
|
yarn add c-kzg
|
|
```
|
|
|
|
Import from it like any other library
|
|
|
|
```js
|
|
import {
|
|
KZGCommitment,
|
|
blobToKzgCommitment,
|
|
verifyAggregateKzgProof,
|
|
loadTrustedSetup,
|
|
transformTrustedSetupJSON,
|
|
} from "c-kzg";
|
|
```
|
|
|
|
Requirements
|
|
|
|
- The C and C++ code is compiled by node-gyp on installation, so your environment will need a compiler like GCC or clang
|
|
|
|
# Contributing
|
|
|
|
This directory contains the code necessary to generate NodeJS bindings for C-KZG.
|
|
|
|
The bindings file has the following interface:
|
|
|
|
```js
|
|
|
|
loadTrustedSetup: (filePath: string) => SetupHandle;
|
|
|
|
freeTrustedSetup: (setupHandle: SetupHandle) => void;
|
|
|
|
blobToKzgCommitment: (blob: Blob, setupHandle: SetupHandle) => KZGCommitment;
|
|
|
|
computeAggregateKzgProof: (
|
|
blobs: Blob[],
|
|
setupHandle: SetupHandle
|
|
) => KZGProof;
|
|
|
|
verifyAggregateKzgProof: (
|
|
blobs: Blob[],
|
|
expectedKzgCommitments: KZGCommitment[],
|
|
kzgAggregatedProof: KZGProof,
|
|
setupHandle: SetupHandle
|
|
) => boolean;
|
|
```
|
|
|
|
But this library wraps it in module with manages the setupHandle internally.
|
|
|
|
First,
|
|
`npm install -g yarn` if you don't have it.
|
|
|
|
Install the blst submodule
|
|
|
|
```sh
|
|
git submodule update --init
|
|
```
|
|
|
|
Build blst and c_kzg_4844.c
|
|
|
|
```
|
|
cd src && make blst lib
|
|
```
|
|
|
|
Generate NodeJS bindings and run the TypeScript tests against them
|
|
|
|
```sh
|
|
cd ../bindings/node.js && yarn install && make test
|
|
```
|
|
|
|
After doing this once, you can re-build (if necessary) and re-run the tests with
|
|
|
|
```sh
|
|
make build test
|
|
```
|
|
|
|
After making changes, regenerate the distributable JS and type defs
|
|
|
|
```sh
|
|
make bundle
|
|
```
|