Durable Nonce: Durable Nonceとは?Durable Nonceとは、Solanaの特殊なアカウントに保存される永続的な値です。通常のrecent blockhashの有効期限を超えて、トランザクションを使用可能な状態に保てます。通常のSolanaトランザクションには、150スロットのみ有効なrecent blockhashが含まれます。recent blockhashの有効期限が切れる前に処理されなかDurable Nonce: Durable Nonceとは?Durable Nonceとは、Solanaの特殊なアカウントに保存される永続的な値です。通常のrecent blockhashの有効期限を超えて、トランザクションを使用可能な状態に保てます。通常のSolanaトランザクションには、150スロットのみ有効なrecent blockhashが含まれます。recent blockhashの有効期限が切れる前に処理されなか

Durable Nonce

2026/10/13 15:29
#Advanced
Humanity
H$0.05486-9.53%
SynFutures
F$0.00314-4.53%
PX
PX$0.0125-3.84%
Core DAO
CORE$0.01898-5.94%
ソラナ
SOL$107.24-3.94%

Durable Nonceとは?

Durable Nonceとは、Solanaの特殊なアカウントに保存される永続的な値です。通常のrecent blockhashの有効期限を超えて、トランザクションを使用可能な状態に保てます。

通常のSolanaトランザクションには、150スロットのみ有効なrecent blockhashが含まれます。

recent blockhashの有効期限が切れる前に処理されなかったトランザクションは、一般に同じ署名済みメッセージのまま再送信しても成功しません。

Durable Nonceは、短期間しか有効でないblockhashを、Nonceアカウントが更新または変更されるまで使用可能な状態で保持される値に置き換えます。

これにより、オフライン署名、遅延送信、複数当事者による承認、コールドストレージの運用、スケジュールされたワークフロー、短時間での承認が難しい組織などに役立ちます。

公式のSolana Durable Nonceドキュメントでは、オンチェーンアカウントに保存されたNonce値を使用することで、通常の150スロットの有効期限をなくす仕組みと説明されています。

Durable Nonceを使っても、あらゆる条件下でトランザクションが永久に有効になるわけではありません。

保存されたNonceが更新された場合、Nonceアカウントが閉鎖された場合、必要な権限が変更された場合、または別のトランザクションが同じNonce値を正常に使用した場合、トランザクションは無効になります。

Solanaのトランザクションが通常期限切れになる理由

通常のSolanaトランザクションには、

recent_blockhash
というフィールドが含まれます。

blockhashは、トランザクションが最近作成されたことを示す期間限定の参照値として機能します。

また、すでに処理されたトランザクションが繰り返し送信されるのを防ぐ助けにもなります。

バリデーターは、トランザクションのblockhashをネットワークのrecent blockhashキューと照合します。

現在のSolanaトランザクションパイプラインでは、通常のblockhashは最大処理経過時間である150スロット以内の場合に限り受け付けられます。

blockhashが古くなりすぎると、バリデーターは命令を実行する前にトランザクションを拒否します。

この有効期限により、無期限のリプレイを防ぎ、通常の署名済みトランザクションを実行可能なものとして扱う期間を制限できます。

一方、署名に必要な時間がblockhashの有効期間を超える場合には問題が生じます。

Durable Nonceが必要な理由

暗号資産のトランザクションの中には、短時間のオンラインセッション内で作成、承認、送信できないものがあります。

企業では、複数の国にいる従業員の署名が必要な場合があります。

財務部門が、インターネットに直接接続しないエアギャップ端末に署名鍵を保管することもあります。

高度なセキュリティが求められる運用では、ブロードキャスト前に技術、財務、コンプライアンスの審査を通す必要がある場合があります。

マルチシグのワークフローでは、複数のハードウェア端末が異なるタイミングで同一のトランザクションに署名する必要がある場合があります。

決済アプリケーションが、ある運用期間にトランザクションを準備し、後で送信することもあります。

通常のrecent blockhashを使う場合、有効期限が切れるたびにメッセージ全体を作り直して再署名する必要があります。

Durable Nonceを使うと、安定した1つのトランザクションメッセージに各当事者が署名し、通常のblockhashの有効期間を過ぎた後に送信できます。

Nonceアカウントとは?

Nonceアカウントは、System Programが所有するSolanaの特殊なアカウントです。

