WithdrawExcessLamports στο Solana: Οδηγός για SPL Token και Token-2022
Τα στοιχεία τιμολόγησης και δυνατοτήτων έχουν ελεγχθεί 3 Σεπτεμβρίου 2026.
WithdrawExcessLamports είναι η εντολή 38 του Token Program. Επιλύει ένα συγκεκριμένο πρόβλημα: ένα mint, ένας λογαριασμός token ή ένα multisig μπορεί να διατηρεί περισσότερα lamports από όσα χρειάζεται για την απαλλαγή από rent, αλλά αυτά τα lamports δεν μπορούν να μετακινηθούν μέσω μιας συνηθισμένης μεταφοράς token.
Τι κάνει το WithdrawExcessLamports;
WithdrawExcessLamports μεταφέρει μόνο το SOL πάνω από το τρέχον ελάχιστο απαλλαγής από rent ενός λογαριασμού Token Program. Η πηγή παραμένει ανοικτή και τα δεδομένα token ή mint της παραμένουν αμετάβλητα. Ο απαιτούμενος υπογράφων εξαρτάται από το αν η πηγή είναι λογαριασμός token, mint ή token multisig.
Η εντολή είναι διαθέσιμη τόσο στο κλασικό SPL Token Program όσο και στο Token-2022. Ήταν χρήσιμη για την ανάκτηση lamports που είχαν σταλεί κατά λάθος σε λογαριασμούς που ανήκουν σε token πριν από την πρόταση rent 2026. Ένα χαμηλότερο ελάχιστο rent της δίνει ευρύτερη χρήση: οι παλαιότεροι λογαριασμοί μπορούν να διατηρούν το αρχικό τους υπόλοιπο ενώ απαιτούν μικρότερο αποθεματικό.
Η έγκυρη συμπεριφορά και το τρέχον παράδειγμα client βρίσκονται στο τεκμηρίωση του Solana για το Withdraw Excess Lamports. Η υλοποίηση του επεξεργαστή είναι επίσης δημόσια στο αποθετήριο του Token Program.
Ποιους λογαριασμούς απαιτεί η εντολή;
| Λογαριασμός | Εγγράψιμος; | Υπογράφων; | Σκοπός |
|---|---|---|---|
source | Ναι | Μερικές φορές | Λογαριασμός token, mint ή multisig που διατηρεί πλεονάζοντα lamports |
destination | Ναι | Όχι | Λαμβάνει τα lamports που αποσύρονται |
authority | Όχι | Εξαρτάται από τον τύπο πηγής | Αποδεικνύει την άδεια ανάληψης |
multiSigners | Όχι | Ναι, όταν χρησιμοποιείται | Ικανοποίηση του διαμορφωμένου ορίου token multisig |
Ο επεξεργαστής διαβάζει το μήκος δεδομένων της πηγής και τις τρέχουσες ρυθμίσεις rent, υπολογίζει το ελάχιστο υπόλοιπό της και μεταφέρει τη διαφορά. Δεν δέχεται αποθεματικό που παρέχεται από τον καλούντα και θα μπορούσε να είναι παρωχημένο ή παραποιημένο.
Ποιος πρέπει να υπογράψει για κάθε τύπο πηγής;
| Πηγή | Απαιτούμενη αρχή |
|---|---|
| Λογαριασμός token με πορτοφόλι ως κάτοχο | Κάτοχος λογαριασμού token |
| Λογαριασμός token που ανήκει σε token multisig | Απαιτούμενα μέλη multisig M--από-N |
| Mint με ενεργή αρχή mint | Τρέχουσα αρχή mint |
| Mint χωρίς αρχή mint | Ο ίδιος ο λογαριασμός mint πηγής |
| Λογαριασμός πηγής multisig | Διαμορφωμένα μέλη M--από-N |
Η περίπτωση του ανακληθέντος mint απαιτεί ιδιαίτερη προσοχή. Αν το mint πηγής δημιουργήθηκε από on-curve ζεύγος κλειδιών, πρέπει να υπογράψει εκείνο το αρχικό ζεύγος κλειδιών. Αν είναι off-curve, το πρόγραμμα που το ελέγχει πρέπει να καλέσει το Token Program με τα σωστά seeds υπογράφοντος PDA. Ένας κάτοχος token ή μια πρώην αρχή mint δεν μπορεί να υποκαταστήσει την υπογραφή της πηγής.
Πώς δημιουργείτε την εντολή με τον client Solana;
Το τρέχον επίσημο παράδειγμα χρησιμοποιεί @solana-program/token με διαμορφωμένο @solana/kit client:
import { getWithdrawExcessLamportsInstruction } from "@solana-program/token";
const instruction = getWithdrawExcessLamportsInstruction({
source,
destination,
authority,
});
await client.sendTransaction([instruction]);
Εδώ authority είναι ένα TransactionSigner κατάλληλο για την πηγή. Για μια αρχή multisig, συμπεριλάβετε τους συνυπογράφοντές της μέσω multiSigners. Κλειδώστε τις εκδόσεις των πακέτων στην παραγωγή και κάντε μεταγλώττιση με την ακριβή έκδοση client που χρησιμοποιείτε· οι τύποι του client μπορούν να αλλάξουν ακόμη και όταν το on-chain συμβόλαιο λογαριασμού δεν αλλάζει.
Μην κάνετε hardcode 0.00203928 SOL ως αποθεματικό. Αυτό είναι το παλαιό ελάχιστο για έναν τυπικό λογαριασμό token 165 byte, όχι μια καθολική τρέχουσα τιμή. Αναζητήστε το τρέχον ελάχιστο για το πραγματικό μήκος δεδομένων της πηγής αμέσως πριν από τη δημιουργία ή την προεπισκόπηση της συναλλαγής.
Σε τι διαφέρουν εδώ τα SPL Token και Token-2022;
Το βασικό αποτέλεσμα της εντολής είναι το ίδιο, αλλά το Token-2022 καθιστά ιδιαίτερα επικίνδυνες τις παραδοχές για το μήκος δεδομένων. Οι επεκτάσεις mint και λογαριασμών αυξάνουν το σειριοποιημένο μέγεθος και, κατά συνέπεια, το απαιτούμενο αποθεματικό. Μια ενσωμάτωση που χρησιμοποιεί τα τυπικά μεγέθη 82 ή 165 byte για κάθε πηγή μπορεί να υπερεκτιμήσει το πλεόνασμα.
Το CPI Guard του Token-2022 αποτελεί άλλη μία πρακτική διαφορά για τα wrappers. Όταν το guard είναι κλειδωμένο, μια κλήση μεταξύ προγραμμάτων μπορεί να απορριφθεί ακόμη και αν το πορτοφόλι θα αποτελούσε κατά τα άλλα έγκυρη αρχή. Το Sol Incinerator παραλείπει αυτές τις πηγές αντί να συμπεριλάβει μια βέβαιη αποτυχία σε μια μεγαλύτερη συναλλαγή εκκαθάρισης.
Οι λογαριασμοί token εγγενούς wrapped-SOL απορρίπτονται με NativeNotSupported. Το unwrapping εγγενούς SOL ακολουθεί διαφορετική διαδρομή κλεισίματος λογαριασμού· δεν αποτελεί ανάληψη πλεοναζόντων lamport.
Πώς κάνει wrap την εντολή το Sol Incinerator API;
Το v2 API του Sol Incinerator δημιουργεί την κλήση του Token Program μέσω του Assetcinerator, ώστε οι χρεώσεις πρωτοκόλλου και οι προαιρετικές χρεώσεις συνεργάτη να επιβάλλονται on-chain. Αυτό το wrapper αποτελεί επίπεδο προϊόντος· η ίδια η ακατέργαστη εντολή του Token Program δεν επιβάλλει τη χρέωση του Sol Incinerator.
Χρησιμοποιήστε την επαληθευμένη προεπισκόπηση πριν ζητήσετε από έναν χρήστη να υπογράψει:
curl -X POST https://v2.api.sol-incinerator.com/withdraw-excess-lamports/preview \
-H "content-type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"userPublicKey": "DESTINATION_WALLET",
"sourceAccount": "TOKEN_ACCOUNT_MINT_OR_MULTISIG"
}'
Οι σχετικές διαδρομές συναλλαγής και εντολής είναι:
POST /withdraw-excess-lamportsPOST /withdraw-excess-lamports-instructions
userPublicKey είναι το πορτοφόλι προορισμού και η προεπιλεγμένη αρχή. Παρέχετε authorityPublicKey όταν πρέπει να υπογράψει διαφορετική αρχή mint, πηγής ή multisig. Παρέχετε έως 11 multisigSignerPublicKeys κατά τη δημιουργία ροής token multisig. Κάθε ιδιωτικό κλειδί παραμένει τοπικά· το API επιστρέφει το υλικό που χρειάζονται οι απαιτούμενοι υπογράφοντες για να εγκρίνουν.
Η βασική χρέωση πρωτοκόλλου είναι 200 bps. Μια άμεση ενσωμάτωση μπορεί να προσθέσει ένα partnerFeeAccount και partnerFeeBps, ενώ η συνήθης χρέωση συναλλαγής Solana παραμένει ξεχωριστή. Χρησιμοποιήστε τα επιστρεφόμενα feeLamports και τα πεδία ανάκτησης αντί να επαναχρησιμοποιείτε έναν προσωρινά αποθηκευμένο υπολογισμό ποσοστού.
Ποια σφάλματα πρέπει να χειρίζεται μια ενσωμάτωση;
- Δεν υπάρχει πλεόνασμα: το υπόλοιπο της πηγής είναι ήδη στο τρέχον αποθεματικό.
- Λανθασμένος κάτοχος ή διάταξη λογαριασμού: η πηγή δεν είναι υποστηριζόμενος λογαριασμός Token Program.
- Μη έγκυρη αρχή: ο παρεχόμενος υπογράφων δεν αντιστοιχεί στην αποκωδικοποιημένη κατάσταση της πηγής.
- Ελλιπές multisig: παρασχέθηκαν πολύ λίγοι έγκυροι, διαμορφωμένοι υπογράφοντες.
- Εγγενής λογαριασμός: το wrapped SOL χρησιμοποιεί άλλη λειτουργία.
- Κλειδωμένο CPI Guard: Το Token-2022 απορρίπτει το wrapper CPI.
- Η κατάσταση άλλαξε: ένα υπόλοιπο, μια αρχή ή μια ρύθμιση rent άλλαξε μετά την προεπισκόπηση.
- Το κόστος συναλλαγής υπερβαίνει την αξία: μια πολύ μικρή ανάληψη ενδέχεται να μην είναι οικονομικά συμφέρουσα μετά τις χρεώσεις δικτύου.
Κάντε ξανά προεπισκόπηση όταν ενδέχεται να έχει αλλάξει η κατάσταση, διατηρήστε την επιλογή πηγών idempotent και μην ομαδοποιείτε ποτέ μια γνωστή μη επιλέξιμη πηγή με άλλες έγκυρες εργασίες.

