我注意到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
的方法来完成