Durable Nonceトランザクションに必要な状態を保存します。

初期化済みのNonceアカウントには、権限者の公開鍵、Durable Nonce値、Nonceが最後に更新された時点で記録された署名あたりのlamports手数料率が含まれます。

権限者は、Nonceアカウントの更新、権限者の再設定、または出金を許可されたアカウントを示します。

Durable Nonce値は、recent blockhashから導出されたハッシュで、後の利用に備えて保存されます。

手数料関連の値は、トランザクション手数料の処理に必要な情報を保持します。

Nonceアカウントが有効な間は、適用されるRent免除要件を満たすだけのSOLを保有する必要があります。

アプリケーションは、推定額を固定値として設定するのではなく、現在の最低残高をネットワークに問い合わせる必要があります。

Durable Nonceとrecent blockhashの違い

通常のトランザクションに使うrecent blockhashは、署名の直前にネットワークから取得します。

ネットワークの限られた処理期間を過ぎると期限切れになります。

Durable Nonceはオンチェーンアカウントに書き込まれ、元になったblockhashがrecentでなくなった後も利用できます。

通常のトランザクションでは、Nonceアカウントを作成または変更する必要はありません。

Durable Nonceトランザクションでは、Nonceアカウントを参照し、それを更新する特定の命令を含める必要があります。

署名してすぐに送信できる場合は、通常のトランザクションの方が簡単なため、一般にこちらを使用してください。

Durable Nonceには、アカウント管理、署名、トランザクションサイズ、手数料、運用上の要件が追加されます。

Durable Nonceとアカウントのシーケンス番号の違い

Nonceという用語は、暗号資産システムによって異なる意味で使われます。

アカウントベースのブロックチェーンの中には、トランザクションの順序付けとリプレイ防止のため、アカウントごとに増加するトランザクション番号を使用するものがあります。

SolanaのDurable Nonceは、すべてのウォレットに付随する単調増加のトランザクション数ではありません。

専用のSystem Programアカウントに保存されたハッシュです。

この値はトランザクションの

recent_blockhash
フィールドに設定され、Nonceの更新時に置き換えられます。

開発者は、他のブロックチェーンのトランザクションカウンターを前提とした考え方をSolanaのNonceアカウントに適用しないでください。

Durable Nonceトランザクションの仕組み

まずNonceアカウントを作成し、初期化します。

作成者は、今後のNonce操作を管理する権限者を設定します。

アプリケーションは、アカウントに保存されたDurable Nonce値を読み取ります。

その値をトランザクションメッセージの

recent_blockhash
フィールドに使用して、トランザクションを構築します。

トランザクションの命令リストの先頭に、

AdvanceNonceAccount
命令を配置します。

必要なアカウントが、シリアライズされたトランザクションメッセージ全体に署名します。

保存されたNonceは150スロット後に期限切れにならないため、オフラインで署名できます。

署名済みトランザクションをオンラインシステムに転送し、組織の準備が整った時点で送信します。

バリデーターはNonceアカウントが有効であること、保存値がトランザクションと一致すること、Nonce権限者が署名したことを確認します。

残りのトランザクション命令を実行する前に、Nonceが更新されます。

AdvanceNonceAccount命令

AdvanceNonceAccount
命令は、保存されたNonceを新しい値に置き換えるようSystem Programに指示します。

この命令は、Durable Nonceによるリプレイ防止に不可欠です。

ランタイムがDurable Nonceトランザクションとして認識するのは、

AdvanceNonceAccount
が最初の命令である場合に限られます。

Nonceアカウントは必要なアカウント位置に指定し、書き込み可能にする必要があります。

Nonce権限者はトランザクションに署名する必要があります。

この命令がトランザクションの途中に置かれていると、有効なDurable Nonceトランザクションではなく、期限切れの通常トランザクションとして扱われる場合があります。

公式のNonce検出ルールでは、この先頭配置要件が説明されています。

Nonceを更新しなければならない理由

Durable Nonce値は1回だけ使用できる必要があります。

更新しなければ、攻撃者や誤った処理によって同じ署名済みトランザクションが何度も送信される可能性があります。

アカウントを更新すると、古いNonceが現在のネットワーク状態から導出された新しい値に置き換わります。

以前の値を使った他の保留中トランザクションは、すべて無効になります。

