Que fait le retrait des lamports excédentaires ?
WithdrawExcessLamports transfère les SOL détenus par un compte Token
Program au-dessus de son minimum d'exemption de loyer vers un compte de
destination. Les soldes de jetons et l'offre du mint ne sont pas affectés —
seuls les lamport excédentaires sont déplacés.
Cette opération récupère les SOL précédemment bloqués : les lamports envoyés à un token account, un mint ou un multisig (tous détenus par le Token Program) ne pouvaient pas être déplacés autrement.
Référence source
| Élément | Description | Source |
|---|---|---|
WithdrawExcessLamports | L'instruction (discriminant 38). | Source |
process_withdraw_excess_lamports | Logique du processeur et vérifications d'autorité. | Source |
Comptes
| Compte | Description |
|---|---|
source | Modifiable. Le token account, le mint ou le multisig depuis lequel retirer les fonds. |
destination | Modifiable. Reçoit les lamports excédentaires. |
authority | Signe selon le type du compte source (voir ci-dessous). |
Qui peut signer
Le signataire requis dépend du type du compte source :
| Compte source | Signataire |
|---|---|
| Token account | Le propriétaire du token account (ou ses signataires multisig). |
| Mint avec une autorité de mint | L'autorité de mint. |
| Mint sans autorité de mint | Le mint account lui-même doit signer (voir la note ci-dessous). |
| Multisig | Les M signataires sur N configurés. |
Le cas « mint sans autorité de mint » est peu courant. Lorsqu'il s'applique, le compte mint est le signataire : un mint appartenant à un programme (hors courbe) signe via un CPI depuis son programme propriétaire, et un keypair (sur courbe) mint signe avec sa clé.
Les token accounts natifs (SOL encapsulé) ne sont pas pris en charge et
renvoient NativeNotSupported. Le retrait ne peut pas faire passer le
compte source en dessous de son minimum d'exemption de loyer.
Comment retirer les lamports excédentaires
L'exemple utilise un client
@solana/kit configuré —
consultez Transférer des tokens pour la
configuration du 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]);
Pour une autorité multisig, transmettez les co-signataires avec
multiSigners.
Is this page helpful?