Verification of proofs via an off-chain verification service
Proofs can be submitted to a verification service for checking. In order to use a verification service, an endpoint must be obtained from Nebra. (TODO: link)
Proofs can be submitted using the upa command line tool, or programmatically with the Typescript SDK.
Verification using the upatool
Install the tool
The standalone upatool can be installed with:
$npminstall--global@nebrazkp/upa
It should then be available in the shell:
$upaversion2.0.3
Specify a verification service endpoint
The --verify-endpointflag, or the VERIFY_ENDPOINTenv var can be used to specify the URL of the verification service to be queried. It is often convenient to use a .envfile:
VERIFY_ENDPOINT=<endpoint>
Verifying proofs in snarkjs format
Use the upa off-chain verify-snarkjscommand:
$ upa off-chain verify-snarkjs vk.json proof.json
(Use --helpfor the full list of arguments)
Verify proofs in gnark format
Export the VK, proof and inputs to JSON as described here.
Use the upa off-chain verify-gnarkcommand:
Verifying proofs in UPA format
If proofs have already been converted to the UPA format (in particular the AppVkProofInputs format - see the section about proof formats) they can be submitted individually or in batches using the upa off-chain verify command.
Verification using the SDK
In your Typescript project, add the SDK:
The VerifierClientclass can then be used to submit proofs for verification:
Note that vkProofInputsmust be of type `AppVkProofInputs`. See here for information about converting vk and proof formats into instances of this type.