如何在本地网络上使用 Anchor 测试 Metaplex create_metadata_accounts_v3 指令?

问题描述 投票:0回答:1

我是 Solana 和 Anchor 的新手。我正在构建一个程序来创建 NFT 集合,它有一条指示管理员为收件人铸造一个新的 NFT。但是当我调用 create_metadata_accounts_v3 并运行测试时。显示错误

Error: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: instruction expected an executable account
      at Connection.sendEncodedTransaction (node_modules/@solana/web3.js/src/connection.ts:5921:13)
      at processTicksAndRejections (node:internal/process/task_queues:95:5)
      at Connection.sendRawTransaction (node_modules/@solana/web3.js/src/connection.ts:5880:20)
      at sendAndConfirmRawTransaction (node_modules/@coral-xyz/anchor/src/provider.ts:370:21)
      at AnchorProvider.sendAndConfirm (node_modules/@coral-xyz/anchor/src/provider.ts:160:14)
      at MethodsBuilder.rpc [as _rpcFn] (node_modules/@coral-xyz/anchor/src/program/namespace/rpc.ts:29:16)

我认为这是因为metaplex_metadata_program尚未部署到本地网络。我如何在本地网络中测试它?

当我在 devnet 上运行测试(锚点构建、锚点部署、锚点运行测试)时它可以工作,但它只是第一次工作。从第二次开始,我每次都必须手动更改程序id并重新部署,因为旧程序已经部署并且之前已经初始化了一些帐户。

我知道 Metaplex 有 Javascript 库,可以在不构建程序的情况下创建 NFT,但我想采用程序方式。

谢谢。

anchor solana metaplex
1个回答
0
投票

我终于找到了一个简单的解决方案:

Step1:将目标程序从devnet、testnet或mainnet转储到.so文件

solana program dump -u m metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s tests/metaplex_token_metadata_program.so

其中

-u m
是来自主网的转储。输出文件是
tests/metaplex_token_metadata_program.so
。您可以根据自己的用途定制

Step2:将配置添加到Anchor.toml

[[test.genesis]]
address = "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"  
program = "tests/metaplex_token_metadata_program.so"

其中

program
是你之前转储的.so文件,
address
是本地网络中程序的地址

第三步:运行

anchor test
并享受。

© www.soinside.com 2019 - 2024. All rights reserved.