![見出し画像](https://assets.st-note.com/production/uploads/images/150884368/rectangle_large_type_2_cb31794cfe4c44047f4ee6c85fcd6b9b.png?width=1200)
【完全保存版】Solanaのトランザクションで想定される22のエラーパターン
この記事では、こちらのGithubを元に、Solanaのトランザクションで想定されているエラーパターンを記述します。
1 AccountInUse
アカウントが他のトランザクションで処理中で、並行処理がサポートされていない場合に発生します。
2 AccountLoadedTwice
トランザクションのaccount_keysに同じPubkeyが二重に現れた場合に発生します。
命令は同じPubkeyを複数回参照できますが、メッセージ内で重複したキーが含まれていてはなりません。
![](https://assets.st-note.com/img/1723770288573-SDGW05f49B.png?width=1200)
3 AccountNotFound
アカウントからデビットしようとしましたが、事前のクレジット記録が見つからない場合に発生します。
翻訳者注
つまり、過去入金された履歴がなく、そもそもアカウントでないため、エラーになるケースですね。
4 ProgramAccountNotFound
存在しないプログラムを読み込もうとした場合に発生します。
5 InsufficientFundsForFee
トランザクションのスケジューリングに必要な手数料を支払うための残高が不足している場合に発生します。
翻訳者補足
「スケジューリング」と書いているのが印象的でした。
リーダーにトランザクションを送るということは、リーダーのスケジュールに組み込んでもらうことなのかなと思いました。
6 InvalidAccountForFee
このアカウントがトランザクション手数料を支払うために使用できない場合に発生します。
7 AlreadyProcessed
このトランザクションがすでに処理されたことがある場合に発生します。
UDPパケットの重複、クライアントがrecent_blockhashを更新しなかった場合、または二重支払い攻撃の可能性があります。
8 BlockhashNotFound
指定されたrecent_blockhashが見つからないか、トランザクションが古すぎてrecent_blockhashが破棄された場合に発生します。
9 InstructionError(u8, InstructionError)
指定された命令の処理中にエラーが発生した場合に発生します。
タプルの最初の要素はエラーが発生した命令のインデックスを示します。
10 CallChainTooDeep
ローダーのコールチェーンが深すぎる場合に発生します。
翻訳者注
Solanaの場合、CPIのことを言っているのだと思いました。
CPIの深さは5で、呼び出せるのは4まででした。
11 MissingSignatureForFee
トランザクションに手数料が必要ですが、署名が存在しない場合に発生します。
12 InvalidAccountIndex
トランザクションに無効なアカウント参照が含まれている場合に発生します。
13 SignatureFailure
トランザクションが署名の検証に失敗した場合に発生します。
14 InvalidProgramForExecution
このプログラムが命令を実行するために使用できない場合に発生します。
15 SanitizeFailure
トランザクションがアカウントオフセットのサニタイズに失敗した場合に発生します。
このエラーは、アカウントロックがこのトランザクションに対して取得されておらず、解除されるべきでないことを意味します。
16 ClusterMaintenance
クラスターのメンテナンスのためにトランザクションが一時的に無効化されている場合に発生します。
17 AccountBorrowOutstanding
トランザクション処理中にアカウントに未解決の借用参照が残った場合に発生します。
翻訳者注
つまり、借りたままになってしまっているのですね。
解放されないので、他のプロセスが使えなかったり、不整合のリスクが発生します。
18 WouldExceedMaxBlockCostLimit
トランザクションが最大ブロックコストの制限を超える場合に発生します。
19 UnsupportedVersion
トランザクションのバージョンがサポートされていない場合に発生します。
20 InvalidWritableAccount
書き込み可能でないアカウントをトランザクションが書き込み可能として読み込もうとした場合に発生します。
21 WouldExceedMaxAccountCostLimit
トランザクションがブロック内の最大アカウントコストの制限を超える場合に発生します。
22 WouldExceedMaxAccountDataCostLimit
トランザクションがブロック内の最大アカウントデータコストの制限を超える場合に発生します。
翻訳者注
21と22は内容が似ていますが、前者は計算や実行の負荷に関する制限であり、後者はデータの保存容量に関する制限だと考えられます。
いいなと思ったら応援しよう!
![ユウキ](https://assets.st-note.com/production/uploads/images/52347520/profile_e7d36b385c74618d7fec56da47f68a35.jpeg?width=600&crop=1:1,smart)