Terug naar blog
Solana

WithdrawExcessLamports op Solana: handleiding voor SPL Token en Token-2022

S
Sol Slugs Team
Sol Incinerator

Bewijs voor prijzen en mogelijkheden gecontroleerd 3 september 2026.

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?

AccountBeschrijfbaar?Ondertekenaar?Doel
sourceJaSomsTokenaccount, mint of multisig met overtollige lamports
destinationJaNeeOntvangt de opgenomen lamports
authorityNeeAfhankelijk van brontypeBewijst de bevoegdheid om op te nemen
multiSignersNeeJa, wanneer gebruiktVoldoe 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?

BronVereiste autoriteit
Tokenaccount met een wallet als eigenaarEigenaar van tokenaccount
Tokenaccount dat eigendom is van een tokenmultisigVereiste M--van-N-multisigleden
Mint met actieve mint-autoriteitHuidige mintautoriteit
Mint zonder mint-autoriteitHet bronmintaccount zelf
Multisig-bronaccountIngestelde 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-lamports
  • POST /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

Sol Incinerator

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

Probeer het nu

Verder lezen

Veelgestelde vragen

Wat doet WithdrawExcessLamports op Solana?

WithdrawExcessLamports draagt lamports boven het huidige rent-vrije minimum van een Token Program-account over naar een bestemmingswallet. De bron kan een tokenaccount, mint of multisig zijn. De instructie laat tokenbedragen, mintvoorraad, autoriteiten, extensies en alle andere geserialiseerde accountgegevens ongewijzigd.

Welke autoriteit ondertekent WithdrawExcessLamports?

Een tokenaccount gebruikt zijn eigenaar of ingestelde multisig-ondertekenaars. Een mint met een actieve mint-autoriteit gebruikt die autoriteit. Een mint zonder mint-autoriteit moet als het bronaccount zelf ondertekenen, met behulp van zijn sleutelpaar of een CPI-ondertekeningspad vanuit het programma dat een off-curve mint beheert.

Ondersteunt WithdrawExcessLamports Token-2022?

Ja. De instructie is beschikbaar voor klassieke SPL Token- en Token-2022-accounts, mints en multisigs. Integraties moeten de rent berekenen op basis van de daadwerkelijke gegevenslengte van de bron, omdat Token-2022-extensies accounts groter kunnen maken en een vergrendelde CPI Guard uitvoering via een wrapper kan blokkeren.

Kan WithdrawExcessLamports een tokenaccount tot onder de rent-vrijstelling leeghalen?

Nee. Het Token Program berekent het vereiste minimum van de bron en draagt alleen het verschil daarboven over. Native wrapped-SOL-tokenaccounts worden geweigerd. Applicaties moeten nog steeds de actuele status vooraf bekijken, omdat accountsaldi, gegevenslengtes, rent-instellingen en beschikbare autoriteit vóór indiening kunnen veranderen.

WithdrawExcessLamports op Solana: handleiding voor SPL Token en Token-2022 | Sol Incinerator