Κάθε συναλλαγή Solana απαιτεί τέλος συναλλαγής, που καταβάλλεται σε SOL. Τα τέλη συναλλαγών χωρίζονται σε δύο μέρη: το βασικό τέλος και το τέλος προτεραιότητας. Το βασικό τέλος αποζημιώνει τους validators για την επεξεργασία της συναλλαγής. Το τέλος προτεραιότητας είναι ένα προαιρετικό τέλος, για να αυξηθεί η πιθανότητα ο τρέχων leader να επεξεργαστεί τη συναλλαγή σας.
Βασικό τέλος
Κάθε συναλλαγή κοστίζει 5000 lamports ανά συμπεριλαμβανόμενη υπογραφή. Αυτό το τέλος καταβάλλεται από τον πρώτο υπογράφοντα της συναλλαγής. Μόνο λογαριασμοί που ανήκουν στο System Program μπορούν να πληρώσουν τέλη συναλλαγών. Το βασικό τέλος κατανέμεται ως εξής:
- 50% καίγεται: Το μισό καίγεται (αφαιρείται από την κυκλοφορούσα προσφορά SOL).
- 50% διανέμεται: Το μισό καταβάλλεται στον validator που επεξεργάστηκε τη συναλλαγή.
Τέλος προτεραιότητας
Το τέλος προτεραιότητας είναι ένα προαιρετικό τέλος που χρησιμοποιείται για να αυξηθεί η πιθανότητα ο τρέχων leader (validator) να επεξεργαστεί τη συναλλαγή σας. Ο validator λαμβάνει το 100% του τέλους προτεραιότητας. Τα τέλη προτεραιότητας μπορούν να οριστούν προσαρμόζοντας την τιμή μονάδας υπολογισμού (CU) και το όριο CU της συναλλαγής. (Δείτε τον οδηγό Πώς να χρησιμοποιήσετε τα τέλη προτεραιότητας για περισσότερες λεπτομέρειες σχετικά με τα τέλη προτεραιότητας.)
Το τέλος προτεραιότητας υπολογίζεται ως εξής:
Prioritization fee = CU limit * CU price
Το τέλος προτεραιότητας χρησιμοποιείται για να καθοριστεί η προτεραιότητα της συναλλαγής σας, σε σχέση με άλλες συναλλαγές. Υπολογίζεται χρησιμοποιώντας τον ακόλουθο τύπο:
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)
Όριο μονάδων υπολογισμού
Από
προεπιλογή,
σε κάθε εντολή εκχωρούνται
200.000 CUs
και σε κάθε συναλλαγή εκχωρούνται
1,4 εκατομμύρια CUs.
Μπορείτε να αλλάξετε αυτές τις προεπιλογές συμπεριλαμβάνοντας μια εντολή
SetComputeUnitLimit
στη συναλλαγή σας.
Για να υπολογίσετε το κατάλληλο όριο CU για τη συναλλαγή σας, συνιστούμε τα ακόλουθα βήματα:
- Εκτιμήστε τις απαιτούμενες μονάδες CU προσομοιώνοντας τη συναλλαγή
- Προσθέστε ένα περιθώριο ασφαλείας 10% σε αυτήν την εκτίμηση
Η προτεραιότητα χρέωσης καθορίζεται από το αιτούμενο όριο μονάδων υπολογισμού της συναλλαγής, όχι από τον πραγματικό αριθμό μονάδων υπολογισμού που χρησιμοποιήθηκαν. Εάν ορίσετε ένα όριο μονάδων υπολογισμού που είναι πολύ υψηλό ή χρησιμοποιήσετε την προεπιλεγμένη ποσότητα, ενδέχεται να πληρώσετε για μη χρησιμοποιούμενες μονάδες υπολογισμού.
Τιμή μονάδας υπολογισμού
Η τιμή μονάδας υπολογισμού είναι ένα προαιρετικό ποσό
micro-lamports που καταβάλλεται
για κάθε αιτούμενη CU. Μπορείτε να σκεφτείτε την τιμή CU ως ένα φιλοδώρημα για
να ενθαρρύνετε τον validator να δώσει προτεραιότητα στη συναλλαγή σας. Για να
ορίσετε την τιμή CU, συμπεριλάβετε μια εντολή
SetComputeUnitPrice
στη συναλλαγή σας.
Η προεπιλεγμένη τιμή CU είναι 0, που σημαίνει ότι η προεπιλεγμένη χρέωση προτεραιότητας είναι επίσης 0.
Για βοήθεια στον προσδιορισμό της καλύτερης τιμής CU για τη συναλλαγή σας, δείτε τη σύσταση τιμής CU σε πραγματικό χρόνο που παρέχεται στον παρακάτω πίνακα.
| Πάροχος | API χρέωσης προτεραιότητας |
|---|---|
| Helius | Τεκμηρίωση |
| QuickNode | Τεκμηρίωση |
| Triton | Τεκμηρίωση |
Παράδειγμα
Τα παρακάτω παραδείγματα δείχνουν πώς να ορίσετε το όριο CU και την τιμή CU σε μια συναλλαγή χρησιμοποιώντας τα Solana SDK.
| SDK | Αναφορά πηγαίου κώδικα |
|---|---|
@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);
Is this page helpful?