そのため、すべて実行する予定の複数の署名済みトランザクションを、通常は同じNonce値に依存させるべきではありません。

最初に受け付けられたトランザクションがアカウントを更新し、古い値で作成された他のトランザクションを無効にします。

遅延実行する並行ワークフローには、通常それぞれ別のNonceアカウントを使用してください。

Nonce権限者

Nonce権限者は、Nonceアカウントに関する重要な操作を管理する権限を持つ公開鍵です。

Nonceを更新するトランザクションには、権限者の署名が必要です。

Nonce権限者の変更を承認する際にも、その署名が必要です。

Nonceアカウントから出金する際にも、権限者が必要です。

現在のSystem ProgramのNonceアカウントインターフェースでは、これらの権限要件が説明されています。

権限者とトランザクション手数料の支払者は、同じアカウントである必要はありません。

責任を分けることで、組織のセキュリティポリシーに対応しやすくなる場合があります。

権限のないNonce更新によって、オフラインで署名済みのトランザクションが無効になる可能性があるため、Nonce権限者を安全に保護してください。

手数料支払者とNonce権限者の違い

手数料支払者は、トランザクションの基本手数料と優先手数料を支払うアカウントです。

Nonce権限者は、保存されたDurable Nonceの使用を承認します。

1つのアカウントが両方の役割を担うことはできますが、論理上は別の役割です。

トランザクションには、資産所有者、トークン権限者、プログラム管理者、その他のアカウントの署名が必要な場合もあります。

必要な署名者は全員、同じトランザクションメッセージに署名します。

手数料支払者を変更すると通常はメッセージも変わるため、将来、手順を分離するために特別に設計された形式を使わない限り、既存の署名は無効になります。

オフライン署名

オフライン署名では、インターネット接続端末から秘密鍵を遠ざけます。

オンラインシステムは、アカウント情報を収集し、未署名のDurable Nonceトランザクションを構築できます。

シリアライズされたメッセージを、管理された媒体や監査可能な別の手順でオフライン署名端末に転送します。

オフライン端末でトランザクションを検証し、必要な署名を行います。

署名済みトランザクションをオンラインシステムに戻し、送信します。

Nonceアカウントが更新または変更されない限り、この手順中もNonceは有効なままです。

オフライン署名はネットワークへの直接的な露出を減らしますが、悪意を持って構築されたトランザクションから署名者を保護するものではありません。

署名者は、署名する前に送金先、金額、プログラムアドレス、トークンのミント、権限、手数料、重要なすべての命令を確認する必要があります。

マルチシグと複数当事者による承認

複数の当事者が1つのトランザクションに署名する場合、Durable Nonceが役立ちます。

メッセージが署名者間を移動している間に、通常のblockhashが期限切れになることがあります。

保存されたNonceを使うと、各署名者は同一のメッセージを時間をかけて確認し、承認できます。

必要な承認がすべて揃った後に、最終的な署名をまとめてブロードキャストできます。

命令、アドレス、手数料パラメーター、アカウントフラグのいずれかを変更すると署名が無効になるため、シリアライズされたメッセージを正確に維持する必要があります。

承認手続き中はNonceアカウントも変更されないようにしてください。

組織はNonceアカウントを監視し、送信前に予期しない更新や権限変更を検出する必要があります。

遅延実行

Durable Nonceを使うと送信を遅らせられますが、それ自体がトランザクションをスケジュールするわけではありません。

Durable Nonceを使ったというだけで、ブロックチェーンが指定した将来の日付に自動実行することはありません。

ユーザー、サーバー、自動化システム、またはリレイヤーが署名済みトランザクションを送信する必要があります。

そのため、スケジュール決済を提供するアプリケーションでは、Durable Nonceに加えてオフチェーンのスケジューラー、またはオンチェーンのスケジュール機能が必要です。

送信システムは、ブロードキャスト直前にNonceが最新であることを確認してください。

予定された業務条件が引き続き有効であることも確認する必要があります。

送信前にトランザクションの状態が変わる可能性

Durable Nonceトランザクションが署名済みのまま保留されている間に、ブロックチェーンの状態が変化することがあります。

アカウント残高が増減する場合があります。

トークンアカウントが凍結または閉鎖される場合があります。

スマートコントラクトがアップグレードされる場合があります。

オラクル価格が変動する場合があります。

ガバナンス上の決定によって、プログラムのパラメーターが変更される場合があります。

