@umbra-privacy/web-zk-prover
v1.0.0
Published
Web-based Groth16 ZK prover for Umbra Privacy using snarkjs
Downloads
142
Maintainers
Readme
@umbra-privacy/web-zk-prover
Browser-compatible Groth16 ZK prover for the Umbra privacy protocol. Generates zero-knowledge proofs required for UTXO creation and claiming operations.
Installation
pnpm add @umbra-privacy/web-zk-prover @umbra-privacy/sdk@umbra-privacy/sdk is a required peer dependency.
Usage
Import a prover factory for the operation you need, then pass it to the corresponding SDK service function:
import { getUmbraClientFromSigner, getCreateReceiverClaimableUtxoFromPublicBalanceFunction } from "@umbra-privacy/sdk";
import { getCreateReceiverClaimableUtxoFromPublicBalanceProver } from "@umbra-privacy/web-zk-prover";
const zkProver = getCreateReceiverClaimableUtxoFromPublicBalanceProver();
const createUtxo = getCreateReceiverClaimableUtxoFromPublicBalanceFunction(
{ client },
{ zkProver },
);
await createUtxo({
destinationAddress: recipientAddress,
mint: MINT,
amount: 1_000_000n,
});Available Provers
UTXO Creation
getCreateSelfClaimableUtxoFromEncryptedBalanceProver()— Self-claimable UTXO from encrypted balancegetCreateReceiverClaimableUtxoFromEncryptedBalanceProver()— Receiver-claimable UTXO from encrypted balancegetCreateSelfClaimableUtxoFromPublicBalanceProver()— Self-claimable UTXO from public balancegetCreateReceiverClaimableUtxoFromPublicBalanceProver()— Receiver-claimable UTXO from public balance
UTXO Claiming
getClaimSelfClaimableUtxoIntoEncryptedBalanceProver()— Claim self-claimable UTXO into encrypted balancegetClaimReceiverClaimableUtxoIntoEncryptedBalanceProver()— Claim receiver-claimable UTXO into encrypted balancegetClaimSelfClaimableUtxoIntoPublicBalanceProver()— Claim self-claimable UTXO into public balance
Registration
getUserRegistrationProver()— Prove anonymous usage registration
ZK Artifact Delivery
Proving keys (.zkey) and witness calculators (.wasm) are fetched from a CDN at proof time. The default CDN provider is included out of the box:
import { getCdnZkAssetProvider } from "@umbra-privacy/web-zk-prover";
// Uses the default Umbra CDN
const assetProvider = getCdnZkAssetProvider();You can also import the CDN provider from a dedicated subpath:
import { getCdnZkAssetProvider } from "@umbra-privacy/web-zk-prover/cdn";To use a custom asset host, implement the IZkAssetProvider interface:
import type { IZkAssetProvider } from "@umbra-privacy/web-zk-prover";
const customProvider: IZkAssetProvider = {
async getAssetUrls(type, variant) {
return {
zkeyUrl: `https://my-cdn.example.com/zk/${type}.zkey`,
wasmUrl: `https://my-cdn.example.com/zk/${type}.wasm`,
};
},
};Proof Conversion Utilities
Convert between snarkjs proof format and the byte layout expected by on-chain Groth16 verification:
import { convertSnarkjsProofToBytes } from "@umbra-privacy/web-zk-prover";
const proofBytes = convertSnarkjsProofToBytes(snarkjsProof);
// proofBytes.proofA (64 bytes), proofBytes.proofB (128 bytes), proofBytes.proofC (64 bytes)Requirements
- Node.js 18+ or modern browser
@umbra-privacy/sdk(peer dependency)snarkjsis included as a regular dependency
License
MIT
