-2

有没有办法通过 metaplex 糖果机 id 过滤用户钱包?

我知道如何通过getParsedTokenAccountsByOwner.

 const tokens = await connection.getParsedTokenAccountsByOwner(publicKey, {
   mint: mintAccount,
   programId,
 });

 const nftList = tokens.value.filter((row) => {
   return row.account.data.parsed.info.tokenAmount.amount === "1";
 });

问题是,我必须获取每个令牌的元数据,然后从那里过滤它,这对链来说是很多不必要的命中。我知道我可以通过以下方式获取糖果机的所有地址,getProgramAccounts但这很慢,并且可能需要30 seconds运行。

这个 def 使特定糖果机令牌的前端显示令人沮丧,没有任何类型的缓存层 + 定期轮询,我尽可能避免这种情况。

4

1 回答 1

0

好的,我想通了!

  1. 获取用户钱包中每个 nft 的 solana 元数据。(非常容易感谢 metaplex 助手)
  2. 过滤匹配的更新权限(通常是用于创建糖果机的钱包)

const connection = new Connection('mainnet-beta');
const ownerPublickey = 'OWNER_PUBLICK_KEY';
const nftsmetadata = await Metadata.findDataByOwner(connection, ownerPublickey)
.filter((r) => r.updateAuthority === 'SOLANAWALLETADDRESS');

// Profit
console.log(nftsmetadata)

我这个问题并没有得到太多的爱,但是对于在 solana 之上构建 ui 的人来说,这并不明显,而且很难弄清楚。因为 solana 的 api 对人们来说可能是很多事情。值得庆幸的是,Metaplex 社区在构建一些很棒的辅助方法方面做得非常出色,使这变得超级简单。

还要向 solana 食谱的人们大喊大叫,你帮助在这里连接了这些点。你可以在这里看到更多很棒的 nft 相关助手:

https://solanacookbook.com/references/nfts.html#candy-machine-v2

于 2022-02-21T03:58:22.480 回答