Biaya transaksi
Setiap transaksi Solana memerlukan biaya transaksi, dibayar dalam SOL. Biaya transaksi dibagi menjadi dua bagian: biaya dasar dan biaya prioritas. Biaya dasar mengganti validator untuk memproses transaksi. Biaya prioritas adalah biaya opsional, untuk meningkatkan peluang bahwa pemimpin saat ini akan memproses transaksi Anda.
Biaya dasar
Setiap transaksi memerlukan biaya 5000 lamports untuk setiap tanda tangan yang disertakan. Biaya ini dibayarkan oleh penandatangan pertama pada transaksi. Hanya akun yang dimiliki oleh System Program yang dapat membayar biaya transaksi. Biaya dasar dibagi sebagai berikut:
- 50% dibakar: Setengahnya dibakar (dikeluarkan dari pasokan SOL yang beredar).
- 50% didistribusikan: Setengahnya dibayarkan kepada validator yang memproses transaksi.
Biaya prioritas
Sebuah biaya prioritas adalah biaya opsional yang digunakan untuk meningkatkan peluang bahwa pemimpin saat ini (validator) akan memproses transaksi Anda. Validator menerima 100% dari biaya prioritas. Biaya prioritas dapat diatur dengan menyesuaikan harga unit komputasi (CU) transaksi dan batas CU. (Lihat Panduan Cara Menggunakan Biaya Prioritas untuk detail lebih lanjut tentang biaya prioritas.)
Biaya prioritas dihitung sebagai berikut:
Biaya Prioritas = Batas Unit Komputasi × Harga Unit Komputasi
Biaya prioritas digunakan untuk menentukan prioritas transaksi Anda, relatif terhadap transaksi lain. Ini dihitung menggunakan rumus berikut:
Prioritas Transaksi = Biaya Prioritas / Batas Unit Komputasi
Batas unit komputasi
Secara default, setiap instruksi dialokasikan 200.000 CU dan setiap transaksi dialokasikan 1,4 juta CU. Anda dapat mengubah default ini dengan menyertakan instruksi ComputeBudgetInstruction::set_compute_unit_limit dalam transaksi Anda.
Untuk menghitung batas CU yang sesuai untuk transaksi Anda, kami merekomendasikan langkah-langkah berikut:
- Perkirakan unit CU yang diperlukan dengan mensimulasikan transaksi
- Tambahkan margin keamanan 10% pada perkiraan ini
Biaya prioritas ditentukan oleh batas unit komputasi yang diminta dalam transaksi, bukan jumlah unit komputasi yang benar-benar digunakan. Jika Anda menetapkan batas unit komputasi yang terlalu tinggi atau menggunakan jumlah default, Anda mungkin membayar unit komputasi yang tidak digunakan.
Harga unit komputasi
Harga unit komputasi adalah jumlah opsional
micro-lamports yang dibayarkan
untuk setiap CU yang diminta. Anda dapat menganggap harga CU sebagai tip untuk
mendorong validator memprioritaskan transaksi Anda. Untuk menetapkan harga CU,
sertakan instruksi
SetComputeUnitPrice
dalam transaksi Anda.
Harga CU default adalah 0, yang berarti biaya prioritas default juga 0.
Untuk bantuan menentukan harga CU terbaik untuk transaksi Anda, lihat rekomendasi harga CU real-time yang tercantum dalam tabel di bawah ini.
| Penyedia | API Biaya Prioritas |
|---|---|
| Helius | Dokumentasi |
| QuickNode | Dokumentasi |
| Triton | Dokumentasi |
Contoh
Contoh di bawah ini menunjukkan cara menetapkan batas CU dan harga CU pada transaksi menggunakan SDK Solana.
| SDK | Referensi Kode Sumber |
|---|---|
@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 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);
Console
Click to execute the code.
Is this page helpful?