TBWORKs Full-stack Labour/全栈民工

比特币:一个P2P电子现金体系

2018-01-15
Tommy.Tesla

摘要

一个纯粹点对点(Peer-to-peer)版本的电子现金系统应当允许支付方直接把钱交给收款方,而不需要通过一个第三方的财务机构。数字签名解决了这种场景的的部分问题,但是这种场景下,还是需要第三方来保证支付的唯一性,防止重复花费(简单的说就是一块钱花了两次)。本文中我们提出了一种使用P2P网络来解决重复花费的问题。在我们的方法中,通过把交易映射到一个基于哈希的不可回退的工作量证明链(Proof of Work) 上,这个支付系统网络就可以为每一笔交易打上时间戳标记,并且无需重做工作量证明。每一笔交易记录都是不可修改的。最长的工作量证明链不仅充当了一系列交易相关事件的目击者,而且还表明它来自于最大的CPU计算机池。只要网络中的节点能掌握住大部分的CPU计算力,并且他们不参与到攻击网络中,那么他们就能生成最长的交易区块链并且阻挡攻击者。这个网络系统一定要足够轻量化,消息广播机制的设计需要遵循尽力协定(best effort),网络中的节点可以随时自由的加入和离开,并且所有节点一致协定:最长的“工作量证明链”里的证据可以证明节点不在网络时,网络发生了什么。

译者注:原文中的best effort被翻译成了尽力协定Best Efforts是一种尽力约定:担保人向被担保人承诺将会尽心尽职来募股,比如首次公开募股等,从而可以被公共监督。尽力协定主要用于高风险证券,比如未成型的募股,或者在不理想的市场环境下。尽力约定对应了包销约定,后者需要担保人自己先购买下所有募股,然后自己去转卖。尽力约定则是担保人帮被担保人售卖需要募集的股票,担保人的收益按照实际募集的股票来计费。 另外重复花费是指货币的持有人多次支付了同一枚货币,因为收款方并不知道这个货币是不是已经花费给别的收款方了。

1. 介绍

目前网络上的电子商务都需要可信的第三方财务机构来处理电子支付。虽然这种模式对于大部分交易来说都没问题,但是对于信任体系来说仍然是有先天的缺陷的。因为第三方财务机构无法避免调和争端,让交易变得完全不可逆是不太可能的。调和客户冲突会增加交易的成本,限制最小实际交易规模,使得为经常发生的小规模交易处理冲突变得不可能,并且对于那些不可逆的服务来说丧失创建不可逆支付能力带来的代价会很高。由于存在可撤销的可能性,对各个交易方信任度的要求就更高了。商户必然会担心他们顾客的可信度,会不断的要求获得比他们原本想要获得的更多的信息(注:比如支付宝要求身份证,绑定银行卡等)。这就注定了存在一定的错误比例是不可避免的。这些代价和支付的不确定性在现实的货币交易中就可以很好的避免,但是还不存在一种机制在没有第三方可信结构的情况下通过消息通道完成支付的。

其实我们需要的是一个电子支付系统,它基于加密的证据而不是信任机制,它允许任何两个有交易意愿的人直接进行交易,而不是通过第三方交易平台。每一笔交易理论上都是不可逆的,这可以保护商户的权益。例行程序记录交易凭证的机制很容易被实现,这样也可能保证买家的权益。在这篇文章中,我们提出了一种解决方案来应对重复花费的问题,他通过点对点分布式时间戳服务器根据交易的时间顺序来生成交易的数字证据。只要正常化的节点集合比那些攻击者节点集合拥有更多的CPU计算力,那么这个系统就会一直保持安全。

译者注:第一部分主要讲了,传统的由第三方平台参与来保证电子交易的可信度的方式本质还是有信任问题的。真正的电子交易支付系统一定是点对点,基于交易意愿,而不是基于交易者自身的可信度的。

2. 交易

在我们提出的系统中,我们把一个电子货币定义成了一个数字签名链。当某个电子货币持有人支付给下一个人时,只需要对前一个交易和下一个人的公钥标识进行数字签名,然后把数字签名添加到这个电子货币交易链的末端。收款人可以通过校验签名来校验这个电子货币的持有人链。

这种玩法存在一个问题:收款人无法校验电子货币的某个持有人是不是把这个电子货币进行了多次花费。一个通用的解决方案是引入一个可行的中心化的权威机构,或者叫货币管理中心(mint),它来对每一笔交易进行重复花费校验。在每一笔交易完成后,涉及的电子货币必须要返回给货币管理中心并且生产一个新的电子货币,只有直接从货币管理中心发行的电子货币才可以被认为是没有被重复花费的。这个解决方案的问题在于整个货币系统被运营该货币管理中心的公司所控制,并且每一笔交易都需要经过这个公司的系统,这就跟银行差不多。 比特币交易记录链表 我们需要设计一种方法来让收款方认可某个货币之前的持有人没有把这枚电子货币签售给其他收款方。为了达到这个目的,假设某个支付方同时花费了某一个电子货币2次,那么我们约定最早被花费的那枚电子货币进行计数,这样我们就可以避免后面再去花费这枚电子货币了。要想确认某一笔交易的存在,唯一的办法就是知道所有的交易记录。在基于货币管理中心的模型中,货币管理中心需要知道所有的交易记录,从而来决定先收到的是哪个交易记录。而在没有任何第三方参与的情况下完成这样的任务,交易记录需要被广播到整个网络[1],并且我们需要一个系统来让所有的参与者认同每一笔交易的发生时间顺序。收款方需要证据来证明每一笔交易发生的那个时间,其他大部分节点都同意它是第一个收到的。

3. 时间戳服务器

我们首先想到的一个方案就是搭建一个时间戳服务器。一个时间戳服务器会对收到的一个项目集合块烙上时间戳,生成HASH码,然后广播这个哈希码即可,就像发报纸或者用户组播那样[2-5]。这个时间戳证明了在这个时刻交易记录是存在的,这是显然的,要得到哈希就肯定要先获得块。每个时间戳节点的哈希码都基于前一个时间戳生成,从而构成了一个链表,之后的每个新增的时间戳都会在之前时间戳记录的基础上进行哈希。 时间戳链表

4. 工作量证明

为了在点对点(P2P)网络上实现一个分布式的时间戳服务器,我们需要一个类似Adam Back提出的哈希现金一样的工作量证明系统,而不是发报纸或者用户组广播那样的。工作量证明将会扫描一个使用SHA-256算法

未完待续…(封闭开发中)


评论留言

目 录