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.
Unit Komputasi dan Batasannya
Ketika transaksi diproses, transaksi tersebut menggunakan sumber daya komputasi yang diukur dalam unit komputasi (CU). Setiap instruksi mengurangi anggaran unit komputasi transaksi.
- Batas Maksimum: Sebuah transaksi dapat menggunakan hingga 1,4 juta unit komputasi.
- Batas Default: Secara default, setiap instruksi dapat menggunakan hingga 200.000 unit komputasi.
- Batas Kustom: Anda dapat meminta batas unit komputasi tertentu dengan
menyertakan
SetComputeUnitLimit
instruksi dalam transaksi Anda.
Untuk detail lebih lanjut tentang penggunaan unit komputasi:
Lihat panduan Cara Meminta Komputasi Optimal untuk detail lebih lanjut tentang penggunaan unit komputasi.
Harga Unit Komputasi
Harga unit komputasi adalah jumlah opsional, ditentukan dalam mikro-lamport, yang Anda bayar untuk setiap unit komputasi yang diminta. Harga ini digunakan untuk menghitung biaya prioritas untuk transaksi Anda.
Gunakan sumber daya berikut untuk mendapatkan rekomendasi real-time tentang harga unit komputasi saat ini:
Penyedia | API Biaya Prioritas |
---|---|
Helius | Dokumentasi |
QuickNode | Dokumentasi |
Triton | Dokumentasi |
Lihat panduan Cara Menggunakan Biaya Prioritas untuk detail lebih lanjut tentang biaya prioritas.
Menghitung Biaya Prioritas
Biaya prioritas dihitung sebagai:
Biaya Prioritas = Batas Unit Komputasi × Harga Unit Komputasi
Pendekatan yang direkomendasikan untuk menetapkan biaya prioritas adalah pertama
simulasikan
transaksi untuk memperkirakan unit komputasi yang diperlukan. Kemudian,
tambahkan margin keamanan 10% ke perkiraan ini dan gunakan nilai yang dihasilkan
sebagai Compute Unit Limit
.
Prioritas transaksi, yang menentukan bagaimana transaksi diprioritaskan dibandingkan dengan transaksi lainnya, dihitung menggunakan rumus berikut:
Prioritas = ((Batas Unit Komputasi * Harga Unit Komputasi) + Biaya Dasar) / (1 + Batas Unit Komputasi + Unit Komputasi Tanda Tangan + Unit Komputasi Kunci Tulis)
Gunakan instruksi berikut untuk mengatur batas dan harga unit komputasi pada transaksi:
SetComputeUnitLimit
untuk mengatur batas unit tertentu.SetComputeUnitPrice
untuk menentukan harga per unit komputasi.
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 mengatur batas unit komputasi terlalu tinggi atau menggunakan jumlah default, Anda mungkin membayar untuk unit komputasi yang tidak digunakan.
Contoh
Contoh berikut menunjukkan cara mengatur batas dan harga unit komputasi untuk transaksi.
SDK | Referensi 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 instructionsconst 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 transactionconst transaction = new Transaction().add(limitInstruction).add(priceInstruction).add(transferInstruction);const signature = await sendAndConfirmTransaction(connection, transaction, [sender]);console.log("Transaction Signature:", signature);
Is this page helpful?