对未知的信心基础不是来自于脆弱的信仰,应该是踏实的了解和打心底的认同,关注区块链行业1年多,确实自己没有认真(不是所谓的自以为“认真”)学一遍比特币白皮书。话不多说,接下来的学习将不放过每一段、每一句、每一概念,先从翻译全文开始:
原文一共12段,本次先更新前6段。
比特币:一个点对点的电子现金系统
作者:中本聪
摘要篇
一个纯粹的点对点的电子现金,在没用第三方机构参与的情况下,就能直接完成从一方到另外一方的在线支付。我们提出一个解决方案,即通过P2P网络来解决双重支付问题。该网络给交易打上时间戳,通过把它们哈希到一段正在进行中的基于哈希的工作量证明,以形成无法更改的记录,除非再做一遍工作量证明。最长链,不仅可以作为已见证事件的证明,而且可作为来自最大算力集合的证明。只要大部分算力不是被恶意节点控制来攻击网络,他们就会产生最长链并超过攻击者。网络自己的结构需要最小的结构。大家很卖力地去广播信息,而且节点随意离开并加入节点,必须接受最长链作为他们不在的时候的工作量证明。
一、介绍篇
网络上的商业越来越只依赖于金融机构,作为可信的第三方来处理电子交易信息。虽然这个系统在处理大多数交易的时候运作良好,但是该系统依然基于信任模型的天然缺陷。实现完全不可逆转交易是不太可能的,因为金融机构没办法避免调节冲突的。冲突调节的成本增加了交易转账的成本,(整体上)限制了最小可行交易的额度,让小额临时交易的可能性消失,并且,还有更广泛的成本,即无法为不可逆的服务确保不可逆的交易。因为交易可逆的可能,对信任的需求就加强了。商家必须要提防自己的用户,努力向用户获取他们本不需要的信息。一定比例的欺诈行为被认为是不可逆转的。这些成本和支付的不确定性,都可以通过使用实际货币来避免,但是没有一个机制在没有信任方的情况下,通过通讯渠道进行(线上)支付。
我们需要一个电子支付系统,基于加密验证而不是信用,使得有意愿的双方能直接进行交易,不通过信任的第三方。计算上不可逆的交易可以保证转账方(卖方)不受欺诈,常规的托管机制可以轻松的用来保护买家。在文章中,我们提出一个解决双重支付的方案,该方案利用点对点、分布式的、时间戳服务器来创造对于一连串交易的算力证明。该体系只要诚实的节点控制更多的算力就是安全的。
二、交易篇
我们把电子现金定义为一连串的数字签名。每个拥有者将电子现金转给下一个人,通过数字化签署上一次交易的哈希值和下一个拥有者(收款人)的公钥,并把两者加入电子现金的末端。收款人可以识别签名,从而确认数字现金的拥有链条。
过程中的问题是收款人无法验证该电子现金的拥有者是否进行过双重支付。常见的办法是引入可信的中央权威,或铸币场,即每一笔交易都检查是否双重支付。每笔交易之后,现金都要被送回铸币场,来发行一个新币,只有直接从铸币场发行出来的币才被认为没有双重支付过。这个解决方案的问题是,整个货币体系的命运完全依赖于运作铸币场的公司了,因为每笔交易都要经过它们,就像银行一样。
我们需要一种方法,让收款人知道之前的发款人的现金有没有双重支付过。对我们来讲,最早的交易是真正算数的(只在乎转给我们的电子现金有没有双重支付过),不在乎之后有人进行双重支付。要确认某个交易是否发生过,那就要知道所有交易。在铸币场模型中,铸币厂知道所有的交易,并决定哪些是算数的(不是被双重支付的)。没有第三方还想达到该效果,交易必须被公开发布,同时,我们需要一个系统让参与者同意他们接收到的单一历史。(涉及共识机制)收款人需要在每一次交易的时间,大部分节点都同意这是最先被接收到的(没有进行双重支付)。
三、时间戳篇
我们提出的解决方案以一个时间戳服务开始。一个时间戳服务器通过取一区块比特币交易记录的哈希值,然后广泛地广播这些哈希,就像报纸或新闻播报。时间戳可以证明时间在某个时间点是真实存在过的,要不然是没有办法进入区块,进行哈希处理的。(每个区块形成之后,会被哈希处理,广播的是哈希值,然后把这个区块加入链上,和之前所有的区块形成链)每个时间戳包含上一个时间戳的哈希值,形成一条链,每个新增的时间戳加强了前面的时间戳。
四、工作量证明篇
在P2P的基础之上,为了执行分布式的时间戳服务,我们需要使用工作量证明系统,类似于Adam Back的哈希现金,而不是报纸或新闻帖子之类的。工作量证明涉及找(合法的)随机数,这个随机数被哈希之后,比如SHA-256哈希之后,得到的哈希值必须是以0开头的。平均需要的工作量是指数级别增长的,随着我们需要的0的数量的增加,我们投入工作量的难度也是指数级增长的,但用一个哈希值就可以验证。
对于时间戳网络来说,我们通过给区块增加随机数的方式执行工作量证明,直到有一个值出现,这个值可以给这个区块的哈希值以符合要求的0字节数。一但算力花费在满足工作量证明,该区块则无法被更改,除非把整个工作再做一遍。因为后面的区块都是链在它后面,若要更改这样的区块,则需要更改它后面的所有区块(重新做一遍工作量证明)
工作量证明同样解决了大多数人决策的代表问题。若大多数人基于一IP地址一票,则很容易被聚集大量IP的人所左右。工作量证明本质上是一次算力一次投票。大多数决定表达为最长链,因为最长链包含了最大工作量。(CPU算力是有限的,这样可防止一个人集中大量资源)若大部分算力都是由诚实节点控制的,诚实的链条就会增长得最快,并且能够跑赢其他链条。若要更改过往的区块,攻击者必须要把这个区块的工作量证明重做一遍,而且要将其后区块的工作量证明都重新做一遍,而且必须保障赶上并超过诚实节点。
为了弥补不断增长的硬件速度以及随着时间推移,在节点运行上的利益变化,工作量证明机制难度将有一个变化的均值决定,该均值即每小时出块数量的平均值。如果区块产生的速度太快,难度就会增加。(通过均值调整,保证每个区块产生的时间在10分钟左右)
五、网络篇
运行网络的步骤如下:
1)新交易广播至各个节点。
2)每个节点会汇集新的交易到一个区块之中。
3)每个节点需要为自己的区块找到一个有难度的工作量证明方式。
4)当一个节点找到工作量证明之后,它就向全节点进行广播。
5)只有它中间的所有交易节点必须是合法的,并且没有被双重支付过,节点才会接受区块。
6)这些节点在现有的区块上延长它,以表示接受该区块,并且把之前区块的哈希值,作为产生新区块的上一个区块的哈希值。(每一个区块在打包之前,都包含上一个区块的哈希值)
节点通常将最长的链视为正确的链条,并且持续工作以延长链条。(最长的链条意味着最长的工作量消耗,从而是被认为是最有资格的)若两个节点同时广播不同版本的新区快,一些节点会先接受到一个区块,相应的有另外一些节点接受到另外一些区块。在这种情况下,他们先处理接受到的第一个区块,但另外一个区块会被保留以防另外的区块变得更长。直到下一个工作量证明被发现的时候,这种僵局会被打破,其中一个链条则变得更长。在另外一个链上工作的节点,会换到更长的链条上来。
广播新的交易不一定要触及到所有节点。只要触及到多个节点,它们很快就会被整合进一个新的区块中的。区块广播同样可以接受被丢掉的信息。若一个节点没有接受某个区块,它将会在接收到下一个区块时提出请求,它会发现自己缺失了一个区块。
六、激励篇
按照惯例来说,一个区块中的第一个交易是一个特别交易,这个交易会开启一个新的币,该币会被该区块的创造者所拥有。因为没有中央权威去发行这些币,这(开启新的币,被该区块的创造者所拥有)会激励节点支持网络,并提供货币进入流通的方式。
这种稳定数量新币的增加,可以类比为挖金子的人花费各种资源,从而让更多的黄金进入流通。比特币中,我们投入算力和电力资源。此外,还可以用交易费作为激励。如果一个交易的输出值小于输入值,这个差值就是交易费,该费用将作为激励,被加入到包含这个交易的区块中。一旦之前确定好的币都进入流通的话,这个时候的激励就全变成了交易费,并完全不用担心通货膨胀。
这些激励可以帮助鼓励节点保持诚实。如果一个贪婪的攻击者能够装配超过诚实节点的算力,他必须要做出选择,即通过算力来修改已支付的数据从而欺骗大众,还是用来产生新币。相对而言,他会发现按规矩办事更有利可图,因为这些规矩会给他带来更多新的币,比破坏整个系统并让自己财富受损要好。
白皮书前6段翻译完毕,后6段会尽快更新。
网友评论