ローカル環境(solana-test-validator)でAnchor x Metaplexを使ったNFT発行を試していたときに発生。
ただし、今回は不必要な設定をしてしまっただけのため、一般的には遭遇しない想定。
現象
NFTを作成すると以下のエラーが発生。
ターミナル:
SendTransactionError: failed to send transaction: Transaction simulation failed: Transaction results in an account (1) without insufficient funds for rent
createNft.ts:
const metaplex = Metaplex.make(connection)
.use(keypairIdentity(provider.wallet.payer))
.use(bundlrStorage({
address: 'https://devnet.bundlr.network',
providerUrl: 'http://localhost:8899',
timeout: 60000,
}));
const { uri } = await metaplex
.nfts()
.uploadMetadata({
name: "My NFT Metadata",
description: "My description",
image: "https://placekitten.com/100/100",
});
原因
Bundlr Networkの設定で、localhostを参照しているため、おかしくなっている。
const metaplex = Metaplex.make(connection)
.use(keypairIdentity(provider.wallet.payer))
.use(bundlrStorage({
address: 'https://devnet.bundlr.network',
providerUrl: 'http://localhost:8899', // ← これがおかしい
timeout: 60000,
}));
なお、一般的に遭遇する場合は、NFT発行のFee PayerのSOL不足が原因と思われる。
対応
正しいURLに変更する。
createNft.ts:
const metaplex = Metaplex.make(connection)
.use(keypairIdentity(provider.wallet.payer))
.use(bundlrStorage({
address: 'https://devnet.bundlr.network',
providerUrl: 'https://api.devnet.solana.com', // ← 正しいURLに設定
timeout: 60000,
}));
Bundlr Networkは、Localnetの指定はたしかできなかったはず。
そのため、DevnetやMainnet-betaを指定する必要がある。