Opłaty transakcyjne

Każda transakcja w sieci Solana wymaga opłaty transakcyjnej, płatnej w SOL. Opłaty transakcyjne są podzielone na dwie części: opłatę podstawową i opłatę priorytetową. Opłata podstawowa rekompensuje validatorom przetwarzanie transakcji. Opłata priorytetowa jest opcjonalna i zwiększa szansę, że obecny lider przetworzy Twoją transakcję.

Opłata podstawowa

Każda transakcja kosztuje 5000 lamportów za każdy dołączony podpis. Opłatę tę ponosi pierwszy sygnatariusz transakcji. Tylko konta należące do System Program mogą pokrywać opłaty transakcyjne. Podstawowa opłata dzieli się w następujący sposób:

Opłata priorytetowa

Opłata priorytetowa jest opcjonalną opłatą, która zwiększa szansę, że obecny lider (validator) przetworzy Twoją transakcję. Validator otrzymuje 100% opłaty priorytetowej. Opłaty priorytetowe można ustawić, dostosowując cenę jednostki obliczeniowej computation unit (CU) oraz limit CU. (Zobacz przewodnik dotyczący korzystania z opłat priorytetowych po więcej szczegółów na temat opłat priorytetowych.)

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

Prioritization fee formula
Prioritization fee = CU limit * CU price

Opłata priorytetowa jest używana do określenia priorytetu transakcji względem innych transakcji. Jest obliczana za pomocą 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 default, każda instrukcja ma przydzielone 200 000 CU, a każda transakcja ma przydzielone 1,4 miliona CU. Możesz zmienić te wartości domyślne, dołączając instrukcję SetComputeUnitLimit do swojej transakcji.

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

  1. Oszacuj wymagane jednostki CU poprzez symulację transakcji
  2. Dodaj 10% marginesu bezpieczeństwa do tego oszacowania

Opłata priorytetowa jest określana na podstawie żądanego limitu jednostek obliczeniowych transakcji, a nie rzeczywistej liczby użytych jednostek obliczeniowych. Jeśli ustawisz zbyt wysoki limit jednostek obliczeniowych 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ę jednostki CU jako napiwek, który zachęca validatora do priorytetyzacji Twojej transakcji. Aby ustawić cenę jednostki CU, dołącz instrukcję SetComputeUnitPrice do swojej transakcji.

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

Aby uzyskać pomoc w określeniu najlepszej ceny jednostki CU dla swojej transakcji, zapoznaj się z rekomendacją ceny jednostki CU w czasie rzeczywistym podaną w tabeli poniżej.

Przykład

Poniższe przykłady pokazują, jak ustawić limit jednostek CU i cenę jednostki CU w transakcji za pomocą SDK Solana.

SDKOdniesienie 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

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