Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/paulmillr/trusted-setups

Easily access trusted setups in JS. Includes KZG / ETH
https://github.com/paulmillr/trusted-setups

Last synced: 2 months ago
JSON representation

Easily access trusted setups in JS. Includes KZG / ETH

Awesome Lists containing this project

README

        

# trusted-setups

Easily access KZG / ETH [trusted setups](https://vitalik.eth.limo/general/2022/03/14/trustedsetup.html) in JS.

Exports 3 files:

- `index.js` (default) - js-friendly trusted setup
- `fast.js` - faster, decompressed trusted setup for [eth-signer](https://github.com/paulmillr/micro-eth-signer)
- `trusted_setup.json`, for c-kzg and others

## Usage

> npm install @paulmillr/trusted-setups

The package is located in namespace for security / anti-squatting reasons.

We test against [eth-signer](https://github.com/paulmillr/micro-eth-signer),
[kzg-wasm](https://github.com/ethereumjs/kzg-wasm) and
[c-kzg](https://github.com/ethereum/c-kzg-4844).
Other libraries with similar API should also work.

```js
import { trustedSetup } from '@paulmillr/trusted-setups';
// fast setup for eth-signer
import { trustedSetup as fast } from '@paulmillr/trusted-setups/fast.js';
// trustedSetup is { g1_lagrange: string[]; g2_monomial: string[] }

// eth-signer
import { KZG } from 'micro-eth-signer/kzg';
const kzg = new KZG(trustedSetup);

// kzg-wasm
const strip0x = items => items.map((i) => i.substring(2)).join('');
const g1 = strip0x(trustedSetup.g1_lagrange);
const g2 = strip0x(trustedSetup.g2_monomial);
const opts = { n1: 4096, n2: 65, g1, g2 };
const kzg = await loadKZG(opts);

// c-kzg can't receive object, requires path
const __dirname = dirname(fileURLToPath(import.meta.url));
ckzg.loadTrustedSetup(1, __dirname + '/trusted_setup.json');

trustedSetup.g1_lagrange.slice(0, 2)
// [
// '0xa0413c0dcafec6dbc9f47d66785cf1e8c981044f7d13cfe3e4fcbb71b5408dfde6312493cb3c1d30516cb3ca88c03654',
// '0x8b997fb25730d661918371bb41f2a6e899cac23f04fc5365800b75433c0a953250e15e7a98fb5ca5cc56a8cd34c20c57'
// ]
trustedSetup.g2_monomial.slice(0, 2)
// [
// '0x93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8',
// '0xb5bfd7dd8cdeb128843bc287230af38926187075cbfbefa81009a2ce615ac53d2914e5870cb452d2afaaab24f3499f72185cbfee53492714734429b7b38608e23926c911cceceac9a36851477ba4c60b087041de621000edc98edada20c1def2'
// ]
```

## Verification

`npm install && npm run build` will build files from `trusted_setup.txt`, which was copied from
[c-kzg-4844](https://github.com/ethereum/c-kzg-4844/blob/445387f7dfd95b2b0d74b537b9d28f7b603b6f24/src/trusted_setup.txt).

Its checksum is `d39b9f2d047cc9dca2de58f264b6a09448ccd34db967881a6713eacacf0f26b7`.

## License

MIT License

Copyright (c) 2024 Paul Miller (https://paulmillr.com)