From 51d1f67aa45fec8e2de73c1ed5a992306c6339c1 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Mon, 30 Jan 2023 18:45:38 +0800 Subject: [PATCH] feat(protocol): enable two dimensional circuit/verifier lookup. (#13066) Co-authored-by: David --- .../protocol/contracts/L1/libs/LibProving.sol | 16 ++++++++++++++-- packages/protocol/tasks/deploy_L1.ts | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/protocol/contracts/L1/libs/LibProving.sol b/packages/protocol/contracts/L1/libs/LibProving.sol index 1e5daf765f..a110647b77 100644 --- a/packages/protocol/contracts/L1/libs/LibProving.sol +++ b/packages/protocol/contracts/L1/libs/LibProving.sol @@ -28,7 +28,9 @@ library LibProving { TaikoData.BlockMetadata meta; BlockHeader header; address prover; - bytes[] proofs; // The first zkProofsPerBlock are ZKPs + bytes[] proofs; // The first zkProofsPerBlock are ZKPs, + // followed by MKPs. + uint16[] circuits; // The circuits IDs (size === zkProofsPerBlock) } bytes32 public constant INVALIDATE_BLOCK_LOG_TOPIC = @@ -58,6 +60,7 @@ library LibProving { // Check and decode inputs require(inputs.length == 3, "L1:inputs:size"); Evidence memory evidence = abi.decode(inputs[0], (Evidence)); + bytes calldata anchorTx = inputs[1]; bytes calldata anchorReceipt = inputs[2]; @@ -69,6 +72,10 @@ library LibProving { evidence.proofs.length == 2 + zkProofsPerBlock, "L1:proof:size" ); + require( + evidence.circuits.length == zkProofsPerBlock, + "L1:circuits:size" + ); { // Check anchor tx is valid @@ -254,7 +261,12 @@ library LibProving { require( proofVerifier.verifyZKP({ verifierId: string( - abi.encodePacked("plonk_verifier_", i) + abi.encodePacked( + "plonk_verifier_", + i, + "_", + evidence.circuits[i] + ) ), zkproof: evidence.proofs[i], blockHash: blockHash, diff --git a/packages/protocol/tasks/deploy_L1.ts b/packages/protocol/tasks/deploy_L1.ts index 4c338b00b6..d05d261ec9 100644 --- a/packages/protocol/tasks/deploy_L1.ts +++ b/packages/protocol/tasks/deploy_L1.ts @@ -197,8 +197,8 @@ export async function deployContracts(hre: any) { `${chainId}.${Buffer.from( ethers.utils.arrayify( ethers.utils.solidityPack( - ["string", "uint256"], - ["plonk_verifier_", 0] + ["string", "uint256", "string", "uint16"], + ["plonk_verifier_", 0, "_", 0] ) ) ).toString()}`,