From 484cd10e5ecc738bb13493ff5dcd54887b3bca46 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sun, 14 Jul 2024 11:45:01 +0800 Subject: [PATCH 1/3] fix MainnetTaikoL1 code too large --- .../protocol/contracts/L1/TaikoEvents.sol | 85 +++++++++++++++++++ packages/protocol/contracts/L1/TaikoL1.sol | 8 +- .../contracts/L1/libs/LibVerifying.sol | 2 +- packages/protocol/script/DeployOnL1.s.sol | 4 +- 4 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 packages/protocol/contracts/L1/TaikoEvents.sol diff --git a/packages/protocol/contracts/L1/TaikoEvents.sol b/packages/protocol/contracts/L1/TaikoEvents.sol new file mode 100644 index 00000000000..01eb0dc7adc --- /dev/null +++ b/packages/protocol/contracts/L1/TaikoEvents.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import "./TaikoData.sol"; + +/// @title TaikoEvents +/// @notice This abstract contract provides event declarations for the Taiko +/// protocol, which are emitted during block proposal, proof, verification, and +/// Ethereum deposit processes. +/// @dev The events defined here must match the definitions in the corresponding +/// L1 libraries. +/// @custom:security-contact security@taiko.xyz +abstract contract TaikoEvents { + /// @notice Emitted when a block is proposed. + /// @param blockId The ID of the proposed block. + /// @param assignedProver The address of the assigned prover. + /// @param livenessBond The liveness bond of the proposed block. + /// @param meta The metadata of the proposed block. + /// @param depositsProcessed The EthDeposit array about processed deposits in this proposed + /// block. + event BlockProposed( + uint256 indexed blockId, + address indexed assignedProver, + uint96 livenessBond, + TaikoData.BlockMetadata meta, + TaikoData.EthDeposit[] depositsProcessed + ); + + /// @notice Emitted when a block's txList is in the calldata. + /// @param blockId The ID of the proposed block. + /// @param txList The txList. + event CalldataTxList(uint256 indexed blockId, bytes txList); + + /// @notice Emitted when some state variable values changed. + /// @dev This event is currently used by Taiko node/client for block proposal/proving. + /// @param slotB The SlotB data structure. + event StateVariablesUpdated(TaikoData.SlotB slotB); + + /// @notice Emitted when a transition is proved. + /// @param blockId The block ID. + /// @param tran The transition data. + /// @param prover The prover's address. + /// @param validityBond The validity bond amount. + /// @param tier The tier of the proof. + event TransitionProved( + uint256 indexed blockId, + TaikoData.Transition tran, + address prover, + uint96 validityBond, + uint16 tier + ); + + /// @notice Emitted when a transition is contested. + /// @param blockId The block ID. + /// @param tran The transition data. + /// @param contester The contester's address. + /// @param contestBond The contest bond amount. + /// @param tier The tier of the proof. + event TransitionContested( + uint256 indexed blockId, + TaikoData.Transition tran, + address contester, + uint96 contestBond, + uint16 tier + ); + + /// @notice Emitted when proving is paused or unpaused. + /// @param paused The pause status. + event ProvingPaused(bool paused); + + /// @dev Emitted when a block is verified. + /// @param blockId The ID of the verified block. + /// @param prover The prover whose transition is used for verifying the + /// block. + /// @param blockHash The hash of the verified block. + /// @param stateRoot Deprecated and is always zero. + /// @param tier The tier ID of the proof. + event BlockVerified( + uint256 indexed blockId, + address indexed prover, + bytes32 blockHash, + bytes32 stateRoot, + uint16 tier + ); +} diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index 64f1dbdfa82..cf8a420dcdb 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -5,6 +5,7 @@ import "../common/EssentialContract.sol"; import "./libs/LibProposing.sol"; import "./libs/LibProving.sol"; import "./libs/LibVerifying.sol"; +import "./TaikoEvents.sol"; import "./ITaikoL1.sol"; /// @title TaikoL1 @@ -16,17 +17,12 @@ import "./ITaikoL1.sol"; /// by the Bridge contract. /// @dev Labeled in AddressResolver as "taiko" /// @custom:security-contact security@taiko.xyz -contract TaikoL1 is EssentialContract, ITaikoL1 { +contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents { /// @notice The TaikoL1 state. TaikoData.State public state; uint256[50] private __gap; - /// @notice Emitted when some state variable values changed. - /// @dev This event is currently used by Taiko node/client for block proposal/proving. - /// @param slotB The SlotB data structure. - event StateVariablesUpdated(TaikoData.SlotB slotB); - error L1_RECEIVE_DISABLED(); modifier whenProvingNotPaused() { diff --git a/packages/protocol/contracts/L1/libs/LibVerifying.sol b/packages/protocol/contracts/L1/libs/LibVerifying.sol index df13a1c5dda..6cb7af423fa 100644 --- a/packages/protocol/contracts/L1/libs/LibVerifying.sol +++ b/packages/protocol/contracts/L1/libs/LibVerifying.sol @@ -39,7 +39,7 @@ library LibVerifying { IAddressResolver _resolver, uint64 _maxBlocksToVerify ) - internal + public { if (_maxBlocksToVerify == 0) { return; diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index 024e24d470e..021993967a0 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -5,7 +5,7 @@ import "@openzeppelin/contracts/utils/Strings.sol"; import "../contracts/common/LibStrings.sol"; import "../contracts/tko/TaikoToken.sol"; -import "../contracts/L1/TaikoL1.sol"; +import "../contracts/mainnet/MainnetTaikoL1.sol"; import "../contracts/L1/provers/GuardianProver.sol"; import "../contracts/L1/tiers/DevnetTierProvider.sol"; import "../contracts/L1/tiers/TierProviderV2.sol"; @@ -247,7 +247,7 @@ contract DeployOnL1 is DeployCapability { deployProxy({ name: "taiko", - impl: address(new TaikoL1()), + impl: address(new MainnetTaikoL1()), data: abi.encodeCall( TaikoL1.init, ( From 00e199767751567f3fea1aa109857f149c4a679c Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sun, 14 Jul 2024 11:47:56 +0800 Subject: [PATCH 2/3] Update TaikoEvents.sol --- packages/protocol/contracts/L1/TaikoEvents.sol | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/protocol/contracts/L1/TaikoEvents.sol b/packages/protocol/contracts/L1/TaikoEvents.sol index 01eb0dc7adc..c3ebf43efcc 100644 --- a/packages/protocol/contracts/L1/TaikoEvents.sol +++ b/packages/protocol/contracts/L1/TaikoEvents.sol @@ -11,6 +11,12 @@ import "./TaikoData.sol"; /// L1 libraries. /// @custom:security-contact security@taiko.xyz abstract contract TaikoEvents { + /// @dev Emitted when token is credited back to a user's bond balance. + event BondCredited(address indexed user, uint256 amount); + + /// @dev Emitted when token is debited from a user's bond balance. + event BondDebited(address indexed user, uint256 amount); + /// @notice Emitted when a block is proposed. /// @param blockId The ID of the proposed block. /// @param assignedProver The address of the assigned prover. @@ -31,11 +37,6 @@ abstract contract TaikoEvents { /// @param txList The txList. event CalldataTxList(uint256 indexed blockId, bytes txList); - /// @notice Emitted when some state variable values changed. - /// @dev This event is currently used by Taiko node/client for block proposal/proving. - /// @param slotB The SlotB data structure. - event StateVariablesUpdated(TaikoData.SlotB slotB); - /// @notice Emitted when a transition is proved. /// @param blockId The block ID. /// @param tran The transition data. @@ -82,4 +83,9 @@ abstract contract TaikoEvents { bytes32 stateRoot, uint16 tier ); + + /// @notice Emitted when some state variable values changed. + /// @dev This event is currently used by Taiko node/client for block proposal/proving. + /// @param slotB The SlotB data structure. + event StateVariablesUpdated(TaikoData.SlotB slotB); } From bdeaa522d32ce3ca8a672135cc492a81284497a4 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sun, 14 Jul 2024 11:49:04 +0800 Subject: [PATCH 3/3] Update DeployOnL1.s.sol --- packages/protocol/script/DeployOnL1.s.sol | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index 021993967a0..ff4d66cc805 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -246,8 +246,22 @@ contract DeployOnL1 is DeployCapability { copyRegister(rollupAddressManager, _sharedAddressManager, "bridge"); deployProxy({ - name: "taiko", + name: "mainnet_taiko", impl: address(new MainnetTaikoL1()), + data: abi.encodeCall( + TaikoL1.init, + ( + owner, + rollupAddressManager, + vm.envBytes32("L2_GENESIS_HASH"), + vm.envBool("PAUSE_TAIKO_L1") + ) + ) + }); + + deployProxy({ + name: "taiko", + impl: address(new TaikoL1()), data: abi.encodeCall( TaikoL1.init, (