Sol-safekey 交互命令和操作的完整使用指南。
Sol-SafeKey 提供交互式命令行界面,用于安全的 Solana 钱包管理和操作。本指南涵盖所有可用功能和操作。
- 已安装 Solana CLI 工具(用于空投和验证)
- 可访问 Solana devnet 或 mainnet RPC 端点
- 支持 UTF-8 的终端以正确显示符号
如果你使用的 bot 集成了 sol-safekey:
./你的bot safekey或者使用独立二进制文件:
./build-cache/release/examples/bot_example safekey对于不使用 bot 的独立使用,直接安装 sol-safekey:
# 从 crates.io 安装(推荐使用最新版本)
cargo install sol-safekey --features="full"
# 验证安装
sol-safekey --version
# 启动交互式菜单
sol-safekey start这种方式提供通过交互式菜单直接访问所有 sol-safekey 功能。
启动后,你会看到语言选择:
==================================================
Language / 语言选择
==================================================
1. English
2. 中文
Select / 选择 [1/2]:
选择语言后,主菜单显示所有可用操作。
所有 18 个交互式菜单操作的快速概览,按类别组织。点击任一操作可跳转到详细指南:
- 1. 创建明文私钥 - 生成未加密的 Solana 密钥对(仅用于测试)
- 2. 创建加密私钥(选项-2)) - 加密现有私钥并保存到 keystore
- 3. 解密私钥 - 解密 keystore 并显示私钥
- U. 解锁钱包 - 解锁钱包以进行 Solana 操作
- 4. 设置 2FA 认证 - 配置双因素认证
- 5. 生成三因子钱包 - 创建 3FA 钱包(硬件 + 密码 + 安全问题 + 2FA)
- 6. 解锁三因子钱包 - 解密 3FA 加密钱包
- 7. 查询 SOL 余额 - 查询钱包 SOL 余额
- 8. 转账 SOL - 向其他地址发送 SOL
- 9. 创建 WSOL ATA - 创建包装 SOL 关联代币账户
- 10. 包装 SOL → WSOL - 将 SOL 转换为包装 SOL
- 11. 解包 WSOL → SOL - 将包装 SOL 转换回 SOL
- 12. 关闭 WSOL ATA - 关闭 WSOL ATA 并将剩余 WSOL 转换为 SOL
- 13. 转账 SPL 代币 - 向其他地址发送 SPL 代币
- 14. 创建 Nonce 账户 - 创建持久化 nonce 以防止交易重放
- 15. Pump.fun 卖出代币 - 在 Pump.fun DEX 上卖出代币(内盘)
- 16. PumpSwap 卖出代币 - 在 PumpSwap DEX 上卖出代币
- 17. Pump.fun 返现 - 查看并领取 pump.fun 返现(原生 SOL)
- 18. PumpSwap 返现 - 查看并领取 PumpSwap 返现(WSOL)
- 解锁钱包 - 解锁钱包并开始使用
- 查询余额 - 快速查询 SOL 余额
- 创建 Nonce - 创建持久化 nonce 用于交易机器人
- DEX 操作 - 访问 Pump.fun 和 PumpSwap 卖出功能
用途: 生成未加密的密钥对(仅用于测试)
警告: 不建议在生产环境使用。密钥以明文存储。
步骤:
- 从主菜单选择选项
1 - 选择生成方式:
- 选项 1: 生成新的随机密钥对
- 选项 2: 导入现有私钥
- 选择输出格式:
- 选项 1: 保存为 JSON 文件
- 选项 2: 在终端显示(base58)
示例:
📝 明文密钥对选项:
1. 生成新密钥对
2. 导入现有私钥
请选择 [1/2]: 1
✅ 密钥对生成成功!
📍 公钥: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
输出格式:
1. 保存为 JSON 文件
2. 显示 base58 私钥
请选择 [1/2]: 1
文件路径(默认: wallet.json): test-wallet.json
✅ 已保存到 test-wallet.json
用途: 生成或导入带 AES-256 加密的密钥对
安全性: 军事级加密配合 PBKDF2 密钥派生
步骤:
- 从主菜单选择选项
2 - 选择生成方式:
- 选项 1: 生成新密钥对并加密
- 选项 2: 导入现有私钥并加密
- 设置加密密码(最少 10 个字符)
- 确认密码
- 选择输出格式:
- 选项 1: 保存为 Keystore 文件(推荐)
- 选项 2: 显示加密字符串
示例:
🔐 加密密钥对选项:
1. 生成新密钥对并加密
2. 导入现有私钥并加密
请选择 [1/2]: 1
🔒 设置加密密码(至少 10 个字符):
新密码: ************
确认密码: ************
✅ 密码已接受!
输出格式:
1. 保存为 Keystore 文件(推荐)
2. 显示加密字符串
请选择 [1/2]: 1
文件路径(默认: wallet.json): keystore.json
✅ Keystore 创建成功!
📍 公钥: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
📁 位置: keystore.json
⚠️ 重要: 记住你的密码!密码无法恢复。
最佳实践:
- 使用强密码(建议 16+ 字符)
- 混合大小写字母、数字和符号
- 永不分享你的密码
- 安全存储密码(密码管理器)
- 在安全位置保留 keystore 文件的备份
用途: 查看或导出加密的密钥对
步骤:
- 从主菜单选择选项
3 - 选择来源:
- 选项 1: 从 Keystore 文件加载
- 选项 2: 粘贴加密字符串
- 输入解密密码
- 选择输出格式:
- 选项 1: 仅显示
- 选项 2: 保存为明文 JSON
示例:
🔓 解密加密的密钥对
来源:
1. Keystore 文件
2. 加密字符串
请选择 [1/2]: 1
Keystore 文件路径: keystore.json
🔑 输入解密密码: ************
✅ 解密成功!
📍 公钥: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
输出:
1. 仅显示
2. 保存为明文 JSON
请选择 [1/2]: 1
私钥(base58): 5JW8...
用途: 为当前会话解锁加密钱包
优势: 解锁一次,可用于同一会话中的所有后续操作
步骤:
- 从主菜单选择选项
U或u - 输入 keystore 文件路径
- 输入密码
- 钱包在会话期间保持解锁状态
示例:
🔓 解锁钱包
Keystore 文件路径 [keystore.json]: keystore.json
🔑 输入钱包密码: ************
✅ 钱包解锁成功!
📍 地址: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
现在可以使用所有 Solana 操作而无需重新输入密码。
所有 Solana 操作需要:
- 已解锁的钱包(选项
U),或者 - 每次操作时会提示输入 keystore 路径和密码
用途: 查询地址的 SOL 余额
步骤:
- 从主菜单选择选项
4 - 选择地址来源:
- 选项 1: 当前解锁的钱包
- 选项 2: 手动输入任何地址
- 选择网络:
- 选项 1: Devnet
- 选项 2: Mainnet-beta
- 查看余额
示例:
💰 查询 SOL 余额
地址来源:
1. 当前钱包
2. 手动输入地址
请选择 [1/2]: 1
选择网络:
1. Devnet
2. Mainnet-beta
请选择 [1/2]: 1
💰 正在查询余额...
地址: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
余额: 2.5 SOL
用途: 向另一个地址发送 SOL
前置条件: 足够的 SOL 用于金额 + 手续费(约 0.000005 SOL)
步骤:
- 从主菜单选择选项
5 - 如果钱包未解锁,提供 keystore 和密码
- 输入接收地址
- 输入 SOL 金额
- 选择网络
- 确认交易
- 查看交易签名
示例:
💸 转账 SOL
[如果未解锁]
Keystore 路径: keystore.json
密码: ************
接收地址: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
转账金额(SOL): 0.1
选择网络:
1. Devnet
2. Mainnet-beta
请选择 [1/2]: 1
摘要:
从: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
到: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
金额: 0.1 SOL
网络: Devnet
确认交易?(y/n): y
🚀 发送交易中...
✅ 转账成功!
交易签名: 5J7W8vN2BxC9K4... (在浏览器中查看)
用途: 将原生 SOL 转换为包装的 SOL(SPL 代币)
使用场景: 某些 DeFi 协议和 DEX 交易需要
步骤:
- 从主菜单选择选项
6 - 如果钱包未解锁,提供 keystore 和密码
- 输入要包装的金额
- 选择网络
- 确认交易
- 查看交易签名
示例:
📦 包装 SOL → WSOL
[如果未解锁]
Keystore 路径: keystore.json
密码: ************
包装金额(SOL): 1.0
选择网络:
1. Devnet
2. Mainnet-beta
请选择 [1/2]: 1
摘要:
包装: 1.0 SOL → 1.0 WSOL
网络: Devnet
确认?(y/n): y
🚀 正在创建包装 SOL 账户...
✅ 包装成功!
交易签名: 3K9X2nM5DyH8F7...
WSOL 账户: 7xF2wD9cN3bV1K...
用途: 将包装的 SOL 转换回原生 SOL
步骤:
- 从主菜单选择选项
7 - 如果钱包未解锁,提供 keystore 和密码
- 输入要解包的金额
- 选择网络
- 确认交易
- 查看交易签名
示例:
📤 解包 WSOL → SOL
[如果未解锁]
Keystore 路径: keystore.json
密码: ************
解包金额(WSOL): 0.5
选择网络:
1. Devnet
2. Mainnet-beta
请选择 [1/2]: 1
摘要:
解包: 0.5 WSOL → 0.5 SOL
网络: Devnet
确认?(y/n): y
🚀 解包中...
✅ 解包成功!
交易签名: 2M8Y1oL4CxG9J6...
用途: 向另一个地址发送任何 SPL 代币
前置条件: 足够的 SOL 用于交易手续费 + 代币余额
步骤:
- 从主菜单选择选项
8 - 如果钱包未解锁,提供 keystore 和密码
- 输入代币 mint 地址
- 输入接收地址
- 输入金额(以代币的小数单位)
- 选择网络
- 确认交易
- 查看交易签名
示例:
🪙 转账 SPL 代币
[如果未解锁]
Keystore 路径: keystore.json
密码: ************
代币 mint 地址: So11111111111111111111111111111111111111112
接收地址: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
金额: 100
选择网络:
1. Devnet
2. Mainnet-beta
请选择 [1/2]: 1
摘要:
代币: So11111111111111111111111111111111111111112
到: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
金额: 100
网络: Devnet
确认?(y/n): y
🚀 发送代币中...
✅ 转账成功!
交易签名: 4L7X3pN6EzH0K8...
用途: 创建用于离线交易签名的 nonce 账户
使用场景: 高级交易模式和离线签名所需
前置条件: 约 0.00144288 SOL 用于免租金 nonce 账户
步骤:
- 从主菜单选择选项
9 - 如果钱包未解锁,提供 keystore 和密码
- 选择网络
- 确认交易
- 查看 nonce 账户地址和交易签名
示例:
🔢 创建 Durable Nonce 账户
[如果未解锁]
Keystore 路径: keystore.json
密码: ************
选择网络:
1. Devnet
2. Mainnet-beta
请选择 [1/2]: 1
摘要:
正在创建 nonce 账户...
租金: 约 0.00144288 SOL
权限: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
网络: Devnet
确认?(y/n): y
🚀 创建 nonce 账户中...
✅ Nonce 账户创建成功!
账户: 8yG3wE5dK2mH9L...
交易签名: 6N9Z4qO7FyJ1M3...
用途: 一键在 PumpSwap DEX 上卖出代币,支持单个或批量卖出
使用场景: 快速退出 meme 币或在 PumpSwap 上的交易仓位,支持一次性卖出多个代币
前置条件:
- 钱包中有代币余额(标准或 Seed 优化的 ATA)
- 足够的 SOL 用于交易手续费
- 代币必须在 PumpSwap DEX 上架
特性:
- 自动卖出所有代币(无需输入数量)
- 默认 99% 滑点,快速成交
- 支持标准和 Seed 优化的关联代币账户(默认启用 Seed 优化)
- 批量卖出: 支持一次输入多个 Mint 地址,用逗号或空格分割
- 智能确认: 批量卖出时只需确认一次,单个卖出时逐个确认
- 双语界面(中文/英文)
- 支持 Token-2022 程序
步骤:
- 从主菜单选择选项
12或15(取决于 2FA 设置) - 如果钱包未解锁,提供 keystore 和密码
- 输入 RPC URL(例如
https://api.mainnet-beta.solana.com) - 选择 Seed 优化(默认 yes,直接回车即可):
- 回车或
y: 使用 Seed 优化的 ATA(更低手续费,推荐) n: 使用标准 ATA
- 回车或
- 输入代币 mint 地址(支持多个,用逗号或空格分割)
- 批量卖出时统一确认一次,单个卖出时逐个确认
- 查看交易签名
单个代币卖出示例:
🔥 PumpSwap 卖出代币
[如果未解锁]
Keystore 路径: keystore.json
密码: ************
输入 RPC URL: https://api.mainnet-beta.solana.com
❓ 启用 Seed 优化? (yes/no, 默认 yes): [直接回车]
✅ 已启用 Seed 优化
代币 Mint 地址: TokenMintAddressHere...
📋 找到 1 个代币待卖出:
1. TokenMintAddressHere...
📊 滑点容忍度: 99%
💰 正在检查代币余额...
✅ 代币余额: 1,000,000 tokens (6 位小数)
❓ 确认全部卖出? (yes/no, 默认 yes): [直接回车]
📊 正在获取 PumpSwap 池子参数...
✅ 找到池子!
🚀 发送交易中...
✅ 卖出成功!
交易签名: 5J7W8vN2BxC9K4...
批量卖出示例:
🔥 PumpSwap 卖出代币
输入 RPC URL: https://api.mainnet-beta.solana.com
❓ 启用 Seed 优化? (yes/no, 默认 yes): [直接回车]
✅ 已启用 Seed 优化
💡 可以输入多个 Mint 地址,用逗号或空格分割
将按输入顺序依次卖出
代币 Mint 地址: Token1Address..., Token2Address..., Token3Address...
📋 找到 3 个代币待卖出:
1. Token1Address...
2. Token2Address...
3. Token3Address...
📊 滑点容忍度: 99%
⚠️ 您即将卖出 3 个代币
所有代币将自动卖出,不会逐个确认
❓ 确认批量卖出? (yes/no, 默认 yes): [直接回车]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 处理第 1/3 个代币
Mint: Token1Address...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 代币余额: 500,000 tokens
✅ 卖出成功!
⏳ 等待 2 秒后处理下一个交易...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 处理第 2/3 个代币
Mint: Token2Address...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 代币余额: 1,000,000 tokens
✅ 卖出成功!
⏳ 等待 2 秒后处理下一个交易...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 处理第 3/3 个代币
Mint: Token3Address...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 代币余额: 250,000 tokens
✅ 卖出成功!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎉 所有交易已完成!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
高级选项:
Seed 优化的 ATA:
- 更低的交易手续费
- 推荐给所有用户(默认启用)
- 自动检测标准和 Seed 优化的 ATA
批量卖出:
- 支持一次输入多个 Mint 地址
- 用逗号(,)或空格分割地址
- 按输入顺序依次卖出
- 批量卖出时只需确认一次
- 每个代币之间自动间隔 2 秒
- 单个代币失败不影响后续代币
滑点:
- 默认: 99% (9900 基点)
- 确保即使在波动市场中也能快速成交
- 通过接受 99% 范围内的任何价格来防止 MEV 三明治攻击
Token-2022 支持:
- 自动检测 Token-2022 程序代币
- 无需手动配置
- 适用于标准 SPL 代币和 Token-2022 代币
重要提示:
- 此操作一次性卖出所有代币
- 交易可能使用多个签名用于 SWQOS(Solana 写入队列优化系统)
- 确认前务必验证代币 mint 地址
- 先在 devnet 上用小额测试
- 大额卖出前检查池子流动性
在 Pump.fun 内盘(bonding curve)上卖出代币换原生 SOL。适用于代币仍在 Pump.fun、尚未迁移到 Raydium 的情况;已迁移代币请使用 PumpSwap 卖出(第 11 节)。
用途:在 bonding curve 上一键卖出 Pump.fun 代币,直接获得 SOL。
前置条件:
- 已解锁钱包,且代币在 ATA 中
- 代币须为 Pump.fun bonding curve 代币(mint 属于 Pump.fun 程序)
- 有足够 SOL 支付交易费
功能:
- 一次性卖出全部代币余额
- 可选 seed 优化 ATA(与 PumpSwap 相同,降低手续费)
- 支持 Token-2022(自动检测)
- 中英双语提示
步骤:
- 运行
sol-safekey(或./你的bot safekey)并解锁钱包。 - 选择 13(Pump.fun 卖出)或 16(Pump.fun 卖出,无 2FA 确认)。
- 按提示输入 RPC URL(或使用默认)。
- 按提示选择是否使用 seed 优化 ATA。
- 输入代币 mint 地址(Pump.fun 代币)。
- 确认数量并签名,交易发送后输出签名。
示例(命令行):
./你的bot safekey pumpfun-sell --mint <MINT地址>重要提示:
- 仅适用于仍在 Pump.fun bonding curve 上的代币;已迁移代币请用 PumpSwap 卖出。
- 确认前务必核对 mint 地址。
- 尽可能先在 devnet 上小额测试。
-
强密码:
- 最少 16 个字符
- 混合大小写字母、数字、符号
- 使用密码管理器
- 永不重复使用密码
-
备份策略:
- 在多个安全位置保存加密的 keystore
- 密码与 keystore 分开存储
- 对于大额资产考虑使用硬件钱包
- 在 devnet 上测试恢复流程
-
网络安全:
- 始终先在 devnet 上测试
- 仔细检查接收地址
- 从小额开始
- 在浏览器上验证交易签名
- 每个会话解锁钱包一次以方便使用
- 无需重复输入密码,操作更快
- 钱包仅为当前进程解锁
- 退出并重启以重新锁定
- 在 devnet 上创建测试钱包
- 获取 devnet SOL:
solana airdrop 2 <地址> --url devnet - 在 devnet 上测试所有操作
- 在 devnet 浏览器上验证: https://explorer.solana.com/?cluster=devnet
- 彻底测试后才使用 mainnet
- SOL 转账: 约 0.000005 SOL
- 代币转账: 约 0.00001 SOL
- 包装/解包: 约 0.00001 SOL
- 创建 nonce: 约 0.00144288 SOL(免租金)
日常交易 Bot:
- 使用
./bot safekey启动 bot - 选择
U解锁钱包 - 输入密码一次
- 退出菜单让 bot 运行
- Bot 可以签署交易而无需密码
一次性转账:
- 启动 safekey
- 选择转账操作
- 提示时输入 keystore 路径和密码
- 完成交易
- 退出
投资组合管理:
- 解锁钱包(
U) - 查询余额(
4) - 根据需要执行多个操作
- 无需重新输入密码
原因: 密码错误或文件损坏 解决方案: 验证密码,尝试备份的 keystore 文件
原因: 网络问题或 RPC 节点宕机 解决方案: 检查网络,尝试不同网络,使用不同 RPC 端点
原因: SOL 不足以支付交易 + 手续费 解决方案:
- 检查余额
- 获取 devnet SOL:
solana airdrop 2 <地址> --url devnet - 对于 mainnet: 向账户转入 SOL
原因: 网络拥堵、无效交易或账户问题 解决方案:
- 等待后重试
- 检查接收地址是否有效
- 确保账户有 SPL 转账所需的代币账户
- 验证余额足够支付金额 + 手续费
原因: 地址从未收到过 SOL(未初始化) 解决方案: 先发送少量 SOL 以初始化
原因: 终端不支持 UTF-8 或表情符号 解决方案: 使用现代终端模拟器(iTerm2、Windows Terminal 等)
你可以通过 stdin 自动输入密码用于 bot 部署:
# 创建启动脚本
echo "你的密码" | ./你的bot安全提示: 仅在安全环境中使用。永不硬编码密码。
为不同目的创建单独的 keystore:
# 交易钱包
./bot safekey
# 创建加密 → keystore-trading.json
# 持有钱包
./bot safekey
# 创建加密 → keystore-holding.json
# 使用特定钱包
./bot safekey
# 解锁 → keystore-trading.json解锁钱包一次后,执行多个操作而无需重新输入密码:
- 解锁钱包(
U) - 查询余额(
4) - 转账 SOL(
5) - 包装 SOL(
6) - 转账代币(
8) - 所有操作都无需密码提示
- 文档: 查看 Bot 集成指南
- 示例: 查看
examples/bot_example.rs - 浏览器: 在 https://explorer.solana.com 验证交易
- Solana 文档: https://docs.solana.com
记住:
- 始终先在 devnet 上测试
- 保持 keystore 和密码安全
- 在使用 mainnet 前备份所有内容
- 从小额开始
- 仔细验证所有地址