受取人のアカウントが、想定した状態ではなくなることもあります。

トランザクションの署名はシリアライズされたメッセージへの承認を証明しますが、将来の実行時に使われる外部アカウントやプログラムの状態すべてを固定するものではありません。

アプリケーションが対応している場合、遅延トランザクションには適切な上限、想定値、期限、またはプログラムレベルのチェックを含める必要があります。

リプレイ防止

リプレイ防止とは、同じ署名済み命令セットが繰り返し実行されることを防ぐ仕組みです。

通常のSolanaトランザクションでは、recent blockhashの有効期限と、ネットワークによる処理済みトランザクションの追跡が一部を担います。

Durable Nonceトランザクションでは、Nonceアカウントに保存された1回限りの値を使います。

バリデーターがその値を受け付けて更新すると、古い署名済みメッセージはアカウントと一致しなくなります。

そのため、同じトランザクションを再送信するとNonce検証に失敗します。

この保護は、更新命令を正しい位置に配置し、適切なNonce権限者の署名を必須とすることが条件です。

Durable Nonceトランザクションが成功するとどうなる?

バリデーターは、保存されたNonceがトランザクションの

recent_blockhash
と一致することを確認します。

Nonceアカウントが初期化済みで、System Programに所有されていることを検証します。

Nonce権限者がトランザクションに署名したことを確認します。

ランタイムがNonceを新しい値に更新します。

残りの命令が順番に実行されます。

必要な命令がすべて成功すると、状態変更と更新後のNonceが確定します。

手数料支払者からトランザクション手数料が差し引かれます。

古いNonceが使用済みになっているため、古い署名済みトランザクションを再度実行することはできません。

実行に失敗するとどうなる?

Durable Nonceの失敗時の挙動には、失敗したトランザクションの状態変更はすべて取り消されるという単純な説明とは異なる重要な点があります。

トランザクションがNonceと手数料支払者の検証を通過した後に命令が失敗した場合、通常の命令による状態変更はロールバックされます。

一方、Nonceの更新は確定します。

トランザクション手数料も徴収されます。

公式のSolanaの失敗時の挙動に関するドキュメントでは、同じ署名済みトランザクションが後に成功するまで繰り返し実行されるのを防ぐための仕組みと説明されています。

したがって、Durable Nonceトランザクションが失敗すると、そのNonceは消費されます。

再試行するには、新しいNonceを取得してトランザクションを作り直し、新たな署名を集める必要があります。

検証に失敗するとどうなる?

Nonceが有効と判断される前にトランザクションが失敗する場合もあります。

Nonceアカウントがない、Nonceがすでに消費されている、保存値がトランザクションと一致しない、権限者の署名がない、といった原因が考えられます。

この段階でNonce検証に失敗すると、命令は実行されずにトランザクションが破棄されます。

現在公表されている挙動では、この検証失敗について手数料は徴収されず、状態変更も確定しません。

使用不能な同じトランザクションを何度もブロードキャストせず、アプリケーションで正確なエラーを特定してください。

確認と再試行のリスク

送信アプリケーションは、Durable Nonceトランザクションが正常に処理されたのか、実行エラーを伴って処理されたのか、それとも受け付けられなかったのかを判断する必要があります。

元のトランザクションが実際には成功していた場合、確認せずに代替トランザクションを作成して送信すると、意図しない業務処理の重複が発生する可能性があります。

Nonceが消費された後に元のトランザクションをそのまま再送しても効果はありません。

アプリケーションは、トランザクションの状態を照会し、Nonceアカウントを確認してください。

システムは、トランザクションのファイナリティと命令実行の成功を区別する必要があります。

ファイナライズされたトランザクション記録にも、実行エラーが含まれる場合があります。

運用システムでは、署名の存在だけに依存せず、想定される残高やアカウントの変更を照合してください。

トランザクション手数料

Solanaのすべてのトランザクションでは、SOLで手数料を支払います。

現在のSolana手数料ドキュメントでは、署名あたり5,000 lamportsの基本手数料に加え、任意の優先手数料が説明されています。

Durable NonceトランザクションにはNonce更新命令と関連するアカウント参照が必要ですが、通常の署名手数料は免除されません。

署名者が増えると基本手数料も増加します。

