O Que Faz o Saque de Lamports Excedentes?
WithdrawExcessLamports move o SOL mantido por uma conta do Token Program
acima do seu mínimo isento de aluguel para uma conta de destino. Os saldos de
tokens e o fornecimento do mint permanecem intocados — apenas os lamports
excedentes são movidos.
Isso recupera SOL que estava anteriormente bloqueado: lamports enviados para um token account, mint ou multisig (todos pertencentes ao Token Program) não podiam ser movidos de outra forma.
Referência do Código-Fonte
| Item | Descrição | Fonte |
|---|---|---|
WithdrawExcessLamports | A instrução (discriminador 38). | Fonte |
process_withdraw_excess_lamports | Lógica do processador e verificações de autoridade. | Fonte |
Contas
| Conta | Descrição |
|---|---|
source | Gravável. O token account, mint ou multisig do qual sacar. |
destination | Gravável. Recebe os lamports excedentes. |
authority | Assina com base no tipo da conta de origem (veja abaixo). |
Quem Pode Assinar
O signatário necessário depende do tipo da conta source:
| Conta de origem | Signatário |
|---|---|
| Token account | O proprietário do token account (ou seus signatários multisig). |
| Mint com autoridade de mint | A autoridade de mint. |
| Mint sem autoridade de mint | O próprio mint account deve assinar (veja a nota abaixo). |
| Multisig | Os signatários M-de-N configurados. |
O caso "mint sem uma mint authority" é incomum. Quando se aplica, a conta mint é o signatário: um mint de propriedade de programa (fora da curva) assina via CPI do seu programa proprietário, e um keypair mint (na curva) assina com sua chave.
Token accounts de SOL nativo (wrapped SOL) não são suportadas e retornam
NativeNotSupported. O saque não pode reduzir a conta de origem abaixo do
mínimo isento de aluguel.
Como Sacar Lamports Excedentes
O exemplo utiliza um cliente
@solana/kit configurado —
consulte Transferir Tokens para
configuração do 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 uma authority multisig, passe os co-signatários com multiSigners.
Is this page helpful?