Вывод излишних Lamport

Что делает вывод излишних lamport?

WithdrawExcessLamports перемещает SOL, хранящийся на аккаунте Token Program сверх минимума, освобождённого от аренды, на целевой аккаунт. Балансы токенов и объём эмиссии остаются неизменными — перемещаются только излишние lamport.

Это позволяет восстановить SOL, который ранее был заблокирован: lamport, отправленные на token account, mint-аккаунт или мультисиг (все принадлежат Token Program), не могли быть перемещены иным способом.

Исходный справочник

ЭлементОписаниеИсточник
WithdrawExcessLamportsИнструкция (дискриминатор 38).Источник
process_withdraw_excess_lamportsЛогика процессора и проверки прав доступа.Источник

Аккаунты

АккаунтОписание
sourceДоступен для записи. Token account, mint-аккаунт или мультисиг, с которого выполняется вывод.
destinationДоступен для записи. Получает излишние lamport.
authorityПодписывает в зависимости от типа исходного аккаунта (см. ниже).

Кто может подписывать

Требуемый подписант зависит от типа аккаунта source:

Исходный аккаунтПодписант
Token accountВладелец token account (или его мультисиг-подписанты).
Mint с mint authorityMint authority.
Mint без mint authorityСам mint account должен подписать (см. примечание ниже).
МультисигНастроенные M-of-N подписанты.

Случай «минт без mint authority» встречается редко. Когда он применим, минт-аккаунт является подписантом: минт, принадлежащий программе (off-curve), подписывает через CPI из своей программы, а keypair-минт (on-curve) подписывает своим ключом.

Нативные token account (wrapped SOL) не поддерживаются и возвращают NativeNotSupported. Вывод средств не может опустить исходный аккаунт ниже минимального остатка, освобождённого от арендной платы.

Как вывести избыточные lamport

В примере используется настроенный клиент @solana/kit — см. Перевод токенов для настройки клиента.

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

Для multisig authority передайте со-подписантов с помощью multiSigners.

Is this page helpful?

Содержание

Редактировать страницу