From b82b320a18ee6fed3746b4ccc17075942a72c2c5 Mon Sep 17 00:00:00 2001 From: TuDo1403 Date: Thu, 14 Dec 2023 17:34:15 +0700 Subject: [PATCH] feat: add _postCheck internal function --- script/extensions/ScriptExtended.s.sol | 5 +++- src/WNT.sol | 2 +- src/libraries/LibErrorHandler.sol | 40 -------------------------- src/libraries/LibNativeTransfer.sol | 36 ----------------------- 4 files changed, 5 insertions(+), 78 deletions(-) delete mode 100644 src/libraries/LibErrorHandler.sol delete mode 100644 src/libraries/LibNativeTransfer.sol diff --git a/script/extensions/ScriptExtended.s.sol b/script/extensions/ScriptExtended.s.sol index a67be98..052e091 100644 --- a/script/extensions/ScriptExtended.s.sol +++ b/script/extensions/ScriptExtended.s.sol @@ -20,7 +20,7 @@ abstract contract ScriptExtended is Script, StdAssertions, IScriptExtended { console.log("> ", StdStyle.blue(fnName), "..."); _; } - + modifier onlyOn(TNetwork networkType) { require(network() == networkType, string.concat("ScriptExtended: Only allowed on ", CONFIG.getAlias(networkType))); _; @@ -33,10 +33,13 @@ abstract contract ScriptExtended is Script, StdAssertions, IScriptExtended { function _configByteCode() internal virtual returns (bytes memory); + function _postCheck() internal virtual { } + function run(bytes calldata callData, string calldata command) public virtual { CONFIG.resolveCommand(command); (bool success, bytes memory data) = address(this).delegatecall(callData); success.handleRevert(msg.sig, data); + _postCheck(); } function network() public view virtual returns (TNetwork) { diff --git a/src/WNT.sol b/src/WNT.sol index 28cb8ce..6331eaf 100644 --- a/src/WNT.sol +++ b/src/WNT.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.17; import { ERC20 } from "../lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; import { IWNT } from "./interfaces/IWNT.sol"; -import { LibNativeTransfer } from "./libraries/LibNativeTransfer.sol"; +import { LibNativeTransfer } from "contract-libs/transfers/LibNativeTransfer.sol"; /// @notice Minimalist and modern Wrapped Ether implementation. /// @author Solmate diff --git a/src/libraries/LibErrorHandler.sol b/src/libraries/LibErrorHandler.sol deleted file mode 100644 index 8202fca..0000000 --- a/src/libraries/LibErrorHandler.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -library LibErrorHandler { - /// @dev Reserves error definition to upload to signature database. - error ExternalCallFailed(bytes4 msgSig, bytes4 callSig); - - /// @notice handle low level call revert if call failed, - /// If extcall return empty bytes, reverts with custom error. - /// @param status Status of external call - /// @param callSig function signature of the calldata - /// @param returnOrRevertData bytes result from external call - function handleRevert(bool status, bytes4 callSig, bytes memory returnOrRevertData) internal pure { - // Get the function signature of current context - bytes4 msgSig = msg.sig; - assembly ("memory-safe") { - if iszero(status) { - // Load the length of bytes array - let revertLength := mload(returnOrRevertData) - // Check if length != 0 => revert following reason from external call - if iszero(iszero(revertLength)) { - // Start of revert data bytes. The 0x20 offset is always the same. - revert(add(returnOrRevertData, 0x20), revertLength) - } - - // Load free memory pointer - let ptr := mload(0x40) - // Store 4 bytes the function selector of ExternalCallFailed(msg.sig, callSig) - // Equivalent to revert ExternalCallFailed(bytes4,bytes4) - mstore(ptr, 0x49bf4104) - // Store 4 bytes of msgSig parameter in the next slot - mstore(add(ptr, 0x20), msgSig) - // Store 4 bytes of callSig parameter in the next slot - mstore(add(ptr, 0x40), callSig) - // Revert 68 bytes of error starting from 0x1c - revert(add(ptr, 0x1c), 0x44) - } - } - } -} diff --git a/src/libraries/LibNativeTransfer.sol b/src/libraries/LibNativeTransfer.sol deleted file mode 100644 index 6e5a330..0000000 --- a/src/libraries/LibNativeTransfer.sol +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import { LibErrorHandler } from "./LibErrorHandler.sol"; - -/** - * @title NativeTransferHelper - */ -library LibNativeTransfer { - using LibErrorHandler for bool; - - /** - * @dev Transfers Native Coin and wraps result for the method caller to a recipient. - */ - function transfer(address to, uint256 value, uint256 gasAmount) internal { - (bool success, bytes memory returnOrRevertData) = trySendValue(to, value, gasAmount); - success.handleRevert(bytes4(0x0), returnOrRevertData); - } - - /** - * @dev Unsafe send `amount` Native to the address `to`. If the sender's balance is insufficient, - * the call does not revert. - * - * Note: - * - Does not assert whether the balance of sender is sufficient. - * - Does not assert whether the recipient accepts NATIVE. - * - Consider using `ReentrancyGuard` before calling this function. - * - */ - function trySendValue(address to, uint256 value, uint256 gasAmount) - internal - returns (bool success, bytes memory returnOrRevertData) - { - (success, returnOrRevertData) = to.call{ value: value, gas: gasAmount }(""); - } -}