Co robi wypłata nadwyżki lamportów?
WithdrawExcessLamports przenosi SOL przechowywany przez konto Token
Program powyżej jego minimum zwolnienia z czynszu na konto docelowe. Salda
tokenów i podaż minta pozostają nienaruszone — przemieszczają się wyłącznie
nadwyżkowe lamporty.
Pozwala to odzyskać SOL, który wcześniej był zablokowany: lamporty wysłane do token account, minta lub multisig (wszystkich należących do Token Program) nie mogły być w inny sposób przenoszone.
Źródło referencyjne
| Element | Opis | Źródło |
|---|---|---|
WithdrawExcessLamports | Instrukcja (dyskryminator 38). | Źródło |
process_withdraw_excess_lamports | Logika procesora i weryfikacja uprawnień. | Źródło |
Konta
| Konto | Opis |
|---|---|
source | Zapisywalne. Token account, mint lub multisig, z którego wypłacamy. |
destination | Zapisywalne. Otrzymuje nadwyżkowe lamporty. |
authority | Podpisuje na podstawie typu konta źródłowego (patrz poniżej). |
Kto może podpisać
Wymagany podpisujący zależy od typu konta source:
| Konto źródłowe | Podpisujący |
|---|---|
| Token account | Właściciel token account (lub jego sygnatariusze multisig). |
| Mint z uprawnieniem do minta | Uprawnienie do minta. |
| Mint bez uprawnienia do minta | Sam mint account musi podpisać (patrz uwaga poniżej). |
| Multisig | Skonfigurowane sygnatariusze M-z-N. |
Przypadek „mennica bez władzy mennicy“ jest rzadki. Gdy ma zastosowanie, konto mennicy jest sygnatariuszem: mennica będąca własnością programu (poza krzywą) podpisuje za pośrednictwem CPI ze swojego programu właściciela, a mennica keypair (na krzywej) podpisuje swoim kluczem.
Natywne token account (opakowane SOL) nie są obsługiwane i zwracają
NativeNotSupported. Wypłata nie może obniżyć salda konta źródłowego
poniżej minimalnego progu zwolnienia z czynszu.
Jak wypłacić nadwyżkę lamport
Przykład używa skonfigurowanego klienta
@solana/kit — zobacz
Transferowanie tokenów, aby skonfigurować
klienta.
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]);
W przypadku władzy multisig przekaż współsygnatariuszy za pomocą
multiSigners.
Is this page helpful?