比特币核心 v31.0 的发行说明里有一条容易划过去的 GUI 修正:调试控制台里的 createwallet、createwalletdescriptor 和 migratewallet 三条命令,会被从历史记录中过滤掉,不再出现在上下键翻出来的历史里。这条改动本身只是”少存了几行历史”,但它指向一个真实的泄密面:控制台历史。这篇把它保护的到底是什么、历史存在哪里、还剩哪些没被覆盖的风险讲清楚。
先说控制台历史怎么工作。bitcoin-qt 的控制台标签页接受任何 RPC 命令行文本,为了便利,它会把输入过的命令随程序的本地设置一起持久化,下次启动原样加载,按上下方向键翻查。这份持久化的载体是明文,没有加密,也不受钱包口令保护,具体落在哪个文件跟随操作系统的配置存储习惯(Linux、macOS、Windows 各不相同)。它的设计目的就是”让重复敲长命令的人少打字”,副作用是:任何能读你本地配置的人——共享电脑、同步脚本、被入侵的账户——翻一遍这些配置,就能看到你过去手动执行过的 RPC 操作记录。
为什么单独挑这三条命令过滤?因为它们都透露钱包的存在与身份。createwallet 的参数里有钱包名——有人习惯用真名、邮箱或项目名命名钱包;createwalletdescriptor 的参数里直接是描述符,里面有扩展公钥,拿到它的人虽然不能花钱,但可以完整监控这个钱包所有地址的收支;migratewallet 同样以钱包名为参数,暴露”这台机器上有某个钱包、而且刚做过迁移”。相比之下,普通命令如 getblockcount 毫无敏感性,保留历史仍有便利。GUI 侧的这版修改(贡献记录为 gui#901)思路就是:命令一旦输入,不写入历史文件,会话内翻历史时也把它过滤掉。
理解这条修正的边界同样重要。第一,它只过滤这三条命令本身,你在控制台里输入的其它含敏感内容的命令不在保护范围——比如直接敲 dumpprivkey、importdescriptors,或者在 sendtoaddress 后面带上完整地址,这些仍会进历史。第二,过滤发生在 GUI 控制台层:如果你用 bitcoin-cli 或 curl 调同样的 RPC,本来就没有”历史”这个概念,但你的 shell 历史(bash/zsh 的历史文件)会以另一种形式记下同样的命令,那不是比特币核心管的范围。第三,v31 之前的历史里如果已经躺着这些命令,升级本身不会追删旧记录——需要自己检查并清理控制台的持久化历史条目(GUI 设置里可以整体关闭保留历史)。第四,这条改动在 v31.0 的发行说明里明确写着归 GUI 仓库条目(gui#901),针对的就是 bitcoin-qt 用户;纯 bitcoind 无头部署不存在这条路径。
由此可以归纳一份更完整的控制台卫生清单。其一,做数据目录备份或同步时把 GUI 的配置与历史一并列入敏感清单——很多用户备份整个比特币数据目录时不知不觉把命令历史也上传了网盘。其二,在共享或远程桌面机器上用 GUI 控制台做一次排障之后,养成退出前清一次的习惯:在设置里关闭保留历史选项,或直接删除对应的历史持久化文件。其三,真正高敏感的操作(导入描述符、迁移钱包)优先考虑在命令行完成并用后立即清理 shell 历史,或者在一次性会话环境里完成,别指望任何单一工具的默认行为兜底。
最后给版本事实画清楚边界:本次过滤规则以 Bitcoin Core v31.0 发行说明为准,早期版本(v30 及更早)的 GUI 会记录包括这三条在内的所有命令;历史文件路径与格式以你本机数据目录实际存在为准,不同操作系统位置不同。这不是一项共识或协议变化,只是图形界面软件的一层本地行为。
风险提示:命令历史、钱包文件与备份副本都可能成为信息泄露渠道,本文只讨论防御性习惯,不构成投资建议;任何清理操作前先确认不需要保留的记录已妥善归档。

发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。