feat: add wrapper function for low level calls (#2264)
* feat: add wrapper function for low level calls * add error message parameter * adding unit tests and required mocks * implement error message on SafeERC20 * fixed variable name in tests * Add missing tests * Improve docs. * Add functionCallWithValue * Add functionCallWithValue * Skip balance check on non-value functionCall variants * Increase out of gas test timeout * Fix compile errors * Apply suggestions from code review Co-authored-by: Francisco Giordano <frangio.1@gmail.com> * Add missing tests * Add changelog entry Co-authored-by: Nicolás Venturo <nicolas.venturo@gmail.com> Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
This commit is contained in:
committed by
GitHub
parent
d9fa59f30a
commit
8b58fc7191
@ -437,28 +437,15 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable
|
||||
if (!to.isContract()) {
|
||||
return true;
|
||||
}
|
||||
// solhint-disable-next-line avoid-low-level-calls
|
||||
(bool success, bytes memory returndata) = to.call(abi.encodeWithSelector(
|
||||
bytes memory returndata = to.functionCall(abi.encodeWithSelector(
|
||||
IERC721Receiver(to).onERC721Received.selector,
|
||||
_msgSender(),
|
||||
from,
|
||||
tokenId,
|
||||
_data
|
||||
));
|
||||
if (!success) {
|
||||
if (returndata.length > 0) {
|
||||
// solhint-disable-next-line no-inline-assembly
|
||||
assembly {
|
||||
let returndata_size := mload(returndata)
|
||||
revert(add(32, returndata), returndata_size)
|
||||
}
|
||||
} else {
|
||||
revert("ERC721: transfer to non ERC721Receiver implementer");
|
||||
}
|
||||
} else {
|
||||
bytes4 retval = abi.decode(returndata, (bytes4));
|
||||
return (retval == _ERC721_RECEIVED);
|
||||
}
|
||||
), "ERC721: transfer to non ERC721Receiver implementer");
|
||||
bytes4 retval = abi.decode(returndata, (bytes4));
|
||||
return (retval == _ERC721_RECEIVED);
|
||||
}
|
||||
|
||||
function _approve(address to, uint256 tokenId) private {
|
||||
|
||||
Reference in New Issue
Block a user