
摘要:一个纯粹的点对点电子现金,支付时应该可以直接从交易一方发给另外一方,而不需要经过中间机构。数字签名部分具备了此能力,但是仍然需要一个受信任的第三方来避免重复消费。这里提出一个基于点对点的通网络来实现去中间机构的电子现金系统,并解决重复消费的问题。在这个网络上,基于散列算法的工作原理,设计了一个足以证明工作量的算法,对交易进行运算得到一个网络时间戳,并将之加入一个持续增加的链表,加入这个链表上的数据不能被改变。最长的链不仅仅作为时间序列的证明,也代表了最大的CPU算力。只要加入网络的大部分CPU算力不协同攻击网络,他们就会生成最长的链表。这个网络自身只需要最小的结构记录哈希后的链表。交易消息可尽可能的广播出去,加入网络的节点可以离开并在需要时重新加入,并接受最长的链表作为他们离开期间发生事件的证明。
- 介绍
当前,互联网上的商业行为基本完全依赖于金融机构作为可信任的中间人来进行支付。尽管这种方式在很多情况下工作的足够好,但是因为信任基础模型的脆弱,仍然有一些交易受到了伤害。在这个模式下,纯粹的不可逆交易并不存在,因为金融机构会基于法律等因素进行调解。调解的开支增加了交易成本,限制了最小实际交易的额度,并阻止了小微临时交易的可能性,更重要的是失去了对不可逆服务提供不可逆支付的能力。因为逆向交易的可能,进一步放大了对信任的要求。商家因此必须对其客户保持警惕,要向其客户索要超出他们需要的更多信息。在这种模型下,一定概率的欺诈被认为是不可避免的。
电子支付系统需要一个基于算法证明而非中间机构的信任背书,来允许任意交易双方可以直接交易。不可逆的交易可保护卖家免受欺诈,基于简单的第三方数据托管就可以保护到买方。这里提出的解决重复消费问题的方案,基于点对点网络,使用分布式时间服务器,通过引入可足够证明工作量的算法,来为交易定义时序。只要遵守规则的节点CPU算力大于联合起来攻击系统的节点CPU算力,系统就是安全的。
- 交易
这里将电子货币为一个数字签名的链。每个所有人在将货币转移时,都要对上一次交易的散列值与下一个所有人的公钥进行签名,并将签名添加到链的末尾。收款方可以通过检查链末尾的签名来验证货币的拥有关系。

对于收款方而言,这里仅存在一个问题:就是无法验证付款方是否多次消费此货币。一个通常的做法是找一个受信任的中间人来确认货币是否存在重复消费,每次交易后,货币都回到中间人那,只有来自中间人的货币是可以信任的(没有被多次消费)。这个方案的问题是所有的货币依赖这个中间人,任何交易都必须经过他们的确认,与银行一样。
这里为收款方提供一个方法,以确认在此之前,付款方并没有消费此货币。只要证明当前交易是最早的,就可以认为是有效的,不用关心之后是否存在多次消费的可能,只要能够获得所有交易,这一点不证自明。在中间人模型中,中间人知道所有的交易并决定交易的先后顺序。为了在没有中间人的情形下达成此效果,交易就必须公开声明并广播出去,这里定义了一个网络,让所有参与者能收到所有交易,并基于其收到的交易信息,同意一个单一的交易历史顺序。收款方需要并可以简单证明大部分节点同意这个交易是最新的。
- 时间戳服务
时间戳服务器是这里的重点。时间戳服务器通过散列算法将一个块中的信息生成一个时间戳,并广泛发布这个时间戳,就像在报纸或电子公告牌发布信息一样。时间戳证明了其对应的数据存在,每一个时间戳都引用之前的时间戳,这样就形成了一个链,每个新进入的时间戳,都进一步加强证明了其之前的时间戳。

- 工作量证明
为了在点对点的基础设施上实现分布式时间戳服务,我们需要使用一个类似于Adam Back的哈希现金的工作量证明方法。这里使用的工作量证明是通过寻找一个值,将这个值附加到块信息商,计算其摘要结果(如SHA-256),获得的值与原先值相比只是增加了为0的前缀(bit为0)。这个工作量的复杂度与要求的0的数量相关,但是验证缺可以很简单(通过一次hash就可验证)。