diff --git a/cli.js b/cli.js index 9e40502..17f24cc 100755 --- a/cli.js +++ b/cli.js @@ -446,7 +446,7 @@ function generateVerifier_original(verificationKey) { // The points - template = template.replace("<%vk_input_length%>", (verificationKey.IC.length-1).toString()); + template = template.replace(/<%vk_input_length%>/g, (verificationKey.IC.length-1).toString()); template = template.replace("<%vk_ic_length%>", verificationKey.IC.length.toString()); let vi = ""; for (let i=0; i", (verificationKey.IC.length-1).toString()); + template = template.replace(/<%vk_input_length%>/g, (verificationKey.IC.length-1).toString()); template = template.replace("<%vk_ic_length%>", verificationKey.IC.length.toString()); let vi = ""; for (let i=0; i", (verificationKey.IC.length-1).toString()); + template = template.replace(/<%vk_input_length%>/g, (verificationKey.IC.length-1).toString()); template = template.replace("<%vk_ic_length%>", verificationKey.IC.length.toString()); let vi = ""; for (let i=0; i] calldata inputs) external view returns (bool r) { + // solidity does not support decoding uint[2][2] yet + (uint[2] memory a, uint[2] memory b1, uint[2] memory b2, uint[2] memory c) = abi.decode(proof, (uint[2], uint[2], uint[2], uint[2])); + return verifyProof(a, [b1, b2], c, inputs); + } } diff --git a/templates/verifier_kimleeoh.sol b/templates/verifier_kimleeoh.sol index ece863b..8942416 100644 --- a/templates/verifier_kimleeoh.sol +++ b/templates/verifier_kimleeoh.sol @@ -211,4 +211,9 @@ contract Verifier { return false; } } + function verifyProof(bytes calldata proof, uint[<%vk_input_length%>] calldata inputs) external view returns (bool r) { + // solidity does not support decoding uint[2][2] yet + (uint[2] memory a, uint[2] memory b1, uint[2] memory b2, uint[2] memory c) = abi.decode(proof, (uint[2], uint[2], uint[2], uint[2])); + return verifyProof(a, [b1, b2], c, inputs); + } } diff --git a/templates/verifier_original.sol b/templates/verifier_original.sol index 4340dae..36d4db9 100644 --- a/templates/verifier_original.sol +++ b/templates/verifier_original.sol @@ -238,6 +238,21 @@ contract Verifier { return false; } } + function verifyProof(bytes calldata proof, uint[<%vk_input_length%>] calldata inputs) external view returns (bool r) { + // solidity does not support decoding uint[2][2] yet + ( + uint[2] memory a, + uint[2] memory a_p, + uint[2] memory b1, + uint[2] memory b2, + uint[2] memory b_p, + uint[2] memory c, + uint[2] memory c_p, + uint[2] memory h, + uint[2] memory k + ) = abi.decode(proof, (uint[2], uint[2], uint[2], uint[2], uint[2], uint[2], uint[2], uint[2], uint[2])); + return verifyProof(a, a_p, [b1, b2], b_p, c, c_p, h, k, inputs); + } }