Usage and Examples ================================ Powers of Tau --------------- Start by importing `PTau`:: from zkpy.ptau import PTau Here is an example use case walking through a powers of tau ceremony: First, create PTau object:: ptau = PTau() Initialize powers of tau ceremony:: ptau.start() Make first contribution:: ptau.contribute() Make second contribution with a name and specified entropy:: ptau.contribute(name="second", entropy="random text") Apply beacon to finalize powers of tau ceremony:: ptau.beacon() Prepare for phase 2:: ptau.prep_phase2() The `PTau` object maintains an underlying powers of tau file throughout these operations. You can also import an existing ptau file:: ptau = PTau(ptau_file="ptau_file.ptau") At any stage, we can verify the powers of tau file is valid:: ptau.verify() Circuit ----------- Start by importing `Circuit`:: from zkpy.circuit import Circuit, PLONK This class uses a circuit defined in a circom file to generate and verify zk proofs. Here is an example scenario walking through compiling a circuit, generating witnesses, generating a proof, and verifying the proof: First, create the circuit object:: circuit = Circuit("./circuit.circom") Compile the circuit:: circuit.compile() Get info about the circuit and print constraints:: circuit.get_info() circuit.print_constraints() Generate witness from an input file:: circuit.gen_witness("./example_circuits/input.json") Setup proof (this requires a previous powers of tau ceremony):: circuit.setup(PLONK, ptau) Generate the proof:: circuit.prove(PLONK) Export verification key:: circuit.export_vkey() Verify proof:: circuit.verify(PLONK, vkey_file="vkey.json", public_file="public.json", proof_file="proof.json")