必要な検証段階を通過した後にトランザクションが失敗した場合でも、Nonceが消費され、手数料が請求されることがあります。

アプリケーションでは、手数料支払者のアカウントに十分なSOLを維持し、NonceアカウントにもRent免除要件を満たす資金を確保してください。

優先手数料

優先手数料を支払うと、ネットワークの需要が高いときにトランザクションが処理される可能性を高められます。

ただし、処理への採用や実行の成功が保証されるわけではありません。

計算予算命令を含むDurable Nonceトランザクションには、命令順序に関する特別な要件があります。

AdvanceNonceAccount
命令は先頭に置く必要があります。

計算ユニット価格や上限の命令をその前に配置してはいけません。

公式のSolana統合ガイダンスでは、計算予算命令を先頭に置くと、ランタイムがDurable Nonceトランザクションを正しく検出できなくなる可能性があると警告されています。

Nonceアカウントの資金とRent免除

Nonceアカウントにはデータが含まれるため、有効な間はネットワークが定めるRent免除残高を維持する必要があります。

必要な最低額は、Nonceアカウントのデータサイズに応じた適切なネットワーク照会で取得してください。

一部の資金を出金した後、Nonceアカウントの残高をRent免除要件未満にすることはできません。

この状態を作るトランザクションは失敗します。

残高全額の出金に成功するとNonceアカウントは閉鎖されます。

現在のNonce出金インターフェースでは、これらの残高ルールが説明されています。

Nonceアカウントの閉鎖

権限のある命令でSOL残高を全額出金すると、Nonceアカウントを閉鎖できます。

出金にはNonce権限者の承認が必要です。

アカウントを閉鎖すると、保存されたNonceに依存する未送信トランザクションはすべて無効になります。

そのため、組織は残高全額を出金する前に、署名済みの保留中トランザクションがないか確認してください。

どのNonceアカウントが有効で、どのトランザクションがそれを使用し、どのアカウントを閉鎖できるか記録しておく必要があります。

Nonce権限者の変更

現在のNonce権限者は、権限のあるSystem Program命令を使って新しい権限者を設定できます。

従業員の退職、鍵の移行、カストディ方針の変更、セキュリティインシデントの後には、権限者のローテーションが役立つ場合があります。

以前の権限者を必要とする保留中のトランザクションは、権限者を変更すると無効になることがあります。

変更を送信する前に、新しい権限者を慎重に確認してください。

誤った公開鍵やアクセス不能な公開鍵を設定すると、Nonceアカウントを今後使用できなくなる可能性があります。

権限者の変更は記録し、すべての保留中のオフライン署名ワークフローと調整してください。

1つのNonce値につき保留中トランザクションは1つ

技術的には、複数のトランザクションを同じ保存済みNonce値で準備できます。

競合するそれらのトランザクションのうち、同じ値を正常に消費できるのは1つだけです。

最初に受け付けられたトランザクションがNonceを更新し、残りのトランザクションを無効にします。

複数の遅延トランザクションをそれぞれ独立して実行するワークフローでは、通常、複数のNonceアカウントを作成してください。

1つのアカウントで多数の保留中トランザクションを管理すると、順番待ちになるのではなく、互いに競合します。

Nonceアカウントは、将来のトランザクション一覧を保存するものではありません。

Durable Nonceとコールドストレージ

コールドストレージでは、重要な秘密鍵を通常のインターネット接続システムから遠ざけます。

Durable Nonceを使うと、コールド署名端末が通常のblockhashの期限切れを急ぐことなくトランザクションを承認できます。

オンラインの構築システムは、資産の送金や権限の変更を行うトランザクションを準備する可能性があるため、信頼できないものとして扱う必要があります。

署名前に、コールド環境でトランザクションの意味全体を解析し、表示する必要があります。

組織は、プログラムアドレス、アカウント権限、手数料設定、トークンのミント、受取アドレス、トランザクション金額を確認してください。

リムーバブルメディアを使ってシリアライズ済みトランザクションを転送する場合も、マルウェア対策とファイル完全性の手順が必要です。

Durable Nonceと財務オペレーション

暗号資産の財務部門では、複数段階の承認が必要な出金にDurable Nonceを利用できます。

社内の依頼を受けてトランザクションを準備し、離れた場所にいる権限者が署名できます。

すべての承認が完了したことを確認した後、最終担当者が送信できます。

