sol-safekey 0.1.7

A powerful command-line tool for secure Solana key management with Triple-Factor 2FA
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
# 使用手册

Sol-safekey 交互命令和操作的完整使用指南。

[English Documentation](USER_GUIDE.md)

## 开始使用

Sol-SafeKey 提供交互式命令行界面,用于安全的 Solana 钱包管理和操作。本指南涵盖所有可用功能和操作。

### 前置要求

- 已安装 Solana CLI 工具(用于空投和验证)
- 可访问 Solana devnet 或 mainnet RPC 端点
- 支持 UTF-8 的终端以正确显示符号

### 访问交互式菜单

如果你使用的 bot 集成了 sol-safekey:

```bash
./你的bot safekey
```

或者使用独立二进制文件:

```bash
./build-cache/release/examples/bot_example safekey
```

#### 直接安装(独立使用)

对于不使用 bot 的独立使用,直接安装 sol-safekey:

```bash
# 从 crates.io 安装(推荐使用最新版本)
cargo install sol-safekey --features="full"

# 验证安装
sol-safekey --version

# 启动交互式菜单
sol-safekey start
```

这种方式提供通过交互式菜单直接访问所有 sol-safekey 功能。

## 主菜单

启动后,你会看到语言选择:

```
==================================================
  Language / 语言选择
==================================================

  1.  English
  2.  中文

Select / 选择 [1/2]:
```

选择语言后,主菜单显示所有可用操作。

### 📋 完整菜单索引(Word 风格)

所有 18 个交互式菜单操作的快速概览,按类别组织。点击任一操作可跳转到详细指南:

#### 🔑 核心功能(选项 1-3)

- **[1. 创建明文私钥]INTERACTIVE_TUTORIAL_CN.md#1-创建明文私钥(选项-1)** - 生成未加密的 Solana 密钥对(仅用于测试)
- **[2. 创建加密私钥]INTERACTIVE_TUTORIAL_CN.md#2-创建加密私钥bot(选项-2))** - 加密现有私钥并保存到 keystore
- **[3. 解密私钥]INTERACTIVE_TUTORIAL_CN.md#3-解密私钥(选项-3)** - 解密 keystore 并显示私钥

#### 🔒 钱包管理(选项 U)

- **[U. 解锁钱包]INTERACTIVE_TUTORIAL_CN.md#u-解锁钱包** - 解锁钱包以进行 Solana 操作

#### 🛡️ 高级安全功能(选项 4-6)

- **[4. 设置 2FA 认证]INTERACTIVE_TUTORIAL_CN.md#4-设置-2fa-认证** - 配置双因素认证
- **[5. 生成三因子钱包]INTERACTIVE_TUTORIAL_CN.md#5-生成三因子钱包** - 创建 3FA 钱包(硬件 + 密码 + 安全问题 + 2FA)
- **[6. 解锁三因子钱包]INTERACTIVE_TUTORIAL_CN.md#6-解锁三因子钱包** - 解密 3FA 加密钱包

#### 💰 Solana 链上操作(选项 7-18)

##### 余额与转账
- **[7. 查询 SOL 余额]INTERACTIVE_TUTORIAL_CN.md#7-查询-sol-余额** - 查询钱包 SOL 余额
- **[8. 转账 SOL]INTERACTIVE_TUTORIAL_CN.md#8-转账-sol** - 向其他地址发送 SOL

##### WSOL 操作
- **[9. 创建 WSOL ATA]INTERACTIVE_TUTORIAL_CN.md#9-创建-wsol-ata** - 创建包装 SOL 关联代币账户
- **[10. 包装 SOL → WSOL]INTERACTIVE_TUTORIAL_CN.md#10-包装-sol--wsol** - 将 SOL 转换为包装 SOL
- **[11. 解包 WSOL → SOL]INTERACTIVE_TUTORIAL_CN.md#11-解包-wsol--sol** - 将包装 SOL 转换回 SOL
- **[12. 关闭 WSOL ATA]INTERACTIVE_TUTORIAL_CN.md#12-关闭-wsol-ata** - 关闭 WSOL ATA 并将剩余 WSOL 转换为 SOL

##### 代币操作
- **[13. 转账 SPL 代币]INTERACTIVE_TUTORIAL_CN.md#13-转账-spl-代币** - 向其他地址发送 SPL 代币

##### 交易工具
- **[14. 创建 Nonce 账户]INTERACTIVE_TUTORIAL_CN.md#14-创建-nonce-账户** - 创建持久化 nonce 以防止交易重放

##### DEX 操作
- **[15. Pump.fun 卖出代币]INTERACTIVE_TUTORIAL_CN.md#15-pumpfun-卖出代币** - 在 Pump.fun DEX 上卖出代币(内盘)
- **[16. PumpSwap 卖出代币]INTERACTIVE_TUTORIAL_CN.md#16-pumpswap-卖出代币** - 在 PumpSwap DEX 上卖出代币

