我是 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,但我想采用程序方式。
谢谢。
我终于找到了一个简单的解决方案:
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
并享受。