堅牢な財務手順では、各Nonceアカウントを文書化された1つのトランザクション依頼に対応付ける必要があります。

ある部門が予期せずNonceアカウントを更新または閉鎖できないようにしてください。

Nonceを消費した後にトランザクションが失敗した場合の対応も定めておく必要があります。

Durable Nonceとスケジュール決済

Durable Nonceを使うと、署名済みトランザクションを指定時刻まで保持し、スケジュール決済に利用できます。

ただし、それ自体がオンチェーンで実行時刻を強制するわけではありません。

早期実行を防ぐ仕組みが別にない場合、リレイヤーが意図した時刻より前にトランザクションを送信する可能性があります。

実行時刻が重要な場合、署名者は完全に権限を付与したDurable Nonceトランザクションを信頼できない相手に渡してはいけません。

オンチェーンプログラムでネットワーク時刻などの承認済み条件を確認してから資金を解放すれば、より強い時間条件を設けられます。

スケジューラーが利用不能になった場合の対応も、設計時に検討してください。

Durable Nonceとスマートコントラクトトランザクション

Durable Nonceは、SOLの単純な送金だけでなく、Solanaプログラムを呼び出すトランザクションにも利用できます。

スマートコントラクトの実行を遅らせると、状態変化に伴う追加リスクが生じます。

署名から送信までの間に、スワップ価格が変動する可能性があります。

レンディングポジションが危険な状態になることもあります。

プログラムが必要とするアカウントが変更または閉鎖される場合があります。

アップグレード可能なプログラムが、トランザクション実行時には異なるコードを実行する可能性があります。

アプリケーションは、利用可能な場合、最低受取額、最大入力額、想定されるアカウント状態、その他の保護策を設定してください。

信頼できないアプリケーションが提示した、条件を限定しないDurable Nonceトランザクションへの署名は避けてください。

Durable Nonceとトランザクションシミュレーション

シミュレーションは、特定時点で観測されたブロックチェーン状態を基に、トランザクションの動作を推定します。

シミュレーションに成功しても、後でDurable Nonceトランザクションが成功するとは限りません。

送信前に、関連アカウントやプログラムのロジックが変わる可能性があります。

シミュレーションから実行までの間にNonceが消費されることもあります。

可能であれば送信予定時刻に近いタイミングでシミュレーションを実行しつつ、プログラムレベルの安全策も利用してください。

シミュレーション結果は、実際に署名するメッセージの検証に代わるものではありません。

セキュリティリスク

Durable Nonceの主なリスクは、鍵の侵害、権限のないNonce更新、誤った命令順序、古いアカウント状態、安全性を欠く遅延実行、トランザクション状態の不適切な処理です。

Nonce権限者の鍵が盗まれると、保留中のトランザクションが無効化されたり、アカウントの変更が承認されたりする可能性があります。

悪意のあるトランザクション作成者は、有効期間が長いことを利用し、将来異なる状況で実行される操作への署名を得る可能性があります。

担当者が失敗したトランザクションで誤ってNonceを消費することもあります。

再試行システムが元の結果を正確に確認しなければ、業務処理が重複する可能性があります。

セキュリティは暗号技術だけでなく、それを取り巻く運用手順にも左右されます。

Nonceアカウントの監視

アプリケーションはトランザクションの構築前にNonceアカウントを読み取る必要があります。

アカウントアドレス、権限者、保存されたNonce、予定トランザクション、承認状況を記録してください。

送信前にNonceを再確認する必要があります。

予期しない値が記録されていた場合、保留中のトランザクションはすでに無効です。

権限者の予期しない変更は、深刻な運用上またはセキュリティ上の事象を示す可能性があります。

組織はNonceの更新、権限者の変更、残高の出金、アカウントの閉鎖に対するアラートを設定してください。

監視では適切なコミットメントレベルを使い、ファイナリティを考慮する必要があります。

現在のプロトコル状況

Durable Nonceは、現在のSolanaトランザクションシステムで引き続き文書化され、サポートされています。

ただし、公式のDurable Nonceページでは、将来のリリースでこの仕組みが非推奨になる可能性があると警告されています。

Solana改善に関する議論では、特殊なバリデーター処理を減らしつつオフラインNonceワークフローを維持できる代替トランザクション形式が検討されています。

議論や提案は、ネットワークで変更が有効化されたことを意味しません。

