MetaplexでNFT作成をしていたときに発生したエラー。
Agenda
現象
Metaplex Web3.js でNFT作成すると以下のエラーが発生。
ターミナル:
Failed to Send Transaction >> Source: RPC >> Problem: The transaction could not be sent successfully to the network. >> Solution: Check the error below for more information. Caused By: Error: failed to send transaction: Transaction simulation failed: Attempt to load a program that does not exist [ Logs: ]
MetaplexError: Failed to Send Transaction
>> Source: RPC
>> Problem: The transaction could not be sent successfully to the network.
>> Solution: Check the error below for more information.
Caused By: Error: failed to send transaction: Transaction simulation failed: Attempt to load a program that does not exist
createNft.ts:
const connection = new Connection('http://127.0.0.1:8899');
const wallet = Keypair.generate();
const metaplex = Metaplex.make(connection)
.use(keypairIdentity(wallet))
.use(bundlrStorage({
address: 'https://devnet.bundlr.network',
providerUrl: 'https://api.devnet.solana.com',
timeout: 60000,
}));
// [Mock]
// .use(mockStorage()); // Use this instead of bundlrStorage if you need mock(dummy url).
const { uri } = await metaplex
.nfts()
.uploadMetadata({
name: "My NFT Metadata",
description: "My description",
image: "https://placekitten.com/200/300",
})
.run();
// Ref: The Nft Mode: https://github.com/metaplex-foundation/js#the-nft-model
const { nft } = await metaplex
.nfts()
.create({
uri: uri,
name: "My NFT",
sellerFeeBasisPoints: 500, // Represents 5.00%.
maxSupply: toBigNumber(1),
})
.run();
原因
Solana側のConnectino設定(RPC=ノードサーバーのURL)がLocalnetを参照しているため、Metaplexが動作できない(LocalnetにMetaplexのProgramが見つからないと言っている)。
対応
案1
Devnetで動かす。Devnetであれば、MetaplexがすでにProgramをアップしてくれているため、それを利用する。
createNft.ts:
// const connection = new Connection('http://127.0.0.1:8899');
const connection = new Connection(clusterApiUrl("devnet"));
const wallet = Keypair.generate();
案2
LocalnetにMetaplexのProgramをアップする。
Anchorを使っている場合は、ProgramをCloneして利用することができる。
詳細は Metaplex create() fails on localhost with: Attempt to load a program that does not exist を参照。
上記を参考に、Localnet上でMetaplexを使ったNFTをミントできるものを以下に設置した。
256hax Mint NFT using Metaplex and Anchor in Localnet
備考
SolanaのDevnetだと、リクエスト制限が厳しいため、Custom RPCを利用するのがおすすめ。QuickNodeがドキュメント豊富で、最初の取っ掛かりはやりやすい。