From 8099bd1b1370129a5c9794157aa5028c7b5f29b2 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Sun, 11 Feb 2024 14:37:07 +0800 Subject: [PATCH] feat(protocol): reserve 2 slots for TaikoData.Transition (#15716) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Keszey Dániel Co-authored-by: Brecht Devos --- packages/protocol/contracts/L1/TaikoData.sol | 1 + .../contracts/signal/SignalService.sol | 3 +- .../test/L1/TaikoL1LibProvingWithTiers.t.sol | 3 +- packages/protocol/test/L1/TaikoL1TestBase.sol | 3 +- .../test/verifiers/GuardianVerifier.t.sol | 6 ++-- .../test/verifiers/PseZkVerifier.t.sol | 33 ++++++++++++------- .../protocol/test/verifiers/SgxVerifier.t.sol | 18 ++++++---- 7 files changed, 44 insertions(+), 23 deletions(-) diff --git a/packages/protocol/contracts/L1/TaikoData.sol b/packages/protocol/contracts/L1/TaikoData.sol index e66625c989..d838b51025 100644 --- a/packages/protocol/contracts/L1/TaikoData.sol +++ b/packages/protocol/contracts/L1/TaikoData.sol @@ -121,6 +121,7 @@ library TaikoData { bytes32 blockHash; bytes32 stateRoot; bytes32 graffiti; + bytes32[2] __reserved; } /// @dev Struct representing state transition data. diff --git a/packages/protocol/contracts/signal/SignalService.sol b/packages/protocol/contracts/signal/SignalService.sol index 11e8df6c97..3e4253b514 100644 --- a/packages/protocol/contracts/signal/SignalService.sol +++ b/packages/protocol/contracts/signal/SignalService.sol @@ -124,8 +124,7 @@ contract SignalService is EssentialContract, ISignalService { // If a signal is sent from chainA -> chainB -> chainC (this chain), we verify the proofs in // the following order: // 1. using chainC's latest parent's stateRoot to verify that chainB's TaikoL1/TaikoL2 - // contract has - // sent a given hop stateRoot on chainB using its own signal service. + // contract has sent a given hop stateRoot on chainB using its own signal service. // 2. using the verified hop stateRoot to verify that the source app on chainA has sent a // signal using its own signal service. // We always verify the proofs in the reversed order (top to bottom). diff --git a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol b/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol index a1d35e73d6..bd4e3042cd 100644 --- a/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol +++ b/packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol @@ -790,7 +790,8 @@ contract TaikoL1LibProvingWithTiers is TaikoL1TestBase { parentHash: parentHash, blockHash: blockHash, stateRoot: stateRoot, - graffiti: 0x0 + graffiti: 0x0, + __reserved: [bytes32(0), bytes32(0)] }); TaikoData.TierProof memory proof; diff --git a/packages/protocol/test/L1/TaikoL1TestBase.sol b/packages/protocol/test/L1/TaikoL1TestBase.sol index 14e2c39562..d6c7040056 100644 --- a/packages/protocol/test/L1/TaikoL1TestBase.sol +++ b/packages/protocol/test/L1/TaikoL1TestBase.sol @@ -242,7 +242,8 @@ abstract contract TaikoL1TestBase is TaikoTest { parentHash: parentHash, blockHash: blockHash, stateRoot: stateRoot, - graffiti: 0x0 + graffiti: 0x0, + __reserved: [bytes32(0), bytes32(0)] }); bytes32 instance = diff --git a/packages/protocol/test/verifiers/GuardianVerifier.t.sol b/packages/protocol/test/verifiers/GuardianVerifier.t.sol index 043534e38b..f47fbea716 100644 --- a/packages/protocol/test/verifiers/GuardianVerifier.t.sol +++ b/packages/protocol/test/verifiers/GuardianVerifier.t.sol @@ -32,7 +32,8 @@ contract TestGuardianVerifier is TaikoL1TestBase { parentHash: bytes32(0), blockHash: bytes32(0), stateRoot: bytes32(0), - graffiti: bytes32(0) + graffiti: bytes32(0), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -59,7 +60,8 @@ contract TestGuardianVerifier is TaikoL1TestBase { parentHash: bytes32(0), blockHash: bytes32(0), stateRoot: bytes32(0), - graffiti: bytes32(0) + graffiti: bytes32(0), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof diff --git a/packages/protocol/test/verifiers/PseZkVerifier.t.sol b/packages/protocol/test/verifiers/PseZkVerifier.t.sol index 9225394fd8..03834b1ac4 100644 --- a/packages/protocol/test/verifiers/PseZkVerifier.t.sol +++ b/packages/protocol/test/verifiers/PseZkVerifier.t.sol @@ -50,7 +50,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32(0), blockHash: bytes32(0), stateRoot: bytes32(0), - graffiti: bytes32(0) + graffiti: bytes32(0), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -77,7 +78,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32(0), blockHash: bytes32(0), stateRoot: bytes32(0), - graffiti: bytes32(0) + graffiti: bytes32(0), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -128,7 +130,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -165,7 +168,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -194,7 +198,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -232,7 +237,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -269,7 +275,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -303,7 +310,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -344,7 +352,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -385,7 +394,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -423,7 +433,8 @@ contract TestPseZkVerifier is TaikoL1TestBase { parentHash: bytes32("12"), blockHash: bytes32("23"), stateRoot: bytes32("34"), - graffiti: bytes32("1234") + graffiti: bytes32("1234"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof diff --git a/packages/protocol/test/verifiers/SgxVerifier.t.sol b/packages/protocol/test/verifiers/SgxVerifier.t.sol index 6d125bbcd0..5187eb3325 100644 --- a/packages/protocol/test/verifiers/SgxVerifier.t.sol +++ b/packages/protocol/test/verifiers/SgxVerifier.t.sol @@ -195,7 +195,8 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { parentHash: bytes32("12"), blockHash: bytes32("34"), stateRoot: bytes32("56"), - graffiti: bytes32("78") + graffiti: bytes32("78"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -243,7 +244,8 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { parentHash: bytes32("12"), blockHash: bytes32("34"), stateRoot: bytes32("56"), - graffiti: bytes32("78") + graffiti: bytes32("78"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -274,7 +276,8 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { parentHash: bytes32("12"), blockHash: bytes32("34"), stateRoot: bytes32("56"), - graffiti: bytes32("78") + graffiti: bytes32("78"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -307,7 +310,8 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { parentHash: bytes32("12"), blockHash: bytes32("34"), stateRoot: bytes32("56"), - graffiti: bytes32("78") + graffiti: bytes32("78"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -345,7 +349,8 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { parentHash: bytes32("12"), blockHash: bytes32("34"), stateRoot: bytes32("56"), - graffiti: bytes32("78") + graffiti: bytes32("78"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof @@ -384,7 +389,8 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase { parentHash: bytes32("12"), blockHash: bytes32("34"), stateRoot: bytes32("56"), - graffiti: bytes32("78") + graffiti: bytes32("78"), + __reserved: [bytes32(0), bytes32(0)] }); // TierProof