Exporting a Client Side Prover
Going from AxiomREPL to your app
Circuit Export
When you select the Export > Export TypeScript circuit option in AxiomREPL, a circuit.ts file will be downloaded with all the artifacts specific to your circuit that are required to run the circuit inside your own application. Namely, circuit.ts includes: the circuit size and configuration, default circuit inputs and their types, the circuit verification key, and your circuit code. This is all exported as a singular circuit object.
To add this into a React app, first install @axiom-crypto/react using a package manager such as npm/yarn/pnpm.
npm install @axiom-crypto/reactAxiomCircuitProvider
In order to use this in your Next.js 13 app, you'll need to wrap AxiomCircuitProvider in its own file to ensure that it's only mounted once:
"use client";
import { useEffect, useState } from "react";
import { AxiomCircuitProvider } from '@axiom-crypto/react';
import { circuit } from "@/lib/circuit"; // REPLACE w/ path to exported circuit.ts
export default function AxiomProvider({ children }: { children: React.ReactNode }) {
const [mounted, setMounted] = useState(false);
useEffect(() => setMounted(true), []);
return (
<AxiomCircuitProvider
circuit={circuit}
providerUri={process.env.NEXT_PUBLIC_PROVIDER_URI_GOERLI as string}
chainId={5}
mock={true}
>
{mounted && children}
</AxiomCircuitProvider>
)
}and in your layout file:
return (
...
<AxiomProvider>
{children}
</AxiomProvider>
...
)useAxiomCircuit
Then you can use the useAxiomCircuit hook to get built queries inside your application:
const circuit = useAxiomCircuit();
// you may need to wrap the `setParams` call in a useEffect hook to prevent an
// infinite reload loop
useEffect(() => {
circuit.setParams(inputs, callback);
}, [circuit, inputs, callback]);
const builtQuery = circuit.builtQuery;
// can now use builtQuery to send an on-chain Query to AxiomHook functionality
The following functions and variables are available from the useAxiomCircuit hook:
axiom
The Axiom instance variable. Exposes useful things like the AxiomV2Query contract address and ABI.
setParams
Function to set the inputs and callback.
areParamsSet
Boolean that returns true if inputs and callback are set, or false otherwise.
build
Async function to build the inputs and callback along with the provided circuit into a Query to be sent to AxiomV2Query.
builtQuery
The full builtQuery variable that contains all inputs required for calling sendQuery on AxiomV2Query.
payment
Variable that gives the calculated payment amount for the Query.
reset
Function to reset the inputs and callback variables.
Last updated