¿Qué hace Withdraw Excess Lamports?
WithdrawExcessLamports transfiere el SOL que un account del Token Program
tiene por encima de su mínimo exento de renta a una cuenta de destino. Los
balances de tokens y el suministro del mint no se ven afectados — solo se mueven
los lamports en exceso.
Esto recupera SOL que anteriormente quedaba inaccesible: los lamports enviados a un token account, mint o multisig (todos propiedad del Token Program) no podían moverse de otra forma.
Referencia del código fuente
| Elemento | Descripción | Fuente |
|---|---|---|
WithdrawExcessLamports | La instrucción (discriminador 38). | Fuente |
process_withdraw_excess_lamports | Lógica del procesador y verificaciones de autoridad. | Fuente |
Cuentas
| Cuenta | Descripción |
|---|---|
source | Escribible. El token account, mint o multisig del que se retira. |
destination | Escribible. Recibe los lamports en exceso. |
authority | Firma según el tipo de cuenta de origen (ver más abajo). |
Quién puede firmar
El firmante requerido depende del tipo de cuenta source:
| Cuenta de origen | Firmante |
|---|---|
| Token account | El propietario del token account (o sus firmantes multisig). |
| Mint con autoridad de mint | La autoridad de mint. |
| Mint sin autoridad de mint | El mint account mismo debe firmar (ver la nota más abajo). |
| Multisig | Los firmantes M-de-N configurados. |
El caso de "acuñación sin autoridad de acuñación" es poco común. Cuando aplica, la cuenta de acuñación es la firmante: una acuñación propiedad de un programa (fuera de la curva) firma mediante una CPI desde su programa propietario, y una acuñación keypair (en la curva) firma con su clave.
Los token account nativos (SOL envuelto) no son compatibles y devuelven
NativeNotSupported. El retiro no puede reducir la cuenta de origen por
debajo de su mínimo exento de renta.
Cómo retirar lamport en exceso
El ejemplo utiliza un cliente
@solana/kit configurado —
consulta Transferir tokens para la
configuración del cliente.
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]);
Para una autoridad multifirma, pasa los co-firmantes con multiSigners.
Is this page helpful?