转账NFT - 无法确定tokenID

问题描述 投票:0回答:1

如何从我的智能合约转移 **NFT **(Zed.Run)? 我似乎无法从 NFT 中确定tokenID或合约地址,似乎有必要使用transferFrom或safeTransferFrom方法。

我可以通过我的智能合约(polygon、Avax 和 Klaytn)接收和发送资金,但是,转移 NFT 似乎需要 tokenID(我无法通过任何命令确定)。

solidity smartcontracts nft
1个回答
0
投票

确保我们意见一致:

  1. 我假设你说的 NFT 是指 ERC721 协议。
  2. 您是拥有 NFT 的智能合约的所有者。
  3. 您想将该 NFT 转移到另一个钱包/智能合约。

要从现有智能合约转移 NFT,请执行以下步骤:

  1. 确定您要转移的 NFT ID。您可以使用区块浏览器来实现这一点。我提供的链接是您的智能合约,因此您可以检查该智能合约拥有哪些 NFT。
  2. 在你的智能合约上添加一个新功能来传输 NFT(ERC721),像这样
    function transferERC721(
        address tokenAddress,
        address target,
        uint256 tokenId
    ) external{
        IERC721(tokenAddress).safeTransferFrom(address(this), target, tokenId);
    }

然后使用您想要转移的 NFT(代币地址和 ID)的数据启动该交易。

一些重要注意事项:

  • 您的智能合约无法检测传入的 NFT,因为有 没有这样的内置功能。
  • 您应该添加访问控制,以确保只有可以传输该 NFT。 OpenZepplin 的示例
  • 如果你的智能合约还没有实现这种功能,那么 NFT 就会被卡住。因为智能合约是不可变的,部署后您无法更新其代码。除非您在部署之前将智能合约定义为可升级(source)。
© www.soinside.com 2019 - 2024. All rights reserved.