Χρεώσεις συναλλαγών

Κάθε συναλλαγή Solana απαιτεί μια βασική χρέωση (SOL) για να αποζημιώσει τους validators για την επεξεργασία της συναλλαγής. Μπορείτε επίσης να πληρώσετε μια προαιρετική χρέωση προτεραιότητας για να αυξήσετε την πιθανότητα ο τρέχων ηγέτης (validator) να επεξεργαστεί τη συναλλαγή σας.

Βασικά σημεία

  • Η βασική χρέωση για μια συναλλαγή είναι 5000 lamports ανά υπογραφή στη συναλλαγή.
  • Η χρέωση προτεραιότητας (προαιρετική) είναι μια επιπλέον χρέωση που πληρώνετε στον validator για να αυξήσετε την πιθανότητα ο τρέχων ηγέτης να επεξεργαστεί τη συναλλαγή σας.
  • Η χρέωση προτεραιότητας ισούται με: (όριο μονάδων υπολογισμού * τιμή μονάδας υπολογισμού).
  • Το όριο μονάδων υπολογισμού είναι ο μέγιστος αριθμός μονάδων υπολογισμού που μπορεί να χρησιμοποιήσει η συναλλαγή σας.
  • Η τιμή μονάδας υπολογισμού είναι η τιμή ανά μονάδα υπολογισμού, σε μικρο-lamports.
  • 1.000.000 μικρο-lamports = 1 lamport
  • Ο πληρωτής της χρέωσης συναλλαγής πρέπει να είναι ένας λογαριασμός που ανήκει στο System Program.

Βασική χρέωση συναλλαγής

Η βασική χρέωση είναι το κόστος αποστολής μιας συναλλαγής. Το κόστος είναι 5000 lamports ανά υπογραφή που περιλαμβάνεται στη συναλλαγή.

Η βασική χρέωση αφαιρείται από τον λογαριασμό του πληρωτή της χρέωσης συναλλαγής, ο οποίος είναι ο πρώτος υπογράφων στη συναλλαγή. Ο πληρωτής της χρέωσης πρέπει να είναι ένας λογαριασμός που ανήκει στο System Program.

  • 50% Καίγεται: Το μισό της βασικής χρέωσης καίγεται.
  • 50% Διανομή: Το μισό πληρώνεται στον validator που επεξεργάστηκε τη συναλλαγή.

Χρέωση προτεραιότητας

Η χρέωση προτεραιότητας είναι μια προαιρετική χρέωση που καταβάλλεται για να αυξηθεί η πιθανότητα ο τρέχων ηγέτης να επεξεργαστεί τη συναλλαγή σας.

  • SIMD-0096: Ο validator που επεξεργάζεται τη συναλλαγή λαμβάνει το 100% του τέλους προτεραιότητας.

Μονάδες υπολογισμού και όρια

Όταν μια συναλλαγή υποβάλλεται σε επεξεργασία, χρησιμοποιεί υπολογιστικούς πόρους που μετρώνται σε μονάδες υπολογισμού (compute units - CU). Κάθε εντολή αφαιρεί από τον προϋπολογισμό μονάδων υπολογισμού της συναλλαγής.

  • Μέγιστο όριο: Μια συναλλαγή μπορεί να χρησιμοποιήσει έως και 1,4 εκατομμύρια μονάδες υπολογισμού.
  • Προεπιλεγμένο όριο: Από προεπιλογή, κάθε εντολή μπορεί να χρησιμοποιήσει έως και 200.000 μονάδες υπολογισμού.
  • Προσαρμοσμένο όριο: Μπορείτε να ζητήσετε ένα συγκεκριμένο όριο μονάδων υπολογισμού συμπεριλαμβάνοντας μια SetComputeUnitLimit εντολή στη συναλλαγή σας.

Για περισσότερες λεπτομέρειες σχετικά με τη χρήση μονάδων υπολογισμού:

