diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 72670a77fb..d9ac52cccf 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -151,9 +151,13 @@ contract Bridge is EssentialContract, IBridge { return state.ctx; } - function isDestChainEnabled(uint256 _chainId) public view returns (bool) { - return - LibBridgeSend.isDestChainEnabled(AddressResolver(this), _chainId); + function isDestChainEnabled( + uint256 _chainId + ) public view returns (bool enabled) { + (enabled, ) = LibBridgeSend.isDestChainEnabled( + AddressResolver(this), + _chainId + ); } function hashMessage( diff --git a/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol b/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol index 93bd6a6cd9..97e9b2fc31 100644 --- a/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol +++ b/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol @@ -38,11 +38,16 @@ library LibBridgeSend { IBridge.Message memory message ) internal returns (bytes32 msgHash) { require(message.owner != address(0), "B:owner"); + + (bool destChainEnabled, address destChain) = isDestChainEnabled( + resolver, + message.destChainId + ); require( - message.destChainId != block.chainid && - isDestChainEnabled(resolver, message.destChainId), + destChainEnabled && message.destChainId != block.chainid, "B:destChainId" ); + require(message.to != address(0) && message.to != destChain, "B:to"); uint256 expectedAmount = message.depositValue + message.callValue + @@ -72,8 +77,9 @@ library LibBridgeSend { function isDestChainEnabled( AddressResolver resolver, uint256 chainId - ) internal view returns (bool) { - return resolver.resolve(chainId, "bridge", true) != address(0); + ) internal view returns (bool enabled, address destBridge) { + destBridge = resolver.resolve(chainId, "bridge", true); + enabled = destBridge != address(0); } function isMessageSent(