WithdrawExcessLamports у Solana: посібник для SPL Token і Token-2022
Дані про ціни та можливості перевірено 3 вересня 2026 р..
WithdrawExcessLamports — це інструкція Token Program 38. Вона розв’язує вузьку задачу: мінт, акаунт токена або мультипідпис може містити більше лампортів, ніж потрібно для звільнення від ренти, але ці лампорти неможливо перемістити звичайним переказом токенів.
Що робить WithdrawExcessLamports?
WithdrawExcessLamports переміщує лише SOL понад актуальний мінімум, необхідний для звільнення акаунта Token Program від ренти. Джерело залишається відкритим, а його дані токена чи мінта залишаються незмінними. Необхідний підписувач залежить від того, чи є джерело акаунтом токена, мінтом або токен-мультипідписом.
Інструкція доступна як у класичній SPL Token Program, так і в Token-2022. Вона була корисною для повернення лампортів, випадково надісланих на акаунти, що належать токен-програмі, до пропозиції щодо ренти 2026. Нижчий мінімум ренти розширює її застосування: старі акаунти можуть зберігати свій початковий баланс, потребуючи меншого резерву.
Офіційний опис поведінки й актуальний приклад клієнта наведено в документація Solana щодо Withdraw Excess Lamports. Реалізація обробника також у відкритому доступі в репозиторії Token Program.
Які акаунти потрібні для інструкції?
| Акаунт | Доступний для запису? | Підписувач? | Призначення |
|---|---|---|---|
source | Так | Іноді | Акаунт токена, мінт або мультипідпис із надлишковими лампортами |
destination | Так | Ні | Отримує виведені лампорти |
authority | Ні | Залежить від типу джерела | Підтверджує дозвіл на виведення |
multiSigners | Ні | Так, коли використовується | Досягти налаштованого порогу токен-мультипідпису |
Обробник зчитує довжину даних джерела й поточні налаштування ренти, обчислює мінімальний баланс і переказує різницю. Він не приймає резерв, указаний викликачем, оскільки той може бути застарілим або сфальсифікованим.
Хто має підписувати для кожного типу джерела?
| Джерело | Необхідна уповноважена сторона |
|---|---|
| Акаунт токена з гаманцем-власником | Власник акаунта токена |
| Акаунт токена, що належить токен-мультипідпису | Необхідні учасники мультипідпису M- з N |
| Мінт з активними повноваженнями мінтингу | Поточна уповноважена сторона мінта |
| Мінт без повноважень мінтингу | Сам акаунт мінта-джерела |
| Акаунт-джерело з мультипідписом | Налаштовані учасники M- з N |
Сценарій із відкликаними повноваженнями мінта потребує особливої уваги. Якщо мінт-джерело було створено з ключової пари на кривій, підписати має ця початкова ключова пара. Якщо він перебуває поза кривою, його керівна програма має викликати Token Program із правильними початковими значеннями підписувача PDA. Власник токена або колишня уповноважена сторона мінта не може замінити підпис джерела.
Як створити інструкцію за допомогою клієнта Solana?
Поточний офіційний приклад використовує @solana-program/token із налаштованим @solana/kit клієнтом:
import { getWithdrawExcessLamportsInstruction } from "@solana-program/token";
const instruction = getWithdrawExcessLamportsInstruction({
source,
destination,
authority,
});
await client.sendTransaction([instruction]);
Тут authority є TransactionSigner відповідну джерелу. Для уповноваженої сторони з мультипідписом додайте співпідписувачів через multiSigners. У робочому середовищі фіксуйте версії пакетів і компілюйте з точною версією клієнта, яку використовуєте; типи клієнта можуть змінюватися, навіть якщо ончейн-контракт акаунта не змінюється.
Не задавайте жорстко 0.00203928 SOL як резерв. Це застарілий мінімум для стандартного акаунта токена розміром 165 байтів, а не універсальне поточне значення. Запитуйте актуальний мінімум для фактичної довжини даних джерела безпосередньо перед створенням або попереднім переглядом транзакції.
Чим тут відрізняються SPL Token і Token-2022?
Основний ефект інструкції однаковий, але з Token-2022 припущення щодо довжини даних стають особливо ризикованими. Розширення мінтів і акаунтів збільшують серіалізований розмір, а отже, й необхідний резерв. Інтеграція, яка використовує стандартні розміри у 82 або 165 байти для кожного джерела, може завищити надлишок.
CPI Guard від Token-2022 — ще одна практична відмінність для обгорток. Коли захист заблоковано, міжпрограмний виклик може бути відхилено, навіть якщо гаманець інакше був би дійсною уповноваженою стороною. Sol Incinerator пропускає такі джерела, замість того щоб додавати одну гарантовано невдалу операцію до більшої транзакції очищення.
Акаунти токенів нативного обгорнутого SOL відхиляються з помилкою NativeNotSupported. Розгортання нативного SOL виконується іншим шляхом закриття акаунта; це не виведення надлишкових лампортів.
Як Sol Incinerator API обгортає інструкцію?
v2 API від Sol Incinerator створює виклик Token Program через Assetcinerator, щоб комісії протоколу й необов’язкові партнерські комісії стягувалися ончейн. Ця обгортка є продуктовим рівнем; сама необгорнута інструкція Token Program не стягує комісію Sol Incinerator.
Скористайтеся автентифікованим попереднім переглядом, перш ніж просити користувача підписати:
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"
}'
Пов’язані маршрути транзакцій та інструкцій:
POST /withdraw-excess-lamportsPOST /withdraw-excess-lamports-instructions
userPublicKey є гаманцем призначення та уповноваженою стороною за замовчуванням. Передайте authorityPublicKey коли підписати має інший мінт, джерело або уповноважена сторона мультипідпису. Передайте до 11 multisigSignerPublicKeys під час створення процесу з токен-мультипідписом. Усі приватні ключі залишаються локальними; API повертає дані, які мають схвалити необхідні підписувачі.
Базова комісія протоколу становить 200 bps. Прямий інтегратор може додати partnerFeeAccount і partnerFeeBps, тоді як звичайна комісія за транзакцію Solana сплачується окремо. Використовуйте повернуті feeLamports і поля повернення замість повторного використання кешованого розрахунку відсотка.
Які помилки має обробляти інтеграція?
- Немає надлишку: баланс джерела вже дорівнює поточному резерву.
- Неправильний власник або формат акаунта: джерело не є підтримуваним акаунтом Token Program.
- Недійсні повноваження: наданий підписувач не відповідає декодованому стану джерела.
- Неповний мультипідпис: надано недостатньо дійсних налаштованих підписувачів.
- Нативний акаунт: для обгорнутого SOL використовується інша операція.
- Заблокований CPI Guard: Token-2022 відхиляє обгортку CPI.
- Стан змінився: баланс, повноваження або налаштування ренти змінилися після попереднього перегляду.
- Вартість транзакції перевищує суму: дуже мале виведення може бути економічно недоцільним після сплати мережевих комісій.
Виконайте попередній перегляд знову, якщо стан міг змінитися; забезпечте ідемпотентність вибору джерел і ніколи не об’єднуйте завідомо неприйнятне джерело з іншими коректними операціями.

