Phí giao dịch

Mỗi giao dịch Solana đều yêu cầu một khoản phí giao dịch, được thanh toán bằng SOL. Phí giao dịch được chia thành hai phần: phí cơ bản và phí ưu tiên. Phí cơ bản bù đắp cho các validator khi xử lý giao dịch. Phí ưu tiên là một khoản phí tùy chọn, nhằm tăng khả năng leader hiện tại sẽ xử lý giao dịch của bạn.

Phí cơ bản

Mỗi giao dịch tốn 5000 lamports cho mỗi chữ ký được bao gồm. Khoản phí này được thanh toán bởi người ký đầu tiên trong giao dịch. Chỉ các tài khoản thuộc sở hữu của System Program mới có thể thanh toán phí giao dịch. Phí cơ bản được phân chia như sau:

  • 50% bị đốt: Một nửa bị đốt (loại bỏ khỏi nguồn cung SOL lưu thông).
  • 50% được phân phối: Một nửa được trả cho validator đã xử lý giao dịch.

Phí ưu tiên

Phí ưu tiên là một khoản phí tùy chọn được sử dụng để tăng khả năng leader hiện tại (validator) sẽ xử lý giao dịch của bạn. Validator nhận 100% phí ưu tiên. Phí ưu tiên có thể được thiết lập bằng cách điều chỉnh giá đơn vị tính toán (CU) và giới hạn CU của giao dịch. (Xem hướng dẫn Cách sử dụng phí ưu tiên để biết thêm chi tiết về phí ưu tiên.)

Phí ưu tiên được tính như sau:

Prioritization fee formula
Prioritization fee = CU limit * CU price

Phí ưu tiên được sử dụng để xác định mức độ ưu tiên của giao dịch của bạn, so với các giao dịch khác. Nó được tính bằng công thức sau:

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

Giới hạn đơn vị tính toán

Theo mặc định, mỗi instruction được phân bổ 200.000 CU và mỗi giao dịch được phân bổ 1,4 triệu CU. Bạn có thể thay đổi các giá trị mặc định này bằng cách bao gồm một instruction SetComputeUnitLimit trong giao dịch của bạn.

Để tính toán giới hạn CU phù hợp cho giao dịch của bạn, chúng tôi khuyến nghị các bước sau:

  1. Ước tính số đơn vị CU cần thiết bằng cách mô phỏng giao dịch
  2. Thêm 10% dự phòng an toàn vào ước tính này

Phí ưu tiên được xác định bởi giới hạn đơn vị tính toán được yêu cầu trong giao dịch, không phải số lượng đơn vị tính toán thực tế được sử dụng. Nếu bạn đặt giới hạn đơn vị tính toán quá cao hoặc sử dụng số lượng mặc định, bạn có thể phải trả cho các đơn vị tính toán không sử dụng.

Giá đơn vị tính toán

Giá đơn vị tính toán là số lượng tùy chọn micro-lamports được trả cho mỗi CU được yêu cầu. Bạn có thể coi giá CU như một khoản tip để khuyến khích validator ưu tiên giao dịch của bạn. Để đặt giá CU, hãy bao gồm một instruction SetComputeUnitPrice trong giao dịch của bạn.

Giá CU mặc định là 0, nghĩa là phí ưu tiên mặc định cũng là 0.

Để được trợ giúp xác định giá CU tốt nhất cho giao dịch của bạn, hãy xem khuyến nghị giá CU theo thời gian thực được liệt kê trong bảng dưới đây.

Ví dụ

Các ví dụ dưới đây cho thấy cách đặt giới hạn CU và giá CU trên một giao dịch sử dụng Solana SDK.

SDKTham chiếu mã nguồn
@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?

Mục lục

Chỉnh sửa trang

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối