超過lamportの引き出しとは?
WithdrawExcessLamports は、Token
Program アカウントが保有するSOLのうち、レント免除最低額を超える分を送信先アカウントに移動します。トークン残高とmintの供給量はそのまま維持され、余剰lamportのみが移動します。
これにより、以前は移動できなかったSOLを回収できます。token account、mint、またはマルチシグ(すべてToken Program が所有)に送られたlamportは、通常の方法では移動できませんでした。
ソースリファレンス
| 項目 | 説明 | ソース |
|---|---|---|
WithdrawExcessLamports | instructions(ディスクリミネーター38)。 | ソース |
process_withdraw_excess_lamports | プロセッサーロジックと権限チェック。 | ソース |
アカウント
| アカウント | 説明 |
|---|---|
source | 書き込み可能。引き出し元のtoken account、mint、またはマルチシグ。 |
destination | 書き込み可能。超過lamportの受け取り先。 |
authority | ソースアカウントの種類に応じて署名します(以下を参照)。 |
署名者の要件
必要な署名者は source アカウントの種類によって異なります:
| ソースアカウント | 署名者 |
|---|---|
| token account | token accountのオーナー(またはそのマルチシグ署名者)。 |
| mint authorityを持つmint | mint authority。 |
| mint authorityを持たないmint | mint account自体が署名する必要があります(以下の注意を参照)。 |
| マルチシグ | 設定されたM-of-N署名者。 |
「ミント権限なしのミント」のケースは一般的ではありません。該当する場合、ミントアカウントが署名者となります。プログラムが所有する(オフカーブの)ミントは、そのオーナープログラムからのCPIを介して署名し、keypair(オンカーブの)ミントはそのキーで署名します。
ネイティブ(ラップされたSOL)token
accountはサポートされておらず、*rsNativeNotSupported*を返します。引き出しによって、送信元アカウントの残高がレント免除の最低額を下回ることはできません。
余剰lamportの引き出し方法
この例では、設定済みの
@solana/kit
クライアントを使用します。クライアントのセットアップについては、トークンの転送を参照してください。
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]);
マルチシグ権限の場合は、multiSigners を使って共同署名者を渡してください。
Is this page helpful?