Rút Lamport Dư Thừa

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ụcMô tảNguồn
WithdrawExcessLamportsLệnh (discriminator 38).Nguồn
process_withdraw_excess_lamportsLogic xử lý và kiểm tra quyền.Nguồn

Tài Khoản

Tài khoảnMô tả
sourceCó thể ghi. token account, mint hoặc multisig cần rút từ đó.
destinationCó thể ghi. Nhận các lamport dư thừa.
authorityKý 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ồnNgười ký
Token accountChủ sở hữu token account (hoặc các signers multisig của nó).
Mint có mint authorityMint authority.
Mint không có mint authorityChính mint account phải ký (xem ghi chú bên dưới).
MultisigCá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.

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

Đối với một multisig authority, hãy truyền các co-signer cùng với multiSigners.

Is this page helpful?

Mục lục

Chỉnh sửa trang