我正在为NFT造币机开发一个Dapp。为了制造新的第二个NFT,用户必须烧毁他拥有的第一个NFT。我知道我们的Dapp可以提示用户烧掉第一个NFT。只有在成功之后,它才能促使他/她创建第二个NFT。
但是有一种方法可以通过只提示用户一次来改进UX吗?
我试着用(对于第二个NFT)调用(用于第一个NFT )的S刻录函数,但要做到这一点,用户需要将contractB“批准”为contractA (即授权contractB代表用户销毁第一个NFT),从而促使用户执行这个“批准”操作。(总共提示用户两次)。
有什么建议吗?谢谢。
发布于 2023-05-19 11:14:00
我认为利用safeTransferFrom函数是可能的。
用户可以通过这种方式将旧的NFT传输到新合同,从而触发其onERC721Received函数。您只需将烧录和薄荷逻辑写入其中。
因此,用户需要做的唯一事务是:
nft1.safeTransferFrom(userAddress, nft2Address, tokenId);您需要在nft2契约中编写这个函数:
function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4) {
require(msg.sender == NFT1, "Can receive only NFT1");
// burn the NFT received
// (I'm not sure if your NFT1 has this function, if not you can send it to address(0) I guess)
IERC721(NFT1).burn(_tokenId);
// mint the new one
// (I'm using the same tokenId as the burned one, of course you choose appropriately)
_safeMint(_from, _tokenId);
// import @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
return IERC721Receiver.onERC721Received.selector;
}https://ethereum.stackexchange.com/questions/150417
复制相似问题