Виведення надлишкових lamport

Що робить виведення надлишкових lamport?

WithdrawExcessLamports переміщує SOL, що зберігається на акаунті Token Program понад мінімум, звільнений від оренди, на цільовий акаунт. Баланси токенів і обсяг постачання mint залишаються незмінними — переміщуються лише надлишкові lamport.

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

Посилання на джерело

ЕлементОписДжерело
WithdrawExcessLamportsІнструкція (дискримінатор 38).Джерело
process_withdraw_excess_lamportsЛогіка процесора та перевірка прав доступу.Джерело

Акаунти

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

Хто може підписувати

Необхідний підписант залежить від типу акаунта source:

Вихідний акаунтПідписант
token accountВласник token account (або його multisig-підписанти).
Mint із mint authoritymint authority.
Mint без mint authorityСам mint account повинен підписати (див. примітку нижче).
MultisigНалаштовані M-of-N підписанти.

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

Нативні (обгорнуті SOL) token account не підтримуються та повертають 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 передайте співпідписантів за допомогою multiSigners.

Is this page helpful?

Зміст

Редагувати сторінку