Cosa fa Preleva Lamport in Eccesso?
WithdrawExcessLamports sposta il SOL detenuto da un account del Token
Program al di sopra del suo minimo esente da rent verso un account di
destinazione. I saldi dei token e la supply del mint rimangono invariati — si
spostano solo i lamport in eccesso.
Questo recupera il SOL precedentemente bloccato: i lamport inviati a un token account, a un mint o a un multisig (tutti di proprietà del Token Program) non potevano altrimenti essere spostati.
Riferimento al Codice Sorgente
| Elemento | Descrizione | Sorgente |
|---|---|---|
WithdrawExcessLamports | L'istruzione (discriminatore 38). | Sorgente |
process_withdraw_excess_lamports | Logica del processore e controlli di autorità. | Sorgente |
Account
| Account | Descrizione |
|---|---|
source | Scrivibile. Il token account, mint o multisig da cui prelevare. |
destination | Scrivibile. Riceve i lamport in eccesso. |
authority | Firma in base al tipo di account sorgente (vedi sotto). |
Chi Può Firmare
Il firmatario richiesto dipende dal tipo di account source:
| Account sorgente | Firmatario |
|---|---|
| Token account | Il proprietario del token account (o i suoi firmatari multisig). |
| Mint con una mint authority | La mint authority. |
| Mint senza una mint authority | Il mint account stesso deve firmare (vedi la nota in basso). |
| Multisig | I firmatari M-di-N configurati. |
Il caso "mint senza mint authority" è poco comune. Quando si applica, l'account mint è il firmatario: un mint di proprietà di un programma (off-curve) firma tramite una CPI dal programma proprietario, e un keypair mint (on-curve) firma con la propria chiave.
I token account nativi (SOL wrapped) non sono supportati e restituiscono
NativeNotSupported. Il prelievo non può portare l'account sorgente al di
sotto del minimo esente da rent.
Come Prelevare i lamport in Eccesso
L'esempio utilizza un client
@solana/kit configurato —
consulta Trasferire Token per la
configurazione del 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]);
Per un'authority multisig, passa i co-firmatari con multiSigners.
Is this page helpful?