Apa yang Dilakukan Withdraw Excess Lamports?
WithdrawExcessLamports memindahkan SOL yang dipegang oleh akun Token
Program di atas minimum bebas-sewanya ke akun tujuan. Saldo token dan pasokan
mint tidak terpengaruh — hanya lamport surplus yang dipindahkan.
Ini memulihkan SOL yang sebelumnya terjebak: lamport yang dikirim ke token account, mint, atau multisig (semuanya dimiliki oleh Token Program) sebelumnya tidak dapat dipindahkan.
Referensi Sumber
| Item | Deskripsi | Sumber |
|---|---|---|
WithdrawExcessLamports | Instruksi (diskriminator 38). | Sumber |
process_withdraw_excess_lamports | Logika prosesor dan pemeriksaan otoritas. | Sumber |
Akun
| Akun | Deskripsi |
|---|---|
source | Dapat ditulis. Token account, mint, atau multisig yang akan ditarik. |
destination | Dapat ditulis. Menerima lamport berlebih. |
authority | Menandatangani berdasarkan tipe akun sumber (lihat di bawah). |
Siapa yang Dapat Menandatangani
Penanda tangan yang diperlukan bergantung pada tipe akun source:
| Akun sumber | Penanda tangan |
|---|---|
| Token account | Pemilik token account (atau penanda tangan multisig-nya). |
| Mint dengan mint authority | Mint authority. |
| Mint tanpa mint authority | mint account itu sendiri harus menandatangani (lihat catatan di bawah). |
| Multisig | Penanda tangan M-dari-N yang dikonfigurasi. |
Kasus "mint tanpa mint authority" jarang terjadi. Bila berlaku, akun mint bertindak sebagai penanda tangan: mint yang dimiliki program (off-curve) menandatangani melalui CPI dari program pemiliknya, dan mint berupa keypair (on-curve) menandatangani dengan kuncinya.
Token account SOL asli (wrapped SOL) tidak didukung dan mengembalikan
NativeNotSupported. Penarikan tidak boleh menurunkan saldo akun sumber di
bawah minimum bebas sewa.
Cara Menarik Lamport Berlebih
Contoh ini menggunakan klien
@solana/kit yang telah
dikonfigurasi — lihat Transfer Token
untuk pengaturan klien.
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]);
Untuk otoritas multisig, berikan co-signer dengan multiSigners.
Is this page helpful?