From 67daf22784d720bc7ebaacfe0b441d8c01351f3a Mon Sep 17 00:00:00 2001 From: dodger213 Date: Wed, 15 Jun 2022 17:27:46 +0200 Subject: [PATCH] adjust to support eip4337 --- contracts/base/Executor.sol | 19 +++++++++++++++++++ contracts/base/ModuleManager.sol | 2 +- multisendSetHandlerModuleTxData.txt | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 multisendSetHandlerModuleTxData.txt diff --git a/contracts/base/Executor.sol b/contracts/base/Executor.sol index 4b9ca31..13f11ef 100644 --- a/contracts/base/Executor.sol +++ b/contracts/base/Executor.sol @@ -24,4 +24,23 @@ contract Executor { } } } + + function executeInlineGas( + address to, + uint256 value, + bytes memory data, + Enum.Operation operation + ) internal returns (bool success) { + if (operation == Enum.Operation.DelegateCall) { + // solhint-disable-next-line no-inline-assembly + assembly { + success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0) + } + } else { + // solhint-disable-next-line no-inline-assembly + assembly { + success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0) + } + } + } } diff --git a/contracts/base/ModuleManager.sol b/contracts/base/ModuleManager.sol index e6a280a..5230146 100644 --- a/contracts/base/ModuleManager.sol +++ b/contracts/base/ModuleManager.sol @@ -67,7 +67,7 @@ contract ModuleManager is SelfAuthorized, Executor { // Only whitelisted modules are allowed. require(msg.sender != SENTINEL_MODULES && modules[msg.sender] != address(0), "GS104"); // Execute transaction without further confirmations. - success = execute(to, value, data, operation, gasleft()); + success = executeInlineGas(to, value, data, operation); if (success) emit ExecutionFromModuleSuccess(msg.sender); else emit ExecutionFromModuleFailure(msg.sender); } diff --git a/multisendSetHandlerModuleTxData.txt b/multisendSetHandlerModuleTxData.txt new file mode 100644 index 0000000..34072e3 --- /dev/null +++ b/multisendSetHandlerModuleTxData.txt @@ -0,0 +1 @@ +0x6a76120200000000000000000000000040a2accbd92bca938b02010e17a5b8929b49130d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000001448d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f2009A7cE7d5A09590b3967D88dff8d25Cb768FAc56600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024610b592500000000000000000000000049Bc318BA90FD057F77C2166587fE221E55b274e009A7cE7d5A09590b3967D88dff8d25Cb768FAc56600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024f08a032300000000000000000000000049Bc318BA90FD057F77C2166587fE221E55b274e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004100000000000000000000000002270bd144e70ce6963ba02f575776a16184e1e600000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file