From 9837fa3dceb5d702b2247879af52988be4da333d Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Sat, 14 Jan 2023 02:59:00 +0800 Subject: [PATCH] feat(bridge): add getMessageStatusSlot function (#12940) --- .../contracts/L1/libs/LibProposing.sol | 18 +++++++------- packages/protocol/contracts/bridge/Bridge.sol | 6 +++++ .../contracts/bridge/libs/LibBridgeSend.sol | 4 ++-- .../contracts/bridge/libs/LibBridgeStatus.sol | 24 ++++++++++--------- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/L1/libs/LibProposing.sol index 58879b3d5e..07f6561905 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/L1/libs/LibProposing.sol @@ -140,15 +140,6 @@ library LibProposing { emit BlockProposed(state.nextBlockId++, meta); } - function getProposedBlock( - TaikoData.State storage state, - uint256 maxNumBlocks, - uint256 id - ) internal view returns (TaikoData.ProposedBlock storage) { - require(id > state.latestVerifiedId && id < state.nextBlockId, "L1:id"); - return state.getProposedBlock(maxNumBlocks, id); - } - function getBlockFee( TaikoData.State storage state, TaikoData.Config memory config @@ -185,6 +176,15 @@ library LibProposing { block.number >= commitHeight + commitConfirmations; } + function getProposedBlock( + TaikoData.State storage state, + uint256 maxNumBlocks, + uint256 id + ) internal view returns (TaikoData.ProposedBlock storage) { + require(id > state.latestVerifiedId && id < state.nextBlockId, "L1:id"); + return state.getProposedBlock(maxNumBlocks, id); + } + function _saveProposedBlock( TaikoData.State storage state, uint256 maxNumBlocks, diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index e42e0251f7..fabbf73d27 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -161,4 +161,10 @@ contract Bridge is EssentialContract, IBridge { return LibBridgeSend.isDestChainEnabled(AddressResolver(this), _chainId); } + + function getMessageStatusSlot( + bytes32 signal + ) public pure returns (bytes32) { + return LibBridgeStatus.getMessageStatusSlot(signal); + } } diff --git a/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol b/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol index fd4de05d27..b237b39cb2 100644 --- a/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol +++ b/packages/protocol/contracts/bridge/libs/LibBridgeSend.sol @@ -26,8 +26,8 @@ library LibBridgeSend { * * @param message Specifies the `depositValue`, `callValue`, * and `processingFee`. These must sum to `msg.value`. It also specifies the - * `destChainId` which must have a `bridge` address set on the AddressResolver - * and differ from the current chain ID. + * `destChainId` which must have a `bridge` address set on the + * AddressResolver and differ from the current chain ID. * * @return signal The message is hashed, stored, and emitted as a signal. * This is picked up by an off-chain relayer which indicates a diff --git a/packages/protocol/contracts/bridge/libs/LibBridgeStatus.sol b/packages/protocol/contracts/bridge/libs/LibBridgeStatus.sol index 0f0b271208..1fd3b2d5a8 100644 --- a/packages/protocol/contracts/bridge/libs/LibBridgeStatus.sol +++ b/packages/protocol/contracts/bridge/libs/LibBridgeStatus.sol @@ -40,23 +40,25 @@ library LibBridgeStatus { function getMessageStatus( bytes32 signal ) internal view returns (MessageStatus) { - bytes32 k = _statusSlot(signal); - uint256 v; + bytes32 slot = getMessageStatusSlot(signal); + uint256 value; assembly { - v := sload(k) + value := sload(slot) } - return MessageStatus(v); + return MessageStatus(value); + } + + function getMessageStatusSlot( + bytes32 signal + ) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("MESSAGE_STATUS", signal)); } function _setMessageStatus(bytes32 signal, MessageStatus status) private { - bytes32 k = _statusSlot(signal); - uint256 v = uint256(status); + bytes32 slot = getMessageStatusSlot(signal); + uint256 value = uint256(status); assembly { - sstore(k, v) + sstore(slot, value) } } - - function _statusSlot(bytes32 signal) private pure returns (bytes32) { - return keccak256(abi.encodePacked("MESSAGE_STATUS", signal)); - } }