Was bewirkt „Überschüssige Lamports abheben“?
WithdrawExcessLamports verschiebt SOL, das von einem Token Program-Konten
über seinem mietbefreiten Minimum gehalten wird, auf ein Zielkonto.
Token-Guthaben und Mint-Angebot bleiben unberührt – nur die überschüssigen
lamports werden bewegt.
Dies stellt SOL wieder her, das zuvor nicht zugänglich war: lamports, die an ein token account, einen Mint oder ein Multisig (alles im Besitz des Token Program) gesendet wurden, konnten andernfalls nicht verschoben werden.
Quellenreferenz
| Element | Beschreibung | Quelle |
|---|---|---|
WithdrawExcessLamports | Die Anweisung (Diskriminator 38). | Quelle |
process_withdraw_excess_lamports | Prozessorlogik und Berechtigungsprüfungen. | Quelle |
Konten
| Konten | Beschreibung |
|---|---|
source | Beschreibbar. Das token account, der Mint oder das Multisig, von dem abgehoben wird. |
destination | Beschreibbar. Empfängt die überschüssigen lamports. |
authority | Unterzeichnet basierend auf dem Typ des Quellkontos (siehe unten). |
Wer kann unterzeichnen
Der erforderliche Signer hängt vom Typ des source-Kontos ab:
| Quellkonto | Signer |
|---|---|
| Token account | Der Eigentümer des token account (oder seine Multisig-Signer). |
| Mint mit einer Mint-Autorität | Die Mint-Autorität. |
| Mint ohne eine Mint-Autorität | Das mint account selbst muss unterzeichnen (siehe Hinweis unten). |
| Multisig | Die konfigurierten M-von-N-Signer. |
Der Fall „Mint ohne Mint-Autorität“ ist ungewöhnlich. Wenn er zutrifft, ist das Mint-Konten der Signer: Ein programmeigenes (off-curve) Mint signiert per CPI aus seinem besitzenden Programm, und ein keypair (on-curve) Mint signiert mit seinem Schlüssel.
Native (wrapped SOL) token accounts werden nicht unterstützt und geben
NativeNotSupported zurück. Die Auszahlung darf das Quell-Konten nicht
unter sein Rent-Exempt-Minimum senken.
So heben Sie überschüssige Lamports ab
Das Beispiel verwendet einen konfigurierten
@solana/kit Client — siehe
Token übertragen für die
Client-Einrichtung.
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]);
Für eine Multisig-Autorität übergeben Sie die Mitsignierer mit
multiSigners.
Is this page helpful?