##### 返现操作
- **[17. Pump.fun 返现]INTERACTIVE_TUTORIAL_CN.md#17-pumpfun-返现-查看与领取** - 查看并领取 pump.fun 返现(原生 SOL)
- **[18. PumpSwap 返现]INTERACTIVE_TUTORIAL_CN.md#18-pumpswap-返现-查看与领取** - 查看并领取 PumpSwap 返现(WSOL)

#### 🎯 快速访问常用任务

- **[解锁钱包]INTERACTIVE_TUTORIAL_CN.md#u-解锁钱包** - 解锁钱包并开始使用
- **[查询余额]INTERACTIVE_TUTORIAL_CN.md#7-查询-sol-余额** - 快速查询 SOL 余额
- **[创建 Nonce]INTERACTIVE_TUTORIAL_CN.md#14-创建-nonce-账户** - 创建持久化 nonce 用于交易机器人
- **[DEX 操作]INTERACTIVE_TUTORIAL_CN.md#15-pumpfun-卖出代币** - 访问 Pump.fun 和 PumpSwap 卖出功能

---

## 钱包操作

### 1. 创建明文密钥对

**用途**: 生成未加密的密钥对(仅用于测试)

**警告**: 不建议在生产环境使用。密钥以明文存储。

**步骤**:
1. 从主菜单选择选项 `1`
2. 选择生成方式:
   - 选项 1: 生成新的随机密钥对
   - 选项 2: 导入现有私钥
3. 选择输出格式:
   - 选项 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
```

### 2. 创建加密密钥对(推荐)

**用途**: 生成或导入带 AES-256 加密的密钥对

**安全性**: 军事级加密配合 PBKDF2 密钥派生

**步骤**:
1. 从主菜单选择选项 `2`
2. 选择生成方式:
   - 选项 1: 生成新密钥对并加密
   - 选项 2: 导入现有私钥并加密
3. 设置加密密码(最少 10 个字符)
4. 确认密码
5. 选择输出格式:
   - 选项 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. 从主菜单选择选项 `3`
2. 选择来源:
   - 选项 1: 从 Keystore 文件加载
   - 选项 2: 粘贴加密字符串
3. 输入解密密码
4. 选择输出格式:
   - 选项 1: 仅显示
   - 选项 2: 保存为明文 JSON

**示例**:
```
🔓 解密加密的密钥对

来源:
  1. Keystore 文件
  2. 加密字符串

请选择 [1/2]: 1

Keystore 文件路径: keystore.json

🔑 输入解密密码: ************

✅ 解密成功!
📍 公钥: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp

输出:
  1. 仅显示
  2. 保存为明文 JSON

请选择 [1/2]: 1

私钥(base58): 5JW8...
```

### 4. 解锁钱包(会话)

**用途**: 为当前会话解锁加密钱包

**优势**: 解锁一次,可用于同一会话中的所有后续操作

**步骤**:
1. 从主菜单选择选项 `U``u`
2. 输入 keystore 文件路径
3. 输入密码
4. 钱包在会话期间保持解锁状态

**示例**:
```
🔓 解锁钱包

Keystore 文件路径 [keystore.json]: keystore.json

🔑 输入钱包密码: ************

✅ 钱包解锁成功!
📍 地址: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp

现在可以使用所有 Solana 操作而无需重新输入密码。
```

## Solana 操作

所有 Solana 操作需要:
- 已解锁的钱包(选项 `U`),或者
- 每次操作时会提示输入 keystore 路径和密码

### 5. 查询 SOL 余额

**用途**: 查询地址的 SOL 余额

**步骤**:
1. 从主菜单选择选项 `4`
2. 选择地址来源:
   - 选项 1: 当前解锁的钱包
   - 选项 2: 手动输入任何地址
3. 选择网络:
   - 选项 1: Devnet
   - 选项 2: Mainnet-beta
4. 查看余额

**示例**:
```
💰 查询 SOL 余额

地址来源:
  1. 当前钱包
  2. 手动输入地址

请选择 [1/2]: 1

选择网络:
  1. Devnet
  2. Mainnet-beta

请选择 [1/2]: 1

