Комиссии за транзакции

Каждая транзакция в 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. Можно рассматривать цену CU как чаевые, чтобы мотивировать validator обработать вашу транзакцию в приоритетном порядке. Чтобы задать цену CU, добавьте инструкцию SetComputeUnitPrice в вашу транзакцию.

Цена CU по умолчанию — 0, то есть комиссия за приоритет по умолчанию также равна 0.

Чтобы определить оптимальную цену CU для вашей транзакции, воспользуйтесь актуальной рекомендацией по цене CU, приведённой в таблице ниже.

ПровайдерAPI приоритетных комиссий
HeliusДокументация
QuickNodeДокументация
TritonДокументация

Пример

Примеры ниже показывают, как задать лимит 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?

Содержание

Редактировать страницу

Управляется

© 2026 Фонд Solana.
Все права защищены.
Подключиться