From 7cee93b0f657c281eaa3718744d3ea25ff98ac9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Keszey=20D=C3=A1niel?= Date: Tue, 9 Apr 2024 11:38:13 +0200 Subject: [PATCH] replace all strings --- packages/protocol/contracts/L1/TaikoL1.sol | 2 +- packages/protocol/contracts/L1/TaikoToken.sol | 7 +- .../contracts/L1/hooks/AssignmentHook.sol | 8 +- .../contracts/L1/libs/LibConstStrings.sol | 26 ------ .../contracts/L1/libs/LibProposing.sol | 11 ++- .../protocol/contracts/L1/libs/LibProving.sol | 13 ++- .../contracts/L1/libs/LibVerifying.sol | 14 +-- .../contracts/L1/provers/GuardianProver.sol | 5 +- .../protocol/contracts/L2/DelegateOwner.sol | 7 +- packages/protocol/contracts/L2/TaikoL2.sol | 8 +- packages/protocol/contracts/bridge/Bridge.sol | 31 ++++--- .../contracts/common/LibConstStrings.sol | 87 +++++++++++++++++++ .../contracts/signal/ISignalService.sol | 2 +- .../protocol/contracts/signal/LibSignals.sol | 15 ---- .../contracts/signal/SignalService.sol | 10 +-- .../contracts/tokenvault/BaseVault.sol | 3 +- .../contracts/tokenvault/BridgedERC1155.sol | 7 +- .../contracts/tokenvault/BridgedERC20Base.sol | 7 +- .../contracts/tokenvault/BridgedERC721.sol | 5 +- .../contracts/tokenvault/ERC1155Vault.sol | 8 +- .../contracts/tokenvault/ERC20Vault.sol | 8 +- .../contracts/tokenvault/ERC721Vault.sol | 8 +- .../contracts/verifiers/GuardianVerifier.sol | 3 +- .../contracts/verifiers/RiscZeroVerifier.sol | 3 +- .../contracts/verifiers/SgxVerifier.sol | 10 ++- packages/protocol/script/DeployOnL1.s.sol | 11 ++- packages/protocol/test/L1/TaikoL1TestBase.sol | 2 +- .../protocol/test/signal/SignalService.t.sol | 29 ++++--- 28 files changed, 220 insertions(+), 130 deletions(-) delete mode 100644 packages/protocol/contracts/L1/libs/LibConstStrings.sol create mode 100644 packages/protocol/contracts/common/LibConstStrings.sol delete mode 100644 packages/protocol/contracts/signal/LibSignals.sol diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index 32817ffb460..842a7c2aa63 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -228,7 +228,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents, TaikoErrors { view virtual override - onlyFromOwnerOrNamed("chain_pauser") + onlyFromOwnerOrNamed(LibConstStrings.BYTES32_CHAIN_PAUSER) { } function _checkEOAForCalldataDA() internal pure virtual returns (bool) { diff --git a/packages/protocol/contracts/L1/TaikoToken.sol b/packages/protocol/contracts/L1/TaikoToken.sol index ee9bb15e735..1a4b3c9d6c5 100644 --- a/packages/protocol/contracts/L1/TaikoToken.sol +++ b/packages/protocol/contracts/L1/TaikoToken.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20SnapshotUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; /// @title TaikoToken /// @notice The TaikoToken (TKO), in the protocol is used for prover collateral @@ -52,7 +53,11 @@ contract TaikoToken is EssentialContract, ERC20SnapshotUpgradeable, ERC20VotesUp } /// @notice Creates a new token snapshot. - function snapshot() public onlyFromOwnerOrNamed("snapshooter") returns (uint256) { + function snapshot() + public + onlyFromOwnerOrNamed(LibConstStrings.BYTES32_SNAPSHOOTER) + returns (uint256) + { return _snapshot(); } diff --git a/packages/protocol/contracts/L1/hooks/AssignmentHook.sol b/packages/protocol/contracts/L1/hooks/AssignmentHook.sol index 1bbe062e3f6..5ffd6cfd551 100644 --- a/packages/protocol/contracts/L1/hooks/AssignmentHook.sol +++ b/packages/protocol/contracts/L1/hooks/AssignmentHook.sol @@ -5,8 +5,8 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol"; import "../../common/EssentialContract.sol"; +import "../../common/LibConstStrings.sol"; import "../../libs/LibAddress.sol"; -import "../libs/LibConstStrings.sol"; import "../ITaikoL1.sol"; import "./IHook.sol"; @@ -71,7 +71,7 @@ contract AssignmentHook is EssentialContract, IHook { ) external payable - onlyFromNamed("taiko") + onlyFromNamed(LibConstStrings.BYTES32_TAIKO) nonReentrant { // Note that @@ -106,7 +106,7 @@ contract AssignmentHook is EssentialContract, IHook { } // Send the liveness bond to the Taiko contract - IERC20 tko = IERC20(resolve(LibConstStrings.BYTES32_STR_TKO, false)); + IERC20 tko = IERC20(resolve(LibConstStrings.BYTES32_TAIKO_TOKEN, false)); // Note that we don't have to worry about // https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom @@ -176,7 +176,7 @@ contract AssignmentHook is EssentialContract, IHook { return keccak256( abi.encodePacked( - LibConstStrings.BYTES32_STR_PROVER_ASSIGNMENT, + LibConstStrings.BYTES32_PROVER_ASSIGNMENT, ITaikoL1(_taikoL1Address).getConfig().chainId, _taikoL1Address, _blockProposer, diff --git a/packages/protocol/contracts/L1/libs/LibConstStrings.sol b/packages/protocol/contracts/L1/libs/LibConstStrings.sol deleted file mode 100644 index c96fd471d5a..00000000000 --- a/packages/protocol/contracts/L1/libs/LibConstStrings.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.24; - -/// @title LibConstStrings -/// @custom:security-contact security@taiko.xyz -library LibConstStrings { - /// @notice bytes32 representation of the string "tier_provider". - bytes32 internal constant BYTES32_STR_TIER_PROVIDER = bytes32("tier_provider"); - - /// @notice bytes32 representation of the string "proposer". - bytes32 internal constant BYTES32_STR_PROPOSER = bytes32("proposer"); - - /// @notice bytes32 representation of the string "taiko_token". - bytes32 internal constant BYTES32_STR_TKO = bytes32("taiko_token"); - - /// @notice Keccak hash of the string "RETURN_LIVENESS_BOND". - bytes32 internal constant HASH_STR_RETURN_LIVENESS_BOND = keccak256("RETURN_LIVENESS_BOND"); - - /// @notice The tier name for optimistic proofs - expected to only be used for testnets. For - /// production we do not plan to have optimistic type of proving first, but future will tell if - /// L3s, app-chains or other 3rd parties would be willing to do so. - bytes32 internal constant BYTES32_STR_TIER_OP = bytes32("tier_optimistic"); - - /// @notice bytes32 representation of the string "PROVER_ASSIGNMENT". - bytes32 public constant BYTES32_STR_PROVER_ASSIGNMENT = bytes32("PROVER_ASSIGNMENT"); -} diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/L1/libs/LibProposing.sol index a87da5605e4..ae553cbd561 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/L1/libs/LibProposing.sol @@ -4,11 +4,11 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../../common/IAddressResolver.sol"; +import "../../common/LibConstStrings.sol"; import "../../libs/LibAddress.sol"; import "../../libs/LibNetwork.sol"; import "../hooks/IHook.sol"; import "../tiers/ITierProvider.sol"; -import "./LibConstStrings.sol"; /// @title LibProposing /// @notice A library for handling block proposals in the Taiko protocol. @@ -16,7 +16,6 @@ import "./LibConstStrings.sol"; library LibProposing { using LibAddress for address; - /// @notice Leaving this here to not forget about that this is a removed feature // = keccak256(abi.encode(new TaikoData.EthDeposit[](0))) bytes32 private constant _EMPTY_ETH_DEPOSIT_HASH = 0x569e75fc77c1a856f6daaf9e69d8a9566ca34aa47f9133711ce065a571af0cfd; @@ -157,7 +156,7 @@ library LibProposing { // Use the difficulty as a random number meta_.minTier = ITierProvider( - _resolver.resolve(LibConstStrings.BYTES32_STR_TIER_PROVIDER, false) + _resolver.resolve(LibConstStrings.BYTES32_TIER_PROVIDER, false) ).getMinTier(uint256(meta_.difficulty)); // Create the block that will be stored onchain @@ -186,7 +185,7 @@ library LibProposing { } { - IERC20 tko = IERC20(_resolver.resolve(LibConstStrings.BYTES32_STR_TKO, false)); + IERC20 tko = IERC20(_resolver.resolve(LibConstStrings.BYTES32_TAIKO_TOKEN, false)); uint256 tkoBalance = tko.balanceOf(address(this)); // Run all hooks. @@ -242,13 +241,13 @@ library LibProposing { { if (_slotB.numBlocks == 1) { // Only proposer_one can propose the first block after genesis - address proposerOne = _resolver.resolve("proposer_one", true); + address proposerOne = _resolver.resolve(LibConstStrings.BYTES32_PROPOSER_ONE, true); if (proposerOne != address(0)) { return msg.sender == proposerOne; } } - address proposer = _resolver.resolve(LibConstStrings.BYTES32_STR_PROPOSER, true); + address proposer = _resolver.resolve(LibConstStrings.BYTES32_PROPOSER, true); return proposer == address(0) || msg.sender == proposer; } } diff --git a/packages/protocol/contracts/L1/libs/LibProving.sol b/packages/protocol/contracts/L1/libs/LibProving.sol index 895fb86bd6c..cf5279e4831 100644 --- a/packages/protocol/contracts/L1/libs/LibProving.sol +++ b/packages/protocol/contracts/L1/libs/LibProving.sol @@ -4,9 +4,9 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../../common/IAddressResolver.sol"; +import "../../common/LibConstStrings.sol"; import "../../verifiers/IVerifier.sol"; import "../tiers/ITierProvider.sol"; -import "./LibConstStrings.sol"; import "./LibUtils.sol"; /// @title LibProving @@ -154,9 +154,8 @@ library LibProving { // Retrieve the tier configurations. If the tier is not supported, the // subsequent action will result in a revert. - local.tier = ITierProvider( - _resolver.resolve(LibConstStrings.BYTES32_STR_TIER_PROVIDER, false) - ).getTier(_proof.tier); + local.tier = ITierProvider(_resolver.resolve(LibConstStrings.BYTES32_TIER_PROVIDER, false)) + .getTier(_proof.tier); local.inProvingWindow = !LibUtils.isPostDeadline(ts.timestamp, local.b.lastUnpausedAt, local.tier.provingWindow); @@ -202,7 +201,7 @@ library LibProving { }); IVerifier(verifier).verifyProof(ctx, _tran, _proof); - } else if (local.tier.verifierName != LibConstStrings.BYTES32_STR_TIER_OP) { + } else if (local.tier.verifierName != LibConstStrings.BYTES32_TIER_OP) { // The verifier can be address-zero, signifying that there are no // proof checks for the tier. In practice, this only applies to // optimistic proofs. @@ -211,7 +210,7 @@ library LibProving { } local.isTopTier = local.tier.contestBond == 0; - IERC20 tko = IERC20(_resolver.resolve(LibConstStrings.BYTES32_STR_TKO, false)); + IERC20 tko = IERC20(_resolver.resolve(LibConstStrings.BYTES32_TAIKO_TOKEN, false)); local.livenessBond = blk.livenessBond; if (local.isTopTier) { @@ -220,7 +219,7 @@ library LibProving { local.inProvingWindow || ( _proof.data.length == 32 - && bytes32(_proof.data) == LibConstStrings.HASH_STR_RETURN_LIVENESS_BOND + && bytes32(_proof.data) == LibConstStrings.HASH_RETURN_LIVENESS_BOND ) ) { tko.safeTransfer(local.assignedProver, local.livenessBond); diff --git a/packages/protocol/contracts/L1/libs/LibVerifying.sol b/packages/protocol/contracts/L1/libs/LibVerifying.sol index 0e5037d7979..44c7813e3d9 100644 --- a/packages/protocol/contracts/L1/libs/LibVerifying.sol +++ b/packages/protocol/contracts/L1/libs/LibVerifying.sol @@ -4,10 +4,9 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../../common/IAddressResolver.sol"; +import "../../common/LibConstStrings.sol"; import "../../signal/ISignalService.sol"; -import "../../signal/LibSignals.sol"; import "../tiers/ITierProvider.sol"; -import "./LibConstStrings.sol"; import "./LibUtils.sol"; /// @title LibVerifying @@ -120,7 +119,7 @@ library LibVerifying { uint64 numBlocksVerified; address tierProvider; - IERC20 tko = IERC20(_resolver.resolve(LibConstStrings.BYTES32_STR_TKO, false)); + IERC20 tko = IERC20(_resolver.resolve(LibConstStrings.BYTES32_TAIKO_TOKEN, false)); // Unchecked is safe: // - assignment is within ranges @@ -152,7 +151,7 @@ library LibVerifying { } else { if (tierProvider == address(0)) { tierProvider = - _resolver.resolve(LibConstStrings.BYTES32_STR_TIER_PROVIDER, false); + _resolver.resolve(LibConstStrings.BYTES32_TIER_PROVIDER, false); } if ( @@ -222,10 +221,11 @@ library LibVerifying { ) private { - ISignalService signalService = ISignalService(_resolver.resolve("signal_service", false)); + ISignalService signalService = + ISignalService(_resolver.resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false)); (uint64 lastSyncedBlock,) = signalService.getSyncedChainData( - _config.chainId, LibSignals.HASH_STR_STATE_ROOT, 0 /* latest block Id*/ + _config.chainId, LibConstStrings.HASH_STATE_ROOT, 0 /* latest block Id*/ ); if (_lastVerifiedBlockId > lastSyncedBlock + _config.blockSyncThreshold) { @@ -233,7 +233,7 @@ library LibVerifying { _state.slotA.lastSynecdAt = uint64(block.timestamp); signalService.syncChainData( - _config.chainId, LibSignals.HASH_STR_STATE_ROOT, _lastVerifiedBlockId, _stateRoot + _config.chainId, LibConstStrings.HASH_STATE_ROOT, _lastVerifiedBlockId, _stateRoot ); } } diff --git a/packages/protocol/contracts/L1/provers/GuardianProver.sol b/packages/protocol/contracts/L1/provers/GuardianProver.sol index 4b997364b72..910c8e5435d 100644 --- a/packages/protocol/contracts/L1/provers/GuardianProver.sol +++ b/packages/protocol/contracts/L1/provers/GuardianProver.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.24; import "../tiers/ITierProvider.sol"; import "../ITaikoL1.sol"; import "./Guardians.sol"; +import "../../common/LibConstStrings.sol"; /// @title GuardianProver /// @custom:security-contact security@taiko.xyz @@ -57,7 +58,9 @@ contract GuardianProver is Guardians { if (approved_) { deleteApproval(hash); - ITaikoL1(resolve("taiko", false)).proveBlock(_meta.id, abi.encode(_meta, _tran, _proof)); + ITaikoL1(resolve(LibConstStrings.BYTES32_TAIKO, false)).proveBlock( + _meta.id, abi.encode(_meta, _tran, _proof) + ); } } } diff --git a/packages/protocol/contracts/L2/DelegateOwner.sol b/packages/protocol/contracts/L2/DelegateOwner.sol index 730affadea2..812fcd48a38 100644 --- a/packages/protocol/contracts/L2/DelegateOwner.sol +++ b/packages/protocol/contracts/L2/DelegateOwner.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.24; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../bridge/IBridge.sol"; /// @title DelegateOwner @@ -64,7 +65,11 @@ contract DelegateOwner is EssentialContract, IMessageInvocable { /// @inheritdoc IMessageInvocable /// @dev Do not guard with nonReentrant as this function may re-enter the contract as _data /// represents calls to address(this). - function onMessageInvocation(bytes calldata _data) external payable onlyFromNamed("bridge") { + function onMessageInvocation(bytes calldata _data) + external + payable + onlyFromNamed(LibConstStrings.BYTES32_BRIDGE) + { (uint64 txId, address target, bytes memory txdata) = abi.decode(_data, (uint64, address, bytes)); diff --git a/packages/protocol/contracts/L2/TaikoL2.sol b/packages/protocol/contracts/L2/TaikoL2.sol index 8ce6f6095b0..07d69d94634 100644 --- a/packages/protocol/contracts/L2/TaikoL2.sol +++ b/packages/protocol/contracts/L2/TaikoL2.sol @@ -5,9 +5,9 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../libs/LibAddress.sol"; import "../signal/ISignalService.sol"; -import "../signal/LibSignals.sol"; import "./Lib1559Math.sol"; import "./LibL2Config.sol"; @@ -152,8 +152,8 @@ contract TaikoL2 is EssentialContract { if (_l1BlockId > lastSyncedBlock) { // Store the L1's state root as a signal to the local signal service to // allow for multi-hop bridging. - ISignalService(resolve("signal_service", false)).syncChainData( - l1ChainId, LibSignals.HASH_STR_STATE_ROOT, _l1BlockId, _l1StateRoot + ISignalService(resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false)).syncChainData( + l1ChainId, LibConstStrings.HASH_STATE_ROOT, _l1BlockId, _l1StateRoot ); lastSyncedBlock = _l1BlockId; @@ -180,7 +180,7 @@ contract TaikoL2 is EssentialContract { ) external whenNotPaused - onlyFromOwnerOrNamed("withdrawer") + onlyFromOwnerOrNamed(LibConstStrings.BYTES32_WITHDRAWER) nonReentrant { if (_to == address(0)) revert L2_INVALID_PARAM(); diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 05ec40a50a2..d8d1a16eb5e 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.24; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../libs/LibAddress.sol"; import "../libs/LibMath.sol"; import "../signal/ISignalService.sol"; @@ -96,7 +97,7 @@ contract Bridge is EssentialContract, IBridge { bool _suspend ) external - onlyFromOwnerOrNamed("bridge_watchdog") + onlyFromOwnerOrNamed(LibConstStrings.BYTES32_BRIDGE_WATCHDOG) { for (uint256 i; i < _msgHashes.length; ++i) { bytes32 msgHash = _msgHashes[i]; @@ -157,7 +158,7 @@ contract Bridge is EssentialContract, IBridge { msgHash_ = hashMessage(message_); emit MessageSent(msgHash_, message_); - ISignalService(resolve("signal_service", false)).sendSignal(msgHash_); + ISignalService(resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false)).sendSignal(msgHash_); } /// @inheritdoc IBridge @@ -181,7 +182,7 @@ contract Bridge is EssentialContract, IBridge { bool isNewlyProven; if (receivedAt == 0) { - address signalService = resolve("signal_service", false); + address signalService = resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false); if (!ISignalService(signalService).isSignalSent(address(this), msgHash)) { revert B_MESSAGE_NOT_SENT(); @@ -240,7 +241,7 @@ contract Bridge is EssentialContract, IBridge { bytes32 msgHash = hashMessage(_message); if (messageStatus[msgHash] != Status.NEW) revert B_STATUS_MISMATCH(); - address signalService = resolve("signal_service", false); + address signalService = resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false); uint64 receivedAt = proofReceipt[msgHash].receivedAt; if (receivedAt == type(uint64).max) revert B_MESSAGE_SUSPENDED(); @@ -400,7 +401,7 @@ contract Bridge is EssentialContract, IBridge { /// @inheritdoc IBridge function isMessageSent(Message calldata _message) external view returns (bool) { if (_message.srcChainId != block.chainid) return false; - return ISignalService(resolve("signal_service", false)).isSignalSent({ + return ISignalService(resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false)).isSignalSent({ _app: address(this), _signal: hashMessage(_message) }); @@ -421,7 +422,7 @@ contract Bridge is EssentialContract, IBridge { if (_message.srcChainId != block.chainid) return false; return _proveSignalReceived( - resolve("signal_service", false), + resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false), signalForFailedMessage(hashMessage(_message)), _message.destChainId, _proof @@ -442,7 +443,10 @@ contract Bridge is EssentialContract, IBridge { { if (_message.destChainId != block.chainid) return false; return _proveSignalReceived( - resolve("signal_service", false), hashMessage(_message), _message.srcChainId, _proof + resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false), + hashMessage(_message), + _message.srcChainId, + _proof ); } @@ -462,7 +466,7 @@ contract Bridge is EssentialContract, IBridge { if (_message.srcChainId != block.chainid) return false; return _isSignalReceived( - resolve("signal_service", false), + resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false), signalForFailedMessage(hashMessage(_message)), _message.destChainId, _proof @@ -484,7 +488,10 @@ contract Bridge is EssentialContract, IBridge { { if (_message.destChainId != block.chainid) return false; return _isSignalReceived( - resolve("signal_service", false), hashMessage(_message), _message.srcChainId, _proof + resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false), + hashMessage(_message), + _message.srcChainId, + _proof ); } @@ -546,10 +553,10 @@ contract Bridge is EssentialContract, IBridge { /// only allow watchdog to pause the bridge, but does not allow it to unpause the bridge. function _authorizePause(address addr, bool toPause) internal view override { // Owenr and chain_pauser can pause/unpause the bridge. - if (addr == owner() || addr == resolve("chain_pauser", true)) return; + if (addr == owner() || addr == resolve(LibConstStrings.BYTES32_CHAIN_PAUSER, true)) return; // bridge_watchdog can pause the bridge, but cannot unpause it. - if (toPause && addr == resolve("bridge_watchdog", true)) return; + if (toPause && addr == resolve(LibConstStrings.BYTES32_BRIDGE_WATCHDOG, true)) return; revert RESOLVER_DENIED(); } @@ -601,7 +608,7 @@ contract Bridge is EssentialContract, IBridge { emit MessageStatusChanged(_msgHash, _status); if (_status == Status.FAILED) { - ISignalService(resolve("signal_service", false)).sendSignal( + ISignalService(resolve(LibConstStrings.BYTES32_SIGNAL_SERVICE, false)).sendSignal( signalForFailedMessage(_msgHash) ); } diff --git a/packages/protocol/contracts/common/LibConstStrings.sol b/packages/protocol/contracts/common/LibConstStrings.sol new file mode 100644 index 00000000000..647953b19ef --- /dev/null +++ b/packages/protocol/contracts/common/LibConstStrings.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.24; + +/// @title LibConstStrings +/// @custom:security-contact security@taiko.xyz +library LibConstStrings { + /// @notice Keccak hash of the string "STATE_ROOT". + bytes32 internal constant HASH_STATE_ROOT = keccak256("STATE_ROOT"); + + /// @notice Keccak hash of the string "SIGNAL_ROOT". + bytes32 internal constant HASH_SIGNAL_ROOT = keccak256("SIGNAL_ROOT"); + + /// @notice Constant string "SIGNAL". + string internal constant SIGNAL = "SIGNAL"; + + /// @notice bytes32 representation of the string "chain_pauser". + bytes32 internal constant BYTES32_CHAIN_PAUSER = bytes32("chain_pauser"); + + /// @notice bytes32 representation of the string "snapshooter". + bytes32 internal constant BYTES32_SNAPSHOOTER = bytes32("snapshooter"); + + /// @notice bytes32 representation of the string "withdrawer". + bytes32 internal constant BYTES32_WITHDRAWER = bytes32("withdrawer"); + + /// @notice bytes32 representation of the string "proposer". + bytes32 internal constant BYTES32_PROPOSER = bytes32("proposer"); + + /// @notice bytes32 representation of the string "proposer_one". + bytes32 internal constant BYTES32_PROPOSER_ONE = bytes32("proposer_one"); + + /// @notice bytes32 representation of the string "signal_service". + bytes32 internal constant BYTES32_SIGNAL_SERVICE = bytes32("signal_service"); + + /// @notice bytes32 representation of the string "taiko_token". + bytes32 internal constant BYTES32_TAIKO_TOKEN = bytes32("taiko_token"); + + /// @notice bytes32 representation of the string "taiko". + bytes32 internal constant BYTES32_TAIKO = bytes32("taiko"); + + /// @notice bytes32 representation of the string "bridge". + bytes32 internal constant BYTES32_BRIDGE = bytes32("bridge"); + + /// @notice bytes32 representation of the string "erc20_vault". + bytes32 internal constant BYTES32_ERC20_VAULT = bytes32("erc20_vault"); + + /// @notice bytes32 representation of the string "bridged_erc20". + bytes32 internal constant BYTES32_BRIDGED_ERC20 = bytes32("bridged_erc20"); + + /// @notice bytes32 representation of the string "erc1155_vault". + bytes32 internal constant BYTES32_ERC1155_VAULT = bytes32("erc1155_vault"); + + /// @notice bytes32 representation of the string "bridged_erc1155". + bytes32 internal constant BYTES32_BRIDGED_ERC1155 = bytes32("bridged_erc1155"); + + /// @notice bytes32 representation of the string "erc721_vault". + bytes32 internal constant BYTES32_ERC721_VAULT = bytes32("erc721_vault"); + + /// @notice bytes32 representation of the string "bridged_erc721". + bytes32 internal constant BYTES32_BRIDGED_ERC721 = bytes32("bridged_erc721"); + + /// @notice bytes32 representation of the string "bridge_watchdog". + bytes32 internal constant BYTES32_BRIDGE_WATCHDOG = bytes32("bridge_watchdog"); + + /// @notice bytes32 representation of the string "rollup_watchdog". + bytes32 internal constant BYTES32_ROLLUP_WATCHDOG = bytes32("rollup_watchdog"); + + /// @notice Keccak hash of the string "RETURN_LIVENESS_BOND". + bytes32 internal constant HASH_RETURN_LIVENESS_BOND = keccak256("RETURN_LIVENESS_BOND"); + + /// @notice bytes32 representation of the string "tier_provider". + bytes32 internal constant BYTES32_TIER_PROVIDER = bytes32("tier_provider"); + + /// @notice The tier name for optimistic proofs - expected to only be used for testnets. For + /// production we do not plan to have optimistic type of proving first, but future will tell if + /// L3s, app-chains or other 3rd parties would be willing to do so. + bytes32 internal constant BYTES32_TIER_OP = bytes32("tier_optimistic"); + + /// @notice bytes32 representation of the string "guardian_prover". + bytes32 internal constant BYTES32_GUARDIAN_PROVER = bytes32("guardian_prover"); + + /// @notice bytes32 representation of the string "automata_dcap_attestation". + bytes32 internal constant BYTES32_AUTOMATA_DCAP_ATTESTATION = + bytes32("automata_dcap_attestation"); + + /// @notice bytes32 representation of the string "PROVER_ASSIGNMENT". + bytes32 public constant BYTES32_PROVER_ASSIGNMENT = bytes32("PROVER_ASSIGNMENT"); +} diff --git a/packages/protocol/contracts/signal/ISignalService.sol b/packages/protocol/contracts/signal/ISignalService.sol index e7edf2a664f..614c9bf3ed6 100644 --- a/packages/protocol/contracts/signal/ISignalService.sol +++ b/packages/protocol/contracts/signal/ISignalService.sol @@ -30,7 +30,7 @@ interface ISignalService { /// value has been synced to the destination chain. /// @dev To get both the blockId and the rootHash, apps should subscribe to the /// ChainDataSynced event or query `topBlockId` first using the source chain's ID and - /// LibSignals.HASH_STR_STATE_ROOT to get the most recent block ID synced, then call + /// LibConstStrings.HASH_STATE_ROOT to get the most recent block ID synced, then call /// `getSyncedChainData` to read the synchronized data. bytes32 rootHash; /// @notice Options to cache either the state roots or signal roots of middle-hops to the diff --git a/packages/protocol/contracts/signal/LibSignals.sol b/packages/protocol/contracts/signal/LibSignals.sol deleted file mode 100644 index 5f4efa9054a..00000000000 --- a/packages/protocol/contracts/signal/LibSignals.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.24; - -/// @title LibSignals -/// @custom:security-contact security@taiko.xyz -library LibSignals { - /// @notice Keccak hash of the string "STATE_ROOT". - bytes32 internal constant HASH_STR_STATE_ROOT = keccak256("STATE_ROOT"); - - /// @notice Keccak hash of the string "SIGNAL_ROOT". - bytes32 internal constant HASH_STR_SIGNAL_ROOT = keccak256("SIGNAL_ROOT"); - - /// @notice Constant string "SIGNAL". - string internal constant STR_SIGNAL = "SIGNAL"; -} diff --git a/packages/protocol/contracts/signal/SignalService.sol b/packages/protocol/contracts/signal/SignalService.sol index 3952d0c0daf..86b67bf4b67 100644 --- a/packages/protocol/contracts/signal/SignalService.sol +++ b/packages/protocol/contracts/signal/SignalService.sol @@ -2,9 +2,9 @@ pragma solidity 0.8.24; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../libs/LibTrieProof.sol"; import "./ISignalService.sol"; -import "./LibSignals.sol"; /// @title SignalService /// @notice See the documentation in {ISignalService} for more details. @@ -190,7 +190,7 @@ contract SignalService is EssentialContract, ISignalService { pure returns (bytes32) { - return keccak256(abi.encodePacked(LibSignals.STR_SIGNAL, _chainId, _app, _signal)); + return keccak256(abi.encodePacked(LibConstStrings.SIGNAL, _chainId, _app, _signal)); } function _verifyHopProof( @@ -266,7 +266,7 @@ contract SignalService is EssentialContract, ISignalService { if (cacheStateRoot && _action.isFullProof && !_action.isLastHop) { _syncChainData( - _action.chainId, LibSignals.HASH_STR_STATE_ROOT, _action.blockId, _action.rootHash + _action.chainId, LibConstStrings.HASH_STATE_ROOT, _action.blockId, _action.rootHash ); } @@ -277,7 +277,7 @@ contract SignalService is EssentialContract, ISignalService { if (cacheSignalRoot && (_action.isFullProof || !_action.isLastHop)) { _syncChainData( _action.chainId, - LibSignals.HASH_STR_SIGNAL_ROOT, + LibConstStrings.HASH_SIGNAL_ROOT, _action.blockId, _action.signalRoot ); @@ -370,7 +370,7 @@ contract SignalService is EssentialContract, ISignalService { signal = signalForChainData( chainId, - isFullProof ? LibSignals.HASH_STR_STATE_ROOT : LibSignals.HASH_STR_SIGNAL_ROOT, + isFullProof ? LibConstStrings.HASH_STATE_ROOT : LibConstStrings.HASH_SIGNAL_ROOT, hop.blockId ); value = hop.rootHash; diff --git a/packages/protocol/contracts/tokenvault/BaseVault.sol b/packages/protocol/contracts/tokenvault/BaseVault.sol index 838a7369061..c24a2b71255 100644 --- a/packages/protocol/contracts/tokenvault/BaseVault.sol +++ b/packages/protocol/contracts/tokenvault/BaseVault.sol @@ -5,6 +5,7 @@ import "@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeab import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import "../bridge/IBridge.sol"; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; /// @title BaseVault /// @notice This abstract contract provides a base implementation for vaults. @@ -20,7 +21,7 @@ abstract contract BaseVault is error VAULT_PERMISSION_DENIED(); modifier onlyFromBridge() { - if (msg.sender != resolve("bridge", false)) { + if (msg.sender != resolve(LibConstStrings.BYTES32_BRIDGE, false)) { revert VAULT_PERMISSION_DENIED(); } _; diff --git a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol index 4fefb8162ec..41b0080df0d 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC1155.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC1155.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol"; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "./LibBridgedToken.sol"; /// @title BridgedERC1155 @@ -70,7 +71,7 @@ contract BridgedERC1155 is EssentialContract, ERC1155Upgradeable { ) public whenNotPaused - onlyFromNamed("erc1155_vault") + onlyFromNamed(LibConstStrings.BYTES32_ERC1155_VAULT) nonReentrant { _mint(_to, _tokenId, _amount, ""); @@ -87,7 +88,7 @@ contract BridgedERC1155 is EssentialContract, ERC1155Upgradeable { ) public whenNotPaused - onlyFromNamed("erc1155_vault") + onlyFromNamed(LibConstStrings.BYTES32_ERC1155_VAULT) nonReentrant { _mintBatch(_to, _tokenIds, _amounts, ""); @@ -104,7 +105,7 @@ contract BridgedERC1155 is EssentialContract, ERC1155Upgradeable { ) public whenNotPaused - onlyFromNamed("erc1155_vault") + onlyFromNamed(LibConstStrings.BYTES32_ERC1155_VAULT) nonReentrant { _burn(_account, _tokenId, _amount); diff --git a/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol b/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol index 88e2bab98ae..85300cea5a6 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC20Base.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.24; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "./IBridgedERC20.sol"; /// @title BridgedERC20Base @@ -39,7 +40,7 @@ abstract contract BridgedERC20Base is EssentialContract, IBridgedERC20 { ) external whenNotPaused - onlyFromOwnerOrNamed("erc20_vault") + onlyFromOwnerOrNamed(LibConstStrings.BYTES32_ERC20_VAULT) nonReentrant { if (_migratingAddress == migratingAddress && _migratingInbound == migratingInbound) { @@ -62,7 +63,7 @@ abstract contract BridgedERC20Base is EssentialContract, IBridgedERC20 { if (msg.sender == _migratingAddress) { // Inbound migration emit MigratedTo(_migratingAddress, _account, _amount); - } else if (msg.sender != resolve("erc20_vault", true)) { + } else if (msg.sender != resolve(LibConstStrings.BYTES32_ERC20_VAULT, true)) { // Bridging from vault revert BB_PERMISSION_DENIED(); } @@ -81,7 +82,7 @@ abstract contract BridgedERC20Base is EssentialContract, IBridgedERC20 { emit MigratedTo(migratingAddress, _account, _amount); // Ask the new bridged token to mint token for the user. IBridgedERC20(migratingAddress).mint(_account, _amount); - } else if (msg.sender != resolve("erc20_vault", true)) { + } else if (msg.sender != resolve(LibConstStrings.BYTES32_ERC20_VAULT, true)) { // Only the vault can burn tokens when not migrating out revert RESOLVER_DENIED(); } diff --git a/packages/protocol/contracts/tokenvault/BridgedERC721.sol b/packages/protocol/contracts/tokenvault/BridgedERC721.sol index d189ae6fc63..68db68653cf 100644 --- a/packages/protocol/contracts/tokenvault/BridgedERC721.sol +++ b/packages/protocol/contracts/tokenvault/BridgedERC721.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol"; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "./LibBridgedToken.sol"; /// @title BridgedERC721 @@ -56,7 +57,7 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { ) external whenNotPaused - onlyFromNamed("erc721_vault") + onlyFromNamed(LibConstStrings.BYTES32_ERC721_VAULT) nonReentrant { _safeMint(_account, _tokenId); @@ -71,7 +72,7 @@ contract BridgedERC721 is EssentialContract, ERC721Upgradeable { ) external whenNotPaused - onlyFromNamed("erc721_vault") + onlyFromNamed(LibConstStrings.BYTES32_ERC721_VAULT) nonReentrant { // Check if the caller is the owner of the token. diff --git a/packages/protocol/contracts/tokenvault/ERC1155Vault.sol b/packages/protocol/contracts/tokenvault/ERC1155Vault.sol index 5d863641c7b..6bab57d0391 100644 --- a/packages/protocol/contracts/tokenvault/ERC1155Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC1155Vault.sol @@ -80,8 +80,9 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { // Send the message and obtain the message hash bytes32 msgHash; - (msgHash, message_) = - IBridge(resolve("bridge", false)).sendMessage{ value: msg.value }(message); + (msgHash, message_) = IBridge(resolve(LibConstStrings.BYTES32_BRIDGE, false)).sendMessage{ + value: msg.value + }(message); // Emit TokenSent event emit TokenSent({ @@ -312,7 +313,8 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { (owner(), addressManager, _ctoken.addr, _ctoken.chainId, _ctoken.symbol, _ctoken.name) ); - btoken_ = address(new ERC1967Proxy(resolve("bridged_erc1155", false), data)); + btoken_ = + address(new ERC1967Proxy(resolve(LibConstStrings.BYTES32_BRIDGED_ERC1155, false), data)); bridgedToCanonical[btoken_] = _ctoken; canonicalToBridged[_ctoken.chainId][_ctoken.addr] = btoken_; diff --git a/packages/protocol/contracts/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/tokenvault/ERC20Vault.sol index 22d2d169fee..c7dae50f758 100644 --- a/packages/protocol/contracts/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC20Vault.sol @@ -241,8 +241,9 @@ contract ERC20Vault is BaseVault { }); bytes32 msgHash; - (msgHash, message_) = - IBridge(resolve("bridge", false)).sendMessage{ value: msg.value }(message); + (msgHash, message_) = IBridge(resolve(LibConstStrings.BYTES32_BRIDGE, false)).sendMessage{ + value: msg.value + }(message); emit TokenSent({ msgHash: msgHash, @@ -419,7 +420,8 @@ contract ERC20Vault is BaseVault { ) ); - btoken = address(new ERC1967Proxy(resolve("bridged_erc20", false), data)); + btoken = + address(new ERC1967Proxy(resolve(LibConstStrings.BYTES32_BRIDGED_ERC20, false), data)); bridgedToCanonical[btoken] = ctoken; canonicalToBridged[ctoken.chainId][ctoken.addr] = btoken; diff --git a/packages/protocol/contracts/tokenvault/ERC721Vault.sol b/packages/protocol/contracts/tokenvault/ERC721Vault.sol index 7e86e797c1d..d11abd2653d 100644 --- a/packages/protocol/contracts/tokenvault/ERC721Vault.sol +++ b/packages/protocol/contracts/tokenvault/ERC721Vault.sol @@ -64,8 +64,9 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver { }); bytes32 msgHash; - (msgHash, message_) = - IBridge(resolve("bridge", false)).sendMessage{ value: msg.value }(message); + (msgHash, message_) = IBridge(resolve(LibConstStrings.BYTES32_BRIDGE, false)).sendMessage{ + value: msg.value + }(message); emit TokenSent({ msgHash: msgHash, @@ -249,7 +250,8 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver { (owner(), addressManager, _ctoken.addr, _ctoken.chainId, _ctoken.symbol, _ctoken.name) ); - btoken_ = address(new ERC1967Proxy(resolve("bridged_erc721", false), data)); + btoken_ = + address(new ERC1967Proxy(resolve(LibConstStrings.BYTES32_BRIDGED_ERC721, false), data)); bridgedToCanonical[btoken_] = _ctoken; canonicalToBridged[_ctoken.chainId][_ctoken.addr] = btoken_; diff --git a/packages/protocol/contracts/verifiers/GuardianVerifier.sol b/packages/protocol/contracts/verifiers/GuardianVerifier.sol index 6153d59c9b4..b4cc227b3ea 100644 --- a/packages/protocol/contracts/verifiers/GuardianVerifier.sol +++ b/packages/protocol/contracts/verifiers/GuardianVerifier.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.24; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../L1/tiers/ITierProvider.sol"; import "./IVerifier.sol"; @@ -33,7 +34,7 @@ contract GuardianVerifier is EssentialContract, IVerifier { revert GV_INVALID_PROOF(); } - if (_ctx.msgSender != resolve("guardian_prover", false)) { + if (_ctx.msgSender != resolve(LibConstStrings.BYTES32_GUARDIAN_PROVER, false)) { revert GV_PERMISSION_DENIED(); } } diff --git a/packages/protocol/contracts/verifiers/RiscZeroVerifier.sol b/packages/protocol/contracts/verifiers/RiscZeroVerifier.sol index 1876120813f..791562e6316 100644 --- a/packages/protocol/contracts/verifiers/RiscZeroVerifier.sol +++ b/packages/protocol/contracts/verifiers/RiscZeroVerifier.sol @@ -2,6 +2,7 @@ pragma solidity 0.8.24; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../thirdparty/risczero/IRiscZeroReceiptVerifier.sol"; import "../L1/ITaikoL1.sol"; import "./IVerifier.sol"; @@ -71,7 +72,7 @@ contract RiscZeroVerifier is EssentialContract, IVerifier { revert RISC_ZERO_INVALID_IMAGE_ID(); } - uint64 chainId = ITaikoL1(resolve("taiko", false)).getConfig().chainId; + uint64 chainId = ITaikoL1(resolve(LibConstStrings.BYTES32_TAIKO, false)).getConfig().chainId; bytes32 hash = LibPublicInput.hashPublicInputs( _tran, address(this), address(0), _ctx.prover, _ctx.metaHash, chainId ); diff --git a/packages/protocol/contracts/verifiers/SgxVerifier.sol b/packages/protocol/contracts/verifiers/SgxVerifier.sol index 3cf2c23fa49..98681c591cc 100644 --- a/packages/protocol/contracts/verifiers/SgxVerifier.sol +++ b/packages/protocol/contracts/verifiers/SgxVerifier.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "../L1/ITaikoL1.sol"; import "../common/EssentialContract.sol"; +import "../common/LibConstStrings.sol"; import "../automata-attestation/interfaces/IAttestation.sol"; import "../automata-attestation/lib/QuoteV3Auth/V3Struct.sol"; import "./libs/LibPublicInput.sol"; @@ -99,7 +100,7 @@ contract SgxVerifier is EssentialContract, IVerifier { /// @param _ids The ids array of SGX instances. function deleteInstances(uint256[] calldata _ids) external - onlyFromOwnerOrNamed("rollup_watchdog") + onlyFromOwnerOrNamed(LibConstStrings.BYTES32_ROLLUP_WATCHDOG) { for (uint256 i; i < _ids.length; ++i) { uint256 idx = _ids[i]; @@ -119,7 +120,8 @@ contract SgxVerifier is EssentialContract, IVerifier { external returns (uint256) { - address automataDcapAttestation = (resolve("automata_dcap_attestation", true)); + address automataDcapAttestation = + (resolve(LibConstStrings.BYTES32_AUTOMATA_DCAP_ATTESTATION, true)); if (automataDcapAttestation == address(0)) { revert SGX_RA_NOT_SUPPORTED(); @@ -142,7 +144,7 @@ contract SgxVerifier is EssentialContract, IVerifier { TaikoData.TierProof calldata _proof ) external - onlyFromNamed("taiko") + onlyFromNamed(LibConstStrings.BYTES32_TAIKO) { // Do not run proof verification to contest an existing proof if (_ctx.isContesting) return; @@ -154,7 +156,7 @@ contract SgxVerifier is EssentialContract, IVerifier { uint32 id = uint32(bytes4(_proof.data[:4])); address newInstance = address(bytes20(_proof.data[4:24])); - uint64 chainId = ITaikoL1(resolve("taiko", false)).getConfig().chainId; + uint64 chainId = ITaikoL1(resolve(LibConstStrings.BYTES32_TAIKO, false)).getConfig().chainId; address oldInstance = ECDSA.recover( LibPublicInput.hashPublicInputs( diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index 0a61c3d8f43..a07f6b9947d 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -3,6 +3,7 @@ pragma solidity 0.8.24; import "@openzeppelin/contracts/utils/Strings.sol"; +import "../contracts/common/LibConstStrings.sol"; import "../contracts/L1/TaikoToken.sol"; import "../contracts/L1/TaikoL1.sol"; import "../contracts/L1/provers/GuardianProver.sol"; @@ -67,13 +68,15 @@ contract DeployOnL1 is DeployCapability { // --------------------------------------------------------------- // Signal service need to authorize the new rollup - address signalServiceAddr = - AddressManager(sharedAddressManager).getAddress(uint64(block.chainid), "signal_service"); + address signalServiceAddr = AddressManager(sharedAddressManager).getAddress( + uint64(block.chainid), LibConstStrings.BYTES32_SIGNAL_SERVICE + ); addressNotNull(signalServiceAddr, "signalServiceAddr"); SignalService signalService = SignalService(signalServiceAddr); - address taikoL1Addr = - AddressManager(rollupAddressManager).getAddress(uint64(block.chainid), "taiko"); + address taikoL1Addr = AddressManager(rollupAddressManager).getAddress( + uint64(block.chainid), LibConstStrings.BYTES32_TAIKO + ); addressNotNull(taikoL1Addr, "taikoL1Addr"); TaikoL1 taikoL1 = TaikoL1(payable(taikoL1Addr)); diff --git a/packages/protocol/test/L1/TaikoL1TestBase.sol b/packages/protocol/test/L1/TaikoL1TestBase.sol index ab17da50aad..2d00f95b061 100644 --- a/packages/protocol/test/L1/TaikoL1TestBase.sol +++ b/packages/protocol/test/L1/TaikoL1TestBase.sol @@ -29,7 +29,7 @@ abstract contract TaikoL1TestBase is TaikoTest { function deployTaikoL1() internal virtual returns (TaikoL1 taikoL1); function tierProvider() internal view returns (ITierProvider) { - return ITierProvider(L1.resolve("tier_provider", false)); + return ITierProvider(L1.resolve(LibConstStrings.BYTES32_TIER_PROVIDER, false)); } function setUp() public virtual { diff --git a/packages/protocol/test/signal/SignalService.t.sol b/packages/protocol/test/signal/SignalService.t.sol index 58ccf0cf9ad..4db274fd7f0 100644 --- a/packages/protocol/test/signal/SignalService.t.sol +++ b/packages/protocol/test/signal/SignalService.t.sol @@ -82,7 +82,7 @@ contract TestSignalService is TaikoTest { bytes32 stateRoot = hex"7a889e6436fc1cde7827f75217adf5371afb14cc56860e6d9032ba5e28214819"; uint64 blockId = 5570; vm.prank(Alice); - realSignalService.syncChainData(32_382, LibSignals.HASH_STR_STATE_ROOT, blockId, stateRoot); + realSignalService.syncChainData(32_382, LibConstStrings.HASH_STATE_ROOT, blockId, stateRoot); realSignalService.proveSignalReceived(32_382, srcBridge, msgHash, proof); } @@ -319,7 +319,7 @@ contract TestSignalService is TaikoTest { // relay the signal root vm.prank(taiko); signalService.syncChainData( - srcChainId, LibSignals.HASH_STR_SIGNAL_ROOT, proofs[0].blockId, proofs[0].rootHash + srcChainId, LibConstStrings.HASH_SIGNAL_ROOT, proofs[0].blockId, proofs[0].rootHash ); signalService.proveSignalReceived({ _chainId: srcChainId, @@ -334,7 +334,7 @@ contract TestSignalService is TaikoTest { vm.expectRevert(SignalService.SS_UNAUTHORIZED.selector); vm.prank(taiko); signalService.syncChainData( - srcChainId, LibSignals.HASH_STR_SIGNAL_ROOT, proofs[0].blockId, proofs[0].rootHash + srcChainId, LibConstStrings.HASH_SIGNAL_ROOT, proofs[0].blockId, proofs[0].rootHash ); } @@ -365,7 +365,7 @@ contract TestSignalService is TaikoTest { // relay the state root vm.prank(taiko); signalService.syncChainData( - srcChainId, LibSignals.HASH_STR_STATE_ROOT, proofs[0].blockId, proofs[0].rootHash + srcChainId, LibConstStrings.HASH_STATE_ROOT, proofs[0].blockId, proofs[0].rootHash ); // Should not revert @@ -379,7 +379,7 @@ contract TestSignalService is TaikoTest { assertEq( signalService.isChainDataSynced( srcChainId, - LibSignals.HASH_STR_SIGNAL_ROOT, + LibConstStrings.HASH_SIGNAL_ROOT, proofs[0].blockId, bytes32(uint256(789)) ), @@ -447,7 +447,10 @@ contract TestSignalService is TaikoTest { vm.prank(taiko); signalService.syncChainData( - proofs[1].chainId, LibSignals.HASH_STR_STATE_ROOT, proofs[2].blockId, proofs[2].rootHash + proofs[1].chainId, + LibConstStrings.HASH_STATE_ROOT, + proofs[2].blockId, + proofs[2].rootHash ); signalService.proveSignalReceived({ @@ -495,7 +498,10 @@ contract TestSignalService is TaikoTest { vm.prank(taiko); signalService.syncChainData( - proofs[1].chainId, LibSignals.HASH_STR_STATE_ROOT, proofs[2].blockId, proofs[2].rootHash + proofs[1].chainId, + LibConstStrings.HASH_STATE_ROOT, + proofs[2].blockId, + proofs[2].rootHash ); vm.expectRevert(SignalService.SS_INVALID_HOPS_WITH_LOOP.selector); @@ -597,7 +603,10 @@ contract TestSignalService is TaikoTest { vm.prank(taiko); signalService.syncChainData( - proofs[7].chainId, LibSignals.HASH_STR_STATE_ROOT, proofs[8].blockId, proofs[8].rootHash + proofs[7].chainId, + LibConstStrings.HASH_STATE_ROOT, + proofs[8].blockId, + proofs[8].rootHash ); signalService.proveSignalReceived({ @@ -639,14 +648,14 @@ contract TestSignalService is TaikoTest { { assertEq( signalService.isChainDataSynced( - chainId, LibSignals.HASH_STR_STATE_ROOT, blockId, stateRoot + chainId, LibConstStrings.HASH_STATE_ROOT, blockId, stateRoot ), stateRootCached ); assertEq( signalService.isChainDataSynced( - chainId, LibSignals.HASH_STR_SIGNAL_ROOT, blockId, bytes32(uint256(789)) + chainId, LibConstStrings.HASH_SIGNAL_ROOT, blockId, bytes32(uint256(789)) ), signalRootCached );