From de570d0d145ea0d594a40924b2edddf61e86d1cb Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Wed, 12 Jul 2023 13:42:46 +0200 Subject: [PATCH] allow using approve/_approve to clean approval --- contracts/token/ERC721/ERC721.sol | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/token/ERC721/ERC721.sol b/contracts/token/ERC721/ERC721.sol index fcaf04f2a..fbeb3d641 100644 --- a/contracts/token/ERC721/ERC721.sol +++ b/contracts/token/ERC721/ERC721.sol @@ -114,9 +114,10 @@ abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Er */ function approve(address to, uint256 tokenId) public virtual { address owner = ownerOf(tokenId); + address caller = _msgSender(); - if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { - revert ERC721InvalidApprover(_msgSender()); + if (owner != caller && !isApprovedForAll(owner, caller)) { + revert ERC721InvalidApprover(caller); } _approve(to, tokenId); @@ -390,7 +391,7 @@ abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Er */ function _approve(address to, uint256 tokenId) internal virtual { address owner = ownerOf(tokenId); - if (to == owner || to == address(0)) { + if (to == owner) { revert ERC721InvalidOperator(to); } _tokenApprovals[tokenId] = to;