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

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

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

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

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

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

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

Комісія за пріоритет = Ліміт обчислювальних одиниць × Ціна обчислювальної одиниці

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

Пріоритет транзакції = Комісія за пріоритет / Кількість підписів

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

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

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

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

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

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

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

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

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

Приклад

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

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?

Зміст

Редагувати сторінку
Комісії за транзакції | Solana