Sol Incinerator
Перегляньте актуальний надлишок ренти або скористайтеся v2 API, щоб створити безпечне для підписувачів виведення.
Матеріали за темою
Поширені запитання
Що робить WithdrawExcessLamports у Solana?
WithdrawExcessLamports переказує до гаманця призначення лампорти понад поточний мінімум, звільнений від ренти, для акаунта Token Program. Джерелом може бути акаунт токена, мінт або мультипідпис. Інструкція залишає кількість токенів, пропозицію мінта, уповноважені сторони, розширення та всі інші серіалізовані дані акаунта без змін.
Яка уповноважена сторона підписує WithdrawExcessLamports?
Акаунт токена використовує свого власника або налаштованих підписувачів мультипідпису. Мінт з активними повноваженнями мінтингу використовує цю уповноважену сторону. Мінт без таких повноважень має підписати як сам акаунт-джерело, використовуючи свою ключову пару або шлях підписувача CPI від програми, що керує мінтом поза кривою.
Чи підтримує WithdrawExcessLamports Token-2022?
Так. Інструкція доступна для класичних акаунтів, мінтів і мультипідписів SPL Token і Token-2022. Інтеграції мають обчислювати ренту за фактичною довжиною даних джерела, оскільки розширення Token-2022 можуть збільшувати акаунти, а заблокований CPI Guard може перешкоджати виконанню через обгортку.
Чи може WithdrawExcessLamports зменшити баланс акаунта токена нижче рівня звільнення від ренти?
Ні. Token Program обчислює необхідний мінімум джерела й переказує лише різницю понад цей мінімум. Акаунти токенів нативного обгорнутого SOL відхиляються. Застосунки все одно мають попередньо перевіряти актуальний стан, оскільки баланси акаунтів, довжина даних, налаштування ренти й доступні повноваження можуть змінитися до надсилання.