在 Solana 上,NFT 元数据存储在共享合约代币元数据程序所拥有的账户中,地址为metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
.
我需要一个清晰、简洁的代码示例来说明如何使用某些现有库来获取特定 NFT 的元数据。让我们以这个 NFT 为例:SolStone4itgFt6tSotypyVAaUkLJzpGQ5KXsJNhwpKBANMv49mf
到目前为止我得到的最远的是复制metaplex库并使用像这样的调用
await getProgramAccounts(connection, METADATA_PROGRAM_ID, 'finalized');
然而,这将加载所有现有 NFT 的元数据。我需要使用一些过滤器而不是'finalized'
作为承诺论据。
In the 元复合体代码库 https://github.com/metaplex-foundation/metaplex/blob/master/js/packages/web/src/contexts/meta/loadAccounts.ts#L166我相信他们有一个按创建者地址过滤的示例。
filters: [
{
memcmp: {
offset:
1 + // key
32 + // update auth
32 + // mint
4 + // name string length
MAX_NAME_LENGTH + // name
4 + // uri string length
MAX_URI_LENGTH + // uri
4 + // symbol string length
MAX_SYMBOL_LENGTH + // symbol
2 + // seller fee basis points
1 + // whether or not there is a creators vec
4 + // creators vec length
i * MAX_CREATOR_LEN,
bytes: whitelistedCreators[j].info.address,
}
}
]
所以理论上我应该能够更新这个过滤器来代替按 NFT 自己的地址进行过滤,但我不确定如何在这里获得正确的位偏移量以使过滤器准确。
在我能够读取 nft 元数据之后,接下来我需要一个用于更新元数据的代码示例。特别是 URI 字段。