Rút Lamport Dư Thừa Làm Gì?
WithdrawExcessLamports chuyển SOL mà một tài khoản Token Program đang giữ
vượt quá mức tối thiểu miễn phí thuê sang một tài khoản đích. Số dư token và
nguồn cung mint không bị ảnh hưởng — chỉ có các lamport dư thừa được chuyển đi.
Thao tác này giúp thu hồi SOL trước đây bị kẹt: các lamport được gửi đến một token account, mint hoặc multisig (tất cả đều thuộc sở hữu của Token Program) trước đây không thể di chuyển được.
Tham Chiếu Nguồn
| Mục | Mô tả | Nguồn |
|---|---|---|
WithdrawExcessLamports | Lệnh (discriminator 38). | Nguồn |
process_withdraw_excess_lamports | Logic xử lý và kiểm tra quyền. | Nguồn |
Tài Khoản
| Tài khoản | Mô tả |
|---|---|
source | Có thể ghi. token account, mint hoặc multisig cần rút từ đó. |
destination | Có thể ghi. Nhận các lamport dư thừa. |
authority | Ký dựa trên loại tài khoản nguồn (xem bên dưới). |
Ai Có Thể Ký
Người ký yêu cầu phụ thuộc vào loại tài khoản source:
| Tài khoản nguồn | Người ký |
|---|---|
| Token account | Chủ sở hữu token account (hoặc các signers multisig của nó). |
| Mint có mint authority | Mint authority. |
| Mint không có mint authority | Chính mint account phải ký (xem ghi chú bên dưới). |
| Multisig | Các signers M-of-N đã được cấu hình. |
Trường hợp "mint không có mint authority" là không phổ biến. Khi áp dụng, tài khoản mint đóng vai trò là người ký: một mint thuộc sở hữu của chương trình (off-curve) ký thông qua CPI từ chương trình sở hữu nó, và một keypair (on-curve) mint ký bằng khóa của nó.
Các token account SOL gốc (wrapped SOL) không được hỗ trợ và trả về
NativeNotSupported. Việc rút tiền không thể khiến tài khoản nguồn giảm
xuống dưới mức tối thiểu miễn phí thuê.
Cách Rút Lamport Dư Thừa
Ví dụ sử dụng một @solana/kit
client đã được cấu hình — xem
Chuyển Token để thiết lập client.
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]);
Đối với một multisig authority, hãy truyền các co-signer cùng với
multiSigners.
Is this page helpful?