Δείτε τον οδηγό Πώς να ζητήσετε βέλτιστο υπολογισμό για περισσότερες λεπτομέρειες σχετικά με τη χρήση μονάδων υπολογισμού.

Τιμή μονάδας υπολογισμού

Η τιμή μονάδας υπολογισμού είναι ένα προαιρετικό ποσό, που καθορίζεται σε μικρο-lamports, που πληρώνετε για κάθε μονάδα υπολογισμού που ζητάτε. Αυτή η τιμή χρησιμοποιείται για τον υπολογισμό του τέλους προτεραιότητας για τη συναλλαγή σας.

1.000.000 μικρο-lamports = 1 lamport

Χρησιμοποιήστε αυτούς τους πόρους για να λάβετε προτάσεις σε πραγματικό χρόνο σχετικά με την τρέχουσα τιμή μονάδας υπολογισμού:

ΠάροχοςAPI τέλους προτεραιότητας
HeliusΤεκμηρίωση
QuickNodeΤεκμηρίωση
TritonΤεκμηρίωση

Δείτε τον οδηγό Πώς να χρησιμοποιήσετε τέλη προτεραιότητας για περισσότερες λεπτομέρειες σχετικά με τα τέλη προτεραιότητας.

Υπολογισμός τέλους προτεραιότητας

Το τέλος προτεραιότητας υπολογίζεται ως εξής:

Τέλος προτεραιότητας = Όριο μονάδων υπολογισμού × Τιμή μονάδας υπολογισμού

Η συνιστώμενη προσέγγιση για τον καθορισμό τελών προτεραιότητας είναι πρώτα να προσομοιώσετε τη συναλλαγή για να εκτιμήσετε τις απαιτούμενες μονάδες υπολογισμού. Στη συνέχεια, προσθέστε ένα περιθώριο ασφαλείας 10% σε αυτήν την εκτίμηση και χρησιμοποιήστε την προκύπτουσα τιμή ως Compute Unit Limit.

Η προτεραιότητα συναλλαγής, που καθορίζει πώς ιεραρχείται σε σχέση με άλλες συναλλαγές, υπολογίζεται χρησιμοποιώντας τον ακόλουθο τύπο:

Προτεραιότητα = ((Όριο Υπολογιστικών Μονάδων * Τιμή Υπολογιστικής Μονάδας) + Βασικό Τέλος) / (1 + Όριο Υπολογιστικών Μονάδων + Υπολογιστικές Μονάδες Υπογραφής + Υπολογιστικές Μονάδες Κλειδώματος Εγγραφής)

Χρησιμοποιήστε αυτές τις οδηγίες για να ορίσετε το όριο υπολογιστικών μονάδων και την τιμή σε μια συναλλαγή:

  • SetComputeUnitLimit για να ορίσετε ένα συγκεκριμένο όριο μονάδων.
  • SetComputeUnitPrice για να καθορίσετε την τιμή ανά υπολογιστική μονάδα.

Αν δεν παρέχετε αυτές τις οδηγίες, η συναλλαγή χρησιμοποιεί το προεπιλεγμένο όριο υπολογιστικών μονάδων με τιμή υπολογιστικής μονάδας 0 (χωρίς τέλος προτεραιότητας).

Το τέλος προτεραιότητας εξαρτάται από το όριο υπολογιστικών μονάδων που ζητάτε για τη συναλλαγή, όχι από τις πραγματικές υπολογιστικές μονάδες που χρησιμοποιούνται. Αν ορίσετε ένα όριο υπολογιστικών μονάδων που είναι πολύ υψηλό ή χρησιμοποιήσετε το προεπιλεγμένο ποσό, μπορεί να πληρώσετε για αχρησιμοποίητες υπολογιστικές μονάδες.

Παραδείγματα

Τα παρακάτω παραδείγματα δείχνουν πώς να ορίσετε το όριο υπολογιστικών μονάδων και την τιμή για μια συναλλαγή.

SDKΑναφορά Πηγαίου Κώδικα
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?