如何让 NFT 出现在 NEAR 钱包中

How to allow NFTs to show up in the NEAR Wallet

我已经创建了一个 NFT 合约,我铸造的 NFT 中的 none 似乎显示在 collectibles 选项卡中。我想知道在钱包中放置 NFT 的标准是什么以及任意 NFT 合约如何实现这一目标?

NFT 的显示方式是钱包跟踪您可能拥有 NFT 的“可能”NFT 合约的列表。当您导航到收藏品选项卡时,钱包将调用 nft_tokens_for_owner 枚举方法来显示您的 NFT。这意味着为了让你的 NFT 出现,你需要两件事:

  • 您的合约应根据 enumeration 标准实施 nft_tokens_for_owner 功能。
  • 您的合约应该能够被标记为“可能”的 NFT 合约。

让我们来看看第一个要求。您的 NFT 合约应该实现 nft_tokens_for_owner 函数,并且在调用时,它应该 return 一个包含符合 metadata 标准的元数据字段的 object。应 returned 的令牌 object 的示例响应如下所示: { token_id: 'token-1', owner_id: 'eth-denver-testing2.testnet', 元数据:{ 标题:'My Non Fungible Team Token', 描述:'The Team Most Certainly Goes :)', 媒体:'https://bafybeiftczwrtyr3k7a2k4vutd3amkwsmaqyhrdzlhvpt33dyjivufqusq.ipfs.dweb.link/goteam-gif.gif', media_hash:空, 副本:空, issued_at:空, expires_at:空, starts_at:空, updated_at:空, 额外:空, 参考:空, reference_hash: 空 }, approved_account_ids:{}, 版税:{} }

您的令牌 object 应该包含一些元数据,其中包括媒体字段。如果您的合约没有正确实现 nft_tokens_for_owner 功能,将导致如下所示,NEAR 钱包已正确标记您的合约,但它不知道如何显示您的 NFT。 NFT 零到英雄教程的 minting 部分对此进行了解释。

现在我们来看第二个要求。直到 2021 年底,NEAR 钱包都使用了一种骇人听闻的解决方案来标记 NFT 合约。基本上,它会寻找以 nft_ 开头的任何方法,其中 receiver_id 参数是您的帐户。可以找到此代码 here(如果此代码更改位置,请通知我)。这是一个 hacky 解决方案,因为没有任何铸造 NFT 的标准,因此人们可以通过调用一个不以 nft_ 开头的函数或接收者 ID 不在参数中的函数来铸造 NFT,而 NFT 只是被铸造成前任.

2021 年底之后,我们为 NEP-171 代币引入了一个新标准,称为 events 标准。这决定了你的智能合约应该在 NFT 被铸造、销毁或转移时发出一个事件。这使得 NFT 合约拥有关于事情何时发生的一个真实来源,并且钱包不需要依赖于关于哪些合约被认为可能是 NFT 合约的骇人听闻的“猜测”。

TLDR:

考虑到这一点,您的合约应实施事件标准(推荐),或者您的 mint 函数应以 nft_ 开头,并为您的帐户设置 receiver_id 参数,以便标记您的合约尽可能(或两者)。

其次,您的合约应正确实施 nft_tokens_for_owner 函数,该函数 return 是一个包含具有有效媒体字段的元数据的令牌 object。