Retirar lamports en exceso

¿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

ElementoDescripciónFuente
WithdrawExcessLamportsLa instrucción (discriminador 38).Fuente
process_withdraw_excess_lamportsLógica del procesador y verificaciones de autoridad.Fuente

Cuentas

CuentaDescripción
sourceEscribible. El token account, mint o multisig del que se retira.
destinationEscribible. Recibe los lamports en exceso.
authorityFirma 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 origenFirmante
Token accountEl propietario del token account (o sus firmantes multisig).
Mint con autoridad de mintLa autoridad de mint.
Mint sin autoridad de mintEl mint account mismo debe firmar (ver la nota más abajo).
MultisigLos 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.

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]);

Para una autoridad multifirma, pasa los co-firmantes con multiSigners.

Is this page helpful?

Tabla de Contenidos

Editar Página