原话导读 · SATONAMO 整理

手机钱包需要下载整条区块链吗?

从 Mike Hearn 的 Android 钱包设想,读中本聪对轻客户端的讨论:怎样少保存数据、更快开始使用,以及它需要依赖谁。

2010 年底,Mike Hearn 正在用 Java 开发简化支付验证,目标之一是让客户端运行在 Android 手机上。他向中本聪询问存储和扩展问题。这几封回信没有给所有手机钱包规定一种做法,却清楚展示了当时的一条思路:普通收付款用户,可以不承担与完整节点相同的数据保存工作。

怎样取得自己的交易,他还在调整方案

白皮书第 8 节介绍了简化支付验证:用户可以借助区块头和交易被纳入区块的证明,核对一笔付款,而不必像完整节点那样掌握全部交易。区块头是每个区块的简要信息,包含用于连接和验证工作量证明的字段。

2010 年 12 月 29 日,中本聪回顾此前的设想:交易可以直接发给收款人,也可以由其他节点建立索引,供客户端取得。他接着提出了另一个收取交易的办法。这说明轻客户端怎样获取数据,当时仍在设计和实现中。

阅读白皮书第 8 节「简化支付验证」

或者由一个节点按公钥为所有交易建立索引,你就可以像从邮件服务器下载邮件一样下载它们。
中本聪 · · Mike Hearn 通信原文与上下文

少保存区块,不等于完全不用下载区块

他在这封信中建议,客户端接收完整区块,从中查找属于自己的交易,随后只保留区块头。这样,接收并检查数据与长期保存全部数据,就可以分别处理。

初次启动时,他设想只下载区块头;这一推理针对的是开始接收付款的新客户端。如果是在恢复曾经收过款的旧钱包,就还需要寻找过去的交易,不能直接套用“第一次运行前没有付款”的前提。这也是阅读这段历史方案时需要保留的条件。

现在,我认为纯客户端节点应该接收完整区块,以便扫描其中属于自己的交易。它们不需要存储区块,也不需要为其建立索引。
中本聪 · · Mike Hearn 通信原文与上下文

保存得更少,也有验证上的边界

2011 年 3 月,两人进一步讨论尚未进入区块的付款,也就是零确认交易。中本聪指出,掌握完整交易索引的节点,可以检查交易依赖,并判断自己是否已经见过另一笔花费同一笔钱的交易。

缺少这些数据的客户端,需要参考其他节点的判断。他提出可以连接多个节点来分散这种依赖,但并没有因此保证付款一定安全。尤其要区分:某个节点还没见过冲突交易,并不代表冲突绝不可能发生。

如果不知道所有现存的交易,我不知道该如何做到第 2) 点。对此,你只能依靠信任其他节点。这种信任可以分散到多个节点。
中本聪 · · Mike Hearn 通信原文与上下文

他希望新用户能更快开始使用

到 2011 年 4 月,中本聪仍希望 Hearn 的 BitcoinJ 继续发展为另一种客户端实现。它可以让 Java 开发者参与,也可以把重点放在用户收付款所需的功能上。

他特别提到一个很具体的使用体验:当一个客户端仍在下载区块链时,用户已经能通过另一个客户端开始使用。这里讨论的是当时的设计方向与开发项目,不能据此概括今天所有手机钱包的架构。

我确实希望你的 BitcoinJ 能继续开发成另一个客户端实现。它给 Java 开发者提供了一个可以参与的项目,而且基础更简单,不必包揽所有功能,开发起来也更容易。
中本聪 · · Email原文与上下文

读完这几段原话

这些回信说明,中本聪很早就在考虑让普通用户以更少的存储负担参与比特币。具体到他当时提出的方案,客户端仍会下载和扫描区块,只是不长期保存全部区块;对零确认交易,也需要更多依赖其他节点。便利性与验证能力,要放在同一个方案里一起理解。

阅读字号

选择适合你的字号,之后阅读会继续使用。