Agenda
現象
SolanaやAnchorを使って、SPL Tokenをmintしたあとに、transferしたら発生したエラー。
Transaction simulation failed: Error processing Instruction 0: custom program error: 0x4
原因
Authorityが誤っているため。権限がないのにトークンを送信しようとしている。
自分のケースは、意図的にAuthorityを変更してテストしていたため発生。
たとえば、以下のようなコードがあったとする(以下は正常に動作)。
const tx = await program.rpc.proxyTransfer(new anchor.BN(400), {
accounts: {
authority: autority.publicKey,
to: to.publicKey,
from: from.publicKey,
tokenProgram: TokenInstructions.TOKEN_PROGRAM_ID,
},
});
これを以下のように、authorityを適当な値に変更して送信すると、権限ないため0x4エラーになる。
const tx = await program.rpc.proxyTransfer(new anchor.BN(400), {
accounts: {
authority: to.publicKey,
to: to,
from: from,
tokenProgram: TokenInstructions.TOKEN_PROGRAM_ID,
},
});
対応
正しいauthorityをセットする。
うろ覚えだが、Signerが誤っているケースも0x4エラーだった気がする。たとえば、以下のようなコードがあった場合に、「payer」が誤っているようなケース。
let signature = await web3.sendAndConfirmTransaction(
connection, // Connection
transaction, // Transaction
[payer] // Signer[]
);
参考
--------------------------------------------------------
$ spl-token mint $TOKEN1 10 $TOKENACCT1 --mint-authority ~/my_solana_wallet2.json
Minting 10 tokens
Token: Aqf1rBKNQYgX1mjE64STwV3miEwXEe2ioZzD7n4vkpXk
Recipient: 9EYnoqiBQmJPR55db44cF4wkN1PD5D6vjxEz61r2Ujak
RPC response error -32002: Transaction simulation failed: Error processing Instruction 0: custom program error: 0x4 [5 log messages]
--------------------------------------------------------
The answer? It doesn’t work! This is because the “mint authority” field of the token account is set to a different account, and only that account is allowed to mint new tokens.
うまくいきません!これは、トークンアカウントの「ミント権限」フィールドが別のアカウントに設定されており、そのアカウントのみが新しいトークンのミントを許可されているためです。