Wypłata nadwyżki lamportów

Co robi wypłata nadwyżki lamportów?

WithdrawExcessLamports przenosi SOL przechowywany przez konto Token Program powyżej jego minimum zwolnienia z czynszu na konto docelowe. Salda tokenów i podaż minta pozostają nienaruszone — przemieszczają się wyłącznie nadwyżkowe lamporty.

Pozwala to odzyskać SOL, który wcześniej był zablokowany: lamporty wysłane do token account, minta lub multisig (wszystkich należących do Token Program) nie mogły być w inny sposób przenoszone.

Źródło referencyjne

ElementOpisŹródło
WithdrawExcessLamportsInstrukcja (dyskryminator 38).Źródło
process_withdraw_excess_lamportsLogika procesora i weryfikacja uprawnień.Źródło

Konta

KontoOpis
sourceZapisywalne. Token account, mint lub multisig, z którego wypłacamy.
destinationZapisywalne. Otrzymuje nadwyżkowe lamporty.
authorityPodpisuje na podstawie typu konta źródłowego (patrz poniżej).

Kto może podpisać

Wymagany podpisujący zależy od typu konta source:

Konto źródłowePodpisujący
Token accountWłaściciel token account (lub jego sygnatariusze multisig).
Mint z uprawnieniem do mintaUprawnienie do minta.
Mint bez uprawnienia do mintaSam mint account musi podpisać (patrz uwaga poniżej).
MultisigSkonfigurowane sygnatariusze M-z-N.

Przypadek „mennica bez władzy mennicy“ jest rzadki. Gdy ma zastosowanie, konto mennicy jest sygnatariuszem: mennica będąca własnością programu (poza krzywą) podpisuje za pośrednictwem CPI ze swojego programu właściciela, a mennica keypair (na krzywej) podpisuje swoim kluczem.

Natywne token account (opakowane SOL) nie są obsługiwane i zwracają NativeNotSupported. Wypłata nie może obniżyć salda konta źródłowego poniżej minimalnego progu zwolnienia z czynszu.

Jak wypłacić nadwyżkę lamport

Przykład używa skonfigurowanego klienta @solana/kit — zobacz Transferowanie tokenów, aby skonfigurować klienta.

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

W przypadku władzy multisig przekaż współsygnatariuszy za pomocą multiSigners.

Is this page helpful?

Spis treści

Edytuj stronę