見出し画像

【完全保存版】Solanaのトランザクションで想定される22のエラーパターン

この記事では、こちらのGithubを元に、Solanaのトランザクションで想定されているエラーパターンを記述します。

1 AccountInUse

アカウントが他のトランザクションで処理中で、並行処理がサポートされていない場合に発生します。

2 AccountLoadedTwice

トランザクションのaccount_keysに同じPubkeyが二重に現れた場合に発生します。

命令は同じPubkeyを複数回参照できますが、メッセージ内で重複したキーが含まれていてはなりません。

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は内容が似ていますが、前者は計算や実行の負荷に関する制限であり、後者はデータの保存容量に関する制限だと考えられます。

いいなと思ったら応援しよう!

ユウキ
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