1 Commits

Author SHA1 Message Date
bezze
7e2881573b feat: adding rollup bundler and a minimal groth16 prover interface (#32)
Because the SDK is meant to run both in web and nodejs I focused
bundling for those two targets. I chose Rollup.js as a bundler because
it is commonly used for bundling libraries and achives a decent tradeoff
between speed and flexibility.

The nodejs bundle will have the artifacts embedded in the package, while
the web bundle will need to have the artifacts being hosted at
/artifacts/{artifact_name}. The API for the circuits has an async
initializer that abstracts away the platform and loads the binaries.
Once initialized, the `circuits` object is used to initialize the
`ZkOps` class that uses the loaded binaries under the hood.

Observation: ~~currently, to build the bundle, the scripts assume you
have all the circuits artifacts at `src/circuits/artifacts`. The PR was
getting too big so I'll relax that assumption later.~~
EDIT: Build will now succeed without the artifacts because building them
in the ci/cd was way out of scope. I provided a script to install the
artifacts to the bundle build for local testing.

Usage example:

```typescript
import { ZkOps, circuits } from "@privacy-pool-core/sdk";

; (async () => {

    await circuits.downloadArtifacts("latest");
    const zkOps = new ZkOps(circuits);
    const input = {
        value: "1",
        label: BigInt("0"),
        nullifier: BigInt("123"),
        secret: BigInt("456"),
    };

    let r = await zkOps.proveCommitment(input);
    console.log(r)

})()
```
2025-01-23 08:14:21 +00:00