概要
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配列が付加されます:
| フィールド | サイズ | 説明 |
|---|---|---|
0x80 | 1バイト | バージョンプレフィックスバイト |
header | 3バイト | MessageHeader(レガシーと同じ) |
static_account_keys | compact-u16 + N x 32バイト | トランザクション内に文字通り表示されるキー |
recent_blockhash | 32バイト | ブロックハッシュ |
instructions | compact-u16 + 可変 | レガシーと同じ形式 |
address_table_lookups | compact-u16 + 可変 | ALT参照(下記参照) |
各アドレステーブルルックアップエントリには以下が含まれます:
| フィールド | サイズ | 説明 |
|---|---|---|
account_key | 32バイト | ALTアカウントの公開鍵 |
writable_indexes | compact-u16 + N x 1バイト | 書き込み可能アカウント用のALTへのインデックス |
readonly_indexes | compact-u16 + N x 1バイト | 読み取り専用アカウント用のALTへのインデックス |
アドレスルックアップテーブルの解決
ALTは最大256個の公開鍵を保存するオンチェーンアカウントです。ALTを参照することで、トランザクションは32バイトの公開鍵の代わりに1バイトのインデックスを使用して追加のアカウントを含めることができ、アカウントごとのオーバーヘッドを大幅に削減します。
実行開始前のランタイムにおいて、validatorはすべてのALT参照を完全な公開鍵に解決します。解決されたアドレスは静的アカウントキーに追加され、完全なアカウントキーリストを形成します。ALTで解決されたアカウントは、静的アカウントと同じ順序に従います。書き込み可能なルックアップが読み取り専用ルックアップの前に配置されます。
アドレスルックアップテーブルは、オンワイヤトランザクションでアカウントがどのように参照されるかにのみ影響します。実行時には、ランタイムがすべてのインデックスを完全なアカウントアドレスに解決します。ALTで解決されたアカウントは書き込み可能または読み取り専用(非署名者)のみ可能で、署名者にはなれません。
Is this page helpful?