diff --git a/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol b/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol index d25324fb8b..7591512c06 100644 --- a/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol +++ b/packages/protocol/contracts/mainnet/LibRollupAddressCache.sol @@ -43,6 +43,9 @@ library LibRollupAddressCache { if (_name == LibStrings.B_AUTOMATA_DCAP_ATTESTATION) { return (true, 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3); } + if (_name == LibStrings.B_CHAIN_WATCHDOG) { + return (true, address(0)); + } } return (false, address(0)); } diff --git a/packages/protocol/contracts/mainnet/MainnetGuardianProver.sol b/packages/protocol/contracts/mainnet/MainnetGuardianProver.sol new file mode 100644 index 0000000000..7d8849cb28 --- /dev/null +++ b/packages/protocol/contracts/mainnet/MainnetGuardianProver.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import "../L1/provers/GuardianProver.sol"; +import "./LibRollupAddressCache.sol"; + +/// @title MainnetGuardianProver +/// @dev This contract shall be deployed to replace its parent contract on Ethereum for Taiko +/// mainnet to reduce gas cost. +/// @notice See the documentation in {GuardianProver}. +/// @custom:security-contact security@taiko.xyz +contract MainnetGuardianProver is GuardianProver { + function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { + (bool found, address addr) = LibRollupAddressCache.getAddress(_chainId, _name); + return found ? addr : super._getAddress(_chainId, _name); + } +} diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index e586d20346..eb9d2f2ea8 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -17,6 +17,7 @@ import "../contracts/mainnet/MainnetERC20Vault.sol"; import "../contracts/mainnet/MainnetERC1155Vault.sol"; import "../contracts/mainnet/MainnetERC721Vault.sol"; import "../contracts/mainnet/MainnetSignalService.sol"; +import "../contracts/mainnet/MainnetGuardianProver.sol"; import "../contracts/automata-attestation/AutomataDcapV3Attestation.sol"; import "../contracts/automata-attestation/utils/SigVerifyLib.sol"; import "../contracts/automata-attestation/lib/PEMCertChainLib.sol"; @@ -312,6 +313,12 @@ contract DeployOnL1 is DeployCapability { registerTo: rollupAddressManager }); + deployProxy({ + name: "mainnet_guardian_prover_minority", + impl: address(new MainnetGuardianProver()), + data: abi.encodeCall(GuardianProver.init, (address(0), rollupAddressManager)) + }); + address guardianProverImpl = address(new GuardianProver()); address guardianProverMinority = deployProxy({