💰 正在查询余额...
地址: E7Rmd6piasPNs9jqRBUfS8nvNqDx6j5qPDE6Le7us5bp
余额: 2.5 SOL
```

### 6. 转账 SOL

**用途**: 向另一个地址发送 SOL

**前置条件**: 足够的 SOL 用于金额 + 手续费(约 0.000005 SOL)

**步骤**:
1. 从主菜单选择选项 `5`
2. 如果钱包未解锁,提供 keystore 和密码
3. 输入接收地址
4. 输入 SOL 金额
5. 选择网络
6. 确认交易
7. 查看交易签名

**示例**:
```
💸 转账 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... (在浏览器中查看)
```

### 7. 包装 SOL → WSOL

**用途**: 将原生 SOL 转换为包装的 SOL(SPL 代币)

**使用场景**: 某些 DeFi 协议和 DEX 交易需要

**步骤**:
1. 从主菜单选择选项 `6`
2. 如果钱包未解锁,提供 keystore 和密码
3. 输入要包装的金额
4. 选择网络
5. 确认交易
6. 查看交易签名

**示例**:
```
📦 包装 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...
```

### 8. 解包 WSOL → SOL

**用途**: 将包装的 SOL 转换回原生 SOL

**步骤**:
1. 从主菜单选择选项 `7`
2. 如果钱包未解锁,提供 keystore 和密码
3. 输入要解包的金额
4. 选择网络
5. 确认交易
6. 查看交易签名

**示例**:
```
📤 解包 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...
```

### 9. 转账 SPL 代币

**用途**: 向另一个地址发送任何 SPL 代币

**前置条件**: 足够的 SOL 用于交易手续费 + 代币余额

**步骤**:
1. 从主菜单选择选项 `8`
2. 如果钱包未解锁,提供 keystore 和密码
3. 输入代币 mint 地址
4. 输入接收地址
5. 输入金额(以代币的小数单位)
6. 选择网络
7. 确认交易
8. 查看交易签名

**示例**:
```
🪙 转账 SPL 代币

[如果未解锁]
Keystore 路径: keystore.json
密码: ************

代币 mint 地址: So11111111111111111111111111111111111111112
接收地址: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
金额: 100

选择网络:
  1. Devnet
  2. Mainnet-beta

请选择 [1/2]: 1

摘要:
  代币: So11111111111111111111111111111111111111112
  到: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
  金额: 100
  网络: Devnet

确认?(y/n): y

🚀 发送代币中...
✅ 转账成功!
交易签名: 4L7X3pN6EzH0K8...
```

### 10. 创建 Durable Nonce 账户

**用途**: 创建用于离线交易签名的 nonce 账户

**使用场景**: 高级交易模式和离线签名所需

**前置条件**: 约 0.00144288 SOL 用于免租金 nonce 账户

**步骤**:
1. 从主菜单选择选项 `9`
2. 如果钱包未解锁,提供 keystore 和密码
3. 选择网络
4. 确认交易
5. 查看 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...
```

### 11. PumpSwap 卖出(支持 Token-2022 和批量卖出)

**用途**: 一键在 PumpSwap DEX 上卖出代币,支持单个或批量卖出

**使用场景**: 快速退出 meme 币或在 PumpSwap 上的交易仓位,支持一次性卖出多个代币

**前置条件**:
- 钱包中有代币余额(标准或 Seed 优化的 ATA)
- 足够的 SOL 用于交易手续费
- 代币必须在 PumpSwap DEX 上架

**特性**:
- 自动卖出所有代币(无需输入数量)
- 默认 99% 滑点,快速成交
- 支持标准和 Seed 优化的关联代币账户(默认启用 Seed 优化)
- **批量卖出**: 支持一次输入多个 Mint 地址,用逗号或空格分割
- **智能确认**: 批量卖出时只需确认一次,单个卖出时逐个确认
- 双语界面(中文/英文)
- 支持 Token-2022 程序

