比特币白皮书原版(附比特币白皮书中文版)

时间:2024-10-31  分类:电子
当某个区块找到其工作证明,它就要将此区块广播给所有节点;
  • 众多其他节点当且只当以下条件满足才会接受这个区块:其中所有的交易都是有效的,且未被双重支付;
  • 众多节点向网络表示自己接受这个区块的方法是,在创建下一个区块的时候,把被接受区块的哈希当作新区块之前的哈希。

  • 节点始终认为最长链是正确的那个,且会不断向其添加新数据。若是有两个节点同时向网络广播了两个不同版本的下一个区块,有些节点会先接收到其中一个,而另外一些节点会先接收到另外一个。这种情况下,节点将在它们先接收到的那个区块上继续工作,但也会把另外一个分支保存下来,以防后者成为最长链。当下一个工作证明被找到,而其中的一个分支成为更长的链之后,这个暂时的分歧会被打消,在另外一个分支上工作的节点们会切换到更长的链上。


    新的交易不见得一定要广播到达所有的节点。只要到达足够多的节点,那么没多久这些交易就会被打包进一个区块。区块广播也容许一些消息被丢弃。如果一个节点并未接收到某个区块,那么这个节点会在它接收到下一个区块的时候意识到自己错失了之前的区块,因此会发出补充那个遗失区块的请求。


    6.奖励(Incentive)


    按照约定,每个区块的第一笔交易是一个特殊的交易,它会生成一枚新的硬币,所属权是这个区块的生成者。这么做,使得节点支持网络有所奖励,也提供了一种将硬币发行到流通之中的方式在这个系统中,反正也没有一个中心化的权威方去发行那些硬币。如此这般稳定地增加一定数量的新硬币进入流通,就好像是黄金开采者不断耗用他们的资源往流通之中增加黄金一样。在我们的系统中,被耗用的资源是CPU工作时间和它们所用的电力。


    奖励还可以来自交易费用。如果一笔交易的输出值小于它的输入值,那么其中的差额就是交易费;而该交易费就是用来奖励节点把该交易打包进此区块的。一旦既定数量的硬币已经进入流通,那么奖励将全面交由交易手续费来完成,且绝对不会有通货膨胀。


    奖励机制也可能会鼓励节点保持诚实。如果一个贪婪的攻击者能够网罗比所有诚实节点都更多的CPU算力,他必须做出一个选择:是用这些算力通过把自己花出去的钱偷回来去欺骗别人呢?还是用这些算力去生成新的硬币?他应该能够发现按照规则行事是更划算的,当前规则使得他能够获得比所有其他人加起来都更多的硬币,这显然比暗中摧毁系统并使自己的财富化为虚无更划算。


    7.回收硬盘空间(ReclaimingDiskSpace)


    如果一枚硬币最近发生的交易发生在足够多的区块之前,那么,这笔交易之前该硬币的花销交易记录可以被丢弃目的是为了节省磁盘空间。为了在不破坏该区块的哈希的前提下实现此功能,交易记录的哈希将被纳入一个Merkle树之中,而只有树根被纳入该区块的哈希之中。通过砍掉树枝方法,老区块即可被压缩。内部的哈希并不需要被保存。


    一个没有任何交易记录的区块头大约是80个字节。假设每十分钟产生一个区块,80字节乘以6乘以24乘以365,等于每年4.2M。截止2008年,大多数在售的计算机配有2GB内存,而按照摩尔定律的预测,每年会增加1.2GB,即便是区块头必须存储在内存之中也不会是什么问题。


    8.简化版支付确认


    即便不用运行一个完整网络节点也有可能确认支付。用户只需要有一份拥有工作证明的最长链的区块头拷贝他可以通过查询在线节点确认自己拥有的确实来自最长链而后获取Merkle树的树枝节点,进而连接到这个区块被打上时间戳时的交易。用户并不能自己检查交易,但,通过连接到链上的某个地方,他可以看到某个网络节点已经接受了这个交易,而此后加进来的区块进一步确认了网络已经接受了此笔交易。


    只要诚实节点依然在掌控网络,如此这般,验证即为可靠的。然而,如果网络被攻击者所控制的时候,验证就没那么可靠了。尽管网络节点可以自己验证交易记录,但是,只要攻击者能够继续控制网络的话,那么简化版验证方式可能会被攻击者伪造的交易记录所欺骗。应对策略之一是,客户端软件要接受来自网络节点的警告。当网络节点发现无效区块的时候,即发出警报,在用户的软件上弹出通知,告知用户下载完整区块,警告用户确认交易一致性。那些有高频收付发生的商家应该仍然希望运行属于自己的完整节点,以此保证更独立的安全性和更快的交易确认。


    9.价值的组合与分割


    尽管逐个地处理硬币是可能的,但为每分钱设置一个单独的记录是很笨拙的。为了允许价值的分割与合并,交易记录包含多个输入和输出。一般情况下,要么是一个单独的来自于一个相对大的之前的交易的输入,要么是很多个输入来自于更小金额的组合;与此同时,最多有两个输出:一个是支付(指向收款方),如果必要的话,另外一个是找零(指向发款方)。


    值得注意的是,扇出在这里并不是问题所谓扇出,就是指一笔交易依赖于数笔交易,且这些交易又依赖于更多笔交易。从来就没有必要去提取任何一笔交易的完整独立的历史拷贝。


    10.隐私(Privacy)


    传统的银行模型通过限制他人获取交易者和可信第三方的信息而达成一定程度的隐私保护。出于对将所有交易记录公开的需求否决了这种方法。但是,维持隐私可通过于另一处的切断信息流来实现公钥匿名。公众可以看到某某向某某转账了一定的金额,但是,没有任何信息指向某个确定的人。这种水平的信息发布有点像股市交易,只有时间和各个交易的金额被公布,但是,没有人知道交易双方都是谁。


    还有另外一层防火墙。交易者应该针对每一笔交易启用一对新的公私钥,以便他人无法将这些交易追溯到同一个所有者身上。有些多输入的交易依然难免被追溯,因为那些输入必然会被识别出来自于同一个所有者。危险在于,如果一个公钥的所有者被曝光之后,与之相关的所有其他交易都会被曝光。


    11.计算(Calculations)


    假设一个场景,某个攻击者正在试图生成一个比诚实链更快的替代链。就算他成功了,也不能对系统做任意的修改,即,他不可能凭空制造出价值,也无法获取从未属于他的钱。网络节点不会把一笔无效交易当作支付,而诚实节点也永远不会接受一个包含这种支付的区块。攻击者最多只能修改属于他自己的交易,进而试图取回他已经花出去的钱。


    诚实链和攻击者之间的竞争可以用二项式随机漫步来描述。成功事件是诚实链刚刚被添加了一个新的区块,使得它的优势增加了 1;而失败事件是攻击者的链刚刚被增加了一个新的区块,使得诚实链的优势减少了 1。


    攻击者能够从落后局面追平的概率类似于赌徒破产问题。假设,一个拿着无限筹码的赌徒,从亏空开始,允许他赌无限次,目标是填补上已有的亏空。我们能算出他最终能填补亏空的概率,也就是攻击者能够赶上诚实链的概率,如下:


    既然我们已经假定p>,q既然攻击者需要赶超的区块数量越来越多,那么其成功概率就会指数级下降。于赢面不利时,如果攻击者没有在起初就能幸运地向前猛跨一步,那么他的胜率将在他进一步落后的同时消弭殆尽。


    现在考虑一下一笔新交易的收款人需要等多久才能充分确定发款人不能更改这笔交易。我们假定发款人是个攻击者,妄图让收款人在一段时间里相信他已经支付对付款项,随后将这笔钱再转回给自己。发生这种情况时,收款人当然会收到警告,但发款人希望那时木已成舟。


    收款人生成了一对新的公私钥,而后在签署之前不久将公钥告知发款人。这样可以防止一种情形:发款人提前通过连续运算去准备一条链上的区块,并且只要有足够的运气就会足够领先,直到那时再执行交易。一旦款项已被发出,那个不诚实的发款人开始秘密地在另一条平行链上开工,试图在其中加入一个反向版本的交易。


    收款人等到此笔交易被打包进区块,并已经有z个区块随后被加入。他并不知道攻击者的工作进展究竟如何,但是可以假定诚实区块在每个区块生成过程中耗费的平均时间;攻击者的潜在进展符合泊松分布,其期望值为:


    为了算出攻击者依然可以赶上的概率,我们要把攻击者需要追赶的区块数目的帕松分布概率密度,乘以在落后该区块数目下能够追上来的概率:


    转换为C语言程序



    -->> 2/6 文章未完,请继续阅读

    以上就是比特币白皮书原版(附比特币白皮书中文版)的全部内容,望能这篇比特币白皮书原版(附比特币白皮书中文版)可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。