Durable Nonceを使用する開発者は、公式仕様、クライアントのリリース、有効化のお知らせ、移行ガイダンスを確認してください。

長期運用する機関向けシステムでは、現在のトランザクション形式が永続的に変わらないと想定しないでください。

開発者がDurable Nonceを実装する方法

開発者は、Nonceアカウントの状態を手動でエンコードせず、保守されているSolana SDKとSystem Programのインターフェースを使用してください。

アプリケーションはNonceアカウントを照会し、所有者、初期化状態、権限者、現在のNonceを確認する必要があります。

保存されたNonceは、トランザクションの

recent_blockhash
フィールドに設定します。

AdvanceNonceAccount
は最初の命令でなければなりません。

Nonce権限者とその他すべての必要な署名者は、正確なメッセージに署名する必要があります。

システムは、シリアライズ済みトランザクションと署名を変更せずに保存してください。

送信前に、アカウントに想定したNonceと権限者が記録されていることを確認します。

送信後は、トランザクションの状態、実行エラー、Nonceの更新、手数料、想定したアカウント変更を確認してください。

ユーザーがDurable Nonceを安全に使う方法

署名の遅延が不要な場合は、通常のrecent blockhashトランザクションを優先してください。

Durable Nonceは、Nonceアカウントと権限者を明確に示すソフトウェアを通じて使用してください。

オフライン署名端末では、読めないシリアライズ済みメッセージをそのまま承認せず、各命令を確認してください。

キャンセルが必要な場合は、意図的にNonceを更新して保留中のトランザクションを無効にしてください。

キャンセルによって古いNonceが消費され、その値で作成されたすべてのトランザクションが無効になることを理解しておく必要があります。

Nonce権限者の鍵は、アカウントの価値と運用上の役割に応じてバックアップし、保護してください。

Nonceが更新されたからといって予定した送金が成功したと思い込まず、実行結果を確認してください。

Durable Nonceでよくある間違い

よくある間違いの1つは、Durable Nonceをウォレットの増加型トランザクション番号として扱うことです。

もう1つは、

AdvanceNonceAccount
より前に計算予算命令を置くことです。

3つ目は、1つのNonceで複数のトランザクションを作成し、すべて実行されると考えることです。

4つ目は、Durable Nonceによって将来の実行が自動的にスケジュールされると思い込むことです。

5つ目は、署名から送信までのブロックチェーン状態の変化を無視することです。

6つ目は、失敗したトランザクションの後もNonceが再試行に使えると考えることです。

7つ目は、署名済みトランザクションが保留中のままNonceアカウントを閉鎖または再認証することです。

8つ目は、元のトランザクション状態を確認せずに再送または再構築することです。

9つ目は、Nonceアカウントに必要なRent免除残高を固定値として設定することです。

10個目は、今後のSolanaリリースでもDurable Nonceの現在の挙動が変わらないと思い込むことです。

FAQ

SolanaのDurable Nonceとは?

Durable Nonceとは、System Programアカウントに保存され、短期間しか有効でないrecent blockhashの代わりに使用される永続的なハッシュです。

通常のSolanaトランザクションが期限切れになる理由は?

ネットワークの150スロットの処理経過時間内だけ受け付けられるrecent blockhashが含まれているためです。

Durable Nonceは150スロット後に期限切れになる?

いいえ。Nonceアカウントが更新、閉鎖、またはトランザクションが無効になる形で変更されるまで、その期間を超えて使用できます。

Durable Nonceを使えばトランザクションは永久に有効?

いいえ。保存されたNonceが消費された場合や、必要なアカウントおよび権限の条件が一致しなくなった場合、トランザクションは無効になります。

Nonceアカウントとは?

Nonce権限者、Durable Nonce値、手数料関連の状態を保存する、System Programが所有するアカウントです。

Nonceアカウントを管理するのは誰?

指定されたNonce権限者が、Nonceの更新、権限者の変更、出金を承認します。

Nonce権限者はトランザクション手数料を支払う必要がある?

いいえ。Nonce権限者と手数料支払者は、別々の署名アカウントにできます。

最初に配置すべき命令は?

Durable Nonceトランザクションでは、

AdvanceNonceAccount
命令を先頭に置く必要があります。

計算予算命令を先頭に配置できる?

いいえ。Durable Nonceトランザクションでは、

