在比特币核心 v31.0 的 NODE_RELAY 参数区里,有一个方向感很强的开关:privatebroadcast。帮助文本把行为写得很具体:Broadcast transactions submitted via sendrawtransaction RPC using short-lived connections through the Tor or I2P networks, without putting them in the mempool first,并且特意补了一句——Transactions submitted through the wallet are not affected by this option。源码常量 DEFAULT_PRIVATE_BROADCAST{false} 表示默认关闭。
拆解这段文本,它实际改变了三件事。第一,适用对象只限于你用 sendrawtransaction 手工注入的交易;钱包正常发送的交易不走这条通道,仍按常规中继路径扩散。第二,投递方式是短生命周期连接:节点不先把交易放进本地内存池,而是临时拨出一条经 Tor 或 I2P 的出向连接,把交易直接递给对端,用完即弃。源码里为这类连接单独设了并发上限(常量 64),它们也不计入 -maxconnections 的自动连接额度。第三,“先进内存池再广播”的默认顺序被跳过,意味着你自己在本地观测这笔交易的时间点会晚于它出现在网络上。
它想解决的隐私问题很具体:常规广播等于向当前所有 peers 宣告”这笔交易是我发的”,哪怕你与它们素不相识。私有广播把”宣告者”的角色拿掉——交易在网络上出现时,不再天然带着你的连接拓扑指纹。对于经营批量代发、又不希望公开节点身份的运维,这是少见的、由核心内置的隐私层。
边界比宣传重要。启动阶段节点会做两项硬检查:其一,若 Tor 与 I2P 都不可达(也没配 listenonion 之类的后备),直接以 Private broadcast of own transactions requested 开头的错误中止启动;其二,若你同时配了 -connect(只连固定节点列表),同样中止——私有广播依赖去固定的匿名网络出口,与固定连接互斥。错误信息把原因写得明白,遇到启动失败先回看这两条约束。另一条隐性代价是时效:短连接建链要时间,高峰期这条通道的交易到达内存池可能比常规路径慢,对确认时间敏感的资金不建议依赖它。
常见误会也集中两点。一是以为开了它钱包交易就自动隐私广播——帮助文本已明确钱包交易不受影响,想让钱包交易走私有路径需要自行经 RPC 提交签名后的交易,这超出”打开一个参数”的范畴。二是把它当防监控的全部方案:它隐藏的是”谁广播了这笔交易”,交易内容本身在链上完全公开,地址关联、找零模式一概不掩盖;Tor 出口时序侧信道等专业话题更不在它职责内。
落地建议按顺序来:先确认节点已按官方文档接入 Tor 或 I2P,再显式打开 -privatebroadcast=1,启动后用日志与 getnetworkinfo 观察网络可达性;签名交易经 sendrawtransaction 提交后,用链上检索确认入池时间符合预期,再考虑批量任务。参数文本与错误措辞可能随版本变化,本文以 v31.0 源码为准。
再补一个容易被忽略的容量细节:源码为私有广播单独预留了连接额度(常量 64),节点启动时把这部分额度计入文件描述符需求一并申请——帮助文本在 -maxconnections 处也特意说明自动连接额度不适用于这类短生命周期连接。换句话说,开启它不等于挤占你正常的对等连接预算,两本账分开算。若操作系统层的文件描述符上限太低,节点会在启动阶段尝试提升限额,系统日志里的申请结果可以佐证。
把使用姿势总结成一张决策表:日常个人转账,用钱包默认路径即可,不需要碰这个参数;批量代发且在意广播方身份的运营,先配好匿名网络、再开参数、用小额验证入池时延;对确认速度有硬指标的场景(例如需要紧跟某个区块高度),放弃它、接受常规广播的拓扑暴露成本,或者两条路径并行广播以时延换稳妥——后者是否值得,取决于你对”谁先看到我”这件事的估值。参数本身只是给了一种新选项,值不值得开,是每个人在自己的威胁模型里算的账。
风险提示:广播方式改变可能增加交易入池时延;配置与匿名网络环境不当会导致节点拒绝启动或交易滞留。本文不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。