Biaya Transaksi

Setiap transaksi Solana memerlukan biaya dasar (SOL) untuk memberi kompensasi kepada validator yang memproses transaksi. Anda juga dapat membayar biaya prioritas opsional untuk meningkatkan peluang bahwa pemimpin saat ini (validator) memproses transaksi Anda.

Poin Utama

  • Biaya dasar untuk transaksi adalah 5000 lamport per tanda tangan pada transaksi.
  • Biaya prioritas (opsional) adalah biaya tambahan yang Anda bayarkan kepada validator untuk meningkatkan peluang bahwa pemimpin saat ini memproses transaksi Anda.
  • Biaya prioritas sama dengan: (batas unit komputasi * harga unit komputasi).
  • Batas unit komputasi adalah unit komputasi maksimum yang dapat digunakan transaksi Anda.
  • Harga unit komputasi adalah harga per unit komputasi, dalam mikro-lamport.
  • 1.000.000 mikro lamport = 1 lamport
  • Pembayar biaya transaksi harus berupa akun yang dimiliki oleh System Program.

Biaya Transaksi Dasar

Biaya dasar adalah biaya untuk mengirim transaksi. Biayanya adalah 5000 lamport per tanda tangan yang disertakan dalam transaksi.

Biaya dasar diambil dari akun pembayar biaya transaksi, yang merupakan penandatangan pertama pada transaksi. Pembayar biaya harus berupa akun yang dimiliki oleh System Program.

  • 50% Dibakar: Setengah dari biaya dasar dibakar.
  • 50% Distribusi: Setengahnya dibayarkan kepada validator yang memproses transaksi.

Biaya Prioritas

Biaya prioritas adalah biaya opsional yang dibayarkan untuk meningkatkan peluang bahwa pemimpin saat ini memproses transaksi Anda.

  • SIMD-0096: Validator yang memproses transaksi menerima 100% dari biaya prioritas.

Compute Units dan Batas

Ketika transaksi diproses, transaksi tersebut menggunakan sumber daya komputasi yang diukur dalam compute units (CU). Setiap instruksi mengurangi anggaran compute unit dari transaksi.

  • Batas Maksimum: Transaksi dapat menggunakan hingga 1,4 juta compute units.
  • Batas Default: Secara default, setiap instruksi dapat menggunakan hingga 200.000 compute units.
  • Batas Kustom: Anda dapat meminta batas compute unit tertentu dengan menyertakan instruksi SetComputeUnitLimit dalam transaksi Anda.

Untuk detail lebih lanjut tentang penggunaan compute unit:

Lihat panduan Cara Meminta Compute yang Optimal untuk detail lebih lanjut tentang penggunaan compute unit.

Harga Compute Unit

Harga compute unit adalah jumlah opsional, ditentukan dalam micro-lamport, yang Anda bayar untuk setiap compute unit yang diminta. Harga ini digunakan untuk menghitung biaya prioritas untuk transaksi Anda.

1.000.000 micro lamport = 1 lamport

Gunakan sumber daya berikut untuk mendapatkan rekomendasi real-time tentang harga compute unit saat ini:

Lihat panduan Cara Menggunakan Biaya Prioritas untuk detail lebih lanjut tentang biaya prioritas.

Menghitung Biaya Prioritas

Biaya prioritas dihitung sebagai:

Biaya Prioritas = Batas Compute Unit × Harga Compute Unit

Pendekatan yang direkomendasikan untuk menetapkan biaya prioritas adalah dengan terlebih dahulu mensimulasikan transaksi untuk memperkirakan unit komputasi yang diperlukan. Kemudian, tambahkan margin keamanan 10% pada perkiraan ini dan gunakan nilai yang dihasilkan sebagai Compute Unit Limit.

Prioritas transaksi, yang menentukan bagaimana transaksi diprioritaskan relatif terhadap transaksi lain, dihitung menggunakan rumus berikut:

Prioritas = ((Batas Unit Komputasi * Harga Unit Komputasi) + Biaya Dasar) / (1 + Batas Unit Komputasi + CU Tanda Tangan + CU Kunci Tulis)

Gunakan instruksi berikut untuk menetapkan batas unit komputasi dan harga pada transaksi:

Jika Anda tidak memberikan instruksi ini, transaksi akan menggunakan batas unit komputasi default dengan harga unit komputasi 0 (tanpa biaya prioritas).

Biaya prioritas bergantung pada batas unit komputasi yang Anda minta untuk transaksi, bukan unit komputasi yang benar-benar digunakan. Jika Anda menetapkan batas unit komputasi yang terlalu tinggi atau menggunakan jumlah default, Anda mungkin membayar untuk unit komputasi yang tidak digunakan.

Contoh

Contoh berikut menunjukkan cara menetapkan batas unit komputasi dan harga untuk transaksi.

SDKReferensi Kode Sumber
solana-sdk (Rust)ComputeBudgetInstruction
@solana/web3.js (Typescript)ComputeBudgetProgram
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?

Daftar Isi

Edit Halaman