首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧掉现有的NFT,一次创建一个新的NFT

烧掉现有的NFT,一次创建一个新的NFT
EN

Ethereum用户
提问于 2023-05-18 16:57:53
回答 1查看 18关注 0票数 0

我正在为NFT造币机开发一个Dapp。为了制造新的第二个NFT,用户必须烧毁他拥有的第一个NFT。我知道我们的Dapp可以提示用户烧掉第一个NFT。只有在成功之后,它才能促使他/她创建第二个NFT。

但是有一种方法可以通过只提示用户一次来改进UX吗?

我试着用(对于第二个NFT)调用(用于第一个NFT )的S刻录函数,但要做到这一点,用户需要将contractB“批准”为contractA (即授权contractB代表用户销毁第一个NFT),从而促使用户执行这个“批准”操作。(总共提示用户两次)。

有什么建议吗?谢谢。

EN

回答 1

Ethereum用户

发布于 2023-05-19 11:14:00

我认为利用safeTransferFrom函数是可能的。

用户可以通过这种方式将旧的NFT传输到新合同,从而触发其onERC721Received函数。您只需将烧录和薄荷逻辑写入其中。

因此,用户需要做的唯一事务是:

代码语言:javascript
复制
nft1.safeTransferFrom(userAddress, nft2Address, tokenId);

您需要在nft2契约中编写这个函数:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/150417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档