Комісії за транзакції

Кожна транзакція Solana вимагає комісії за транзакцію, яка сплачується в SOL. Комісії за транзакції поділяються на дві частини: базову комісію та комісію пріоритизації. Базова комісія компенсує валідаторам обробку транзакції. Комісія пріоритизації є опціональною комісією для збільшення ймовірності того, що поточний лідер обробить вашу транзакцію.

Базова комісія

Кожна транзакція коштує 5000 лампортів за кожен включений підпис. Ця комісія сплачується першим підписантом транзакції. Тільки акаунти, що належать System Program, можуть сплачувати комісії за транзакції. Базова комісія розподіляється наступним чином:

Комісія пріоритизації

Комісія пріоритизації є опціональною комісією, яка використовується для збільшення ймовірності того, що поточний лідер (валідатор) обробить вашу транзакцію. Валідатор отримує 100% комісії пріоритизації. Комісії пріоритизації можна встановити, налаштувавши ціну обчислювальної одиниці (CU) та ліміт CU транзакції. (Дивіться посібник з використання пріоритетних комісій для більш детальної інформації про комісії пріоритизації.)

Комісія пріоритизації розраховується наступним чином:

Prioritization fee formula
Prioritization fee = CU limit * CU price

Комісія пріоритизації використовується для визначення пріоритету вашої транзакції відносно інших транзакцій. Вона розраховується за наступною формулою:

Transaction priority formula
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)

Ліміт обчислювальних одиниць

За замовчуванням, кожній інструкції виділяється 200 000 CU, а кожній транзакції виділяється 1,4 мільйона CU. Ви можете змінитиці значення за замовчуванням, включивши інструкцію SetComputeUnitLimit у вашу транзакцію.

Щоб розрахувати відповідний ліміт CU для вашої транзакції, ми рекомендуємо наступні кроки:

  1. Оцініть необхідні одиниці CU шляхом симуляції транзакції
  2. Додайте 10% запас безпеки до цієї оцінки

Пріоритетна комісія визначається запитаним лімітом обчислювальних одиниць транзакції, а не фактичною кількістю використаних обчислювальних одиниць. Якщо ви встановите ліміт обчислювальних одиниць занадто високим або використаєте стандартну кількість, ви можете заплатити за невикористані обчислювальні одиниці.

Ціна обчислювальної одиниці

Ціна обчислювальної одиниці — це необов'язкова сума мікро-лампортів, що сплачується за кожну запитану CU. Ви можете розглядати ціну CU як чайові для заохочення валідатора надати пріоритет вашій транзакції. Щоб встановити ціну CU, включіть інструкцію SetComputeUnitPrice у вашу транзакцію.

Стандартна ціна CU дорівнює 0, що означає, що стандартна пріоритетна комісія також дорівнює 0.

Для допомоги у визначенні найкращої ціни CU для вашої транзакції перегляньте рекомендації щодо ціни CU в реальному часі, наведені в таблиці нижче.

Приклад

Приклади нижче показують, як встановити ліміт CU та ціну CU для транзакції використовуючи Solana SDK.

SDKПосилання на вихідний код
@solana/web3.js (Typescript)ComputeBudgetProgram
solana-sdk (Rust)ComputeBudgetInstruction
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 instructions
const 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 transaction
const transaction = new Transaction()
.add(limitInstruction)
.add(priceInstruction)
.add(transferInstruction);
const signature = await sendAndConfirmTransaction(connection, transaction, [
sender
]);
console.log("Transaction Signature:", signature);
Console
Click to execute the code.

Is this page helpful?

Зміст

Редагувати сторінку

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку