From fff8b1193282c5753417f696fbea92610c09cf60 Mon Sep 17 00:00:00 2001 From: Ting-Jun Wang Date: Fri, 22 Mar 2024 15:15:53 +0800 Subject: [PATCH] feat: complete ERC721's safeTransferFrom --- hw1/src/NFinTech/NFinTech.sol | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/hw1/src/NFinTech/NFinTech.sol b/hw1/src/NFinTech/NFinTech.sol index 011b222..68f573e 100644 --- a/hw1/src/NFinTech/NFinTech.sol +++ b/hw1/src/NFinTech/NFinTech.sol @@ -126,15 +126,31 @@ contract NFinTech is IERC721 { } else { revert(); } + } - + function _safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) internal { + if (to.code.length != 0 ) { + try IERC721TokenReceiver(to).onERC721Received(msg.sender, from, tokenId, data) returns (bytes4 retval) { + if (retval == IERC721TokenReceiver.onERC721Received.selector) { + transferFrom(from, to, tokenId); + } else { + revert(); + } + } catch { + revert(); + } + } else { + transferFrom(from, to, tokenId); + } } function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) public { // TODO: please add your implementaiton here + _safeTransferFrom(from, to, tokenId, data); } function safeTransferFrom(address from, address to, uint256 tokenId) public { // TODO: please add your implementaiton here + _safeTransferFrom(from, to, tokenId, ""); } }