From cdc0f703e533343542e5a5ae0b8fba101c55440f Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 21:36:01 +0800 Subject: [PATCH 01/11] Create L1ProverSet.sol --- .../contracts/mainnet/L1ProverSet.sol | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/protocol/contracts/mainnet/L1ProverSet.sol diff --git a/packages/protocol/contracts/mainnet/L1ProverSet.sol b/packages/protocol/contracts/mainnet/L1ProverSet.sol new file mode 100644 index 0000000000..2ce24a93b6 --- /dev/null +++ b/packages/protocol/contracts/mainnet/L1ProverSet.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import "../team/proving/ProverSet.sol"; + +/// @title L1RollupAddressManager +/// @notice See the documentation in {IAddressManager}. +/// @dev This contract shall NOT be used to upgrade existing implementation unless the name-address +/// registration becomes stable in 0x579f40D0BE111b823962043702cabe6Aaa290780. +/// @custom:security-contact security@taiko.xyz +contract L1ProverSet is ProverSet { + function taikoL1() internal pure override returns (address) { + return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; + } + + function tkoToken() internal pure override returns (address) { + return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; + } +} From 2e53985eea0feba80868e9eaeadc58416101befd Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 21:38:30 +0800 Subject: [PATCH 02/11] more --- packages/protocol/contracts/mainnet/L1ProverSet.sol | 6 ++---- .../protocol/contracts/mainnet/L1RollupAddressManager.sol | 2 -- .../protocol/contracts/mainnet/L1SharedAddressManager.sol | 2 -- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/protocol/contracts/mainnet/L1ProverSet.sol b/packages/protocol/contracts/mainnet/L1ProverSet.sol index 2ce24a93b6..ad39d4a1f6 100644 --- a/packages/protocol/contracts/mainnet/L1ProverSet.sol +++ b/packages/protocol/contracts/mainnet/L1ProverSet.sol @@ -3,10 +3,8 @@ pragma solidity 0.8.24; import "../team/proving/ProverSet.sol"; -/// @title L1RollupAddressManager -/// @notice See the documentation in {IAddressManager}. -/// @dev This contract shall NOT be used to upgrade existing implementation unless the name-address -/// registration becomes stable in 0x579f40D0BE111b823962043702cabe6Aaa290780. +/// @title L1ProverSet +/// @notice See the documentation in {ProverSet}. /// @custom:security-contact security@taiko.xyz contract L1ProverSet is ProverSet { function taikoL1() internal pure override returns (address) { diff --git a/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol b/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol index 24927d5347..e553a0c81e 100644 --- a/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol +++ b/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol @@ -6,8 +6,6 @@ import "../common/LibStrings.sol"; /// @title L1RollupAddressManager /// @notice See the documentation in {IAddressManager}. -/// @dev This contract shall NOT be used to upgrade existing implementation unless the name-address -/// registration becomes stable in 0x579f40D0BE111b823962043702cabe6Aaa290780. /// @custom:security-contact security@taiko.xyz contract L1RollupAddressManager is AddressManager { /// @notice Gets the address mapped to a specific chainId-name pair. diff --git a/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol b/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol index 32677bafa9..41b038a2db 100644 --- a/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol +++ b/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol @@ -6,8 +6,6 @@ import "../common/LibStrings.sol"; /// @title L1SharedAddressManager /// @notice See the documentation in {IAddressManager}. -/// @dev This contract shall NOT be used to upgrade existing implementation unless the name-address -/// registration becomes stable in 0xEf9EaA1dd30a9AA1df01c36411b5F082aA65fBaa. /// @custom:security-contact security@taiko.xyz contract L1SharedAddressManager is AddressManager { /// @notice Gets the address mapped to a specific chainId-name pair. From 1bbf568b72c6707648ff1071b5fe0380fdcb78fe Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 22:22:55 +0800 Subject: [PATCH 03/11] more --- .../contracts/common/AddressManager.sol | 8 +---- .../contracts/common/AddressResolver.sol | 28 ++++++++--------- .../contracts/common/IAddressResolver.sol | 10 ++----- .../contracts/mainnet/CachedProverSet.sol | 21 +++++++++++++ .../contracts/mainnet/CachedTaikoL1.sol | 24 +++++++++++++++ .../contracts/mainnet/L1ProverSet.sol | 17 ----------- .../mainnet/L1RollupAddressManager.sol | 20 +++---------- .../mainnet/L1SharedAddressManager.sol | 20 +++---------- .../contracts/team/proving/ProverSet.sol | 30 +++++++++---------- 9 files changed, 83 insertions(+), 95 deletions(-) create mode 100644 packages/protocol/contracts/mainnet/CachedProverSet.sol create mode 100644 packages/protocol/contracts/mainnet/CachedTaikoL1.sol delete mode 100644 packages/protocol/contracts/mainnet/L1ProverSet.sol diff --git a/packages/protocol/contracts/common/AddressManager.sol b/packages/protocol/contracts/common/AddressManager.sol index 91ab17e86d..5f0e1c1d37 100644 --- a/packages/protocol/contracts/common/AddressManager.sol +++ b/packages/protocol/contracts/common/AddressManager.sol @@ -55,14 +55,8 @@ contract AddressManager is EssentialContract, IAddressManager { /// @inheritdoc IAddressManager function getAddress(uint64 _chainId, bytes32 _name) external view override returns (address) { - address addr = _getOverride(_chainId, _name); - if (addr != address(0)) return addr; - else return __addresses[_chainId][_name]; + return __addresses[_chainId][_name]; } - /// @notice Gets the address mapped to a specific chainId-name pair. - /// @dev Sub-contracts can override this method to avoid reading from storage. - function _getOverride(uint64 _chainId, bytes32 _name) internal pure virtual returns (address) { } - function _authorizePause(address, bool) internal pure override notImplemented { } } diff --git a/packages/protocol/contracts/common/AddressResolver.sol b/packages/protocol/contracts/common/AddressResolver.sol index 27f88b2a22..eaad49760a 100644 --- a/packages/protocol/contracts/common/AddressResolver.sol +++ b/packages/protocol/contracts/common/AddressResolver.sol @@ -43,15 +43,7 @@ abstract contract AddressResolver is IAddressResolver, Initializable { } /// @inheritdoc IAddressResolver - function resolve( - bytes32 _name, - bool _allowZeroAddress - ) - public - view - virtual - returns (address payable) - { + function resolve(bytes32 _name, bool _allowZeroAddress) public view virtual returns (address) { return _resolve(uint64(block.chainid), _name, _allowZeroAddress); } @@ -64,7 +56,7 @@ abstract contract AddressResolver is IAddressResolver, Initializable { public view virtual - returns (address payable) + returns (address) { return _resolve(_chainId, _name, _allowZeroAddress); } @@ -90,17 +82,21 @@ abstract contract AddressResolver is IAddressResolver, Initializable { bytes32 _name, bool _allowZeroAddress ) - private + internal view - returns (address payable addr_) + returns (address addr_) { - address _addressManager = addressManager; - if (_addressManager == address(0)) revert RESOLVER_INVALID_MANAGER(); - - addr_ = payable(IAddressManager(_addressManager).getAddress(_chainId, _name)); + addr_ = _getAddress(_chainId, _name); if (!_allowZeroAddress && addr_ == address(0)) { revert RESOLVER_ZERO_ADDR(_chainId, _name); } } + + function _getAddress(uint64 _chainId, bytes32 _name) internal view virtual returns (address) { + address _addressManager = addressManager; + if (_addressManager == address(0)) revert RESOLVER_INVALID_MANAGER(); + + return IAddressManager(_addressManager).getAddress(_chainId, _name); + } } diff --git a/packages/protocol/contracts/common/IAddressResolver.sol b/packages/protocol/contracts/common/IAddressResolver.sol index 886e123e1b..85e23f64ab 100644 --- a/packages/protocol/contracts/common/IAddressResolver.sol +++ b/packages/protocol/contracts/common/IAddressResolver.sol @@ -16,13 +16,7 @@ interface IAddressResolver { /// @param _allowZeroAddress If set to true, does not throw if the resolved /// address is `address(0)`. /// @return Address associated with the given name. - function resolve( - bytes32 _name, - bool _allowZeroAddress - ) - external - view - returns (address payable); + function resolve(bytes32 _name, bool _allowZeroAddress) external view returns (address); /// @notice Resolves a name to its address deployed on a specified chain. /// @param _chainId The chainId of interest. @@ -38,5 +32,5 @@ interface IAddressResolver { ) external view - returns (address payable); + returns (address); } diff --git a/packages/protocol/contracts/mainnet/CachedProverSet.sol b/packages/protocol/contracts/mainnet/CachedProverSet.sol new file mode 100644 index 0000000000..1148626ed5 --- /dev/null +++ b/packages/protocol/contracts/mainnet/CachedProverSet.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import "../team/proving/ProverSet.sol"; + +/// @title CachedProverSet +/// @notice See the documentation in {ProverSet}. +/// @custom:security-contact security@taiko.xyz +contract CachedProverSet is ProverSet { + function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { + if (_chainId == 1) { + if (_name == LibStrings.B_TAIKO_TOKEN) { + return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; + } + if (_name == LibStrings.B_TAIKO) { + return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; + } + } + return super._getAddress(_chainId, _name); + } +} diff --git a/packages/protocol/contracts/mainnet/CachedTaikoL1.sol b/packages/protocol/contracts/mainnet/CachedTaikoL1.sol new file mode 100644 index 0000000000..d9e9a81cfe --- /dev/null +++ b/packages/protocol/contracts/mainnet/CachedTaikoL1.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import "../L1/TaikoL1.sol"; + +/// @title CachedTaikoL1 +/// @notice See the documentation in {TaikoL1}. +/// @custom:security-contact security@taiko.xyz +contract CachedTaikoL1 is TaikoL1 { + function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { + if (_chainId == 1) { + if (_name == LibStrings.B_TAIKO_TOKEN) { + return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; + } + if (_name == LibStrings.B_SIGNAL_SERVICE) { + return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; + } + if (_name == LibStrings.B_TIER_ROUTER) { + return 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a; + } + } + return super._getAddress(_chainId, _name); + } +} diff --git a/packages/protocol/contracts/mainnet/L1ProverSet.sol b/packages/protocol/contracts/mainnet/L1ProverSet.sol deleted file mode 100644 index ad39d4a1f6..0000000000 --- a/packages/protocol/contracts/mainnet/L1ProverSet.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.24; - -import "../team/proving/ProverSet.sol"; - -/// @title L1ProverSet -/// @notice See the documentation in {ProverSet}. -/// @custom:security-contact security@taiko.xyz -contract L1ProverSet is ProverSet { - function taikoL1() internal pure override returns (address) { - return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; - } - - function tkoToken() internal pure override returns (address) { - return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; - } -} diff --git a/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol b/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol index e553a0c81e..cbce51eebb 100644 --- a/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol +++ b/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol @@ -4,23 +4,11 @@ pragma solidity 0.8.24; import "../common/AddressManager.sol"; import "../common/LibStrings.sol"; -/// @title L1RollupAddressManager +/// @title CachedRollupAddressManager /// @notice See the documentation in {IAddressManager}. /// @custom:security-contact security@taiko.xyz -contract L1RollupAddressManager is AddressManager { - /// @notice Gets the address mapped to a specific chainId-name pair. - /// @dev Sub-contracts can override this method to avoid reading from storage. - /// Some names are not cached as they are not used frequently or - /// its address is likely to change. - function _getOverride( - uint64 _chainId, - bytes32 _name - ) - internal - pure - override - returns (address addr_) - { +contract CachedRollupAddressManager is AddressManager { + function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; @@ -50,6 +38,6 @@ contract L1RollupAddressManager is AddressManager { return 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a; } } - return address(0); + return super._getAddress(_chainId, _name); } } diff --git a/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol b/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol index 41b038a2db..99a4ab01c6 100644 --- a/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol +++ b/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol @@ -4,23 +4,11 @@ pragma solidity 0.8.24; import "../common/AddressManager.sol"; import "../common/LibStrings.sol"; -/// @title L1SharedAddressManager +/// @title CachedSharedAddressManager /// @notice See the documentation in {IAddressManager}. /// @custom:security-contact security@taiko.xyz -contract L1SharedAddressManager is AddressManager { - /// @notice Gets the address mapped to a specific chainId-name pair. - /// @dev Sub-contracts can override this method to avoid reading from storage. - /// Some names are not cached as they are not used frequently or - /// its address is likely to change. - function _getOverride( - uint64 _chainId, - bytes32 _name - ) - internal - pure - override - returns (address addr_) - { +contract CachedSharedAddressManager is AddressManager { + function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; @@ -61,6 +49,6 @@ contract L1SharedAddressManager is AddressManager { } } - return address(0); + return super._getAddress(_chainId, _name); } } diff --git a/packages/protocol/contracts/team/proving/ProverSet.sol b/packages/protocol/contracts/team/proving/ProverSet.sol index 7eb1537a22..84acdf10c9 100644 --- a/packages/protocol/contracts/team/proving/ProverSet.sol +++ b/packages/protocol/contracts/team/proving/ProverSet.sol @@ -15,7 +15,7 @@ interface IHasRecipient { /// @title ProverSet /// @notice A contract that holds TKO token and acts as a Taiko prover. This contract will simply -/// relay `proveBlock` calls to TaikoL1 so msg.sender doesn't need to hold any TKO. +/// relay `proveBlock` calls to _taikoL1 so msg.sender doesn't need to hold any TKO. /// @custom:security-contact security@taiko.xyz contract ProverSet is EssentialContract, IERC1271 { bytes4 private constant _EIP1271_MAGICVALUE = 0x1626ba7e; @@ -54,14 +54,14 @@ contract ProverSet is EssentialContract, IERC1271 { { __Essential_init(_owner, _addressManager); admin = _admin; - IERC20(tkoToken()).approve(taikoL1(), type(uint256).max); + _tko().approve(address(_taikoL1()), type(uint256).max); } /// @notice Receives ETH as fees. receive() external payable { } function approveAllowance(address _address, uint256 _allowance) external onlyOwner { - IERC20(tkoToken()).approve(_address, _allowance); + _tko().approve(_address, _allowance); } /// @notice Enables or disables a prover. @@ -74,7 +74,7 @@ contract ProverSet is EssentialContract, IERC1271 { /// @notice Withdraws Taiko tokens back to the admin address. function withdrawToAdmin(uint256 _amount) external onlyAuthorized { - IERC20(tkoToken()).transfer(admin, _amount); + _tko().transfer(admin, _amount); } /// @notice Propose a Taiko block. @@ -87,28 +87,28 @@ contract ProverSet is EssentialContract, IERC1271 { onlyProver nonReentrant { - ITaikoL1(taikoL1()).proposeBlock(_params, _txList); + _taikoL1().proposeBlock(_params, _txList); } /// @notice Proves or contests a Taiko block. function proveBlock(uint64 _blockId, bytes calldata _input) external onlyProver nonReentrant { - ITaikoL1(taikoL1()).proveBlock(_blockId, _input); + _taikoL1().proveBlock(_blockId, _input); } - /// @notice Deposits Taiko token to TaikoL1 contract. + /// @notice Deposits Taiko token to _taikoL1 contract. function depositBond(uint256 _amount) external onlyAuthorized nonReentrant { - ITaikoL1(taikoL1()).depositBond(_amount); + _taikoL1().depositBond(_amount); } - /// @notice Withdraws Taiko token from TaikoL1 contract. + /// @notice Withdraws Taiko token from _taikoL1 contract. function withdrawBond(uint256 _amount) external onlyAuthorized nonReentrant { - ITaikoL1(taikoL1()).withdrawBond(_amount); + _taikoL1().withdrawBond(_amount); } /// @notice Delegates token voting right to a delegatee. /// @param _delegatee The delegatee to receive the voting right. function delegate(address _delegatee) external onlyAuthorized nonReentrant { - ERC20VotesUpgradeable(tkoToken()).delegate(_delegatee); + _tko().delegate(_delegatee); } // This function is necessary for this contract to become an assigned prover. @@ -126,11 +126,11 @@ contract ProverSet is EssentialContract, IERC1271 { } } - function taikoL1() internal view virtual returns (address) { - return resolve(LibStrings.B_TAIKO, false); + function _taikoL1() private view returns (ITaikoL1) { + return ITaikoL1(resolve(LibStrings.B_TAIKO, false)); } - function tkoToken() internal view virtual returns (address) { - return resolve(LibStrings.B_TAIKO_TOKEN, false); + function _tko() private view returns (ERC20VotesUpgradeable) { + return ERC20VotesUpgradeable(resolve(LibStrings.B_TAIKO_TOKEN, false)); } } From 9f6302a954c0e40e3daa20d5ddfc6e2eb5d401f5 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 22:23:31 +0800 Subject: [PATCH 04/11] more --- ...{L1RollupAddressManager.sol => CachedRollupAddressManager.sol} | 0 ...{L1SharedAddressManager.sol => CachedSharedAddressManager.sol} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/protocol/contracts/mainnet/{L1RollupAddressManager.sol => CachedRollupAddressManager.sol} (100%) rename packages/protocol/contracts/mainnet/{L1SharedAddressManager.sol => CachedSharedAddressManager.sol} (100%) diff --git a/packages/protocol/contracts/mainnet/L1RollupAddressManager.sol b/packages/protocol/contracts/mainnet/CachedRollupAddressManager.sol similarity index 100% rename from packages/protocol/contracts/mainnet/L1RollupAddressManager.sol rename to packages/protocol/contracts/mainnet/CachedRollupAddressManager.sol diff --git a/packages/protocol/contracts/mainnet/L1SharedAddressManager.sol b/packages/protocol/contracts/mainnet/CachedSharedAddressManager.sol similarity index 100% rename from packages/protocol/contracts/mainnet/L1SharedAddressManager.sol rename to packages/protocol/contracts/mainnet/CachedSharedAddressManager.sol From 54421a0a5c7ad95121ee4e8a0c74b1869b7ff629 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 22:27:36 +0800 Subject: [PATCH 05/11] Update ProverSet.sol --- packages/protocol/contracts/team/proving/ProverSet.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/contracts/team/proving/ProverSet.sol b/packages/protocol/contracts/team/proving/ProverSet.sol index 84acdf10c9..103da7f863 100644 --- a/packages/protocol/contracts/team/proving/ProverSet.sol +++ b/packages/protocol/contracts/team/proving/ProverSet.sol @@ -15,7 +15,7 @@ interface IHasRecipient { /// @title ProverSet /// @notice A contract that holds TKO token and acts as a Taiko prover. This contract will simply -/// relay `proveBlock` calls to _taikoL1 so msg.sender doesn't need to hold any TKO. +/// relay `proveBlock` calls to TaikoL1 so msg.sender doesn't need to hold any TKO. /// @custom:security-contact security@taiko.xyz contract ProverSet is EssentialContract, IERC1271 { bytes4 private constant _EIP1271_MAGICVALUE = 0x1626ba7e; From bf7142e510a0cc676374ccc498de9aa294192962 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 22:29:16 +0800 Subject: [PATCH 06/11] Update ProverSet.sol --- .../contracts/team/proving/ProverSet.sol | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/protocol/contracts/team/proving/ProverSet.sol b/packages/protocol/contracts/team/proving/ProverSet.sol index 103da7f863..3d1ccca625 100644 --- a/packages/protocol/contracts/team/proving/ProverSet.sol +++ b/packages/protocol/contracts/team/proving/ProverSet.sol @@ -54,14 +54,14 @@ contract ProverSet is EssentialContract, IERC1271 { { __Essential_init(_owner, _addressManager); admin = _admin; - _tko().approve(address(_taikoL1()), type(uint256).max); + IERC20(_tkoToken()).approve(_taikoL1(), type(uint256).max); } /// @notice Receives ETH as fees. receive() external payable { } function approveAllowance(address _address, uint256 _allowance) external onlyOwner { - _tko().approve(_address, _allowance); + IERC20(_tkoToken()).approve(_address, _allowance); } /// @notice Enables or disables a prover. @@ -74,7 +74,7 @@ contract ProverSet is EssentialContract, IERC1271 { /// @notice Withdraws Taiko tokens back to the admin address. function withdrawToAdmin(uint256 _amount) external onlyAuthorized { - _tko().transfer(admin, _amount); + IERC20(_tkoToken()).transfer(admin, _amount); } /// @notice Propose a Taiko block. @@ -87,28 +87,28 @@ contract ProverSet is EssentialContract, IERC1271 { onlyProver nonReentrant { - _taikoL1().proposeBlock(_params, _txList); + ITaikoL1(_taikoL1()).proposeBlock(_params, _txList); } /// @notice Proves or contests a Taiko block. function proveBlock(uint64 _blockId, bytes calldata _input) external onlyProver nonReentrant { - _taikoL1().proveBlock(_blockId, _input); + ITaikoL1(_taikoL1()).proveBlock(_blockId, _input); } - /// @notice Deposits Taiko token to _taikoL1 contract. + /// @notice Deposits Taiko token to TaikoL1 contract. function depositBond(uint256 _amount) external onlyAuthorized nonReentrant { - _taikoL1().depositBond(_amount); + ITaikoL1(_taikoL1()).depositBond(_amount); } - /// @notice Withdraws Taiko token from _taikoL1 contract. + /// @notice Withdraws Taiko token from TaikoL1 contract. function withdrawBond(uint256 _amount) external onlyAuthorized nonReentrant { - _taikoL1().withdrawBond(_amount); + ITaikoL1(_taikoL1()).withdrawBond(_amount); } /// @notice Delegates token voting right to a delegatee. /// @param _delegatee The delegatee to receive the voting right. function delegate(address _delegatee) external onlyAuthorized nonReentrant { - _tko().delegate(_delegatee); + ERC20VotesUpgradeable(_tkoToken()).delegate(_delegatee); } // This function is necessary for this contract to become an assigned prover. @@ -126,11 +126,11 @@ contract ProverSet is EssentialContract, IERC1271 { } } - function _taikoL1() private view returns (ITaikoL1) { - return ITaikoL1(resolve(LibStrings.B_TAIKO, false)); + function _taikoL1() private view returns (address) { + return resolve(LibStrings.B_TAIKO, false); } - function _tko() private view returns (ERC20VotesUpgradeable) { - return ERC20VotesUpgradeable(resolve(LibStrings.B_TAIKO_TOKEN, false)); + function _tkoToken() private view returns (address) { + return resolve(LibStrings.B_TAIKO_TOKEN, false); } } From 4ebe4b640f89b02cdb7973c1146d85a354d9f259 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 22:36:09 +0800 Subject: [PATCH 07/11] Update ProverSet.sol --- .../contracts/team/proving/ProverSet.sol | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/protocol/contracts/team/proving/ProverSet.sol b/packages/protocol/contracts/team/proving/ProverSet.sol index 3d1ccca625..5496b1c253 100644 --- a/packages/protocol/contracts/team/proving/ProverSet.sol +++ b/packages/protocol/contracts/team/proving/ProverSet.sol @@ -54,14 +54,14 @@ contract ProverSet is EssentialContract, IERC1271 { { __Essential_init(_owner, _addressManager); admin = _admin; - IERC20(_tkoToken()).approve(_taikoL1(), type(uint256).max); + IERC20(tkoToken()).approve(taikoL1(), type(uint256).max); } /// @notice Receives ETH as fees. receive() external payable { } function approveAllowance(address _address, uint256 _allowance) external onlyOwner { - IERC20(_tkoToken()).approve(_address, _allowance); + IERC20(tkoToken()).approve(_address, _allowance); } /// @notice Enables or disables a prover. @@ -74,7 +74,7 @@ contract ProverSet is EssentialContract, IERC1271 { /// @notice Withdraws Taiko tokens back to the admin address. function withdrawToAdmin(uint256 _amount) external onlyAuthorized { - IERC20(_tkoToken()).transfer(admin, _amount); + IERC20(tkoToken()).transfer(admin, _amount); } /// @notice Propose a Taiko block. @@ -87,28 +87,28 @@ contract ProverSet is EssentialContract, IERC1271 { onlyProver nonReentrant { - ITaikoL1(_taikoL1()).proposeBlock(_params, _txList); + ITaikoL1(taikoL1()).proposeBlock(_params, _txList); } /// @notice Proves or contests a Taiko block. function proveBlock(uint64 _blockId, bytes calldata _input) external onlyProver nonReentrant { - ITaikoL1(_taikoL1()).proveBlock(_blockId, _input); + ITaikoL1(taikoL1()).proveBlock(_blockId, _input); } /// @notice Deposits Taiko token to TaikoL1 contract. function depositBond(uint256 _amount) external onlyAuthorized nonReentrant { - ITaikoL1(_taikoL1()).depositBond(_amount); + ITaikoL1(taikoL1()).depositBond(_amount); } /// @notice Withdraws Taiko token from TaikoL1 contract. function withdrawBond(uint256 _amount) external onlyAuthorized nonReentrant { - ITaikoL1(_taikoL1()).withdrawBond(_amount); + ITaikoL1(taikoL1()).withdrawBond(_amount); } /// @notice Delegates token voting right to a delegatee. /// @param _delegatee The delegatee to receive the voting right. function delegate(address _delegatee) external onlyAuthorized nonReentrant { - ERC20VotesUpgradeable(_tkoToken()).delegate(_delegatee); + ERC20VotesUpgradeable(tkoToken()).delegate(_delegatee); } // This function is necessary for this contract to become an assigned prover. @@ -126,11 +126,11 @@ contract ProverSet is EssentialContract, IERC1271 { } } - function _taikoL1() private view returns (address) { + function taikoL1() private view returns (address) { return resolve(LibStrings.B_TAIKO, false); } - function _tkoToken() private view returns (address) { + function tkoToken() private view returns (address) { return resolve(LibStrings.B_TAIKO_TOKEN, false); } } From e03bbd5dcdc644b1f196d50158fa487f3bd43800 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 13 Jul 2024 22:36:46 +0800 Subject: [PATCH 08/11] Update ProverSet.sol --- packages/protocol/contracts/team/proving/ProverSet.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/protocol/contracts/team/proving/ProverSet.sol b/packages/protocol/contracts/team/proving/ProverSet.sol index 5496b1c253..7eb1537a22 100644 --- a/packages/protocol/contracts/team/proving/ProverSet.sol +++ b/packages/protocol/contracts/team/proving/ProverSet.sol @@ -126,11 +126,11 @@ contract ProverSet is EssentialContract, IERC1271 { } } - function taikoL1() private view returns (address) { + function taikoL1() internal view virtual returns (address) { return resolve(LibStrings.B_TAIKO, false); } - function tkoToken() private view returns (address) { + function tkoToken() internal view virtual returns (address) { return resolve(LibStrings.B_TAIKO_TOKEN, false); } } From a5c867a289ac961f6407a6f4b3d4f5a4dc564e3c Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sun, 14 Jul 2024 08:52:31 +0800 Subject: [PATCH 09/11] rename --- .../{L1/TaikoL1Hekla.sol => hekla/HeklaTaikoL1.sol} | 6 +++--- .../mainnet/{CachedProverSet.sol => MainnetProverSet.sol} | 4 ++-- ...upAddressManager.sol => MainnetRollupAddressManager.sol} | 4 ++-- ...edAddressManager.sol => MainnetSharedAddressManager.sol} | 4 ++-- .../mainnet/{CachedTaikoL1.sol => MainnetTaikoL1.sol} | 4 ++-- packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol | 5 +++-- 6 files changed, 14 insertions(+), 13 deletions(-) rename packages/protocol/contracts/{L1/TaikoL1Hekla.sol => hekla/HeklaTaikoL1.sol} (90%) rename packages/protocol/contracts/mainnet/{CachedProverSet.sol => MainnetProverSet.sol} (90%) rename packages/protocol/contracts/mainnet/{CachedRollupAddressManager.sol => MainnetRollupAddressManager.sol} (94%) rename packages/protocol/contracts/mainnet/{CachedSharedAddressManager.sol => MainnetSharedAddressManager.sol} (95%) rename packages/protocol/contracts/mainnet/{CachedTaikoL1.sol => MainnetTaikoL1.sol} (92%) diff --git a/packages/protocol/contracts/L1/TaikoL1Hekla.sol b/packages/protocol/contracts/hekla/HeklaTaikoL1.sol similarity index 90% rename from packages/protocol/contracts/L1/TaikoL1Hekla.sol rename to packages/protocol/contracts/hekla/HeklaTaikoL1.sol index 75ecc6f598..4a809824d6 100644 --- a/packages/protocol/contracts/L1/TaikoL1Hekla.sol +++ b/packages/protocol/contracts/hekla/HeklaTaikoL1.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.24; -import "./TaikoL1.sol"; +import "../L1/TaikoL1.sol"; -/// @title TaikoL1Hekla +/// @title HeklaTaikoL1 /// @dev Labeled in AddressResolver as "taiko" /// @custom:security-contact security@taiko.xyz -contract TaikoL1Hekla is TaikoL1 { +contract HeklaTaikoL1 is TaikoL1 { /// @inheritdoc ITaikoL1 function getConfig() public pure override returns (TaikoData.Config memory) { return TaikoData.Config({ diff --git a/packages/protocol/contracts/mainnet/CachedProverSet.sol b/packages/protocol/contracts/mainnet/MainnetProverSet.sol similarity index 90% rename from packages/protocol/contracts/mainnet/CachedProverSet.sol rename to packages/protocol/contracts/mainnet/MainnetProverSet.sol index 1148626ed5..a3b2bd5cd9 100644 --- a/packages/protocol/contracts/mainnet/CachedProverSet.sol +++ b/packages/protocol/contracts/mainnet/MainnetProverSet.sol @@ -3,10 +3,10 @@ pragma solidity 0.8.24; import "../team/proving/ProverSet.sol"; -/// @title CachedProverSet +/// @title MainnetProverSet /// @notice See the documentation in {ProverSet}. /// @custom:security-contact security@taiko.xyz -contract CachedProverSet is ProverSet { +contract MainnetProverSet is ProverSet { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { diff --git a/packages/protocol/contracts/mainnet/CachedRollupAddressManager.sol b/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol similarity index 94% rename from packages/protocol/contracts/mainnet/CachedRollupAddressManager.sol rename to packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol index cbce51eebb..f9bba068a9 100644 --- a/packages/protocol/contracts/mainnet/CachedRollupAddressManager.sol +++ b/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol @@ -4,10 +4,10 @@ pragma solidity 0.8.24; import "../common/AddressManager.sol"; import "../common/LibStrings.sol"; -/// @title CachedRollupAddressManager +/// @title MainnetRollupAddressManager /// @notice See the documentation in {IAddressManager}. /// @custom:security-contact security@taiko.xyz -contract CachedRollupAddressManager is AddressManager { +contract MainnetRollupAddressManager is AddressManager { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { diff --git a/packages/protocol/contracts/mainnet/CachedSharedAddressManager.sol b/packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol similarity index 95% rename from packages/protocol/contracts/mainnet/CachedSharedAddressManager.sol rename to packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol index 99a4ab01c6..1d25b44103 100644 --- a/packages/protocol/contracts/mainnet/CachedSharedAddressManager.sol +++ b/packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol @@ -4,10 +4,10 @@ pragma solidity 0.8.24; import "../common/AddressManager.sol"; import "../common/LibStrings.sol"; -/// @title CachedSharedAddressManager +/// @title MainnetSharedAddressManager /// @notice See the documentation in {IAddressManager}. /// @custom:security-contact security@taiko.xyz -contract CachedSharedAddressManager is AddressManager { +contract MainnetSharedAddressManager is AddressManager { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { diff --git a/packages/protocol/contracts/mainnet/CachedTaikoL1.sol b/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol similarity index 92% rename from packages/protocol/contracts/mainnet/CachedTaikoL1.sol rename to packages/protocol/contracts/mainnet/MainnetTaikoL1.sol index d9e9a81cfe..48408cfd8a 100644 --- a/packages/protocol/contracts/mainnet/CachedTaikoL1.sol +++ b/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol @@ -3,10 +3,10 @@ pragma solidity 0.8.24; import "../L1/TaikoL1.sol"; -/// @title CachedTaikoL1 +/// @title MainnetTaikoL1 /// @notice See the documentation in {TaikoL1}. /// @custom:security-contact security@taiko.xyz -contract CachedTaikoL1 is TaikoL1 { +contract MainnetTaikoL1 is TaikoL1 { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { diff --git a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol b/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol index 2a4884c099..6b6f5c4a2f 100644 --- a/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol +++ b/packages/protocol/script/upgrade/UpgradeTaikoL1.s.sol @@ -3,11 +3,12 @@ pragma solidity 0.8.24; import "forge-std/src/Script.sol"; import "forge-std/src/console2.sol"; -import "../../contracts/L1/TaikoL1Hekla.sol"; + +import "../../contracts/hekla/HeklaTaikoL1.sol"; import "./UpgradeScript.s.sol"; contract UpgradeTaikoL1 is UpgradeScript { function run() external setUp { - upgrade("TaikoL1", address(new TaikoL1Hekla())); + upgrade("HeklaTaikoL1", address(new HeklaTaikoL1())); } } From ac422a529bd13ef702fc6c9f2624c8019c378f9c Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sun, 14 Jul 2024 09:10:31 +0800 Subject: [PATCH 10/11] more --- .../contracts/mainnet/LibAddressCache.sol | 41 +++++++++++++++++++ .../contracts/mainnet/MainnetProverSet.sol | 12 ++---- .../mainnet/MainnetRollupAddressManager.sol | 33 ++------------- .../mainnet/MainnetSharedAddressManager.sol | 8 ++-- .../contracts/mainnet/MainnetTaikoL1.sol | 15 ++----- 5 files changed, 54 insertions(+), 55 deletions(-) create mode 100644 packages/protocol/contracts/mainnet/LibAddressCache.sol diff --git a/packages/protocol/contracts/mainnet/LibAddressCache.sol b/packages/protocol/contracts/mainnet/LibAddressCache.sol new file mode 100644 index 0000000000..5e7e6d8649 --- /dev/null +++ b/packages/protocol/contracts/mainnet/LibAddressCache.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +import "../common/LibStrings.sol"; + +/// @title LibAddressCache +/// @custom:security-contact security@taiko.xyz +library LibAddressCache { + function getAddress(uint64 _chainId, bytes32 _name) internal pure returns (address) { + if (_chainId == 1) { + if (_name == LibStrings.B_TAIKO_TOKEN) { + return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; + } + if (_name == LibStrings.B_SIGNAL_SERVICE) { + return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; + } + if (_name == LibStrings.B_BRIDGE) { + return 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC; + } + if (_name == LibStrings.B_TAIKO) { + return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; + } + if (_name == LibStrings.B_TIER_ROUTER) { + return 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a; + } + if (_name == LibStrings.B_TIER_SGX) { + return 0xb0f3186FC1963f774f52ff455DC86aEdD0b31F81; + } + if (_name == LibStrings.B_TIER_GUARDIAN_MINORITY) { + return 0x579A8d63a2Db646284CBFE31FE5082c9989E985c; + } + if (_name == LibStrings.B_TIER_GUARDIAN) { + return 0xE3D777143Ea25A6E031d1e921F396750885f43aC; + } + if (_name == LibStrings.B_AUTOMATA_DCAP_ATTESTATION) { + return 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3; + } + } + return address(0); + } +} diff --git a/packages/protocol/contracts/mainnet/MainnetProverSet.sol b/packages/protocol/contracts/mainnet/MainnetProverSet.sol index a3b2bd5cd9..943673ced2 100644 --- a/packages/protocol/contracts/mainnet/MainnetProverSet.sol +++ b/packages/protocol/contracts/mainnet/MainnetProverSet.sol @@ -2,20 +2,14 @@ pragma solidity 0.8.24; import "../team/proving/ProverSet.sol"; +import "./LibAddressCache.sol"; /// @title MainnetProverSet /// @notice See the documentation in {ProverSet}. /// @custom:security-contact security@taiko.xyz contract MainnetProverSet is ProverSet { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - if (_chainId == 1) { - if (_name == LibStrings.B_TAIKO_TOKEN) { - return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; - } - if (_name == LibStrings.B_TAIKO) { - return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; - } - } - return super._getAddress(_chainId, _name); + address addr = LibAddressCache.getAddress(_chainId, _name); + return addr != address(0) ? addr : super._getAddress(_chainId, _name); } } diff --git a/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol b/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol index f9bba068a9..5cac824e8c 100644 --- a/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol +++ b/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol @@ -3,41 +3,14 @@ pragma solidity 0.8.24; import "../common/AddressManager.sol"; import "../common/LibStrings.sol"; +import "./LibAddressCache.sol"; /// @title MainnetRollupAddressManager /// @notice See the documentation in {IAddressManager}. /// @custom:security-contact security@taiko.xyz contract MainnetRollupAddressManager is AddressManager { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - if (_chainId == 1) { - if (_name == LibStrings.B_TAIKO_TOKEN) { - return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; - } - if (_name == LibStrings.B_SIGNAL_SERVICE) { - return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; - } - if (_name == LibStrings.B_BRIDGE) { - return 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC; - } - if (_name == LibStrings.B_TAIKO) { - return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; - } - if (_name == LibStrings.B_TIER_SGX) { - return 0xb0f3186FC1963f774f52ff455DC86aEdD0b31F81; - } - if (_name == LibStrings.B_TIER_GUARDIAN_MINORITY) { - return 0x579A8d63a2Db646284CBFE31FE5082c9989E985c; - } - if (_name == LibStrings.B_TIER_GUARDIAN) { - return 0xE3D777143Ea25A6E031d1e921F396750885f43aC; - } - if (_name == LibStrings.B_AUTOMATA_DCAP_ATTESTATION) { - return 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3; - } - if (_name == LibStrings.B_TIER_ROUTER) { - return 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a; - } - } - return super._getAddress(_chainId, _name); + address addr = LibAddressCache.getAddress(_chainId, _name); + return addr != address(0) ? addr : super._getAddress(_chainId, _name); } } diff --git a/packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol b/packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol index 1d25b44103..87386fa26d 100644 --- a/packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol +++ b/packages/protocol/contracts/mainnet/MainnetSharedAddressManager.sol @@ -13,8 +13,8 @@ contract MainnetSharedAddressManager is AddressManager { if (_name == LibStrings.B_TAIKO_TOKEN) { return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; } - if (_name == LibStrings.B_SIGNAL_SERVICE) { - return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; + if (_name == LibStrings.B_QUOTA_MANAGER) { + return 0x91f67118DD47d502B1f0C354D0611997B022f29E; } if (_name == LibStrings.B_BRIDGE) { return 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC; @@ -28,8 +28,8 @@ contract MainnetSharedAddressManager is AddressManager { if (_name == LibStrings.B_ERC1155_VAULT) { return 0xaf145913EA4a56BE22E120ED9C24589659881702; } - if (_name == LibStrings.B_QUOTA_MANAGER) { - return 0x91f67118DD47d502B1f0C354D0611997B022f29E; + if (_name == LibStrings.B_SIGNAL_SERVICE) { + return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; } } else if (_chainId == 167_000) { if (_name == LibStrings.B_BRIDGE) { diff --git a/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol b/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol index 48408cfd8a..c0118c00ee 100644 --- a/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol +++ b/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol @@ -2,23 +2,14 @@ pragma solidity 0.8.24; import "../L1/TaikoL1.sol"; +import "./LibAddressCache.sol"; /// @title MainnetTaikoL1 /// @notice See the documentation in {TaikoL1}. /// @custom:security-contact security@taiko.xyz contract MainnetTaikoL1 is TaikoL1 { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - if (_chainId == 1) { - if (_name == LibStrings.B_TAIKO_TOKEN) { - return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; - } - if (_name == LibStrings.B_SIGNAL_SERVICE) { - return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; - } - if (_name == LibStrings.B_TIER_ROUTER) { - return 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a; - } - } - return super._getAddress(_chainId, _name); + address addr = LibAddressCache.getAddress(_chainId, _name); + return addr != address(0) ? addr : super._getAddress(_chainId, _name); } } From 00ba1fa644c70ff2ac3a49b5a4546175a1936c84 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sun, 14 Jul 2024 11:17:42 +0800 Subject: [PATCH 11/11] more --- .../contracts/mainnet/LibAddressCache.sol | 29 ++++++++++++------- .../contracts/mainnet/MainnetProverSet.sol | 4 +-- .../mainnet/MainnetRollupAddressManager.sol | 4 +-- .../contracts/mainnet/MainnetTaikoL1.sol | 4 +-- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/protocol/contracts/mainnet/LibAddressCache.sol b/packages/protocol/contracts/mainnet/LibAddressCache.sol index 5e7e6d8649..4e46585f45 100644 --- a/packages/protocol/contracts/mainnet/LibAddressCache.sol +++ b/packages/protocol/contracts/mainnet/LibAddressCache.sol @@ -6,36 +6,43 @@ import "../common/LibStrings.sol"; /// @title LibAddressCache /// @custom:security-contact security@taiko.xyz library LibAddressCache { - function getAddress(uint64 _chainId, bytes32 _name) internal pure returns (address) { + function getAddress( + uint64 _chainId, + bytes32 _name + ) + internal + pure + returns (bool found, address addr) + { if (_chainId == 1) { if (_name == LibStrings.B_TAIKO_TOKEN) { - return 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800; + return (true, 0x10dea67478c5F8C5E2D90e5E9B26dBe60c54d800); } if (_name == LibStrings.B_SIGNAL_SERVICE) { - return 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C; + return (true, 0x9e0a24964e5397B566c1ed39258e21aB5E35C77C); } if (_name == LibStrings.B_BRIDGE) { - return 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC; + return (true, 0xd60247c6848B7Ca29eDdF63AA924E53dB6Ddd8EC); } if (_name == LibStrings.B_TAIKO) { - return 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a; + return (true, 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a); } if (_name == LibStrings.B_TIER_ROUTER) { - return 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a; + return (true, 0x6E997f1F22C40ba37F633B08f3b07E10Ed43155a); } if (_name == LibStrings.B_TIER_SGX) { - return 0xb0f3186FC1963f774f52ff455DC86aEdD0b31F81; + return (true, 0xb0f3186FC1963f774f52ff455DC86aEdD0b31F81); } if (_name == LibStrings.B_TIER_GUARDIAN_MINORITY) { - return 0x579A8d63a2Db646284CBFE31FE5082c9989E985c; + return (true, 0x579A8d63a2Db646284CBFE31FE5082c9989E985c); } if (_name == LibStrings.B_TIER_GUARDIAN) { - return 0xE3D777143Ea25A6E031d1e921F396750885f43aC; + return (true, 0xE3D777143Ea25A6E031d1e921F396750885f43aC); } if (_name == LibStrings.B_AUTOMATA_DCAP_ATTESTATION) { - return 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3; + return (true, 0x8d7C954960a36a7596d7eA4945dDf891967ca8A3); } } - return address(0); + return (false, address(0)); } } diff --git a/packages/protocol/contracts/mainnet/MainnetProverSet.sol b/packages/protocol/contracts/mainnet/MainnetProverSet.sol index 943673ced2..39b7918797 100644 --- a/packages/protocol/contracts/mainnet/MainnetProverSet.sol +++ b/packages/protocol/contracts/mainnet/MainnetProverSet.sol @@ -9,7 +9,7 @@ import "./LibAddressCache.sol"; /// @custom:security-contact security@taiko.xyz contract MainnetProverSet is ProverSet { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - address addr = LibAddressCache.getAddress(_chainId, _name); - return addr != address(0) ? addr : super._getAddress(_chainId, _name); + (bool found, address addr) = LibAddressCache.getAddress(_chainId, _name); + return found ? addr : super._getAddress(_chainId, _name); } } diff --git a/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol b/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol index 5cac824e8c..8e8cda4eda 100644 --- a/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol +++ b/packages/protocol/contracts/mainnet/MainnetRollupAddressManager.sol @@ -10,7 +10,7 @@ import "./LibAddressCache.sol"; /// @custom:security-contact security@taiko.xyz contract MainnetRollupAddressManager is AddressManager { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - address addr = LibAddressCache.getAddress(_chainId, _name); - return addr != address(0) ? addr : super._getAddress(_chainId, _name); + (bool found, address addr) = LibAddressCache.getAddress(_chainId, _name); + return found ? addr : super._getAddress(_chainId, _name); } } diff --git a/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol b/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol index c0118c00ee..850e333f64 100644 --- a/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol +++ b/packages/protocol/contracts/mainnet/MainnetTaikoL1.sol @@ -9,7 +9,7 @@ import "./LibAddressCache.sol"; /// @custom:security-contact security@taiko.xyz contract MainnetTaikoL1 is TaikoL1 { function _getAddress(uint64 _chainId, bytes32 _name) internal view override returns (address) { - address addr = LibAddressCache.getAddress(_chainId, _name); - return addr != address(0) ? addr : super._getAddress(_chainId, _name); + (bool found, address addr) = LibAddressCache.getAddress(_chainId, _name); + return found ? addr : super._getAddress(_chainId, _name); } }