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

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

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

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

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

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

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

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

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

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

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

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

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

  • Μέγιστο όριο: Μια συναλλαγή μπορεί να χρησιμοποιήσει έως και 1,4 εκατομμύρια μονάδες υπολογισμού.
  • Προεπιλεγμένο όριο: Από προεπιλογή, κάθε εντολή μπορεί να χρησιμοποιήσει έως και 200.000 μονάδες υπολογισμού.
  • Προσαρμοσμένο όριο: Μπορείτε να ζητήσετε ένα συγκεκριμένο όριο μονάδων υπολογισμού συμπεριλαμβάνοντας μια εντολή ComputeBudgetProgram.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);
Click to execute the code.

Is this page helpful?