从持仓账户中提取所有未押金的 SOL 的方法
作者: bartenbach创建于 2024年1月11日更新于 2025年1月5日
标签good first issuecommunity
问题
Jito 的 MEV 奖励被空投到持仓账户中作为多余的、未持仓的 SOL。收到这些空投的持仓账户会看到类似以下内容:
% solana stake-account 74JwpCE61kJMdxaf9j2X5EpnkS1CiCoqoEoJPx5MBdCe
Balance: 97.256865087 SOL
Rent Exempt Reserve: 0.00228288 SOL
Delegated Stake: 96.742412791 SOL
Active Stake: 96.742412791 SOL请注意持仓账户 Balance 和 Active Stake 之间的差异。看起来您可以使用现有函数提取多余的 SOL,但这似乎不起作用,因为 ALL 关键字意味着账户的全部余额:
% solana withdraw-stake --help
solana-withdraw-stake
从持仓账户中提取未持仓的 SOL <AMOUNT> 要从持仓账户中提取的金额,以 SOL 为单位;接受 ALL 关键字% solana withdraw-stake 74JwpCE61kJMdxaf9j2X5EpnkS1CiCoqoEoJPx5MBdCe HKCgzSzVT92ZUDLj6hTeJnRgY6objrPDAbVr3xyxR6kY ALL
Error: RPC response error -32002: Transaction simulation failed: Error processing Instruction 0: insufficient funds for instruction [2 log messages](客户端密钥对已被资助,指定 --fee-payer 没有任何效果)
% solana balance HKCgzSzVT92ZUDLj6hTeJnRgY6objrPDAbVr3xyxR6kY.json
102.301790691 SOL
% solana withdraw-stake --fee-payer HKCgzSzVT92ZUDLj6hTeJnRgY6objrPDAbVr3xyxR6kY.json stake-account.json $(solana address) ALL
Error: RPC response error -32002: Transaction simulation failed: Error processing Instruction 0: insufficient funds for instruction [2 log messages]建议的解决方案
添加新的关键字,如 AVAILABLE、EXCESS 或 UNSTAKED,以计算持仓账户 Balance 和 Active Stake 之间的差异。这样就可以非常方便地从持仓账户中提取所有未持仓的 SOL。在 Jito 之前,这并不是必要的,但随着 MEV 被空投,以及持仓账户中多余的 SOL,这将是非常有用的。
内容来源: solana-labs/solana