Комісії за транзакції
Кожна транзакція Solana вимагає базової комісії (SOL) для компенсації валідаторам за обробку транзакції. Ви також можете сплатити додаткову комісію за пріоритизацію, щоб збільшити ймовірність того, що поточний лідер (validator) обробить вашу транзакцію.
Ключові моменти
- Базова комісія за транзакцію становить 5000 lamport за кожен підпис у транзакції.
- Комісія за пріоритизацію (необов'язкова) — це додаткова плата, яку ви сплачуєте validator, щоб збільшити ймовірність того, що поточний лідер обробить вашу транзакцію.
- Комісія за пріоритизацію дорівнює: (ліміт обчислювальних одиниць * ціна обчислювальної одиниці).
- Ліміт обчислювальних одиниць — це максимальна кількість обчислювальних одиниць, яку може використати ваша транзакція.
- Ціна обчислювальної одиниці — це ціна за обчислювальну одиницю в мікро-lamport.
- 1 000 000 мікро-lamport = 1 lamport
- Платник комісії за транзакцію повинен бути обліковим записом, яким володіє System Program.
Базова комісія за транзакцію
Базова комісія — це вартість відправлення транзакції. Вартість становить 5000 lamport за кожен підпис, включений у транзакцію.
Базова комісія знімається з рахунку платника комісії за транзакцію, який є першим підписантом транзакції. Платник комісії повинен бути обліковим записом, яким володіє System Program.
- 50% спалюється: Половина базової комісії спалюється.
- 50% розподіляється: Половина виплачується validator, який обробив транзакцію.
Комісія за пріоритизацію
Комісія за пріоритизацію — це необов'язкова плата, яка сплачується для збільшення ймовірності того, що поточний лідер обробить вашу транзакцію.
- SIMD-0096: Validator, який обробляє транзакцію, отримує 100% комісії за пріоритет.
Обчислювальні одиниці та ліміти
Коли транзакція обробляється, вона використовує обчислювальні ресурси, які вимірюються в обчислювальних одиницях (CU). Кожна інструкція віднімає від бюджету обчислювальних одиниць транзакції.
- Максимальний ліміт: Транзакція може використовувати до 1,4 мільйона обчислювальних одиниць.
- Ліміт за замовчуванням: За замовчуванням кожна інструкція може використовувати до 200 000 обчислювальних одиниць.
- Користувацький ліміт: Ви можете запросити конкретний ліміт обчислювальних
одиниць, включивши інструкцію
SetComputeUnitLimit
у вашу транзакцію.
Для отримання додаткової інформації про використання обчислювальних одиниць:
Дивіться посібник Як запитувати оптимальні обчислення для отримання додаткової інформації про використання обчислювальних одиниць.
Ціна обчислювальної одиниці
Ціна обчислювальної одиниці — це необов'язкова сума, вказана в мікро-lamport, яку ви платите за кожну запитану обчислювальну одиницю. Ця ціна використовується для розрахунку комісії за пріоритет вашої транзакції.
Використовуйте ці ресурси, щоб отримати рекомендації в реальному часі щодо поточної ціни обчислювальної одиниці:
- API комісій за пріоритет від Helius
- Глобальний трекер комісій за пріоритет від 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?