1703865123
1703865124
就像我们前面看到的,通常一个区块会包含这个节点提议的一系列交易。而且,这个区块还会包含一个指向前序区块的哈希指针(我们这里说的哈希指针是一个宽泛的概念。这个指针只是文本中的字符串,它并不需要告诉我们去哪里找到这个区块。我们可以通过在网上询问其他的节点找到区块。重要的是,这个哈希值既作为我们在网络上请求其他节点寻找区块的ID,又能够让获取这个区块后验证它)。除此之外,我们现在还要求区块包含一个临时随机数。这个想法是为了适度提高发现符合要求的临时随机数的难度,即把包含临时随机数在内的整个区块的哈希值组合到一起,输出结果要是一种特定的形式。如果哈希函数符合我们在第1章中所描述的谜题友好特性,那唯一解出哈希谜题的办法就是去试足够多的临时随机数,直到成功为止。具体来说,如果这个目标区域是所有可能的输出的1%,那你大概就要试100次才能成功。事实上,这个目标区域远比输出范围的1%小得多得多,我们后面就能看到。[1]
1703865125
1703865126
用这种哈希函数解谜以及工作量证明的办法,我们可以完全舍弃采取那种随机选取节点的办法。这些节点在竞争哈希函数解谜的过程中一直都是互相独立的。有时一个节点鸿运当头,正好发现一个临时随机数可以满足要求。这个幸运的节点就可以提议创建下一个区块了。这就是比特币系统实现完全去中心化的方式,没有任何人能决定谁可以提交下一区块。
1703865127
1703865128
难于计算
1703865129
1703865130
哈希谜题有三个重要的特性。第一个特性是要有一定的难度。我们前面说适度的难度,其实你马上会看到难度实际上是随时间而改变的。在2014年年底,产生一个区块平均要做1020次哈希运算。换言之,目标区域仅仅是整个输出范围的1/1020。这是超大的计算量——举例来说,超过了商业化笔记本电脑可能的计算范畴。因此,只有一些节点还在不厌其烦地竞争造块。这个不停尝试解哈希谜题的过程,就是我们听说的比特币挖矿,参与挖矿的节点被称为矿工。尽管技术上每个人都可以成为矿工,但由于挖矿的高成本导致了挖矿生态系统要消耗大量能源。
1703865131
1703865132
可参数化成本
1703865133
1703865134
第二个特性是,我们希望成本是可以通过参数来变化的,而不是一个固定值。在比特币的点对点网络里,是这样来达到这一特性的:每产生2 016个区块之后,所有的节点都会自动重新计算目标区域相对于整个输出范围的比例大小,使得后续的区块产生的时间间隔约为10分钟。两个区块之间的平均间隔是10分钟,2 016个区块就需要两个星期。所以大约每两个星期,目标区域的大小会被重新计算一次。
1703865135
1703865136
我们想一下这意味着什么。如果你是个矿工,你花了一定的费用投资了一些硬件来做比特币挖矿。但是整个挖矿体系在不断增加,越来越多的矿工加入这个行业,或是他们部署了运算越来越快的硬件设备,那两个星期的时间段里,被找到的区块可能比预期的要多一点。然后,那些节点就会自动调整目标区域,你要找到一个块所要做的工作量就随之增加。所以如果你投了一笔固定资金在硬件上,你找到下一区块的速率实际上取决于其他矿工在做什么。有一个公式可以很好地描述这一点:任何一个矿工,比如爱丽丝,找到下一区块的概率,就相当于她控制的计算力占整个全球计算力的比例。这意味着,如果爱丽丝的挖矿设备的计算能力占全部计算能力的0.1%,那大概每产生1 000个区块,她就可以找到一个区块。
1703865137
1703865138
这样重新调整的目的是什么?我们为什么想要维持10分钟间隔不变?原因很简单。如果区块产生的间隔太小,就会造成很多低效率,我们还会失去许多优化上的好处,比如在一个区块内放入大量的交易。10分钟并没有神奇之处,如果把10分钟下调到5分钟大概也可以。关于其他加密货币的理想区块间隔应该是多少,已经有很多讨论。除去关于理想间隔的不同意见,大家都认为应该是个固定的值。它不允许被无限降低。这就是为什么我们有自动重新计算目标区域的特征。
1703865139
1703865140
这个成本函数和工作量证明的设定方式,让我们重新审视比特币的安全假设。现在我们终于可以丢弃之前让你盲目相信的假设。不必再去说那些连身份都没有的节点大多数是诚实的了,诚实具体代表什么也并不清楚,我们现在可以清楚地表述,只要以计算能力为权重的大多数矿工,遵循比特币协议,或者说是诚实的,那么比特币中的大量攻击就都没有可能发生。因为如果以计算能力为权重的大多数矿工是诚实的,提议下一个区块的竞争会自动保证在任意时间点,下一个区块至少有50%的概率是由一个诚实节点提议的。
1703865141
1703865142
1703865143
矿工行为的两种行为模式
1703865144
1703865145
在分布式系统和计算安全研究领域,假设一定比例的节点是诚实的,来展示在其他节点表现随意的情况下,系统如何按照预期运行,是很常见的方法。这是我们采用的基础方法,除了以计算能力为权重计算大多数之外。最初的比特币白皮书也包含了这样的分析。
1703865146
1703865147
但博弈论领域给出了一种完全不同的,更复杂且实际的方法来决定系统如何运行。这个观点不区分节点诚实或恶意,而是假设每个节点都按自己的意愿行动。每个节点考虑其他节点的潜在可能策略之后,采用一种(随机的)策略最大化自己的回报。如果协议和激励机制设计得当,大多数节点在大多数时候会遵循这个规则。“诚实”的行为只是许多策略中的一种,我们在道德上并不依赖于此。
1703865148
1703865149
博弈论的观点认为,最大的问题是矿工默认的行为是否是一种“纳什均衡”(Nash equilibrium),即这是否代表了一种稳定的状态,在这种状态下没有节点可以通过表现不诚实而获得更高的回报。针对这个问题现在各界仍有争议,并且是一个活跃的研究领域。
[
上一页 ]
[ :1.7038651e+09 ]
[
下一页 ]