You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编程关闭Solana账户B并全额划转SOL至账户C(无需留租金)

问题解决:Solana关闭账户并划转全部余额

错误原因

你遇到的Transaction results in an account (1) without insufficient funds for rent错误,是因为用SystemProgram.transfer转走账户B全部余额后,账户B仍存在但余额为0,无法满足Solana账户的最低租金要求。要彻底关闭账户并转走所有余额,不能用普通转账,必须用账户关闭指令。

正确实现代码

Solana的System Program提供了closeAccount指令,专门用于销毁账户并将所有剩余lamports划转至目标账户。修改后的代码如下:

const transaction = new solana.Transaction();
// 添加关闭账户指令,将账户B的所有余额转至账户C
transaction.add(solana.SystemProgram.closeAccount({
    source: account_b_public_key,
    destination: account_c_public_key,
    owner: account_b_public_key, // 账户B的所有者,此处即账户自身
}));

transaction.feePayer = account_a_public_key;
// 需要账户A(付费方)和账户B(被关闭账户的所有者)的签名
const signature = await solana.sendAndConfirmTransaction(
    connection, 
    transaction, 
    [account_a_signer, account_b_signer]
);

关键说明

  • closeAccount指令会直接销毁账户B,将其所有lamports(包括原本用于支付账户租金的部分)全部转入账户C,不存在租金不足的问题。
  • 确保账户B是空的系统账户:如果账户B存储了其他程序的数据(比如Token账户、智能合约数据等),需要先清理或关闭对应关联程序的逻辑,才能用System Program关闭它。

内容的提问来源于stack exchange,提问作者pengdu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:50:16