我可以从 <AccountInfo> solana rust 程序中的地址获取 NFT 元数据吗?



我注意到metaplex为JS、iOS、Android等平台提供了API,除了RUST:(之外,所有这些平台的文档都很好

例如,上面所有的api都得到了类似getNftByMint的东西,其中输出了中所有元数据的mine-nft数据

但是检查了所有的rust/solana/anchor板条箱和文件,我没有找到任何方法在锈蚀程序中从metadataAccount中获得metadata,例如检查一些nft的一些参数并做一些事情(

我找到的唯一方法是下面,但即使我试图通过添加match等来减轻这个错误,我仍然收到了相同的错误消息,但如果没有from_account_info,这个错误就会消失。

rs程序中,我得到了:

pub fn get_metadata_by_pubkey(ctx: Context<GetMetadataByPubkey>) -> Result<()> {
let account = ctx.accounts.metadata_pubkey.to_account_info();
let metadata: Metadata = Metadata::from_account_info(&account)?;
...

并且在ts文件中:

it("Is get_metadata_by_pubkey", async () => {
const pk: PublicKey = new PublicKey("<public key of my nft's metadata account>");
await program.methods.getMetadataByPubkey().accounts({
metadataPubkey: pk
}).rpc();
});

在运行anchor test:之后,我得到了这个错误

错误:无法发送事务:事务模拟失败:
错误处理指令0:程序无法完成

from_account_info是正确的方法https://github.com/Bonfida/dex-v4/blob/main/program/src/processor/create_market.rs#L154

但是,在尝试反序列化之前,您需要确保元数据帐户已初始化,这可以通过类似accounts.token_metadata.data_len() != 0的方法来完成

相关内容

  • 没有找到相关文章

最新更新