Agenda
環境
- macOS BigSur 11.7
- Solana CLI 1.10.39
現象
Solana Web3.jsを実行すると以下のエラーが発生。
(connection.getSignatureStatus や connection.requestAirdrop などすべて実行不可)
Running] ts-node "/Users/user/Documents/Programming/Blockchain/solana-anchor-react-minimal-example/scripts/solana/spl-token-v0.2.0/get_account_mint_info.ts"
/Users/user/Documents/Programming/Blockchain/solana-anchor-react-minimal-example/scripts/solana/spl-token-v0.2.0/node_modules/@solana/web3.js/src/connection.ts:4934
throw new SendTransactionError(
^
SendTransactionError: failed to send transaction: Transaction simulation failed: Error processing Instruction 1: custom program error: 0xc
at Connection.sendEncodedTransaction (/Users/user/Documents/Programming/Blockchain/solana-anchor-react-minimal-example/scripts/solana/spl-token-v0.2.0/node_modules/@solana/web3.js/src/connection.ts:4934:13)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Connection.sendRawTransaction (/Users/user/Documents/Programming/Blockchain/solana-anchor-react-minimal-example/scripts/solana/spl-token-v0.2.0/node_modules/@solana/web3.js/src/connection.ts:4893:20)
at async Connection.sendTransaction (/Users/user/Documents/Programming/Blockchain/solana-anchor-react-minimal-example/scripts/solana/spl-token-v0.2.0/node_modules/@solana/web3.js/src/connection.ts:4881:12)
at async sendAndConfirmTransaction (/Users/user/Documents/Programming/Blockchain/solana-anchor-react-minimal-example/scripts/solana/spl-token-v0.2.0/node_modules/@solana/web3.js/src/utils/send-and-confirm-transaction.ts:31:21) {
logs: [
'Program 11111111111111111111111111111111 invoke [1]',
'Program 11111111111111111111111111111111 success',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1]',
'Program log: Error: Invalid instruction',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 796 of 1400000 compute units',
'Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA failed: custom program error: 0xc'
]
}
[Done] exited with code=1 in 1.379 seconds
原因
エラー内容の「0xc」はInstructionエラーを指しているのだが(引数の指定が誤りなど)、今回はおそらくそれとは異なる部分に起因していた。
- macOSのバージョンとSolana CLIのバージョン互換があっていなかった
- macOSとSolana CLIを最新バージョンにしたあとに再実行するも、同様のエラーが発生。これはおそらくキャッシュが溜まっていて、うまく動作していなかった(本来はうまく動作する)
対応
以下3点を実行
- macOSのバージョンとSolana CLIを最新バージョンにする
- node_modules, packages-lock.jsonを削除して、npm i でインストールする
- 再度SolanaのWeb3.jsを実行する
補足
以上でうまく動作するはずだが、自分の場合はこれでもうまくいかなかったため、以下を追加で実行。
ソースコードを変更
以前まで動いていたソース(spl-token 0.2.x):
const mint = await createMint(
connection, // connection
fromWallet, // payer
fromWallet.publicKey, // mintAuthority
null, // freezeAuthority
9 // decimals
);
APIドキュメントやソースコードをもとに、引数をすべて指定する。
修正後のソース(spl-token 0.3.x):
const mint = await createMint(
connection, // connection
fromWallet, // payer
fromWallet.publicKey, // mintAuthority
null, // freezeAuthority
9, // decimals
undefined, // keypair(it will be mint address)
{}, // confirmOptions
TOKEN_PROGRAM_ID // programId
);
この対応をしたら正常に動作した。おそらくキャッシュが効いてしまった(?)ような挙動だった。