From 4534670386c82e6084b31547ceccd97a5d64314d Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Sat, 25 Jan 2025 10:19:14 +0800 Subject: [PATCH 1/2] make resolveAddress internal in EssentialContract --- .../shared/common/EssentialContract.sol | 23 ++++++++++++------- .../layer1/based/DeployProtocolOnL1.s.sol | 7 +++--- .../protocol/test/shared/DeployCapability.sol | 5 ++-- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/protocol/contracts/shared/common/EssentialContract.sol b/packages/protocol/contracts/shared/common/EssentialContract.sol index 52354d1aed8..ccb70bb2248 100644 --- a/packages/protocol/contracts/shared/common/EssentialContract.sol +++ b/packages/protocol/contracts/shared/common/EssentialContract.sol @@ -146,6 +146,12 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable return _loadReentryLock() == _TRUE; } + /// @notice Returns the address of this contract. + /// @return The address of this contract. + function resolver() public view virtual returns (address) { + return __resolver; + } + /// @notice Resolves a name to an address on a specific chain /// @param _chainId The chain ID to resolve the name on /// @param _name The name to resolve @@ -156,7 +162,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable bytes32 _name, bool _allowZeroAddress ) - public + internal view returns (address) { @@ -167,16 +173,17 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// @param _name The name to resolve /// @param _allowZeroAddress Whether to allow resolving to the zero address /// @return The resolved address - function resolveAddress(bytes32 _name, bool _allowZeroAddress) public view returns (address) { + function resolveAddress( + bytes32 _name, + bool _allowZeroAddress + ) + internal + view + returns (address) + { return IResolver(resolver()).resolve(block.chainid, _name, _allowZeroAddress); } - /// @notice Returns the address of this contract. - /// @return The address of this contract. - function resolver() public view virtual returns (address) { - return __resolver; - } - /// @notice Initializes the contract. /// @param _owner The owner of this contract. msg.sender will be used if this value is zero. function __Essential_init(address _owner) internal virtual onlyInitializing { diff --git a/packages/protocol/script/layer1/based/DeployProtocolOnL1.s.sol b/packages/protocol/script/layer1/based/DeployProtocolOnL1.s.sol index 5ec20cc4aff..d1478e94c81 100644 --- a/packages/protocol/script/layer1/based/DeployProtocolOnL1.s.sol +++ b/packages/protocol/script/layer1/based/DeployProtocolOnL1.s.sol @@ -67,14 +67,13 @@ contract DeployProtocolOnL1 is DeployCapability { // --------------------------------------------------------------- // Signal service need to authorize the new rollup - address signalServiceAddr = EssentialContract(sharedResolver).resolveAddress( + address signalServiceAddr = IResolver(sharedResolver).resolve( uint64(block.chainid), LibStrings.B_SIGNAL_SERVICE, false ); SignalService signalService = SignalService(signalServiceAddr); - address taikoInboxAddr = EssentialContract(rollupResolver).resolveAddress( - uint64(block.chainid), LibStrings.B_TAIKO, false - ); + address taikoInboxAddr = + IResolver(rollupResolver).resolve(uint64(block.chainid), LibStrings.B_TAIKO, false); TaikoInbox taikoInbox = TaikoInbox(payable(taikoInboxAddr)); if (vm.envAddress("SHARED_RESOLVER") == address(0)) { diff --git a/packages/protocol/test/shared/DeployCapability.sol b/packages/protocol/test/shared/DeployCapability.sol index 90544d39c02..ab5344ba79b 100644 --- a/packages/protocol/test/shared/DeployCapability.sol +++ b/packages/protocol/test/shared/DeployCapability.sol @@ -78,12 +78,11 @@ abstract contract DeployCapability is Script { if (registerTo == address(0)) revert ADDRESS_NULL(); if (readFrom == address(0)) revert ADDRESS_NULL(); + IResolver resolver = IResolver(EssentialContract(readFrom).resolver()); register({ registerTo: registerTo, name: name, - addr: EssentialContract(readFrom).resolveAddress( - uint64(block.chainid), bytes32(bytes(name)), true - ), + addr: resolver.resolve(uint64(block.chainid), bytes32(bytes(name)), true), chainId: uint64(block.chainid) }); } From 072a529fce4800fb6071367f7834989704dda2c3 Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Sat, 25 Jan 2025 10:57:48 +0800 Subject: [PATCH 2/2] chore(protocol): revert renaming resolve to resolveAddress (#18839) --- .../contracts/layer1/based/TaikoInbox.sol | 10 +++--- .../layer1/preconf/impl/PreconfRouter.sol | 7 ++-- .../layer1/provers/ProverSetBase.sol | 4 +-- .../contracts/layer1/team/TokenUnlock.sol | 17 +++++----- .../layer1/verifiers/Risc0Verifier.sol | 2 +- .../layer1/verifiers/SP1Verifier.sol | 2 +- .../layer1/verifiers/SgxVerifier.sol | 3 +- .../layer1/verifiers/SgxVerifierBase.sol | 3 +- .../contracts/layer2/DelegateOwner.sol | 2 +- .../contracts/layer2/based/TaikoAnchor.sol | 6 ++-- .../contracts/shared/bridge/Bridge.sol | 32 +++++++++---------- .../shared/common/EssentialContract.sol | 19 ++++------- .../contracts/shared/signal/SignalService.sol | 4 +-- .../contracts/shared/tokenvault/BaseVault.sol | 2 +- .../shared/tokenvault/ERC1155Vault.sol | 10 +++--- .../shared/tokenvault/ERC20Vault.sol | 10 +++--- .../shared/tokenvault/ERC721Vault.sol | 10 +++--- 17 files changed, 62 insertions(+), 81 deletions(-) diff --git a/packages/protocol/contracts/layer1/based/TaikoInbox.sol b/packages/protocol/contracts/layer1/based/TaikoInbox.sol index fab783ea82b..ffba9ca9676 100644 --- a/packages/protocol/contracts/layer1/based/TaikoInbox.sol +++ b/packages/protocol/contracts/layer1/based/TaikoInbox.sol @@ -68,7 +68,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko { BatchParams memory params = abi.decode(_params, (BatchParams)); { - address operator = resolveAddress(LibStrings.B_INBOX_OPERATOR, true); + address operator = resolve(LibStrings.B_INBOX_OPERATOR, true); if (operator == address(0)) { require(params.proposer == address(0), CustomProposerNotAllowed()); params.proposer = msg.sender; @@ -292,7 +292,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko { } } - address verifier = resolveAddress(LibStrings.B_PROOF_VERIFIER, false); + address verifier = resolve(LibStrings.B_PROOF_VERIFIER, false); IVerifier(verifier).verifyProof(ctxs, _proof); // Emit the event @@ -479,7 +479,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko { /// @inheritdoc ITaikoInbox function bondToken() public view returns (address) { - return resolveAddress(LibStrings.B_BOND_TOKEN, true); + return resolve(LibStrings.B_BOND_TOKEN, true); } /// @inheritdoc ITaikoInbox @@ -664,7 +664,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko { emit Stats1Updated(stats1); // Ask signal service to write cross chain signal - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).syncChainData( + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).syncChainData( _config.chainId, LibStrings.H_STATE_ROOT, synced.blockId, synced.stateRoot ); } @@ -772,7 +772,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko { require(_params.signalSlots.length <= _maxSignalsToReceive, TooManySignals()); ISignalService signalService = - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)); + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)); for (uint256 i; i < _params.signalSlots.length; ++i) { require(signalService.isSignalSent(_params.signalSlots[i]), SignalNotSent()); diff --git a/packages/protocol/contracts/layer1/preconf/impl/PreconfRouter.sol b/packages/protocol/contracts/layer1/preconf/impl/PreconfRouter.sol index 50e6f99b67f..bd0f4fb9424 100644 --- a/packages/protocol/contracts/layer1/preconf/impl/PreconfRouter.sol +++ b/packages/protocol/contracts/layer1/preconf/impl/PreconfRouter.sol @@ -28,13 +28,12 @@ contract PreconfRouter is EssentialContract, IPreconfRouter { returns (ITaikoInbox.BatchMetadata memory meta_) { // Sender must be the selected operator for the epoch - address selectedOperator = IPreconfWhitelist( - resolveAddress(LibStrings.B_PRECONF_WHITELIST, false) - ).getOperatorForEpoch(); + address selectedOperator = + IPreconfWhitelist(resolve(LibStrings.B_PRECONF_WHITELIST, false)).getOperatorForEpoch(); require(msg.sender == selectedOperator, NotTheOperator()); // Call the proposeBatch function on the TaikoInbox - address taikoInbox = resolveAddress(LibStrings.B_TAIKO, false); + address taikoInbox = resolve(LibStrings.B_TAIKO, false); (, meta_) = ITaikoInbox(taikoInbox).proposeBatch(_batchParams, _batchTxList); // Verify that the sender had set itself as the proposer diff --git a/packages/protocol/contracts/layer1/provers/ProverSetBase.sol b/packages/protocol/contracts/layer1/provers/ProverSetBase.sol index be1729bab04..adb91fe6567 100644 --- a/packages/protocol/contracts/layer1/provers/ProverSetBase.sol +++ b/packages/protocol/contracts/layer1/provers/ProverSetBase.sol @@ -122,10 +122,10 @@ abstract contract ProverSetBase is EssentialContract, IERC1271 { } function inbox() internal view virtual returns (address) { - return resolveAddress(LibStrings.B_TAIKO, false); + return resolve(LibStrings.B_TAIKO, false); } function bondToken() internal view virtual returns (address) { - return resolveAddress(LibStrings.B_BOND_TOKEN, true); + return resolve(LibStrings.B_BOND_TOKEN, true); } } diff --git a/packages/protocol/contracts/layer1/team/TokenUnlock.sol b/packages/protocol/contracts/layer1/team/TokenUnlock.sol index d582813ca04..e227404e790 100644 --- a/packages/protocol/contracts/layer1/team/TokenUnlock.sol +++ b/packages/protocol/contracts/layer1/team/TokenUnlock.sol @@ -104,7 +104,7 @@ contract TokenUnlock is EssentialContract { amountVested += _amount; emit TokenVested(_amount); - IERC20(resolveAddress(LibStrings.B_TAIKO_TOKEN, false)).safeTransferFrom( + IERC20(resolve(LibStrings.B_TAIKO_TOKEN, false)).safeTransferFrom( msg.sender, address(this), _amount ); } @@ -112,13 +112,12 @@ contract TokenUnlock is EssentialContract { /// @notice Create a new prover set. function createProverSet() external onlyRecipient returns (address proverSet_) { require( - resolveAddress(LibStrings.B_BOND_TOKEN, false) - == resolveAddress(LibStrings.B_TAIKO_TOKEN, false), + resolve(LibStrings.B_BOND_TOKEN, false) == resolve(LibStrings.B_TAIKO_TOKEN, false), TAIKO_TOKEN_NOT_USED_AS_BOND_TOKEN() ); bytes memory data = abi.encodeCall(ProverSetBase.init, (owner(), address(this))); - proverSet_ = address(new ERC1967Proxy(resolveAddress(LibStrings.B_PROVER_SET, false), data)); + proverSet_ = address(new ERC1967Proxy(resolve(LibStrings.B_PROVER_SET, false), data)); isProverSet[proverSet_] = true; emit ProverSetCreated(proverSet_); @@ -135,7 +134,7 @@ contract TokenUnlock is EssentialContract { if (!isProverSet[_proverSet]) revert NOT_PROVER_SET(); emit DepositToProverSet(_proverSet, _amount); - IERC20(resolveAddress(LibStrings.B_TAIKO_TOKEN, false)).safeTransfer(_proverSet, _amount); + IERC20(resolve(LibStrings.B_TAIKO_TOKEN, false)).safeTransfer(_proverSet, _amount); } /// @notice Withdraws tokens by the recipient. @@ -153,14 +152,14 @@ contract TokenUnlock is EssentialContract { { if (_amount > amountWithdrawable()) revert NOT_WITHDRAWABLE(); emit TokenWithdrawn(_to, _amount); - IERC20(resolveAddress(LibStrings.B_TAIKO_TOKEN, false)).safeTransfer(_to, _amount); + IERC20(resolve(LibStrings.B_TAIKO_TOKEN, false)).safeTransfer(_to, _amount); } /// @notice Withdraws all tokens to the recipient address. function withdraw() external nonReentrant { uint256 amount = amountWithdrawable(); emit TokenWithdrawn(recipient, amount); - IERC20(resolveAddress(LibStrings.B_TAIKO_TOKEN, false)).safeTransfer(recipient, amount); + IERC20(resolve(LibStrings.B_TAIKO_TOKEN, false)).safeTransfer(recipient, amount); } function changeRecipient(address _newRecipient) external onlyRecipientOrOwner { @@ -175,13 +174,13 @@ contract TokenUnlock is EssentialContract { /// @notice Delegates token voting right to a delegatee. /// @param _delegatee The delegatee to receive the voting right. function delegate(address _delegatee) external onlyRecipient nonReentrant { - ERC20VotesUpgradeable(resolveAddress(LibStrings.B_TAIKO_TOKEN, false)).delegate(_delegatee); + ERC20VotesUpgradeable(resolve(LibStrings.B_TAIKO_TOKEN, false)).delegate(_delegatee); } /// @notice Returns the amount of token withdrawable. /// @return The amount of token withdrawable. function amountWithdrawable() public view returns (uint256) { - IERC20 tko = IERC20(resolveAddress(LibStrings.B_TAIKO_TOKEN, false)); + IERC20 tko = IERC20(resolve(LibStrings.B_TAIKO_TOKEN, false)); uint256 balance = tko.balanceOf(address(this)); uint256 locked = _getAmountLocked(); diff --git a/packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol b/packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol index bef2b68b961..84feb438241 100644 --- a/packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol @@ -81,7 +81,7 @@ contract Risc0Verifier is EssentialContract, IVerifier { bytes32 journalDigest = sha256(abi.encodePacked(publicInputs)); // call risc0 verifier contract - (bool success,) = resolveAddress(RISCZERO_GROTH16_VERIFIER, false).staticcall( + (bool success,) = resolve(RISCZERO_GROTH16_VERIFIER, false).staticcall( abi.encodeCall(IRiscZeroVerifier.verify, (seal, aggregationImageId, journalDigest)) ); require(success, RISC_ZERO_INVALID_PROOF()); diff --git a/packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol b/packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol index 0b358bc4237..6dab04b53a4 100644 --- a/packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol @@ -84,6 +84,6 @@ contract SP1Verifier is EssentialContract, IVerifier { } function sp1RemoteVerifier() public view virtual returns (address) { - return resolveAddress(SP1_REMOTE_VERIFIER, false); + return resolve(SP1_REMOTE_VERIFIER, false); } } diff --git a/packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol b/packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol index 0aa0d17deee..d976a92cadc 100644 --- a/packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol +++ b/packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol @@ -125,8 +125,7 @@ contract SgxVerifier is EssentialContract, IVerifier { external returns (uint256) { - address automataDcapAttestation = - resolveAddress(LibStrings.B_AUTOMATA_DCAP_ATTESTATION, true); + address automataDcapAttestation = resolve(LibStrings.B_AUTOMATA_DCAP_ATTESTATION, true); require(automataDcapAttestation != address(0), SGX_RA_NOT_SUPPORTED()); diff --git a/packages/protocol/contracts/layer1/verifiers/SgxVerifierBase.sol b/packages/protocol/contracts/layer1/verifiers/SgxVerifierBase.sol index 1dff297b63f..109bbb52e88 100644 --- a/packages/protocol/contracts/layer1/verifiers/SgxVerifierBase.sol +++ b/packages/protocol/contracts/layer1/verifiers/SgxVerifierBase.sol @@ -80,8 +80,7 @@ abstract contract SgxVerifierBase is EssentialContract { external returns (uint256) { - address automataDcapAttestation = - resolveAddress(LibStrings.B_AUTOMATA_DCAP_ATTESTATION, true); + address automataDcapAttestation = resolve(LibStrings.B_AUTOMATA_DCAP_ATTESTATION, true); require(automataDcapAttestation != address(0), SGX_RA_NOT_SUPPORTED()); diff --git a/packages/protocol/contracts/layer2/DelegateOwner.sol b/packages/protocol/contracts/layer2/DelegateOwner.sol index 5c23e9775eb..af831161cf7 100644 --- a/packages/protocol/contracts/layer2/DelegateOwner.sol +++ b/packages/protocol/contracts/layer2/DelegateOwner.sol @@ -144,7 +144,7 @@ contract DelegateOwner is EssentialContract, IMessageInvocable { function _isAdminOrRemoteOwner(address _sender) private view returns (bool) { if (_sender == admin) return true; - if (_sender != resolveAddress(LibStrings.B_BRIDGE, false)) return false; + if (_sender != resolve(LibStrings.B_BRIDGE, false)) return false; IBridge.Context memory ctx = IBridge(_sender).context(); return ctx.srcChainId == remoteChainId && ctx.from == remoteOwner; diff --git a/packages/protocol/contracts/layer2/based/TaikoAnchor.sol b/packages/protocol/contracts/layer2/based/TaikoAnchor.sol index f62ad80cc7d..4433632a870 100644 --- a/packages/protocol/contracts/layer2/based/TaikoAnchor.sol +++ b/packages/protocol/contracts/layer2/based/TaikoAnchor.sol @@ -169,9 +169,7 @@ contract TaikoAnchor is EssentialContract, IBlockHashProvider, TaikoAnchorDeprec _syncChainData(_anchorBlockId, _anchorStateRoot); _updateParentHashAndTimestamp(parentId); - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).receiveSignals( - _signalSlots - ); + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).receiveSignals(_signalSlots); } /// @notice Anchors the latest L1 block details to L2 for cross-layer @@ -296,7 +294,7 @@ contract TaikoAnchor is EssentialContract, IBlockHashProvider, TaikoAnchorDeprec /// @dev Store the L1's state root as a signal to the local signal service to /// allow for multi-hop bridging. - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).syncChainData( + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).syncChainData( l1ChainId, LibStrings.H_STATE_ROOT, _anchorBlockId, _anchorStateRoot ); diff --git a/packages/protocol/contracts/shared/bridge/Bridge.sol b/packages/protocol/contracts/shared/bridge/Bridge.sol index f284c9b7b42..3ef11114b9c 100644 --- a/packages/protocol/contracts/shared/bridge/Bridge.sol +++ b/packages/protocol/contracts/shared/bridge/Bridge.sol @@ -161,7 +161,7 @@ contract Bridge is EssentialContract, IBridge { msgHash_ = hashMessage(message_); emit MessageSent(msgHash_, message_); - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).sendSignal(msgHash_); + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).sendSignal(msgHash_); } /// @inheritdoc IBridge @@ -178,7 +178,7 @@ contract Bridge is EssentialContract, IBridge { bytes32 msgHash = hashMessage(_message); _checkStatus(msgHash, Status.NEW); - address signalService = resolveAddress(LibStrings.B_SIGNAL_SERVICE, false); + address signalService = resolve(LibStrings.B_SIGNAL_SERVICE, false); if (!ISignalService(signalService).isSignalSent(address(this), msgHash)) { revert B_MESSAGE_NOT_SENT(); @@ -246,7 +246,7 @@ contract Bridge is EssentialContract, IBridge { bytes32 msgHash = hashMessage(_message); _checkStatus(msgHash, Status.NEW); - address signalService = resolveAddress(LibStrings.B_SIGNAL_SERVICE, false); + address signalService = resolve(LibStrings.B_SIGNAL_SERVICE, false); stats.proofSize = uint32(_proof.length); stats.numCacheOps = @@ -329,9 +329,7 @@ contract Bridge is EssentialContract, IBridge { if (!_consumeEtherQuota(_message.value)) revert B_OUT_OF_ETH_QUOTA(); bool succeeded; - if ( - _unableToInvokeMessageCall(_message, resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)) - ) { + if (_unableToInvokeMessageCall(_message, resolve(LibStrings.B_SIGNAL_SERVICE, false))) { succeeded = _message.destOwner.sendEther(_message.value, _SEND_ETHER_GAS_LIMIT, ""); } else { if ((_message.gasLimit == 0 || _isLastAttempt) && msg.sender != _message.destOwner) { @@ -347,7 +345,7 @@ contract Bridge is EssentialContract, IBridge { } else if (_isLastAttempt) { _updateMessageStatus(msgHash, Status.FAILED); - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).sendSignal( + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).sendSignal( signalForFailedMessage(msgHash) ); } else { @@ -369,7 +367,7 @@ contract Bridge is EssentialContract, IBridge { _checkStatus(msgHash, Status.RETRIABLE); _updateMessageStatus(msgHash, Status.FAILED); - ISignalService(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).sendSignal( + ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).sendSignal( signalForFailedMessage(msgHash) ); } @@ -377,7 +375,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(resolveAddress(LibStrings.B_SIGNAL_SERVICE, false)).isSignalSent({ + return ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).isSignalSent({ _app: address(this), _signal: hashMessage(_message) }); @@ -399,7 +397,7 @@ contract Bridge is EssentialContract, IBridge { if (_message.srcChainId != block.chainid) return false; return _isSignalReceived( - resolveAddress(LibStrings.B_SIGNAL_SERVICE, false), + resolve(LibStrings.B_SIGNAL_SERVICE, false), signalForFailedMessage(hashMessage(_message)), _message.destChainId, _proof @@ -421,7 +419,7 @@ contract Bridge is EssentialContract, IBridge { { if (_message.destChainId != block.chainid) return false; return _isSignalReceived( - resolveAddress(LibStrings.B_SIGNAL_SERVICE, false), + resolve(LibStrings.B_SIGNAL_SERVICE, false), hashMessage(_message), _message.srcChainId, _proof @@ -437,7 +435,7 @@ contract Bridge is EssentialContract, IBridge { view returns (bool enabled_, address destBridge_) { - destBridge_ = resolveAddress(_chainId, LibStrings.B_BRIDGE, true); + destBridge_ = resolve(_chainId, LibStrings.B_BRIDGE, true); enabled_ = destBridge_ != address(0); } @@ -474,10 +472,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 { // Owner and chain watchdog can pause/unpause the bridge. - if (addr == owner() || addr == resolveAddress(LibStrings.B_CHAIN_WATCHDOG, true)) return; + if (addr == owner() || addr == resolve(LibStrings.B_CHAIN_WATCHDOG, true)) return; // bridge_watchdog can pause the bridge, but cannot unpause it. - if (toPause && addr == resolveAddress(LibStrings.B_BRIDGE_WATCHDOG, true)) return; + if (toPause && addr == resolve(LibStrings.B_BRIDGE_WATCHDOG, true)) return; revert ACCESS_DENIED(); } @@ -558,7 +556,7 @@ contract Bridge is EssentialContract, IBridge { returns (uint32 numCacheOps_) { try ISignalService(_signalService).proveSignalReceived( - _chainId, resolveAddress(_chainId, LibStrings.B_BRIDGE, false), _signal, _proof + _chainId, resolve(_chainId, LibStrings.B_BRIDGE, false), _signal, _proof ) returns (uint256 numCacheOps) { numCacheOps_ = uint32(numCacheOps); } catch { @@ -571,7 +569,7 @@ contract Bridge is EssentialContract, IBridge { /// @return true if quota manager has unlimited quota for Ether or the given amount of Ether is /// consumed already. function _consumeEtherQuota(uint256 _amount) private returns (bool) { - address quotaManager = resolveAddress(LibStrings.B_QUOTA_MANAGER, true); + address quotaManager = resolve(LibStrings.B_QUOTA_MANAGER, true); if (quotaManager == address(0)) return true; try IQuotaManager(quotaManager).consumeQuota(address(0), _amount) { @@ -605,7 +603,7 @@ contract Bridge is EssentialContract, IBridge { returns (bool) { try ISignalService(_signalService).verifySignalReceived( - _chainId, resolveAddress(_chainId, LibStrings.B_BRIDGE, false), _signal, _proof + _chainId, resolve(_chainId, LibStrings.B_BRIDGE, false), _signal, _proof ) { return true; } catch { diff --git a/packages/protocol/contracts/shared/common/EssentialContract.sol b/packages/protocol/contracts/shared/common/EssentialContract.sol index ccb70bb2248..09c191558a5 100644 --- a/packages/protocol/contracts/shared/common/EssentialContract.sol +++ b/packages/protocol/contracts/shared/common/EssentialContract.sol @@ -39,7 +39,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// @dev Modifier that ensures the caller is the owner or resolved address of a given name. /// @param _name The name to check against. modifier onlyFromOwnerOrNamed(bytes32 _name) { - require(msg.sender == owner() || msg.sender == resolveAddress(_name, true), ACCESS_DENIED()); + require(msg.sender == owner() || msg.sender == resolve(_name, true), ACCESS_DENIED()); _; } @@ -84,7 +84,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// name. /// @param _name The name to check against. modifier onlyFromNamed(bytes32 _name) { - require(msg.sender == resolveAddress(_name, true), ACCESS_DENIED()); + require(msg.sender == resolve(_name, true), ACCESS_DENIED()); _; } @@ -92,7 +92,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// name, if the name is set. /// @param _name The name to check against. modifier onlyFromOptionalNamed(bytes32 _name) { - address addr = resolveAddress(_name, true); + address addr = resolve(_name, true); require(addr == address(0) || msg.sender == addr, ACCESS_DENIED()); _; } @@ -103,7 +103,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// @param _name2 The second name to check against. modifier onlyFromNamedEither(bytes32 _name1, bytes32 _name2) { require( - msg.sender == resolveAddress(_name1, true) || msg.sender == resolveAddress(_name2, true), + msg.sender == resolve(_name1, true) || msg.sender == resolve(_name2, true), ACCESS_DENIED() ); _; @@ -157,7 +157,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// @param _name The name to resolve /// @param _allowZeroAddress Whether to allow resolving to the zero address /// @return The resolved address - function resolveAddress( + function resolve( uint64 _chainId, bytes32 _name, bool _allowZeroAddress @@ -173,14 +173,7 @@ abstract contract EssentialContract is UUPSUpgradeable, Ownable2StepUpgradeable /// @param _name The name to resolve /// @param _allowZeroAddress Whether to allow resolving to the zero address /// @return The resolved address - function resolveAddress( - bytes32 _name, - bool _allowZeroAddress - ) - internal - view - returns (address) - { + function resolve(bytes32 _name, bool _allowZeroAddress) internal view returns (address) { return IResolver(resolver()).resolve(block.chainid, _name, _allowZeroAddress); } diff --git a/packages/protocol/contracts/shared/signal/SignalService.sol b/packages/protocol/contracts/shared/signal/SignalService.sol index ba879604118..767a0df595d 100644 --- a/packages/protocol/contracts/shared/signal/SignalService.sol +++ b/packages/protocol/contracts/shared/signal/SignalService.sol @@ -341,7 +341,7 @@ contract SignalService is EssentialContract, ISignalService { address app = _app; bytes32 signal = _signal; bytes32 value = _signal; - address signalService = resolveAddress(chainId, LibStrings.B_SIGNAL_SERVICE, false); + address signalService = resolve(chainId, LibStrings.B_SIGNAL_SERVICE, false); if (signalService == address(this)) revert SS_INVALID_MID_HOP_CHAINID(); HopProof memory hop; @@ -367,7 +367,7 @@ contract SignalService is EssentialContract, ISignalService { if (hop.chainId == 0 || hop.chainId == block.chainid) { revert SS_INVALID_MID_HOP_CHAINID(); } - signalService = resolveAddress(hop.chainId, LibStrings.B_SIGNAL_SERVICE, false); + signalService = resolve(hop.chainId, LibStrings.B_SIGNAL_SERVICE, false); if (signalService == address(this)) revert SS_INVALID_MID_HOP_CHAINID(); } diff --git a/packages/protocol/contracts/shared/tokenvault/BaseVault.sol b/packages/protocol/contracts/shared/tokenvault/BaseVault.sol index 6145e8eeb82..bc8201cec8d 100644 --- a/packages/protocol/contracts/shared/tokenvault/BaseVault.sol +++ b/packages/protocol/contracts/shared/tokenvault/BaseVault.sol @@ -57,7 +57,7 @@ abstract contract BaseVault is returns (IBridge.Context memory ctx_) { ctx_ = IBridge(msg.sender).context(); - address selfOnSourceChain = resolveAddress(ctx_.srcChainId, name(), false); + address selfOnSourceChain = resolve(ctx_.srcChainId, name(), false); if (ctx_.from != selfOnSourceChain) revert VAULT_PERMISSION_DENIED(); } diff --git a/packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol b/packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol index 9d79b2c84e1..3a3f49208b1 100644 --- a/packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol +++ b/packages/protocol/contracts/shared/tokenvault/ERC1155Vault.sol @@ -60,7 +60,7 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { destChainId: _op.destChainId, srcOwner: msg.sender, destOwner: _op.destOwner != address(0) ? _op.destOwner : msg.sender, - to: resolveAddress(_op.destChainId, name(), false), + to: resolve(_op.destChainId, name(), false), value: msg.value - _op.fee, fee: _op.fee, gasLimit: _op.gasLimit, @@ -69,9 +69,8 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { // Send the message and obtain the message hash bytes32 msgHash; - (msgHash, message_) = IBridge(resolveAddress(LibStrings.B_BRIDGE, false)).sendMessage{ - value: msg.value - }(message); + (msgHash, message_) = + IBridge(resolve(LibStrings.B_BRIDGE, false)).sendMessage{ value: msg.value }(message); // Emit TokenSent event emit TokenSent({ @@ -292,8 +291,7 @@ contract ERC1155Vault is BaseNFTVault, ERC1155ReceiverUpgradeable { (owner(), _ctoken.addr, _ctoken.chainId, _ctoken.symbol, _ctoken.name) ); - btoken_ = - address(new ERC1967Proxy(resolveAddress(LibStrings.B_BRIDGED_ERC1155, false), data)); + btoken_ = address(new ERC1967Proxy(resolve(LibStrings.B_BRIDGED_ERC1155, false), data)); bridgedToCanonical[btoken_] = _ctoken; canonicalToBridged[_ctoken.chainId][_ctoken.addr] = btoken_; diff --git a/packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol b/packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol index 7f5abf876d4..fec4e67afaa 100644 --- a/packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol +++ b/packages/protocol/contracts/shared/tokenvault/ERC20Vault.sol @@ -289,7 +289,7 @@ contract ERC20Vault is BaseVault { if (btokenDenylist[_op.token]) revert VAULT_BTOKEN_BLACKLISTED(); if (msg.value < _op.fee) revert VAULT_INSUFFICIENT_FEE(); - address bridge = resolveAddress(LibStrings.B_BRIDGE, false); + address bridge = resolve(LibStrings.B_BRIDGE, false); ( bytes memory data, @@ -305,7 +305,7 @@ contract ERC20Vault is BaseVault { destChainId: _op.destChainId, srcOwner: msg.sender, destOwner: _op.destOwner != address(0) ? _op.destOwner : msg.sender, - to: resolveAddress(_op.destChainId, name(), false), + to: resolve(_op.destChainId, name(), false), value: msg.value - _op.fee, fee: _op.fee, gasLimit: _op.gasLimit, @@ -408,7 +408,7 @@ contract ERC20Vault is BaseVault { function solve(SolverOp memory _op) external nonReentrant whenNotPaused { if (_op.l2BatchMetaHash != 0) { // Verify that the required L2 batch containing the intent transaction has been proposed - address taiko = resolveAddress(LibStrings.B_TAIKO, false); + address taiko = resolve(LibStrings.B_TAIKO, false); require(ITaiko(taiko).isOnL1(), VAULT_NOT_ON_L1()); bytes32 l2BatchMetaHash = ITaikoInbox(taiko).getBatch(_op.l2BatchId).metaHash; @@ -589,7 +589,7 @@ contract ERC20Vault is BaseVault { (owner(), ctoken.addr, ctoken.chainId, ctoken.decimals, ctoken.symbol, ctoken.name) ); - btoken = address(new ERC1967Proxy(resolveAddress(LibStrings.B_BRIDGED_ERC20, false), data)); + btoken = address(new ERC1967Proxy(resolve(LibStrings.B_BRIDGED_ERC20, false), data)); bridgedToCanonical[btoken] = ctoken; canonicalToBridged[ctoken.chainId][ctoken.addr] = btoken; @@ -604,7 +604,7 @@ contract ERC20Vault is BaseVault { } function _consumeTokenQuota(address _token, uint256 _amount) private { - address quotaManager = resolveAddress(LibStrings.B_QUOTA_MANAGER, true); + address quotaManager = resolve(LibStrings.B_QUOTA_MANAGER, true); if (quotaManager != address(0)) { IQuotaManager(quotaManager).consumeQuota(_token, _amount); } diff --git a/packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol b/packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol index 357e8a98262..4d466624f3e 100644 --- a/packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol +++ b/packages/protocol/contracts/shared/tokenvault/ERC721Vault.sol @@ -58,7 +58,7 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver { destChainId: _op.destChainId, srcOwner: msg.sender, destOwner: _op.destOwner != address(0) ? _op.destOwner : msg.sender, - to: resolveAddress(_op.destChainId, name(), false), + to: resolve(_op.destChainId, name(), false), value: msg.value - _op.fee, fee: _op.fee, gasLimit: _op.gasLimit, @@ -66,9 +66,8 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver { }); bytes32 msgHash; - (msgHash, message_) = IBridge(resolveAddress(LibStrings.B_BRIDGE, false)).sendMessage{ - value: msg.value - }(message); + (msgHash, message_) = + IBridge(resolve(LibStrings.B_BRIDGE, false)).sendMessage{ value: msg.value }(message); emit TokenSent({ msgHash: msgHash, @@ -248,8 +247,7 @@ contract ERC721Vault is BaseNFTVault, IERC721Receiver { (owner(), _ctoken.addr, _ctoken.chainId, _ctoken.symbol, _ctoken.name) ); - btoken_ = - address(new ERC1967Proxy(resolveAddress(LibStrings.B_BRIDGED_ERC721, false), data)); + btoken_ = address(new ERC1967Proxy(resolve(LibStrings.B_BRIDGED_ERC721, false), data)); bridgedToCanonical[btoken_] = _ctoken; canonicalToBridged[_ctoken.chainId][_ctoken.addr] = btoken_;