Sol Incinerator
Δείτε σε προεπισκόπηση το τρέχον πλεόνασμα rent ή χρησιμοποιήστε το v2 API για να δημιουργήσετε μια ανάληψη με ασφαλή διαχείριση υπογραφόντων.
Σχετικά άρθρα
Συχνές ερωτήσεις
Τι κάνει το WithdrawExcessLamports στο Solana;
Το WithdrawExcessLamports μεταφέρει σε ένα πορτοφόλι προορισμού τα lamports που υπερβαίνουν το τρέχον ελάχιστο όριο απαλλαγής από rent ενός λογαριασμού Token Program. Η πηγή του μπορεί να είναι λογαριασμός token, mint ή multisig. Η εντολή αφήνει αμετάβλητα τα ποσά token, την προσφορά mint, τις αρχές, τις επεκτάσεις και όλα τα άλλα σειριοποιημένα δεδομένα λογαριασμού.
Ποια αρχή υπογράφει το WithdrawExcessLamports;
Ένας λογαριασμός token χρησιμοποιεί τον κάτοχό του ή τους διαμορφωμένους υπογράφοντες multisig. Ένα mint με ενεργή αρχή mint χρησιμοποιεί αυτή την αρχή. Ένα mint χωρίς αρχή πρέπει να υπογράψει ως ο ίδιος ο λογαριασμός πηγής, χρησιμοποιώντας το ζεύγος κλειδιών του ή μια διαδρομή υπογραφής CPI από το πρόγραμμα που ελέγχει ένα off-curve mint.
Υποστηρίζει το WithdrawExcessLamports το Token-2022;
Ναι. Η εντολή είναι διαθέσιμη για κλασικούς λογαριασμούς, mint και multisig των SPL Token και Token-2022. Οι ενσωματώσεις πρέπει να υπολογίζουν το rent βάσει του πραγματικού μήκους δεδομένων της πηγής, επειδή οι επεκτάσεις Token-2022 μπορούν να αυξήσουν το μέγεθος των λογαριασμών, ενώ ένα κλειδωμένο CPI Guard μπορεί να εμποδίσει την εκτέλεση μέσω wrapper.
Μπορεί το WithdrawExcessLamports να αδειάσει έναν λογαριασμό token κάτω από το όριο απαλλαγής από rent;
Όχι. Το Token Program υπολογίζει το απαιτούμενο ελάχιστο της πηγής και μεταφέρει μόνο τη διαφορά πάνω από αυτό. Οι λογαριασμοί token εγγενούς wrapped-SOL απορρίπτονται. Οι εφαρμογές πρέπει παρ’ όλα αυτά να κάνουν προεπισκόπηση της τρέχουσας κατάστασης, επειδή τα υπόλοιπα λογαριασμών, τα μήκη δεδομένων, οι ρυθμίσεις rent και η διαθέσιμη αρχή μπορεί να αλλάξουν πριν από την υποβολή.