WithdrawExcessLamports is Token Program-instructie 38. Deze lost een specifiek probleem op: een mint, tokenaccount of multisig kan meer lamports bevatten dan nodig is voor rent-vrijstelling, maar die lamports kunnen niet via een gewone tokenoverdracht worden verplaatst.
Wat doet WithdrawExcessLamports?
WithdrawExcessLamports verplaatst alleen de SOL boven het actuele rent-vrije minimum van een Token Program-account. De bron blijft open en de token- of mintgegevens blijven ongewijzigd. De vereiste ondertekenaar hangt af van de vraag of de bron een tokenaccount, mint of token-multisig is.
De instructie is beschikbaar in zowel het klassieke SPL Token Program als Token-2022. Deze was nuttig voor het terugvorderen van lamports die vóór het 2026 rent-voorstel per ongeluk naar accounts in eigendom van het tokenprogramma waren gestuurd. Een lager rent-minimum maakt de instructie breder inzetbaar: oudere accounts kunnen hun oorspronkelijke saldo behouden terwijl ze een kleinere reserve nodig hebben.
Het bepalende gedrag en het actuele clientvoorbeeld staan in documentatie van Solana over Withdraw Excess Lamports. De processorimplementatie is ook openbaar in de repository van het Token Program.
Welke accounts vereist de instructie?
| Account | Beschrijfbaar? | Ondertekenaar? | Doel |
|---|---|---|---|
source | Ja | Soms | Tokenaccount, mint of multisig met overtollige lamports |
destination | Ja | Nee | Ontvangt de opgenomen lamports |
authority | Nee | Afhankelijk van brontype | Bewijst de bevoegdheid om op te nemen |
multiSigners | Nee | Ja, wanneer gebruikt | Voldoe aan de ingestelde drempel voor de tokenmultisig |
De processor leest de gegevenslengte en huidige rent-instellingen van de bron, berekent het minimumsaldo en draagt het verschil over. Hij accepteert geen door de aanroeper opgegeven reserve die verouderd of gemanipuleerd kan zijn.
Wie moet voor elk brontype ondertekenen?
| Bron | Vereiste autoriteit |
|---|---|
| Tokenaccount met een wallet als eigenaar | Eigenaar van tokenaccount |
| Tokenaccount dat eigendom is van een tokenmultisig | Vereiste M--van-N-multisigleden |
| Mint met actieve mint-autoriteit | Huidige mintautoriteit |
| Mint zonder mint-autoriteit | Het bronmintaccount zelf |
| Multisig-bronaccount | Ingestelde M--van-N-leden |
Het geval van een mint met ingetrokken autoriteit verdient bijzondere aandacht. Als de bronmint met een on-curve-sleutelpaar is aangemaakt, moet dat oorspronkelijke sleutelpaar ondertekenen. Als de mint off-curve is, moet het beherende programma het Token Program aanroepen met de juiste PDA-ondertekeningsseeds. Een tokenhouder of voormalige mintautoriteit kan de handtekening van de bron niet vervangen.
Hoe stel je de instructie samen met de Solana-client?
Het huidige officiële voorbeeld gebruikt @solana-program/token met een ingestelde @solana/kit client:
import { getWithdrawExcessLamportsInstruction } from "@solana-program/token";
const instruction = getWithdrawExcessLamportsInstruction({
source,
destination,
authority,
});
await client.sendTransaction([instruction]);
Hier authority is een TransactionSigner die geschikt is voor de bron. Neem voor een multisigautoriteit de medeondertekenaars op via multiSigners. Zet pakketversies vast in productie en compileer tegen exact de clientrelease die je gebruikt; clienttypen kunnen veranderen, ook als het on-chain-accountcontract niet verandert.
Hardcode niet 0.00203928 SOL als reserve. Dat is het oude minimum voor een standaard tokenaccount van 165 bytes, geen universele actuele waarde. Vraag vlak vóór het samenstellen of vooraf bekijken van de transactie het huidige minimum op voor de daadwerkelijke gegevenslengte van de bron.
Hoe verschillen SPL Token en Token-2022 hierin?
Het kerneffect van de instructie is hetzelfde, maar Token-2022 maakt aannames over de gegevenslengte bijzonder riskant. Mint- en account-extensies vergroten de geserialiseerde omvang en daarmee de vereiste reserve. Een integratie die voor elke bron uitgaat van de standaardgrootte van 82 of 165 bytes, kan het overschot te hoog inschatten.
De CPI Guard van Token-2022 is nog een praktisch verschil voor wrappers. Wanneer de guard is vergrendeld, kan een cross-program-aanroep worden geweigerd, zelfs als de wallet anders een geldige autoriteit zou zijn. Sol Incinerator slaat die bronnen over in plaats van één gegarandeerd mislukte bewerking in een grotere opschoningstransactie op te nemen.
Native wrapped-SOL-tokenaccounts worden geweigerd met NativeNotSupported. Het unwrappen van native SOL volgt een ander pad voor het sluiten van accounts; het is geen opname van overtollige lamports.
Hoe wrapt de Sol Incinerator API de instructie?
De v2-API van Sol Incinerator stelt de Token Program-aanroep via Assetcinerator samen, zodat protocol- en optionele partnervergoedingen on-chain worden afgedwongen. Deze wrapper is een productlaag; de onbewerkte Token Program-instructie zelf legt de vergoeding van Sol Incinerator niet op.
Gebruik de geauthenticeerde preview voordat je een gebruiker vraagt te ondertekenen:
curl -X POST https://v2.api.sol-incinerator.com/withdraw-excess-lamports/preview \
-H "content-type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"userPublicKey": "DESTINATION_WALLET",
"sourceAccount": "TOKEN_ACCOUNT_MINT_OR_MULTISIG"
}'
De bijbehorende transactie- en instructieroutes zijn:
POST /withdraw-excess-lamportsPOST /withdraw-excess-lamports-instructions
userPublicKey is de bestemmingswallet en standaardautoriteit. Geef authorityPublicKey wanneer een andere mint-, bron- of multisig-autoriteit moet ondertekenen. Geef maximaal 11 op multisigSignerPublicKeys bij het bouwen van een token-multisig flow. Elke privésleutel blijft lokaal; de API retourneert materiaal dat de vereiste ondertekenaars kunnen goedkeuren.
De basisprotocolvergoeding is 200 bps. Een directe integrator kan een partnerFeeAccount en partnerFeeBps, terwijl de normale transactiekosten voor Solana hiervan losstaan. Gebruik de geretourneerde feeLamports en terugvorderingsvelden in plaats van een gecachete procentuele berekening opnieuw te gebruiken.
Welke fouten moet een integratie afhandelen?
- Geen overschot: het bronsaldo is al gelijk aan de huidige reserve.
- Onjuiste accounteigenaar of -indeling: de bron is geen ondersteund Token Program-account.
- Ongeldige autoriteit: de opgegeven ondertekenaar komt niet overeen met de gedecodeerde bronstatus.
- Onvolledige multisig: er zijn te weinig geldige, ingestelde ondertekenaars opgegeven.
- Native account: wrapped SOL gebruikt een andere bewerking.
- Vergrendelde CPI Guard: Token-2022 weigert wrapper-CPI.
- Status gewijzigd: een saldo, autoriteit of rent-instelling is na de preview gewijzigd.
- Transactiekosten zijn hoger dan de waarde: een zeer kleine opname is na netwerkkosten mogelijk niet rendabel.
Bekijk vooraf opnieuw wanneer de status mogelijk is veranderd, houd bronselectie idempotent en voeg een bron die niet in aanmerking komt nooit samen in een batch met verder geldige bewerkingen.

Sol Incinerator
Bekijk een preview van de actuele overtollige rent of gebruik de v2-API om een signer-safe opname samen te stellen.