**步骤**:
1. 从主菜单选择选项 `12``15`(取决于 2FA 设置)
2. 如果钱包未解锁,提供 keystore 和密码
3. 输入 RPC URL(例如 `https://api.mainnet-beta.solana.com`4. 选择 Seed 优化(默认 yes,直接回车即可):
   - 回车或 `y`: 使用 Seed 优化的 ATA(更低手续费,推荐)
   - `n`: 使用标准 ATA
5. 输入代币 mint 地址(支持多个,用逗号或空格分割)
6. 批量卖出时统一确认一次,单个卖出时逐个确认
7. 查看交易签名

**单个代币卖出示例**:
```
🔥 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 上用小额测试
- 大额卖出前检查池子流动性

### 12. Pump.fun 卖出

在 **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(自动检测)
- 中英双语提示

**步骤**:
1. 运行 `sol-safekey`(或 `./你的bot safekey`)并解锁钱包。
2. 选择 **13**(Pump.fun 卖出)或 **16**(Pump.fun 卖出,无 2FA 确认)。
3. 按提示输入 RPC URL(或使用默认)。
4. 按提示选择是否使用 seed 优化 ATA。
5. 输入代币 **mint 地址**(Pump.fun 代币)。
6. 确认数量并签名,交易发送后输出签名。

**示例(命令行)**:
```bash
./你的bot safekey pumpfun-sell --mint <MINT地址>
```

**重要提示**:
- 仅适用于仍在 Pump.fun bonding curve 上的代币;已迁移代币请用 PumpSwap 卖出。
- 确认前务必核对 mint 地址。
- 尽可能先在 devnet 上小额测试。

## 提示和最佳实践

### 钱包安全

1. **强密码**:
   - 最少 16 个字符
   - 混合大小写字母、数字、符号
   - 使用密码管理器
   - 永不重复使用密码

2. **备份策略**:
   - 在多个安全位置保存加密的 keystore
   - 密码与 keystore 分开存储
   - 对于大额资产考虑使用硬件钱包
   - 在 devnet 上测试恢复流程

3. **网络安全**:
   - 始终先在 devnet 上测试
   - 仔细检查接收地址
   - 从小额开始
   - 在浏览器上验证交易签名

### 会话管理

1. 每个会话**解锁钱包一次**以方便使用
2. 无需重复输入密码,操作更快
3. 钱包仅为当前进程解锁
4. 退出并重启以重新锁定

### 测试工作流

1. 在 devnet 上创建测试钱包
2. 获取 devnet SOL: `solana airdrop 2 <地址> --url devnet`
3. 在 devnet 上测试所有操作
4. 在 devnet 浏览器上验证: https://explorer.solana.com/?cluster=devnet
5. 彻底测试后才使用 mainnet

### 交易手续费

- SOL 转账: 约 0.000005 SOL
- 代币转账: 约 0.00001 SOL
- 包装/解包: 约 0.00001 SOL
- 创建 nonce: 约 0.00144288 SOL(免租金)

### 常见工作流程

**日常交易 Bot**:
1. 使用 `./bot safekey` 启动 bot
2. 选择 `U` 解锁钱包
3. 输入密码一次
4. 退出菜单让 bot 运行
5. Bot 可以签署交易而无需密码

**一次性转账**:
1. 启动 safekey
2. 选择转账操作
3. 提示时输入 keystore 路径和密码
4. 完成交易
5. 退出

**投资组合管理**:
1. 解锁钱包(`U`2. 查询余额(`4`3. 根据需要执行多个操作
4. 无需重新输入密码

## 故障排除

### "解密 keystore 失败"
**原因**: 密码错误或文件损坏
**解决方案**: 验证密码,尝试备份的 keystore 文件

### "连接被拒绝" / "RPC 错误"
**原因**: 网络问题或 RPC 节点宕机
**解决方案**: 检查网络,尝试不同网络,使用不同 RPC 端点

### "余额不足"
**原因**: SOL 不足以支付交易 + 手续费
**解决方案**:
- 检查余额
- 获取 devnet SOL: `solana airdrop 2 <地址> --url devnet`
- 对于 mainnet: 向账户转入 SOL

### "交易失败"
**原因**: 网络拥堵、无效交易或账户问题
**解决方案**:
- 等待后重试
- 检查接收地址是否有效
- 确保账户有 SPL 转账所需的代币账户
- 验证余额足够支付金额 + 手续费

### "未找到账户"
**原因**: 地址从未收到过 SOL(未初始化)
**解决方案**: 先发送少量 SOL 以初始化

### 终端显示问题
**原因**: 终端不支持 UTF-8 或表情符号
**解决方案**: 使用现代终端模拟器(iTerm2、Windows Terminal 等)

## 高级用法

### 通过 Stdin 脚本化

你可以通过 stdin 自动输入密码用于 bot 部署:

```bash
# 创建启动脚本
echo "你的密码" | ./你的bot
```

**安全提示**: 仅在安全环境中使用。永不硬编码密码。

### 多个钱包

为不同目的创建单独的 keystore:

```bash
# 交易钱包
./bot safekey
# 创建加密 → keystore-trading.json

# 持有钱包
./bot safekey
# 创建加密 → keystore-holding.json

# 使用特定钱包
./bot safekey
# 解锁 → keystore-trading.json
```

### 批量操作

解锁钱包一次后,执行多个操作而无需重新输入密码:

1. 解锁钱包(`U`2. 查询余额(`4`3. 转账 SOL(`5`4. 包装 SOL(`6`5. 转账代币(`8`6. 所有操作都无需密码提示

## 获取帮助

- **文档**: 查看 [Bot 集成指南]BOT_INTEGRATION_CN.md
- **示例**: 查看 `examples/bot_example.rs`
- **浏览器**: 在 https://explorer.solana.com 验证交易
- **Solana 文档**: https://docs.solana.com

---

**记住**:
- 始终先在 devnet 上测试
- 保持 keystore 和密码安全
- 在使用 mainnet 前备份所有内容
- 从小额开始
- 仔细验证所有地址