Contracts

Verifiers

Verifier contracts are auto-generated by Barretenberg from compiled circuits. They expose a single function and have no state.

solidity
function verify(
  bytes calldata proof,
  bytes32[] calldata publicInputs
) external view returns (bool);

ShieldVerifier — public inputs

9 inputs: 8 aggregation object zeros followed by the commitment hash.

solidity
bytes32[9] memory inputs;
// inputs[0..7] = 0  (aggregation object)
inputs[8] = bytes32(commitment);

SpendVerifier — public inputs

16 inputs: 8 aggregation zeros, then token, merkleRoot, nullifiers[0], nullifiers[1], newCommitments[0], newCommitments[1], amount, recipient.

solidity
bytes32[16] memory inputs;
// inputs[0..7]  = 0  (aggregation object)
inputs[8]  = bytes32(uint256(uint160(token)));
inputs[9]  = merkleRoot;
inputs[10] = nullifiers[0];
inputs[11] = nullifiers[1];
inputs[12] = newCommitments[0];
inputs[13] = newCommitments[1];
inputs[14] = bytes32(amount);
inputs[15] = bytes32(uint256(uint160(recipient)));