バージョン付きトランザクション

概要

V0トランザクションはアドレスルックアップテーブル(ALT)を追加し、32バイトのキーの代わりに1バイトのインデックスを介してアカウントを参照できるようにします。これにより、ALTで解決されるアカウントごとに31バイトを節約できます。

Solanaは2つのトランザクション形式をサポートしています:レガシーバージョン付き(v0)。

validatorは、メッセージの最初のバイトを検査することで形式を判断します:

  • 最初のバイトにバージョンプレフィックスビットが設定されている場合、それはバージョン付きメッセージです。現在はバージョン0のみがサポートされています。次の3バイトはMessageHeaderです。
  • それ以外の場合はレガシーメッセージです。最初のバイトはnum_required_signaturesで、次の2バイトでヘッダーが完成します。

V0トランザクションを使用するタイミング

トランザクションが多数のアカウントを参照し、1,232バイトのパケット制限に近づく場合はV0を使用してください。すべてのアカウントをインラインで含めてもトランザクションがサイズ制限内に収まる場合、レガシートランザクションの方がシンプルで、より広範なツールサポートがあります。アドレスルックアップテーブルを使用するにはV0が必要です。

V0メッセージ形式

v0メッセージは、レガシーメッセージと同じフィールドに加えて、instructionsの後に追加のaddress_table_lookups配列が付加されます:

フィールドサイズ説明
0x801バイトバージョンプレフィックスバイト
header3バイトMessageHeader(レガシーと同じ)
static_account_keyscompact-u16 + N x 32バイトトランザクション内に文字通り表示されるキー
recent_blockhash32バイトブロックハッシュ
instructionscompact-u16 + 可変レガシーと同じ形式
address_table_lookupscompact-u16 + 可変ALT参照(下記参照)

各アドレステーブルルックアップエントリには以下が含まれます:

フィールドサイズ説明
account_key32バイトALTアカウントの公開鍵
writable_indexescompact-u16 + N x 1バイト書き込み可能アカウント用のALTへのインデックス
readonly_indexescompact-u16 + N x 1バイト読み取り専用アカウント用のALTへのインデックス

アドレスルックアップテーブルの解決

ALTは最大256個の公開鍵を保存するオンチェーンアカウントです。ALTを参照することで、トランザクションは32バイトの公開鍵の代わりに1バイトのインデックスを使用して追加のアカウントを含めることができ、アカウントごとのオーバーヘッドを大幅に削減します。

実行開始前のランタイムにおいて、validatorはすべてのALT参照を完全な公開鍵に解決します。解決されたアドレスは静的アカウントキーに追加され、完全なアカウントキーリストを形成します。ALTで解決されたアカウントは、静的アカウントと同じ順序に従います。書き込み可能なルックアップが読み取り専用ルックアップの前に配置されます。

アドレスルックアップテーブルは、オンワイヤトランザクションでアカウントがどのように参照されるかにのみ影響します。実行時には、ランタイムがすべてのインデックスを完全なアカウントアドレスに解決します。ALTで解決されたアカウントは書き込み可能または読み取り専用(非署名者)のみ可能で、署名者にはなれません。

Is this page helpful?

目次

ページを編集

管理運営

© 2026 Solana Foundation.
無断転載を禁じます。
つながろう