Що робить виведення надлишкових 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 authority | mint 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 — див.
Переказ токенів для налаштування клієнта.
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?