tor 网络名退役之后:onlynet=tor 失效、torcontrol 健在与 v31 的私有广播 图 1
tor 网络名退役之后:onlynet=tor 失效、torcontrol 健在与 v31 的私有广播 · 图 1

比特币核心 v31.0 的发布说明里有一条容易被划过去的话:tor 作为网络名称被移除了,它在 v0.17.0 就被 onion 取代(#34031)。于是有人以为”v31 删了 Tor 支持”——恰恰相反,被删的只是一个同义词,Tor 的功能链路完整健在,甚至 v31 还新增了一个完全依赖 Tor 和 I2P 的隐私特性。本文把”网络名”和”Tor 功能”这两层按源码拆开。

网络名字符串表只剩四个

v31 的 src/netbase.cpp 里,网络名解析函数只认 ipv4ipv6onioni2p 四个字符串,tor 已经不在表里。写在 -onlynet=tor 里会触发启动期错误:初始化代码对每个 onlynet 值调用解析,解析失败直接以”未知的 onlynet 网络”终止启动。-bind 参数的语法是用 =onion 后缀把某个监听地址标记为 Tor 入站连接,getpeerinfo 输出的 network 字段同样取 onion。也就是说被删掉的是”把洋葱网络叫 tor”这件事,洋葱地址类型、入站标记、地址管理全部原样。

tor 网络名退役之后:onlynet=tor 失效、torcontrol 健在与 v31 的私有广播 图 2
tor 网络名退役之后:onlynet=tor 失效、torcontrol 健在与 v31 的私有广播 · 图 2

torcontrol 自动隐藏服务链路健在

src/torcontrol.cpp 在 v31 源码树里正常工作。机制是:节点连接本机 Tor 的控制端口(默认 127.0.0.1 的 9051,可用 -torcontrol 改),完成认证后发 ADD_ONION 命令注册隐藏服务,把本节点监听端口映射进去,全程私钥不出本地、不需要手改 Tor 配置。认证有两条路:-torpassword 提供控制口令,或者走 Tor 的 SAFECOOKIE cookie 认证——源码里 32 字节 cookie 和 SAFECOOKIE 的握手实现都在。日志里看到 TOR 分类下的 ADD_ONION successful 就是链路走通的标志。

升级自查三处

第一处,配置与启动命令里 onlynet=torbind=...=torwhitebind=...@tor 的写法机械替换成 onion;改完启动一次,看有没有网络名解析报错。第二处,脚本里按名字过滤 getnetworkinfonetworks 数组的兼容分支可以删了,洋葱相关的那项从来就只叫 onion。第三处,-onlynet=onion 的节点若没配 onion 代理,初始化会直接报错提示无法经路由网络出连——升级动到代理配置时重点核对这一条。

v31 的 Tor 增量:私有广播

v31 发布说明新增 -privatebroadcast(默认关):开启后 sendrawtransaction 广播的交易改走 Tor 与 I2P 网络,说明原文写了两点改进——接收方永远不知道发送者的 IP 及其地理线索;两笔本不相关的交易各用独立连接广播,无法被链上关联。源码配套有私有连接数量上限与每笔交易的私有广播条数常量,并新增 getprivatebroadcastinfoabortprivatebroadcast 两个 RPC 观测在途私有广播。这个特性只在 onion 与 i2p 计数内挑连接,依赖的正是 onion 这一层网络标识。换句话说,v31 不仅没删 Tor 支持,还在这条网络上加了新东西。

再补一层细节:-bind 的帮助文本显示各网络默认就会在 127.0.0.1 的默认端口加一上挂 =onion 标记;getnetworkinfonetworks 数组里洋葱项的名字从来只有 onion,历史上按 tor 过滤的兼容代码可以清理。

为什么网络名这层重要

网络名不是展示用字符串:地址管理器(addrman)按网络分表管理候选对端,getpeerinfogetnetworkinfo 按网络上报,onlynet 在初始化阶段逐值解析——v31 的解析表只剩 ipv4、ipv6、onion、i2p,tor 落入未知值直接终止启动并给出明确报错。也就是说升级后所有以网络名为键的自动化脚本、监控面板与防火墙策略都要统一按 onion 对表。反过来,Tor 功能侧的参数一字未动:-torcontrol 默认值仍是 127.0.0.1 的 9051 控制口,帮助文本写明只在开启洋葱监听时生效;-torpassword 留空时尝试 Tor 的 cookie 文件认证,SAFECOOKIE 握手逻辑完整在源码里。配置里只写 onlynet=onion 却没配洋葱代理时,初始化会报”出连被限制在 onion 但缺少代理”,排错时优先核对代理参数而不是网络名。

边界

onlynet 与 bind 的 onion 标记只决定流量走哪张网,不提供交易级匿名:普通对端广播路径上的传播特征不会因为监听了一个洋葱地址就消失;-torpassword 出现在配置与进程参数面上,属于要按敏感信息管理的凭据。以上以 Bitcoin Core v31.0 源码与发布说明为准,不构成投资建议。