このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
トランザクションの構成
Solana トランザクションは 3 つのコアコンポーネントから構成されています:- メッセージ:命令の順序付きリスト、それらが参照するアカウント、および最近のブロックハッシュ。
- 署名:署名者あたり 1 つ、トランザクションが認可されたことを証明します。
- 最近のブロックハッシュ:トランザクションが最新であることを証明します。古いブロックハッシュ(150 スロット以上前)を持つトランザクションは拒否されます。
命令
命令は以下を指定します:program_id— 呼び出すプログラム。accounts— プログラムが触れる可能性があるアカウント(と書き込み可能/署名者フラグ)。data— プログラムが解釈する不透明なバイト。
ComputeBudget::SetComputeUnitLimit— デフォルトの CU 制限を上げます。ComputeBudget::SetComputeUnitPrice— プライオリティ手数料を設定します。- オプション
CreateAssociatedTokenAccount— ユーザーが持っていない場合、出力 ATA を作成します。 Raydium::SwapBaseInput— スワップを実行します。- オプション
CloseAccount— ラップされた SOL ATA を閉じます。
raydium.trade.swap() を通じてこれらを自動的にパックします。
トランザクション内のアカウント
トランザクション内の任意の命令に触れられるすべてのアカウントは、トランザクションのアカウントキーにリストされる必要があります。各アカウントは次のようにフラグされます:- 署名者/非署名者:アカウントの所有者がトランザクションに署名する必要がありますか?
- 書き込み可能/読み取り専用:トランザクションはアカウントを変更できますか?
solana-fundamentals/account-model を参照)。複数のティック配列クロッシングを含む CLMM スワップは 20 以上が可能です。
トランザクションサイズ制限
Solana はトランザクションを1232 バイトに制限しており、署名、メッセージ、ヘッダーを含みます。これは複雑なトランザクションにおける最も一般的な障害です — Raydium の CLMM とマルチホップルーティングは定期的にこの制限に対抗します。 典型的な約 1000 バイトの Raydium スワップの内訳:アドレスルックアップテーブル(ALT)
ALT を使用すると、トランザクションは完全な 32 バイトの公開キーではなく、公開されたテーブルへの 1 バイトインデックスで参照できます。これはトランザクションを大幅に圧縮します:- 20 個のアカウントを直接参照するトランザクション:約 640 B の公開キー。
- ALT を使用した同じトランザクション:約 20 B のインデックス + ALT 参照。
コンピュートバジェット
すべてのトランザクションにはコンピュートユニット(CU)バジェットがあります。それを超えると実行が終了し、トランザクションは失敗します。- デフォルト:トランザクションあたり 200,000 CU。
- 最大:トランザクションあたり 1,400,000 CU(
ComputeBudget::SetComputeUnitLimitで上げられます)。 - ブロックあたりの上限:ブロックあたり 48M CU(プロトコルレベル)。
integration-guides/priority-fee-tuning を参照):
常に
ComputeBudget を通じて明示的な CU 制限を設定してください。そうしないと、ほとんどの Raydium 命令には低すぎる 200k デフォルトを取得します。
プライオリティ手数料
基本トランザクション手数料(署名あたり 5000 ラムポート)を超えて、バリデーターはますますプライオリティ手数料を支払うトランザクションを優先しています:マイクロラムポート単位の CU あたりのチップ。integration-guides/priority-fee-tuning でこれを動的にサイズする方法を参照してください。
命令カウントとアカウントカウント制限
1232 バイトの合計制限を超えて:- トランザクションあたりの最大アカウント数:128。
- 命令あたりの最大アカウント数(CPI):64。
- トランザクションあたりの最大命令数:ハード制限なし、サイズ制限によってのみ制限されます。
- 最大 CPI 深度:4(プログラムは別のプログラムを呼び出すことができ、別のプログラムは 4 レベル深くまで呼び出すことができます)。
Raydium スワップの手数料カテゴリ
ユーザースワップトランザクションは 2 つのカテゴリで手数料を支払います:Solana ネットワーク手数料
SOL でバリデーターに支払われます。- 基本署名手数料:署名あたり 5000 ラムポート。ほぼ常に 1 署名 = 0.000005 SOL。
- プライオリティ手数料:マイクロラムポート単位の CU 価格 × CU 制限。混雑と共に変わります。
integration-guides/priority-fee-tuningを参照してください。
Raydium プロトコル手数料
スワップ金額から控除されます。- スワップ手数料:入力の割合(CPMM 典型的 0.25%、CLMM ティアごと 0.01%~1%)。LP とプロトコル先へ分割。
ray/protocol-feesを参照してください。
例:CPMM 0.25% ティア経由で $1000 USDC → SOL
スリッページ(価格インパクト + 市場変動)は手数料ではありませんが、同じ底線に影響します。
バージョン管理トランザクション
Solana には 2 つのトランザクション形式があります:- レガシー:元の形式、ALT サポートなし。
- v0(バージョン管理):ALT をサポートし、将来のバージョンに拡張可能。
ブロックハッシュの新鮮さ
トランザクションは過去約 150 スロット(約 60 秒)以内のブロックハッシュを含める必要があります。その窓を超えると、バリデーターはこれを拒否します。 リトライループの場合、各リトライで新しいブロックハッシュをフェッチしてください:integration-guides/priority-fee-tuning を参照してください。
並列実行
Solana はマルチコアバリデーターで競合しないトランザクションを並列に実行します。 2 つのトランザクションが同じアカウントに両方書き込む場合、競合します。 Raydium への影響:- 同じプール上の 2 つのスワップは並列で実行できません — 両方ともプール状態に書き込みます。
- プール A 上のスワップとプール B 上のスワップは、アカウントリストが重ならない場合は並列で実行されます。
- 読み取り専用トランザクションは同じアカウント上のライターをブロックしません(読み取り専用は自身と同時実行ですが、書き込みとは同時実行しません)。
トランザクション確認レベル
トランザクションを送信する際に確認レベルを選択します:
スワップ UX の場合、
confirmed が標準です。大きな価値を扱う操作(プール作成、報酬トップアップ)の場合、finalized がより安全です。
シミュレーション
Solana は送信前にトランザクションをシミュレートすることをサポートしています:getBestSwapInfo を計算するときに内部的にシミュレーションを使用して、選択されたルートが実際に成功することを確認しています。シミュレーションは無料ではありません — RPC 容量を消費します — しかし、支払う前にエラーをキャッチします。
ポインター
solana-fundamentals/account-model— トランザクション内のアカウント。solana-fundamentals/pdas-and-cpis— プログラムが互いに呼び出す方法。integration-guides/priority-fee-tuning— CU 制限とプライオリティ手数料のサイズ変更。ray/protocol-fees— Raydium プロトコル手数料構造。

