allow using approve/_approve to clean approval

pull/4377/head
Hadrien Croubois 2 years ago
parent e9f03bd211
commit de570d0d14
  1. 7
      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 { function approve(address to, uint256 tokenId) public virtual {
address owner = ownerOf(tokenId); address owner = ownerOf(tokenId);
address caller = _msgSender();
if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { if (owner != caller && !isApprovedForAll(owner, caller)) {
revert ERC721InvalidApprover(_msgSender()); revert ERC721InvalidApprover(caller);
} }
_approve(to, tokenId); _approve(to, tokenId);
@ -390,7 +391,7 @@ abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Er
*/ */
function _approve(address to, uint256 tokenId) internal virtual { function _approve(address to, uint256 tokenId) internal virtual {
address owner = ownerOf(tokenId); address owner = ownerOf(tokenId);
if (to == owner || to == address(0)) { if (to == owner) {
revert ERC721InvalidOperator(to); revert ERC721InvalidOperator(to);
} }
_tokenApprovals[tokenId] = to; _tokenApprovals[tokenId] = to;

Loading…
Cancel
Save