From 0cc8dcfb537f52a01f2fe28f90e297d50527cfd1 Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Wed, 8 Jan 2025 19:35:38 +0100 Subject: [PATCH] Release v5.2 update before final release (#5418) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hadrien Croubois Co-authored-by: Simka <0xsimka@gmail.com> Co-authored-by: Arr00 <13561405+arr00@users.noreply.github.com> Co-authored-by: Voronor <129545215+voronor@users.noreply.github.com> Co-authored-by: Ernesto GarcĂ­a --- .changeset/cyan-taxis-travel.md | 5 +++++ contracts/account/utils/draft-ERC4337Utils.sol | 4 ++-- contracts/interfaces/draft-IERC7579.sol | 4 ++-- contracts/utils/Address.sol | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 .changeset/cyan-taxis-travel.md diff --git a/.changeset/cyan-taxis-travel.md b/.changeset/cyan-taxis-travel.md new file mode 100644 index 000000000..bd90e07f3 --- /dev/null +++ b/.changeset/cyan-taxis-travel.md @@ -0,0 +1,5 @@ +--- +'openzeppelin-solidity': minor +--- + +`Address`: bubble up revert data on `sendValue` failed call diff --git a/contracts/account/utils/draft-ERC4337Utils.sol b/contracts/account/utils/draft-ERC4337Utils.sol index 8ee917b8d..2ffdfb3cd 100644 --- a/contracts/account/utils/draft-ERC4337Utils.sol +++ b/contracts/account/utils/draft-ERC4337Utils.sol @@ -115,7 +115,7 @@ library ERC4337Utils { return uint128(self.accountGasLimits.extract_32_16(0)); } - /// @dev Returns `accountGasLimits` from the {PackedUserOperation}. + /// @dev Returns `callGasLimit` from the {PackedUserOperation}. function callGasLimit(PackedUserOperation calldata self) internal pure returns (uint256) { return uint128(self.accountGasLimits.extract_32_16(16)); } @@ -155,7 +155,7 @@ library ERC4337Utils { return self.paymasterAndData.length < 52 ? 0 : uint128(bytes16(self.paymasterAndData[36:52])); } - /// @dev Returns the forth section of `paymasterAndData` from the {PackedUserOperation}. + /// @dev Returns the fourth section of `paymasterAndData` from the {PackedUserOperation}. function paymasterData(PackedUserOperation calldata self) internal pure returns (bytes calldata) { return self.paymasterAndData.length < 52 ? _emptyCalldataBytes() : self.paymasterAndData[52:]; } diff --git a/contracts/interfaces/draft-IERC7579.sol b/contracts/interfaces/draft-IERC7579.sol index 8f9ba08dd..aa86880c1 100644 --- a/contracts/interfaces/draft-IERC7579.sol +++ b/contracts/interfaces/draft-IERC7579.sol @@ -121,7 +121,7 @@ interface IERC7579Execution { * MUST ensure adequate authorization control: e.g. onlyEntryPointOrSelf if used with ERC-4337 * If a mode is requested that is not supported by the Account, it MUST revert */ - function execute(bytes32 mode, bytes calldata executionCalldata) external; + function execute(bytes32 mode, bytes calldata executionCalldata) external payable; /** * @dev Executes a transaction on behalf of the account. @@ -136,7 +136,7 @@ interface IERC7579Execution { function executeFromExecutor( bytes32 mode, bytes calldata executionCalldata - ) external returns (bytes[] memory returnData); + ) external payable returns (bytes[] memory returnData); } /** diff --git a/contracts/utils/Address.sol b/contracts/utils/Address.sol index a1c8af296..d8e887491 100644 --- a/contracts/utils/Address.sol +++ b/contracts/utils/Address.sol @@ -35,9 +35,9 @@ library Address { revert Errors.InsufficientBalance(address(this).balance, amount); } - (bool success, ) = recipient.call{value: amount}(""); + (bool success, bytes memory returndata) = recipient.call{value: amount}(""); if (!success) { - revert Errors.FailedCall(); + _revert(returndata); } }