关于 nansen-wallet-migration
nansen-wallet-migration 是一项指导 nansen-cli 用户将旧钱包密码存储方式迁移到系统密钥链的技能。它涵盖多种密码存储状态,并要求迁移后验证密码能否解密钱包。
主要功能
- 01检查钱包及密码存储状态
- 02按密码来源选择迁移步骤
- 03验证密钥链密码能否解密钱包
- 04提供忘记密码与新建钱包指引
适用场景
- 01迁移 ~/.nansen/.env 中的密码
- 02处理 .credentials 警告并验证迁移
- 03密码遗失时了解后续处理方式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ nansen-ai/ nansen-cli --skill nansen-wallet-migration安装后在 Claude Code 中输入/nansen-wallet-migration确认已加载。
详细介绍
钱包迁移 — 从旧流程迁移到安全密钥链
当用户已经设置了 nansen-cli 钱包,使用的是旧的密码存储方式,并希望迁移到新的安全流程时,请使用此技能。
适用场景
- 用户提到曾将密码存储在
~/.nansen/.env、.env文件或memory.md中 - 用户看到 stderr 警告:
⚠ Password loaded from insecure .credentials file - 用户要求“保护我的钱包”或“迁移到密钥链”
- 用户在密钥链更新发布之前创建了钱包
检测当前状态
wallet show 只会显示地址,不会加载或检查密码。
要检测密码的实际情况,请检查已存储的密码来源:
# 1. Check if a wallet exists at all
nansen wallet list 2>&1
# 2. Check for insecure password stores
ls -la ~/.nansen/.env 2>/dev/null && echo "FOUND: ~/.nansen/.env (insecure)"
ls -la ~/.nansen/wallets/.credentials 2>/dev/null && echo "FOUND: .credentials file (insecure)"
# 3. Try an operation that requires the password (without setting env var)
nansen wallet export default 2>&1
解读 export 输出:
- stderr 中出现
⚠ Password loaded from ~/.nansen/wallets/.credentials→ 需要迁移(路径 B) - 导出成功且没有输出 → 密码已存储在密钥链中,无需迁移
- 出现
PASSWORD_REQUIREDJSON 错误 → 密码未持久化到任何位置(路径 C 或 D)
迁移路径
路径 A:密码位于 ~/.nansen/.env 中(旧版技能模式)
之前的钱包技能要求 Agent 将密码写入 ~/.nansen/.env。
步骤 1 — 向用户询问密码:
“您的钱包密码目前存储在 ~/.nansen/.env 中,这种方式不安全。 我可以将其迁移到您的操作系统密钥链。请确认您创建钱包时使用的密码, 或者,如果您授权,我可以从 ~/.nansen/.env 中读取密码。”
步骤 2 — 迁移:
source 和 nansen wallet secure 必须在同一个 shell 中运行,这样环境
变量才能传递给 node 进程:
source ~/.nansen/.env 2>/dev/null && nansen wallet secure
步骤 3 — 验证密码确实可以解密钱包:
# Unset env var to prove keychain works, then export to verify decryption
unset NANSEN_WALLET_PASSWORD
nansen wallet export default 2>&1
如果导出成功(显示私钥),则迁移成功。如果显示
Incorrect password,说明迁移的密码不正确 — 运行 nansen wallet forget-password,并使用正确的密码重试。
步骤 4 — 清理不安全的文件:
rm -f ~/.nansen/.env
路径 B:密码位于 .credentials 文件中(自动保存的备用方式)
当 wallet create 无法访问操作系统密钥链时(例如容器、CI),就会出现这种情况。
nansen wallet secure
如果密钥链仍不可用(例如没有 D-Bus 的容器化 Linux 环境),
nansen wallet secure 会说明情况并提供替代方案。
迁移后,请验证解密是否正常:
nansen wallet export default 2>&1
路径 C:密码仅存储在 NANSEN_WALLET_PASSWORD 环境变量中
# Persist the env var password to keychain
nansen wallet secure
然后在不设置环境变量的情况下验证:
unset NANSEN_WALLET_PASSWORD
nansen wallet export default 2>&1
路径 D:密码已完全丢失
密码无法恢复。钱包的私钥使用 AES-256-GCM 加密,且密码未存储在任何可恢复的位置。
告知用户:
“您的钱包密码无法恢复。如果此钱包中有资金, 这些资金可能无法访问。您可以创建新钱包,并转移任何仍可访问的资金。”
# Create a fresh wallet (human must provide a new password)
NANSEN_WALLET_PASSWORD="<new_password_from_user>" nansen wallet create --name new-wallet
迁移后验证
任何迁移完成后,都要通过确认密钥链中的密码确实可以解密钱包, 来验证密码是否已正确迁移:
# Unset env var to prove keychain works
unset NANSEN_WALLET_PASSWORD
# This MUST succeed — it proves the keychain password decrypts the wallet
nansen wallet export default 2>&1
如果导出结果显示 Incorrect password,说明保存到密钥链中的密码不正确。请通过以下方式修复:
nansen wallet forget-password
NANSEN_WALLET_PASSWORD="<correct_password>" nansen wallet secure
如果 stderr 中仍显示 .credentials 警告,说明密钥链迁移未成功 — 检查操作系统密钥链服务是否正在运行(Linux 上的 secret-tool,
macOS 上的 security)。
忘记密码(所有存储位置)
如果用户希望彻底删除已持久化的密码:
nansen wallet forget-password
这会清除操作系统密钥链和 .credentials 文件中的密码。之后的钱包操作将需要设置 NANSEN_WALLET_PASSWORD 环境变量,或重新运行
nansen wallet secure。
Agent 的关键规则
- 绝不生成密码——始终询问人类
- 绝不将密码存储在文件、内存、日志或对话历史中
- 绝不使用
--human标志——交互式提示会导致 Agent 中断 - 如果人类授权读取
~/.nansen/.env,请在同一条命令中读取 (source ~/.nansen/.env && nansen wallet secure)——不要回显或记录该值 - 迁移后始终使用
nansen wallet export default验证——wallet show不能证明密码有效(它不会加载密码)