Retirer les lamports excédentaires

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émentDescriptionSource
WithdrawExcessLamportsL'instruction (discriminant 38).Source
process_withdraw_excess_lamportsLogique du processeur et vérifications d'autorité.Source

Comptes

CompteDescription
sourceModifiable. Le token account, le mint ou le multisig depuis lequel retirer les fonds.
destinationModifiable. Reçoit les lamports excédentaires.
authoritySigne selon le type du compte source (voir ci-dessous).

Qui peut signer

Le signataire requis dépend du type du compte source :

Compte sourceSignataire
Token accountLe propriétaire du token account (ou ses signataires multisig).
Mint avec une autorité de mintL'autorité de mint.
Mint sans autorité de mintLe mint account lui-même doit signer (voir la note ci-dessous).
MultisigLes 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.

Withdraw excess lamports (Kit)
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?

Table des matières

Modifier la page
© 2026 Fondation Solana. Tous droits réservés.