AdvanceNonceAccount
より前に配置してはいけません。

Durable Nonceトランザクションはオフラインで署名できる?

はい。オフライン署名は、この仕組みの主な用途の1つです。

Durable Nonceで決済をスケジュールできる?

いいえ。指定時刻に署名済みトランザクションを送信する別のシステムが必要です。

複数のトランザクションで1つのNonceを使える?

複数を準備できますが、そのNonceを正常に消費できるのは最初に受け付けられたトランザクションだけです。

複数の遅延トランザクションを独立して実行するには?

一般に、それぞれ別のNonceアカウントと保存Nonce値を使用します。

Nonceを使用するとどうなる?

Nonceアカウントに新しい値が保存され、古い値で署名されたトランザクションは無効になります。

後の命令が失敗するとどうなる?

通常の状態変更は取り消されますが、Nonceは更新され、トランザクション手数料も徴収されます。

失敗したDurable Nonceトランザクションを再送できる?

Nonceが消費された後は再送できません。新しい値でトランザクションを作り直し、再署名する必要があります。

保留中のDurable Nonceトランザクションはどのようにキャンセルする?

権限者が別の有効なトランザクションでNonceを更新し、古い署名済みトランザクションを使用不能にできます。

権限者を変更すると保留中のトランザクションが無効になる?

はい。アカウントの権限者変更後、以前の権限者の下で署名されたトランザクションが失敗することがあります。

NonceアカウントにSOLは必要?

はい。有効な間は、適用されるRent免除残高を維持する必要があります。

Nonceアカウントから資金を出金できる?

できます。ただし、一部出金ではRent免除残高を維持する必要があり、全額を出金するとアカウントは閉鎖されます。

Durable Nonceは暗号資産トークン?

いいえ。SolanaのSystem Programアカウントに保存されるトランザクション状態です。

Durable Nonceは秘密情報?

いいえ。Nonceアカウントと保存値は、オンチェーンで公開されています。

Nonceを知っていれば資金を盗める?

いいえ。Nonce権限者とその他の必要な署名者による有効な署名が必要です。

攻撃者が署名済みトランザクションを無効にできる?

Nonce権限者を管理する攻撃者は、Nonceアカウントを更新または変更し、保留中のトランザクションを無効にできる可能性があります。

シミュレーションに成功すれば後の実行も保証される?

いいえ。送信前にアカウントの状態、プログラム、残高、価格、Nonce自体が変わる可能性があります。

Durable Nonceは通常のトランザクションより高コスト?

追加のアカウント状態と更新命令が必要ですが、通常の署名手数料と優先手数料も引き続き適用されます。

現在Durable Nonceはサポートされている?

はい。ただし、将来のリリースで現在の仕組みが非推奨になる可能性があると公式ドキュメントで警告されています。

まとめ

Durable Nonceを使うと、Solanaトランザクションを通常のrecent blockhashの有効期間である150スロットを超えて使用可能な状態に保てます。

System Programが所有するNonceアカウントを通じて機能し、そのアカウントには権限者、保存されたハッシュ、手数料関連の状態が含まれます。

署名済みトランザクションメッセージでは、通常のrecent blockhashが保存されたNonceに置き換わります。

トランザクションでは、

AdvanceNonceAccount
を先頭に置き、Nonce権限者の署名を含める必要があります。

トランザクションが受け付けられるとNonceが更新され、古い署名済みメッセージはリプレイできなくなります。

後の命令が失敗した場合、意図された状態変更は取り消されますが、Nonceは消費され、手数料も徴収されます。

Durable Nonceは、エアギャップ署名、財務承認、複数当事者による認可、遅延送信に特に役立ちます。

トランザクションを自動的にスケジュールしたり、悪意のある命令やブロックチェーン状態の変化から署名者を保護したりするものではありません。

安全な実装には、Nonceの監視、メッセージの正確な保持、明確なトランザクション表示、信頼できる状態確認、慎重な権限管理が必要です。

現在の設計は将来のSolanaリリースで変更される可能性があるため、開発者は公式プロトコルのガイダンスを確認し、必要に応じて運用システムの移行に備えてください。
押し目か、チャンスか?
押し目か、チャンスか?押し目か、チャンスか?
強制決済が相次ぐ中、BTC ETFへの流入額が$24億に達した理由とは