我有两个合同,contractA (一个ERC721合同)和contractB (一个从IERC721Receiver继承的合同)。我正在尝试将nft(contractA)从所有者转移到contractB。
最初,这两项合同都有后备和接收功能。我从合同A中删除了这些功能,因为我不需要合同A来接收任何东西。在从合同A中删除接收函数之前,我能够将contractA上的contractA调用为contractB。从contractA中移除接收函数后,这将不再起作用。
我假设这个流程是contractA.safeTransferFrom(tokenOwner,contractB,tokenId,data) ->令牌传输到contractB -> contractB.received -> contractB.onERC721Received
似乎在这个流程中的某个地方,contractA.received正在被调用。为什么合同上的接收方法会被调用?
发布于 2022-12-21 19:54:46
这是IERC721Receiver的一个必要条件,以防事务恢复。
为了澄清,为了从contractA发送,接收契约必须是IERC721Receiver,以防止令牌被锁定。
在流程流中,contractA将启动safeTransferFrom。然后,它检查接收合同是否与ERC721兼容。以下是两项成果:
支票通过,代币被转移。检查失败,tx被恢复,将令牌发送回contractA
…因此,contractA至少需要一个接收和/或回退函数来进一步防止令牌被锁定。
https://ethereum.stackexchange.com/questions/141612
复制相似问题