Τι Κάνει η Ανάληψη Πλεονάζοντων Lamports;
WithdrawExcessLamports μεταφέρει SOL που διατηρείται από έναν λογαριασμό
του Token Program πάνω από το ελάχιστο όριο απαλλαγής ενοικίου σε έναν
λογαριασμό προορισμού. Τα υπόλοιπα token και η προσφορά του mint παραμένουν
αναλλοίωτα — μόνο τα πλεονάζοντα lamport μεταφέρονται.
Αυτό ανακτά SOL που ήταν προηγουμένως δεσμευμένο: lamports που στάλθηκαν σε ένα token account, mint ή multisig (όλα ανήκουν στο Token Program) δεν μπορούσαν διαφορετικά να μεταφερθούν.
Αναφορά Πηγής
| Στοιχείο | Περιγραφή | Πηγή |
|---|---|---|
WithdrawExcessLamports | Η εντολή (discriminator 38). | Πηγή |
process_withdraw_excess_lamports | Λογική επεξεργαστή και έλεγχοι εξουσιοδότησης. | Πηγή |
Λογαριασμοί
| Λογαριασμός | Περιγραφή |
|---|---|
source | Εγγράψιμος. Το token account, mint ή multisig από το οποίο γίνεται η ανάληψη. |
destination | Εγγράψιμος. Λαμβάνει τα πλεονάζοντα lamports. |
authority | Υπογράφει βάσει του τύπου του λογαριασμού πηγής (βλ. παρακάτω). |
Ποιος Μπορεί να Υπογράψει
Ο απαιτούμενος υπογράφων εξαρτάται από τον τύπο του λογαριασμού source:
| Λογαριασμός πηγής | Υπογράφων |
|---|---|
| Token account | Ο κάτοχος του token account (ή οι multisig υπογράφοντες του). |
| Mint με mint authority | Η mint authority. |
| Mint χωρίς mint authority | Ο ίδιος ο mint account πρέπει να υπογράψει (βλ. την παρακάτω σημείωση). |
| Multisig | Οι διαμορφωμένοι M-of-N υπογράφοντες. |
Η περίπτωση "mint χωρίς mint authority" είναι ασυνήθιστη. Όταν εφαρμόζεται, ο λογαριασμός mint είναι ο υπογράφων: ένα mint που ανήκει σε πρόγραμμα (off-curve) υπογράφει μέσω CPI από το πρόγραμμα που το κατέχει, και ένα keypair (on-curve) mint υπογράφει με το κλειδί του.
Τα Native (wrapped SOL) token accounts δεν υποστηρίζονται και επιστρέφουν
NativeNotSupported. Η ανάληψη δεν μπορεί να μειώσει τον λογαριασμό
προέλευσης κάτω από το ελάχιστο απαιτούμενο για την εξαίρεση από ενοίκιο.
Πώς να Αποσύρετε Πλεονάζοντα lamport
Το παράδειγμα χρησιμοποιεί έναν διαμορφωμένο
@solana/kit client — δείτε
Μεταφορά Tokens για τη ρύθμιση του
client.
import { getWithdrawExcessLamportsInstruction } from "@solana-program/token";// source/destination: addresses of the account to drain and the lamport recipient.// authority: a TransactionSigner that signs per the source account type.const instruction = getWithdrawExcessLamportsInstruction({source,destination,authority});await client.sendTransaction([instruction]);
Για μια multisig authority, περάστε τους συν-υπογράφοντες με multiSigners.
Is this page helpful?