From 7a4c8143a02e79e810d1417b1667f72d2694b54d Mon Sep 17 00:00:00 2001 From: EthanOK <44292124+EthanOK@users.noreply.github.com> Date: Sat, 9 Jul 2022 14:54:19 +0800 Subject: [PATCH 1/2] Update ERC721.sol Implicitly clear ERC721 approval on burn --- contracts/token/ERC721/ERC721.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/token/ERC721/ERC721.sol b/contracts/token/ERC721/ERC721.sol index 473e1d43ccc..c6246c3e629 100644 --- a/contracts/token/ERC721/ERC721.sol +++ b/contracts/token/ERC721/ERC721.sol @@ -306,7 +306,7 @@ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals - _approve(address(0), tokenId); + delete _tokenApprovals[tokenId]; _balances[owner] -= 1; delete _owners[tokenId]; From b7fd935a13ff602c239b8f85d5d44bf35b912438 Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Sat, 9 Jul 2022 09:29:17 +0200 Subject: [PATCH 2/2] fix test and add changelog entry --- CHANGELOG.md | 1 + test/token/ERC721/ERC721.behavior.js | 4 ---- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06409f694c0..05b21681fa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * `GovernorCompatibilityBravo`: remove unused `using` statements ([#3506](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3506)) * `ERC20`: optimize `_transfer`, `_mint` and `_burn` by using `unchecked` arithmetic when possible. ([#3513](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3513)) * `ERC721`: optimize transfers by making approval clearing implicit instead of emitting an event. ([#3481](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3481)) + * `ERC721`: optimize burn by making approval clearing implicit instead of emitting an event. ([#3538](https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3538)) ### Compatibility Note diff --git a/test/token/ERC721/ERC721.behavior.js b/test/token/ERC721/ERC721.behavior.js index b0893bc5330..c13bc1e428f 100644 --- a/test/token/ERC721/ERC721.behavior.js +++ b/test/token/ERC721/ERC721.behavior.js @@ -693,10 +693,6 @@ function shouldBehaveLikeERC721 (errorPrefix, owner, newOwner, approved, another expectEvent(this.receipt, 'Transfer', { from: owner, to: ZERO_ADDRESS, tokenId: firstTokenId }); }); - it('emits an Approval event', function () { - expectEvent(this.receipt, 'Approval', { owner, approved: ZERO_ADDRESS, tokenId: firstTokenId }); - }); - it('deletes the token', async function () { expect(await this.token.balanceOf(owner)).to.be.bignumber.equal('1'); await expectRevert(