取引手数料
すべてのSolana取引には、validatorが取引を処理するための基本手数料(SOL)が必要です。また、現在のリーダー(validator)があなたの取引を処理する可能性を高めるために、オプションの優先手数料を支払うこともできます。
重要ポイント
- 取引の基本手数料は、取引の署名1つにつき5000 lamportです。
- 優先手数料(オプション)は、現在のリーダーがあなたの取引を処理する可能性を高めるために、validatorに支払う追加手数料です。
- 優先手数料は:**(コンピュートユニット上限 × コンピュートユニット価格)**で計算されます。
- コンピュートユニット上限は、あなたの取引が使用できる最大のコンピュートユニット数です。
- コンピュートユニット価格は、マイクロlamport単位のコンピュートユニットあたりの価格です。
- 1,000,000マイクロlamport = 1 lamport
- 取引手数料の支払い者は、System Programが所有するアカウントでなければなりません。
基本取引手数料
基本手数料は取引を送信するためのコストです。取引に含まれる署名1つにつき5000 lamportのコストがかかります。
基本手数料は、取引の最初の署名者である取引手数料支払い者のアカウントから差し引かれます。手数料支払い者はSystem Programが所有するアカウントでなければなりません。
優先手数料
優先手数料は、現在のリーダーがあなたの取引を処理する可能性を高めるために支払うオプションの手数料です。
- SIMD-0096: トランザクションを処理するvalidatorは優先手数料の100%を受け取ります。
コンピュートユニットと制限
トランザクションが処理される際、コンピュートユニット(CU)で測定される計算リソースを使用します。各命令はトランザクションのコンピュートユニット予算から差し引かれます。
- 最大制限:トランザクションは最大で140万コンピュートユニットまで使用できます。
- デフォルト制限:デフォルトでは、各命令は最大で20万コンピュートユニットまで使用できます。
- カスタム制限:トランザクションに
SetComputeUnitLimit
命令を含めることで、特定のコンピュートユニット制限をリクエストできます。
コンピュートユニットの使用に関する詳細:
コンピュートユニットの使用に関する詳細については、最適なコンピュートのリクエスト方法ガイドをご覧ください。
コンピュートユニット価格
コンピュートユニット価格は、リクエストした各コンピュートユニットに対して支払うマイクロlamport単位のオプション金額です。この価格はトランザクションの優先順位付け手数料を計算するために使用されます。
現在のコンピュートユニット価格に関するリアルタイムの推奨事項を得るには、以下のリソースを使用してください:
- Heliusによる優先手数料API
- Tritonによるグローバル優先手数料トラッカー
優先手数料の詳細については、優先手数料の使用方法ガイドをご覧ください。
優先順位付け手数料の計算
優先順位付け手数料は次のように計算されます:
優先順位付け手数料 = コンピュートユニット制限 × コンピュートユニット価格
トランザクションのコンピュートユニット制限と価格を設定するには、以下の命令を使用します:
SetComputeUnitLimit
で特定のユニット制限を設定します。SetComputeUnitPrice
でコンピュートユニットあたりの価格を定義します。
これらの命令を提供しない場合、トランザクションはデフォルトのコンピュートユニット制限を使用し、コンピュートユニット価格は0(優先順位付け手数料なし)となります。
優先料金は、トランザクションのためにリクエストした計算ユニットの上限に依存し、実際に使用した計算ユニットには依存しません。計算ユニットの上限を高く設定しすぎたり、デフォルトの値を使用した場合、未使用の計算ユニットに対して料金を支払う可能性があります。
例
以下の例は、トランザクションの計算ユニットの上限と価格を設定する方法を示しています。
SDK | ソースコード参照 |
---|---|
solana-sdk (Rust) | ComputeBudgetInstruction |
@solana/web3.js (Typescript) | ComputeBudgetProgram |
const limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({units: 300_000});const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({microLamports: 1});
import {LAMPORTS_PER_SOL,SystemProgram,Transaction,Keypair,Connection,ComputeBudgetProgram,sendAndConfirmTransaction} from "@solana/web3.js";const connection = new Connection("http://localhost:8899", "confirmed");const sender = Keypair.generate();const recipient = new Keypair();const airdropSignature = await connection.requestAirdrop(sender.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(airdropSignature, "confirmed");// Create compute budget instructionsconst limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({units: 300_000});const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({microLamports: 1});const transferInstruction = SystemProgram.transfer({fromPubkey: sender.publicKey,toPubkey: recipient.publicKey,lamports: 0.01 * LAMPORTS_PER_SOL});// Add the compute budget and transfer instructions to a new transactionconst transaction = new Transaction().add(limitInstruction).add(priceInstruction).add(transferInstruction);const signature = await sendAndConfirmTransaction(connection, transaction, [sender]);console.log("Transaction Signature:", signature);
Is this page helpful?