随时关注最新创业,科技,网路,工作讯息.
 随著比特币今年暴涨,开始看到有更多人对用区块链技术实现的加密货币产生兴趣,所以就趁著连假把之前整理到一半的比特币论文重新翻译,提供给大家参考.
 原文"Bitcoin: A Peer-to-Peer Electronic Cash System",译文"比特币:端对端电子现金系统 I"刊登于 Medium,INSIDE 获授权转载.译者林圣祐,准资科所学生,期盼能透过资料认识世界,用资料改变世界.
 白皮书的内容为当初中本聪建构比特币时的架构,现今的比特币系统与白皮书有部分出入,详情可参考 比特币网站 及相关论坛.
 完全以端对端(peer-to-peer)技术实现的电子现金系统允许线上支付可以不必透过金融机构而直接从某一方传送.虽然 数位签章(digital signature) 解决了部分的问题,但若需要信任的第三方才能避免双重支付(double-spending)的话,这个系统就没有价值了.我们提出了一个端对端的网路来解决双重支付的问题,此网路透过以下方式对每一笔交易做 时间戳记(timestamp),也就是将每一笔交易 杂凑(hash) 到一个"基于杂凑的工作量证明"(hash-based-proof-work)组成的一条不断延伸的链(chain)上,除非重新完成所有工作量证明,这些纪录将不能被更改.最长的链不仅扮演了一连串目击事件的证明,也证明了它来自于一个 CPU 运算能力很大的池.只要多数的 CPU 运算能力都由不会联合攻击网路的节点(node)所控制的话,诚实的节点就会产生一条最长且超越其他攻击者的链.这个网路本身需要的基础建设很少,讯息会依据最大努力原则(best effort basis)广播出去,而节点可自由选择离开或重新加入网路且接受最长的工作量证明所组成的链作为节点离开时所发生的交易事件之证明.
 网际网路的商业应用几乎都仰赖金融机构作为处理电子支付之信任的第三方.虽然系统在大多数情况下都能运作良好,但这类系统仍有以信任为基础的模式这项固有的缺点.由于金融机构无法避免出面调解争议,因此完全不可逆的交易并不真的可行.因为调解成本而提高的交易成本,将会限制最小的实际交易规模,限制了日常小额支付,失去为不可逆之服务进行的不可逆支付的能力进而造成更广泛的成本.可逆性的服务让信任的需求增加,商人必须更加警惕自己的客户,因此会向他们索取完全不必要的个人资讯.一定比例的诈骗可以被接受为无法避免的.以上这些成本及支付的不确定性在使用实体货币时皆可避免,但透过一个缺乏第三方信任的沟通渠道进行支付的机制并不存在.
 我们所需要的是一个以加密证明取代信任的电子支付系统,且允许任何达成共识的双方能够直接交易,而不需信任的第三方参与.计算不可逆(computaionally impractical to reverse)的交易可以避免卖方受骗,而常规性托管机制(routine escrow mechanisms)则可以轻易地让买方被保护.在这篇论文中,我们透过一个端对端的分散式时间戳记伺服器去产生按时间排序的交易之计算证明进而解决了双重支付的问题.只要诚实的节点能够共同合作去控制比攻击者族群更多的 CPU 运算能力,这个系统就会是安全的.
 我们定义一颗电子货币为一串数位签章.每位拥有者为前一个交易及下一位拥有者的 公开金钥(public key) 签署一个杂凑的数位签章,并将之加入一颗货币的尾端,透过上述的方式将货币发送给下一位拥有者.收款者可以透过检查签章(signature)来验证该链的拥有者.
 这个过程的问题在于收款者无法验证拥有者是否对这颗货币进行双重支付.一般解法为导入一个信任的中央权威机构或是造币厂来验证每一笔交易,以防止双重支付.在每一笔交易之后,货币必须送回造币厂以发行新货币,且只有直接从造币厂发行的货币才会被信任为没有双重支付.然而,这个解法的问题在于整个金钱系统的命运皆仰赖在像银行一样会经手每笔交易的造币厂公司.我们需要一个方法让收款者知道前一位拥有者并没有签署更早发生的交易,由于我们计较的是在此之前发生的交易,因此不用在意在此之后是否有双重支付.证实交易存在的唯一方法是去意识到所有交易的发生,而在以造币厂为基础的模式中,造币厂必须意识到所有交易并决定交易完成的先后顺序.为了在没有信任的第三方的之情况下达到目的,交易必须被公告,且我们需要一个让所有参与者在他们接收的顺序上达成共识的系统.收款者需要确保在交易期间绝大多数的节点都认同该交易是首次出现.
 我们提出的解法先由时间戳记伺服器说起.时间戳记伺服器会将由很多交易组成的区块(block)所对应之杂凑加上时间戳记,并如同在报纸或 Usenet 中发送的方法将杂凑进行广播.时间戳记证明了资料在进入杂凑时必然存在.每个时间戳记应将前一个时间戳记加入其杂凑中,之后的每一个时间戳记都和前一个时间戳记进行增强 (reinforce),而形成了一条链.
 为了在端对端的基础上去实现一个分散式时间戳记伺服器,我们需使用一个类似 Adam Back 提出的 Hashcash 技术的工作量证明系统,而非像报纸或 Usenet 的发送方法.工作量证明包括扫描一个数值,以 SHA-256 安全杂凑演算法(Secure Hash Algorithm)为例,杂凑值以一个或多个 0 开始.平均而言,随著 0 的数目上升,所需之工作量将呈指数增加,且可借由执行一次杂凑运算即完成验证.
 在我们的时间戳记网路中,我们借由增加区块中 nonce 的数量直到提供区块所对应之杂凑足够数量的 0 之 nounce 值被发现来完成工作量证明.一旦 CPU 的贡献扩大到足以满足工作量证明,除非重新完成一定的工作量否则该区块无法被更改.当后来的区块在此之后被链结上,若想更改区块,则需要完成之后所有区块的工作量.
 工作量证明也解决了多数决代表的问题.如果多数是建立在一个 IP 位址对应一票的基础上,则会被任何可以拥有许多 IP 者所推翻.工作量证明本质上是一个 CPU 对应一票.多数决代表为最长的链,因为最长的链包含了最大的工作量.如果大多数的 CPU 运算能力是由诚实的节点所控制,则此诚实的链将会成长为最快速且超越任何一条竞争者的链.若要修改先前的区块,攻击者必须重新完成该区块及在它之后的所有区块的工作量证明,并赶上且超越诚实节点之工作量.我们稍后会说明较慢的攻击者赶上的机率会随著之后的区块增加而呈指数消减.
 为了解决因硬体速度的增加及节点参与网路的程度起伏之问题,工作量证明的难度是由每小时平均产生之区块数量而决定.如果区块的产生越快速,则难度也会随之增加.
 以下是网路运作的步骤:
 新的交易会向所有节点广播
 每个节点会搜集加入区块的新交易
 每个节点负责为其区块找到一条够困难的工作量证明
 当节点找到工作量证明后,会向所有节点广播
 节点只有在节点中的所有交易为有效且尚未存在过时,才会接受区块为有效的
 节点会使用已接纳之区块的杂凑作为之前的杂凑来创造链上的新区块,来表示接受该区块
 节点始终会将最长的链视为正确的且持续延长.若有两个节点同时广播两个不同版本的新区块,部分节点可能会先接收到其中一种.在这种情况下,节点会先处理先接收到的区块,但也会保存另一条分支链以免它变成最长的链.当下一个工作量证明被发现且其中一条链被证实为较长的一条时,这样的僵局会被打破,此时,原本在另一条分支链上工作的节点会转而处理较长的这条链.
 新交易的广播并不一定要触及所有节点,只要这些交易广播到足够多的节点,不久后这些交易就会被整合进一个区块.区块的广播同样可以容许漏掉讯息,若某个节点没有接收到特定区块,当这个节点接收到下一个区块时,就会认知到它遗漏了一个区块并可提出自己下载该区块的请求.
 六, 奖励(Incentive)
 按照惯例,区块中的第一个交易较特别,因为它产生了一颗由该区块建立者所拥有的新货币.这激励了节点去支持整个网路,且在没有中央权威机构发行货币的情况下,提供了初期货币流通的方法.新货币数量的稳定增加和矿工为了增加黄金流通而耗费资源去挖矿类似.而在我们的案例中,耗费的资源是 CPU 运算时间和消耗的电力.
 奖励也可以来自于交易手续费.交易的输入值减掉输出值即为交易的手续费,提供交易所在之区块的奖励.一旦既定数量的货币进入流通,奖励机制就可以完全依靠交易手续费且能免于通货膨胀.
 奖励机制也有助于鼓励节点保持诚实.若有贪婪的攻击者能够装备比所有诚实节点还要多的 CPU 运算能力,那么他将面临以下选择:进行双重支付的攻击或是用于诚实工作来产生新货币,他将会发现遵循规则将是更有利可图的,因为比起破坏系统及自身财产的合法性,遵守规则能够使他拥有更多的电子货币.
 此篇为比特币论文的前半部分,由于此篇为笔者首次翻译论文,若语句不通顺及措词不精准,烦请读者包含及不吝指正!谢谢:)
 除了比特币,区块链还能怎么样改变世界?
 蔡明忠要央行研究区块链,是为公还是为私?