在 Solana 上,NFT 元数据存储在地址为共享合约 Token Metadata Program 拥有的账户中metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
。
我需要一个清晰、简洁的代码示例来说明如何使用一些现有的库来获取特定 NFT 的元数据。让我们以这个 NFT 为例:一个 SolStone4itgFt6tSotypyVAaUkLJzpGQ5KXsJNhwpKBANMv49mf
到目前为止,我得到的最远的是复制 metaplex 库并使用这样的调用
await getProgramAccounts(connection, METADATA_PROGRAM_ID, 'finalized');
但是,这将加载所有现有 NFT 的元数据。相反,我需要使用一些过滤器而不是'finalized'
作为承诺参数。
在metaplex 代码库中,我相信他们有一个按创建者地址过滤的示例。
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 字段。