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()}`,