Opłaty transakcyjne

Każda transakcja w sieci Solana wymaga uiszczenia opłaty transakcyjnej, płatnej w SOL. Opłaty transakcyjne dzielą się na dwie części: opłatę bazową oraz opłatę za priorytet. Opłata bazowa rekompensuje validatorom przetwarzanie transakcji. Opłata za priorytet jest opcjonalna i zwiększa szansę, że obecny lider przetworzy Twoją transakcję.

Opłata bazowa

Każda transakcja kosztuje 5000 lamportów za każdy dołączony podpis. Opłatę tę ponosi pierwszy podpisujący transakcję. Tylko konta należące do System Program mogą opłacać opłaty transakcyjne. Opłata bazowa jest dzielona w następujący sposób:

Opłata za priorytet

Opłata za priorytet to opcjonalna opłata, która zwiększa szansę, że obecny lider (validator) przetworzy Twoją transakcję. Validator otrzymuje 100% opłaty priorytetowej. Opłaty za priorytet można ustawić, dostosowując cenę jednostki obliczeniowej (CU) oraz limit CU w transakcji. (Więcej informacji znajdziesz w przewodniku Jak korzystać z opłat priorytetowych.)

Opłata za priorytet jest obliczana w następujący sposób:

Prioritization fee formula
Prioritization fee = CU limit * CU price

Opłata za priorytet służy do określenia priorytetu Twojej transakcji względem innych transakcji. Jest obliczana według następującego wzoru:

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

Limit jednostek obliczeniowych

Domyślnie (źródło), każda instrukcja otrzymuje 200 000 CU, a każda transakcja 1,4 miliona CU. Możesz zmienić te wartości, dołączając instrukcję SetComputeUnitLimit do swojej transakcji.

Aby obliczyć odpowiedni limit CU dla swojej transakcji, zalecamy wykonanie następujących kroków:

  1. Oszacuj wymaganą liczbę jednostek CU, symulując transakcję
  2. Dodaj 10% marginesu bezpieczeństwa do tego oszacowania

Opłata priorytetowa jest ustalana na podstawie żądanego limitu jednostek obliczeniowych (compute unit) w transakcji, nie rzeczywistej liczby użytych jednostek. Jeśli ustawisz zbyt wysoki limit lub użyjesz domyślnej wartości, możesz zapłacić za niewykorzystane jednostki obliczeniowe.

Cena jednostki obliczeniowej

Cena jednostki obliczeniowej to opcjonalna kwota w mikro-lamportach płacona za każdą żądaną jednostkę CU. Możesz traktować cenę CU jako napiwek, który zachęca validatora do nadania priorytetu Twojej transakcji. Aby ustawić cenę CU, dodaj instrukcję SetComputeUnitPrice do swojej transakcji.

Domyślna cena CU to 0, co oznacza, że domyślna opłata za priorytet również wynosi 0.

Aby uzyskać pomoc w określeniu najlepszej ceny CU dla swojej transakcji, skorzystaj z rekomendacji ceny CU w czasie rzeczywistym podanej w tabeli poniżej.

Przykład

Poniższe przykłady pokazują, jak ustawić limit CU i cenę CU w transakcji przy użyciu SDK Solana.

SDKOdnośnik do kodu źródłowego
@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?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco