413 / 736HEARN

Mike Hearn

bitcoinj 开发者及网络和支付提案作者

Mike Hearn 参与开发了 bitcoinj,并提出了钱包与节点、商家之间的通信方法。他的工作让我们看清一笔普通比特币支付背后发生了什么,也说明为什么各种“已收到”消息并不代表同一件事。

Mike Hearn 是比特币开发者,也是多份 BIP 的作者之一。BIP 是描述技术方案的文档。他参与了 bitcoinj 库的开发,以及连接检查、相关交易筛选和支付通信方法的设计。沿着一笔支付从手机钱包到商家的过程,就更容易理解他的贡献。

开发比特币钱包时,不必从头编写全部通信代码。开发者可以使用软件库,也就是一组现成的功能,在此基础上构建自己的应用。bitcoinj 就是这样的库。它的 AUTHORS 文件将 Mike Hearn 列为众多贡献者之一,并指向 Git 中的修改历史,因此可以追溯具体贡献。这并不表示所有功能都由 Hearn 独自编写,也不表示他现在领导整个项目。 [1]

bitcoinj 是用 Java 编写的库,可在没有本地 Bitcoin Core 安装的情况下管理钱包、发送和接收交易。对手机来说,SPV 很有吸引力。它是 Simplified Payment Verification 的缩写,即简化支付验证:使用区块头和与钱包有关的交易,而不是完整检查每一笔交易。这能节省流量和设备资源。文档也介绍了实验性的完整验证模式。两者是不同的模式;运行更轻便,并不是以更快的速度执行同样的全部规则检查。 [2]

设想一台笔记本电脑从休眠中恢复。它与另一个节点的连接可能看似仍然打开,实际却已经失效。Hearn 的 BIP 31 允许发送带有 nonce 的 ping;这里的 nonce 是用于识别某次请求的数字。对方在 pong 消息中返回同一个数字。对于高于 60000 的协议版本,这样就能把请求和响应对应起来,并测量响应时间。它检查的是通信情况:收到响应本身不能证明节点诚实,也不能证明支付有效。 [3]

为什么手机要下载与自己无关的交易?Hearn 与 Matt Corallo 编写的 BIP 37 描述了 Bloom 过滤器,一种用于筛选可能匹配项的紧凑工具。filterload 设置过滤器,filteradd 添加一个元素,filterclear 删除过滤器。无关交易也可能被放行,这称为误报。更精确的过滤器可以减少流量,却可能让对方更容易把交易与钱包的 IP 地址关联起来。因此,节省流量并不自动意味着保护隐私。 [4]

手机需要知道收到的交易是否确实属于某个区块。BIP 37 的 merkleblock 消息提供了构造 Merkle 证明所需的数据:利用少量数据指纹,也就是哈希值,就能检查该交易与区块头中汇总指纹的联系,而不必下载整个区块。不过,这份证明不能排除对方隐瞒了其他交易。SPV 也不能替代对交易有效性的完整检查。bitcoinj 文档解释了其中的风险:如果攻击者控制钱包的所有连接,就能选择让钱包看到什么。 [4] [5]

购物时,你需要知道金额和收款方。Gavin Andresen 与 Hearn 编写的 BIP 70 为此引入了 PaymentRequest。消息包含支付细节:指定交易将资金分配到何处的输出、金额,以及可选的请求到期时间。商家身份可以通过 X.509 证书认证,方式与网页服务器类似。但协议也允许 pki_type none,也就是没有这种身份认证的请求。因此,仅仅采用支付请求的格式,并不能证明商家的身份已经通过认证。 [6]

如果请求指定了支付服务器,用户授权付款后,钱包会向该服务器发送 Payment 消息。PaymentACK 响应可能表示商家已经接受支付并将进行处理。这对顾客有用,但仍然只是商家服务器的声明,并不是区块确认的证明。同样,refund_to 只是告诉商家可以把退款发往哪里;这个字段本身不会退钱。应用必须区分关于付款的消息与资金的实际转移。 [6]

阅读旧教程时,可能会误以为其中的方法适用于所有软件。登记表将 BIP 70 标为 Deployed,表示它曾被实现部署。然而,Bitcoin Core 0.20.0 的发布说明明确记录了从该程序中完全移除对它的支持。这并不矛盾:历史上使用过的规范,不一定得到每个当前客户端的支持。Hearn 的工作有助于理解钱包如何发展;实际使用某种支付方法时,还需要检查具体软件及其版本提供哪些功能。 [6] [7]

要获得更完整的理解,请将本词条与以下词条结合阅读: Jeff Garzik, Gloria Zhao, Merkle Tree. 反向关联还来自: Jeff Garzik, Gloria Zhao.

DOC · 001bitcoinj — recorded contributors文档 DOC · 002bitcoinj — library and verification modes文档 DOC · 003BIP 31 — Pong message文档 DOC · 004BIP 37 — connection Bloom filtering文档 DOC · 005bitcoinj — security model文档 DOC · 006BIP 70 — Payment Protocol文档 DOC · 007Bitcoin Core 0.20.0 — BIP70 removal文档
修订日期: 来源优先 · 非投资建议