第2章:比特币如何实现权力下放(去中心化)

在本章中,我们将讨论Bitcoin中的权力下放(去中心化)。在第一章中,我们研究了比特币基础的加密基础,并以我们称之为ScroogeCoin的简单货币来结束。ScroogeCoin在基于分类帐的加密系统中实现了很多我们想要的功能,但它有一个明显的问题——它依赖于称为Scrooge的集中式权限。我们在如何下放或者去中心化这个货币中结束了这个问题,问答这个问题将成为本章的重点。

在阅读本章时,请注意,比特币实现去中心化的机制并非纯技术问题,而是技术手段和智能激励工程的结合。在本章结尾,您应该很赞赏这种权力是如何下放的,更一般来说,Bitcoin是如何工作的,以及为什么它是安全的。

2.1中心化与去中心化

去中心化不是比特币唯一一个重要的概念。在各种不同的数字技术中,出现了中心化与去中心化竞争范式的概念。为了更好地了解它是如何在比特币发挥作用的,在其他各种情况下理解中央冲突(这两种范式之间的紧张关系)是有用的。

一方面,我们有了互联网,一个有名的去中心化系统,历史上竞争并战胜了“围墙内的花园”,比如AOL和CompuServe的信息服务。然后,出现了电子邮件,其核心是基于简单邮件传输协议(SMIP)的分散系统,这是一种开放标准。虽然它有来自Facebook或LinkedIn邮件等专有邮件系统的竞争,但电子邮件仍然是个人与个人在线通信的默认工具。就即时消息和短信来说,我们有一个不能被明确描述为集中式或分散式的混合模型。最后还有社交网络:尽管业余爱好者、开发者和企业家为了创造出主流中心化系统的替代品做了多次努力,但像Facebook和LinkedIn这样的集中式系统仍然主宰着这个空间。事实上,这个冲突早在数字时代就有了,我们看到电话、广播、电视和电影的历史上也有这两个模式间的类似斗争。

去中心化并非全部或什么都没有;几乎没有一个系统是完全分散式的或纯粹集中的。例如,电子邮件基本上是基于标准化协议(SMTP)的分散式系统,任何想的人都可以操作自己的电子邮件服务器。然而,市场上发生的情况是,少数集中的网络邮件提供商已成为主流。同样,虽然Bitcoin的协议是分散式的,像Bitcoin交易的服务,你可以将Bitcoin转换成其他货币,而钱包软件或允许人们管理其Bitcoin的软件可能会在不同程度上集中或分散。

考虑到这一点,让我们将Bitcoin协议如何实现去中心化分解成为五个更具体的问题:

1.谁维护交易的分类账?

2.谁拥有决定哪些交易有效的权力?

3.谁创造新的比特币?

4.谁决定系统规则如何改变?

5.比特币如何获得交换价值?

前三个问题反映了比特币协议的技术细节,正是这些问题将成为本章的重点。

比特币的不同方面落在中心化/去中心化范围的不同点上。对等网络(p2p)接近于纯粹的分布式,因为任何人都可以运行Bitcoin节点,并且进入门槛相当低。你可以上网,轻松下载Bitcoin客户端,并在笔记本电脑或PC上运行节点。目前有数千个这样的节点。本章稍后研究的比特币矿业在技术上也适用于任何人,但需要非常高的资本成本。因此,在比特币矿业生态系统中,集权力或权力集中度较高。Bitcoin社区的许多人都认为这是非常不方便的。第三个方面是比特币节点运行软件的更新,这关系到系统规则如何以及何时更改。可以想象,与电子邮件一样,协议有许多互操作的实现。但在实践中,大多数节点运行参考实现,其开发人员被社区充分信任并具有很大的权力。

2.2分布式共识

我们以通用的方式讨论了集权和去中心化。现在我们来看看比特币在更技术层面的去中心化。在本次讨论中将出现的一个关键术语是共识,具体而言,是分布式共识。建立分布式电子现金系统解决的关键技术问题是实现分布式共识。直观地,你可以想到我们的目标是分散ScroogeCoin,这是我们在第一章看到的假想货币。

分布式共识具有多种应用,并已在计算机科学方面进行了数十年的研究。传统的激励应用是可靠的分布式系统。想象一下,您负责Facebook等大型社交网络公司的后端。这种系统通常具有数千甚至数百万台服务器,这些服务器一起形成一个大量的分布式数据库,记录系统中发生的所有动作。每条信息必须记录在该后端的几个不同的节点上,并且节点必须与系统的整体状态保持一致。

具有分布式共识协议的含义远远超出了这一传统应用。如果我们有这样一个协议,我们可以使用它来构建一个庞大的,分布式的键值存储,将任意键或名称映射到任意值。一个分布式的键值存储又可以实现许多应用。例如,我们可以使用它来构建一个分布式的域名系统,它只是人类可理解的域名与IP地址之间的映射。我们可以建立一个公共密钥目录,它是电子邮件地址(或某种其他形式的真实身份)与公共密钥之间的映射。

这是最直观的分布式共识,但对于提供技术定义是有用的,因为这将有助于我们决定给定的协议是否符合要求。

分布式共识协议:有n个节点,每个都有一个输入值。其中有一些节点有故障或恶意。分布式共识协议具有以下两个属性:

·它必须终止于所有在价值上达成一致的诚实节点

··该值必须由一个诚实的节点生成

在比特币的背景下这是什么意思?要了解分布式共识如何在比特币中发挥作用,请记住Bitcoin是一个点对点系统。当Alice想支付给Bob时,她实际上做的是将交易通过对等网络广播到所有比特币节点。见图2.1

图2.1广播一个交易为了支付Bob,Alice将交易广播到整个Bitcoin对等网络

顺便提一句,你可能已经注意到,Alice将交易广播到所有比特币点对点节点,但是Bob的电脑在这张图中没有位置。Bob当然可以运行对等网络中的一个节点。事实上,如果他希望被告知这个交易确实发生了,并且他得到了报酬,那么运行一个节点可能是个好主意。尽管如此,Bob并不需要在网络上侦听;Bob不必要通过运行一个节点来收到资金。不管他是否在网络上操作一个节点,比特币都将是他的。

究竟什么样的节点可能希望在比特币网络上达成共识呢?鉴于各种用户正在将这些交易广播到网络,节点必须准确同意广播哪些交易以及这些交易发生的顺序。这将导致系统的单个全局分类账。回想一下,在ScroogeCoin中,为了优化,我们将交易放在区块中。同样,在比特币方面,我们在逐区块的基础上达成共识。

所以,在任何一个给定的点上,对等网络(p2p)中的所有节点都有一个由一系列区块组成的分类账,每个区块都包含一个已经达成共识的交易列表。此外,每个节点都有一个听说了,但尚未被包含在区块链中的未完成交易池。对于这些交易,共识尚未产生,因此根据定义,每个节点可能有稍微不同版本的未完成交易池。实际上,这是因为对等网络不完美,所以一些节点可能已经听说过其他节点没有听说过的交易。

节点如何在区块上达成共识?一种做到这点的方法是:定期每隔10分钟,系统中的每个节点都会提议自己未完成的交易池作为下一个区块。然后节点执行一些共识协议,其中每个节点的输入是它自己提出的区块。现在,一些节点可能是恶意的,并将无效的交易放入其区块中,但是我们可以假定其他节点是诚实的。如果共识协议成功,则将选择有效的区块作为输出。即使所选区块仅由一个节点提议,只要该区块有效,则它也是一个有效的输出。现在可能有一些有效的但未完成的交易未被包含在块中,但这不是问题。如果某些交易以某种方式没有进入这个特定的块,那么它只能等待进入下一个块。

前一段中的方法与Bitcoin如何工作有一些相似之处,但它并不完全如此。这种方法有一些技术问题。首先,一般来说,共识是一个难题,因为节点可能会崩溃或者完全是恶意的。其次,特别是在比特币上下文中,网络是非常不完美的。它是一个对等系统,并不是所有的节点对都相互连接。例如,由于互联网连接不良,网络中可能会出现故障,而且运行协商一致的协议,其中所有节点都必须参与,这是不可能的。最后,系统中会有很多延迟,因为它遍布互联网。

侧栏:比特币协议必须对两种障碍达成一致:网络中的缺陷,如延迟和节点崩溃,以及一些节点故意破坏进程的企图。

这种高延迟的一个特定后果是没有全球时间的概念。这意味着并不是所有的节点都能够简单的基于观察时间戳来同意事件的常见排序。因此,共识协议不能包含形式的指令,“步骤1中发送第一个消息的节点必须在步骤2中执行X”。这根本不起作用,因为并不是所有的节点都将同意在协议的步骤1中首先发送哪条消息。

不可能的结果全球时间的缺乏严重限制了可被用于共识协议的算法集。事实上,由于这些限制,大多数分布式共识的文献有点悲观,许多不可能的结果已被证明。一个非常有名的不可能的结果涉及拜占庭将军的问题。在这个经典问题上,拜占庭的军队被分为师,各由一个将军指挥。将军通过信使沟通,制定联合行动计划。一些将领可能是叛徒,有可能故意试图破坏进行,以便使忠诚的将军无法达成一个统一的计划。这个问题的目标是让所有忠诚的将军达成同样的计划,没有叛国的将军能致使他们采取坏的计划。已经证明,如果有三分之一以上的将军是叛徒,计划是不可能实现的。

一个更为微妙的不可能的结果,因首先证明了它的作者的名字而广为人知,被称为费舍尔-林奇-帕特森不可能的结果。在某些条件下,包括以确定性方式行事的节点,他们证明即使是单一的错误进程,共识也是不可能达成的。

尽管有这些不可能的结果,文献中也有一些共识协议。这些协议中更广为人知的一个是Paxos。Paxos做出了一些妥协。一方面,它从不产生不一致的结果。另一方面,它接受在某些条件下,即使罕见的条件下的交易,该协议可能会卡住,不取得任何进展。

打破传统假设但有一个好消息:这些不可能的结果在一个非常特殊的模型中被证明。它们旨在研究分布式数据库,且该模型对比特币的设置并不非常好,因为比特币违反了模型中许多内置的假设。在某种程度上,结果告诉我们更多关于模型,而不是关于分布式共识的问题。

具有讽刺意味的是,随着目前的研究状况,Bitcoin的共识在实践中比在理论上更好。也就是说,我们观察到了工作的共识,但没有发展理论来充分解释它为什么工作。但是,发展这样的理论是重要的,因为它可以帮助我们预测不可预见的攻击和问题,只有当我们对比特币共识如何工作的有了很大的理解,才能保证比特币的安全性和稳定性。

传统模式下,比特币违约的共识假设是什么?首先,它介绍了激励的思想,这对于分布式共识协议是新颖的。这只能在比特币上可能实现,因为它是一种货币,因而具有激励参与者诚实行事的自然机制。所以比特币在一般意义上并不能很好地解决分布式共识问题,但在货币体系的具体情况下能得到解决。

第二,比特币信奉随机性的概念。我们将在接下来的两节中看到,比特币的共识算法在很大程度上依赖于随机化。另外,它摆脱了共识的特定出发点和结束点的概念。相反,共识在很长一段时间内发生,在实际系统中大约一个小时。但即使在那个时间结束时,节点也不能确定任何特定的交易或区块已经成为分类账。相反,随着时间的推移,你对任何区块的看法将与最终的共识视图相匹配的可能性增加,视图分歧的几率也将呈指数下降。模型中的这些差异是比特币如何绕过分布式共识协议的传统不可能结果的关键。

2.3使用区块链的无身份共识

在本节中,我们将研究比特币共识算法的技术细节。回想一下,比特币节点没有持久的长期身份。这是与传统的分布式共识算法的另一个区别。缺乏身份的一个原因是,在对等的系统中,没有中央权力机构为参与者分配身份,并确保他们不会随意创建新的节点。这个技术术语是Sybil攻击。Sybils只是恶意的对手创建的节点副本,它看起来像有很多不同的参与者,实际上所有这些伪参与者都是由同一个对手控制的。另一个原因是匿名本质上是比特币的一个目标。即使可能或容易为所有节点或所有参与者建立身份,我们也不一定要这样做。虽然Bitcoin并没有提供强有力的匿名保证,因为一个人所做的不同交易通常可以联系在一起,但它确实有这样的特性:没有人被迫透露他们的现实身份,比如他们的名字或IP地址,以便参加。这是Bitcoin设计的一个重要特性和核心特征。

如果节点确实有身份,那么设计会更容易。对于初学者来说,身份将允许我们放入表单的协议指令:“现在具有最低数字ID的节点应该采取一些步骤。”没有身份,可能的指令集更受约束。但是,对于节点来说,具有身份更重要的原因是为了安全。如果节点被识别,且创建新的节点身份不再微不足道,那么我们就可以对恶意节点的数量做出假设,从中派生出安全属性。

我们可以通过做出较弱的假设来弥补身份缺失。假设在某种程度上有能力在系统中选择一个随机节点。一个很好的激励类比是彩票或抽奖,或者任何数量的很难追踪人的现实生活的系统,给他们身份,然后验证这些身份。我们在这些情况下所做令牌(代币)或者类似的东西。这使我们随后能够选择一个随机的令牌ID,并调用该ID的所有者。所以现在呢,要有一个信念的飞跃,并且假设有可能以这种方式从比特币网络中选择一个随机节点。进一步假设,目前这个代币生成和分配算法足够智能,所以如果对手要尝试创建很多Sybil节点,那么所有这些Sybils一起只会得到一个令牌。这意味着对手无法通过创建新的节点来增加他的权力。如果你认为这里有很多假设,别担心。在本章的后面,我们将删除这些假设,并详细显示如何在Bitcoin中实现与之相当的属性。

隐含的共识这种随机节点选择的假设有可能成为隐含的共识。我们的协议中有多个回合,每个对应于区块链中的不同块。在每一轮中,一个随机节点以某种方式被选择,并且该节点提议链中下一个区块。没有一致的算法来选择区块,也没有任何类型的投票。所选节点单方面提议区块链中的下一个区块将是什么。但是,如果那个节点是恶意的呢?那么有一个处理这问题的过程,但它是一个隐含的过程。其他节点将通过选择是否在其顶部构建区块来隐含的接受或拒绝该区块。如果它们接受该区块,它们将通过扩展包含接受区块的块链来表示它们的验收。相比之下,如果他们拒绝该区块,他们将通过忽略该区块来扩展链,并建立在他们接受的前一个区块之上。回想一下,每个区块包含它扩展的区块的哈希。这是一种技术机制,允许节点示意哪个区块是它们正在扩展的区块。

比特币共识算法(简)

该算法得到了简化,假设它具有以不易遭受Sybil攻击的方式选择随机节点的能力。

1.新的交易将广播到所有节点

2.每个节点将新的交易收集到区块中

3.在每一轮中,一个随机节点开始广播它的区块

4.其他节点只有在区块中所有的交易都有效(未使用,有效签名)时才接受该区块

5.节点通过将其哈希包含在所创建的下一个区块中来表示对该区块的接受

现在让我们来看看为什么这个共识算法有效。为了做到这一点,让我们考虑一个恶意对手——我们称之为Alice——可能会颠覆这个过程。

窃取Bitcoin Alice可以在她无法控制的地址上简单地窃取属于另一个用户的比特币吗?不,即使是由Alice来提议区块链的下一个区块,她也不能窃取其他用户的比特币。这样做将需要Alice创建一个使用该硬币的有效交易。这将需要Alice伪造所有者的签名,如果该签名使用的是安全数字签名方案,则她不能这样做。所以只要底层的加密是坚实的,她就不能简单地窃取比特币。

拒绝服务攻击 让我们考虑另一次攻击。说Alice真的不喜欢其他像Bob一样的用户。然后,Alice可以决定,她不会将任何鲍伯地址的交易包含在她提议进入区块链的任何区块中。换句话说,她拒绝为Bob服务。虽然这是Alice可以尝试的一个有效的攻击,但幸运的是这只是一个小烦恼。如果Bob的交易没有进入Alice提议的下一个区块,那么他只要等到一个诚实的节点有机会提出一个区块,然后他的交易将进入该区块。所以这也不是一个很好的攻击。

双重攻击Alice可能会尝试发起双重攻击。为了理解这个工作原理,让我们假设Alice是由Bob管理的一些在线商家或网站的客户,他提供一些在线服务来换取比特币的支付。比方说,Bob的服务允许下载一些软件。这里可能是双重花费攻击如何工作的。Alice在Bob的网站上向她的购物车添加了一个项目,服务器请求付款。然后,Alice从她的地址创建一个比特币交易到Bob的地址,并将其广播到网站。比方说,一些诚实的节点创建下一个区块,并在该区块中包括此交易。所以现在有一个由一个诚实的节点创建的区块,它包含代表从Alice向商人Bob付款的一个交易。

回想一下,一个交易是一个包含Alice签名的一个数据结构,一个支付给Bob的公钥指令,和一个哈希。这个哈希表示一个Alice收到的先前交易输出的指针,现在正在消费。该指针必须引用在共享链中先前区块中的交易

注意,顺便说一句,这里有两种容易混淆的不同类型的哈希指针。区块包括一个哈希指针,指向他们正在扩展的上一个区块。交易包括一个或多个哈希指针,这些指针指向正在赎回的前一个交易输出。

让我们回到Alice如何发起双重支付攻击。最新的区块由一个诚实的节点生成,并包括一个Alice支付给Bob进行软件下载的交易。在看到这个包含在区块链中的交易的时候,Bob断定Alice已经支付给了他,并允许Alice下载软件。假设下一轮中选择的下一个随机节点恰好由Alice控制。现在,既然Alice提议下一个区块,她可以提出一个忽略了包含对Bob付款的区块,取而代之的是一个指向前一个区块的指针。此外,在她提议的区块中,Alice包含一个交易,将她发送给鲍伯的硬币转移到她自己控制的另一个地址。这是一个经典的双重支付模式。由于两笔交易花费相同的硬币,所以只有其中之一可以包含在区块链中。如果Alice成功的在区块链中将付款包含在自己的地址中,那么她支付Bob的交易是无用的,因为它永远不会被包含在区块链中。

图2.2双重支付尝试 Alice创造了两个交易:一个是她发送比特币给Bob,另一个是她通过发送到她控制的不同地址来双重支付这些比特币。当他们花费相同的比特币时,这些交易中只有一个可以包含在区块链中。箭头中是从一个区块到前一个区块的指针,其扩展在它自己的内容中包含前一个区块的哈希。Ca用于表示Alice拥有的硬币。

我们怎么知道这个双重支付的尝试是否会成功?这取决于哪一个区块将最终导致长期共识链——一个与Alice→Bob交易或一个与Alice→Alice交易。什么决定哪个区块将被包含进去?诚实节点遵循延长最长有效分支的政策,那么分支机构将扩展哪一个?这没有正确的答案!在这一点上,两个分支拥有相同的长度——它们只在最后一个区块中有所不同同,而这两个区块都是有效的。选择下一个区块的节点可能决定在其中一个区块上进行构建,然后,这个选择将在很大程度上决定双重支付是否能够成功。

一个微妙的观点:从道德的角度来看,包含支付给Bob的交易的区块和包含Alice将这些硬币花费到自己地址的交易的区块之间有明显的区别。但是,这个区别只是基于我们对Alice首先支付Bob,并试图双重支付的故事的了解。然而,从技术角度来看,这两个交易完全相同,两个区块同样有效。正在看这一点的节点确实无法告诉我们哪个是合乎道德的合法交易。

在实践中,节点通常遵循扩展它们在对等网络中首先听到的区块的启发式方法。但是,这不是一个可靠的规则。在任何情况下,由于网络延迟,可能很容易的是,节点首先听到的区块实际上是第二个创建的区块。因此,至少有一些机会,下一个获得提议区块的节点将扩展包含双重支付的区块。Alice还可以进一步尝试通过贿赂下一个节点来增加这种情况发生的可能性。如果下一个节点以任何原因构建在双重支付区块上,那么这个链现在将比包含Bob交易的那个链长。此时,下一个诚实节点更有可能继续在这条链上构建,因为它更长。这个过程将会持续下去,包含双重支付的区块将越来越有可能成为长期共识链的一部分。另一方面,包含与Bob交易的区块被网络完全忽略,现在称之为孤立区块。

现在让我们从Bob——商人的角度重新考虑这个整体情况。了解Bob如何保护自己免受这种双重支付攻击是理解Bitcoin安全性的关键部分。当Alice广播代表她付给Bob的交易时,Bob正在网络上收听,甚至在下一个块被创建之前听到关于这个事务的消息。如果Bob比我们之前描述的更愚蠢,他可以在网站上完成结账过程,并允许Alice在当时下载软件。这被称为零确认交易。这导致了比之前描述的更多更基本的双重支付攻击。以前,为了进行双重支付攻击,我们不得不假设一个恶意参与者控制提议的下一个区块的节点。但是如果Bob允许Alice在交易接收到区块链上的单个确认之前下载软件,则Alice可以立即广播双重支付交易,而诚实节点可能将其包含在下一个区块中,而不是支付Bob的交易。

图2.3 Bob商人的观点 这是Alice从Bob商人的角度看的双重支付攻击。为了保护自己免受此攻击,Bob应该等到Alice支付给他的交易包含在区块链中,并且有几个确认后再交易

另一方面,即使交易被包含在一个区块中,一个谨慎的商人不会将该软件发布给Alice,并将继续等待。如果Bob看到Alice成功地发动了双重支付攻击,他意识到包含Alice对他支付的那块已经被孤立了。他应该放弃交易,不让Alice下载软件。相反,尽管发生了双重支付攻击这种情况,接下来的几个节点将Alice→Bob的交易创建在区块上,Bob将获得这一交易将在长期共识链上创建的信心。

一般来说,一个交易得到的确认越多,就越有可能在长期共识链上。回想一下,诚实节点的行为总是扩展它们看到的最长的有效分支。包含双重支付的较短分支赶上更长分支的机会变得越来越小,因为长分支比任何其他分支长得多。如果只有少数节点是恶意的,这一点尤其如此——对于较短的分支要迎头赶上,必须连续挑选几个恶意节点。

事实上,双重支付的概率随着确认的数量呈指数下降。那么,如果你感兴趣的交易已经收到K确认,那么双重支付交易出现在长期共识链上的概率指数下降为k的函数。在比特币生态系统中使用的最常见的启发式是等待六次确认。数字六并没有什么特别的。这仅仅是一个很好的,在你等待的时间和保证你感兴趣的交易最终出现在共识区块链上的折衷方案。

总而言之,防范无效的交易是完全加密的。但它是以共识的方式执行的,这意味着如果一个节点尝试包含一个加密无效的交易,则交易不会在长期共识链中最终出现的唯一原因是因为大部分节点是诚实的且不会将无效交易包含在区块链中。另一方面,防止双重支付也纯粹是共识的。密码学对此毫无意义,两个代表双重支付尝试的交易从加密的角度来看都是有效的。但是,共识性决定了哪一个最终将在长期共识链上。最后,你永远不会百分之百地确定你感兴趣的交易是在共识分支上。但是,这个指数概率保证是相当好的,经过约六次交易,几乎没有出错的机会。

2.4奖励和工作证明

在上一节中,我们对Bitcoin的共识性算法进行了基本的了解,并解释了为什么我们相信它安全是一个很好的自觉。但从本章开始的地方回想起来,Bitcoin的分布化部分是技术性机制,部分是聪明的激励工程。到目前为止,我们主要关注的是技术机制。现在让我们谈谈在Bitcoin上发生的激励工程。

我们要求你早日实现信念的飞跃在假设我们能够选择一个随机节点,也许更成问题的是,至少有50%的时间,这个过程会挑选一个诚实的节点。这种诚实的假设是特别有问题的,如果有资金鼓励参与者颠覆这个过程,在这种情况下,我们不能真的假定一个节点将是诚实的。那么问题就变成了:我们能给节点一个诚实行为的激励吗?

再次考虑确认一次后的双重支付攻击(图2.3)我们可以以某种方式惩罚创建包含双重支付交易的节点吗?嗯,这不是真的。正如我们前面提到的,很难知道哪个是道义上合法的交易。但即使我们这样做了,由于没有身份,仍然很难惩罚节点。所以反过来,让我们把问题抛到一边,问我们可以奖励那些创建了长期共识链最终区块的节点吗?那么,再一次,由于这些节点没有透露他们的真实身份,我们不能把他们的现金邮寄到他们的家庭住址。如果有某种数字货币,我们可以用它来代替…你可能会看到这是怎么回事。我们将使用Bitcoin奖励创建了这些区块的节点。

我们先暂停一会。我们迄今为止所描述的一切只是一种实现分布式共识的抽象算法,它并不是特定于哪个应用。现在我们要突破这个模式,我们将使用这样一个事实,即我们通过这种分布式共识过程构建的应用实际上是一种货币。具体来说,我们将通过支付这种货币单位来鼓励节点表现诚实的态度。

区块奖励 这怎么做?Bitcoin有两种独立的激励机制。第一个是区块奖励。根据Bitcoin的规则,创建区块的节点将在该区块中包含一个特殊交易。这个交易是一个硬币创建交易,类似于Scroogecoin中的CreateCoins,节点也可以选择此交易的收件人地址。当然,该节点通常会选择属于自己的地址。你可以奖此视为对节点的支付,以换取在共识链上创建区块的服务。

在撰写本文时,区块奖励的价值固定为25Bitcoin。但实际上,每隔21万个区块就减半。根据我们即将看到的区块创建速度,这意味着大概每四年下降一次。我们现在处于第二个时期。Bitcoin存在的头四年,区块奖励的是50个Bitcoin,现在是25个。它将要保持减半的速率。我们很快就会看到,这有一些有趣的意义。

你可能想知道为什么区块奖励诚实的行为。根据我们迄今为止所说的,可能会出现无论节点是提议有效的区块还是恶意行为,这个节点都会获得区块奖励。但是,这是错误的!想一想——这个节点怎么“收集”它的奖励?只有在有争议的区块结束于长期共识分支的情况下才会发生这种情况,因为就像其他所有交易一样,只有最终达成共识链,硬币创建的交易才会被其他节点接受。这是激励机制背后的核心理念。这是一个非常微妙但异常强大的技巧。它激励节点以任何他们认为将获得其他节点来扩展它们的区块的方式来表现(活动)。因此,如果大多数网络遵循最长的有效分支规则,则会激励所有节点继续遵循该规则。这是Bitcoin的第一个激励机制。

我们提到,每隔21万个区块(或大约四年),区块奖励减半。在图2.4中,该曲线的斜率要减半。这是一个几何级数,你可能知道它意味着有一个有限和。它计算出来共计2100万Bitcoin。

2.4 区块奖励每四年减半,将比特币的总供应量限制在2100万

值得注意的是,这是允许创建新比特币的唯一途径。没有其他硬币产生机制,这就是为什么2100万是有多少比特币可以存在的一个最终和总数(至少按照现在的规则)。这个新的区块创建奖励实际上将在2140年用完,就像现在一样。这是否意味着系统将在2140年停止工作,变得不完全,因为节点不再有诚实行为的动机?不完全是。区块奖励只是比特币的两个激励机制中的第一个。

交易费用第二种激励机制被称为交易费。任何交易的创建者都可以选择使交易输出的总值小于其输入的总值。无论是谁创建的区块,首先将交易嵌入到区块链中去收集差额,这将扮演交易费用。所以,如果你是一个创建一个包含200个交易区块的节点,那么所有这200个交易费用的总和将被支付给你放入该区块的地址。交易费纯粹是自愿的,但我们预计,根据对系统的了解,随着区块奖励开始消耗殆尽,对于用户来说,为了获得合理的服务质量,包含交易费用将变得越来越重要,几乎是强制性的。在一定程度上,这已经开始发生了。但目前尚不清楚系统将如何演变;这真的取决于很多还没有完全解决的游戏理论。这是比特币公开研究的一个有趣的领域。

我们描述的共识机制仍然存在一些问题。第一个主要的是信念的飞跃,我们要求你采取某种方式,使我们可以选择一个随机节点。第二,我们创造了一个新的问题,让节点参与这些激励。该系统可能会变得不稳定,因为激励导致对于所有人都能免费地运行比特币节点,每一个人都希望去运行来捕获这些奖励。第三个是一个更棘手的版本问题,一个对手可能会创建大量的Sybil节点来尝试颠覆共识过程。

采矿和工作证明事实证明,所有这些问题都是相关的,所有这些问题都有相同的解决方案,这就是所谓的工作证明。工作证明背后的关键思想是,我们通过选择与资源成比例的节点来近似选择随机节点,同时我们希望没有人可以垄断。例如,如果这个资源是计算能力,那么它就是一个工作系统证明。或者,它可能与货币的所有权成比例,这就是所谓的股权证明。虽然它不在比特币中使用,但股权证明是一个合法的替代模型,它用于其他加密货币。我们将在第8章中看到关于股权证明和其他工作证明变体的更多信息。

回到工作证明。让我们尝试更好地了解根据计算能力按比例选择节点的含义。理解这种情况的另一种方法是,我们允许节点通过使用其计算能力相互竞争,这将导致节点以该比例自动选择。另一种工作证明的观点是,我们正在适度地创造新的身份。这对身份创造是一种征税,因此对Sybil的攻击也是一种负担。 这可能看起来有点模糊,所以让我们来看看Bitcoin中使用的工作系统证明的细节,这应该使事情变得更加清晰。

比特币使用哈希谜题实现工作证明。为了创建一个区块,建议该区块的节点需要找到一个数字,或者是随机数,这样当你连接了随机数,先前的哈希和包含该区块的交易列表,采用这整个字符串的哈希,那么哈希输出应该是一个数字,它落入一个相对于该哈希函数大得多的输出空间的相当小的目标空间。我们可以将这样的目标空间定义为低于某个目标值的任何值。在这种情况下,随机数必须满足以下不等式:

H(nonce || prev_hash || tx || tx || ... || tx)

正如我们前面看到的,通常一个区块包含节点提出的一系列交易。另外,一个区块还包含一个指向前一个区块(我们松散地使用哈希指针术语。这个指针在这个上下文中只是一个字符串,因为它不需要告诉我们在哪里找到这个区块。我们将通过向网络上的其他对等端查询该区块。重要的部分是在请求区块的其他对等端时哈希作为一个ID,一旦我们获得了该区块,我们就可以验证该区块)的哈希指针。此外,我们现在要求一个区块也包含一个随机数。这个想法是,我们希望适度难的找到满足这个必须属性的随机数,就是将整个区块哈希在一起,包括该随机数,这将导致特定类型的输出。如果哈希函数满足第1章中的谜题友好的属性,那么成功解决这个哈希谜题的唯一方法就是一个接一个地尝试足够多的随机数,直到你幸运地得到它。具体地说,如果这个目标空间只占整体输出空间的百分之一,那么你必须在你得到幸运之前尝试100个随机数。实际上,这个目标空间的大小几乎不到输出空间的百分之一。它比我们稍后看到的要小得多。

这种哈希谜题和工作证明的概念完全不需要神奇地选择一个随机节点。相反,节点一直简单独立地竞争,以解决这些散列谜题。有一段时间,其中一个节点将会幸运地找到一个满足这个属性的随机数。那个幸运的节点随后就提议下一个区块。这就是系统完全分散化的原因。没有人决定是哪个节点提议下一个区块。

难以计算哈希谜题有三个重要的属性。第一个是他们需要很难计算。我们说适当的难度,你会明白为什么这个随着时间会有所变化。截止2014年年底,每个区块的难度级别为10个哈希。换句话说,目标空间的大小只是哈希函数输出空间大小的1/10。这是一个很大的计算量——例如,对于商用笔记本电脑来说,这是不可能的。因此,只有一些节点甚至劳神地在这个区块创建过程中竞争。这个反复尝试和解决这些哈希谜题的过程被称为比特币挖矿,我们称之为参与节点的矿工。尽管技术上任何人都可以称为矿工,但由于采矿成本高,采矿生态系统中的权力很集中。

参数化成本第二个属性是我们希望成本是可参数化的,而不是所有时间的固定成本。实现的方式是,比特币对等网络中的所有节点将自动重新计算目标,即目标空间的大小,作为每个2016块的输出空间的一小部分。他们重新计算目标,使得比特币网络中产生的连续区块之间的平均时间约为10分钟。平均间隔时间为10分钟,2016块区块的工作时间为两周。换句话说,目标的重新计算大概每两周发生一次。

我们来想想这是什么意思。如果你是一个矿工,而且你已经将一定数量的硬件投入比特币矿业,但整体采矿生态系统正在增长,更多的矿工正在进军,或者他们正在部署更快的硬件,这意味着在两个星期的时间里,比预期的区块要多一些。因此,节点将自动重新调整目标,并且你能够找到一个区块需要做的工作量将会增加。所以如果你投入固定的硬件投资,你发现区块的速度实际上取决于其他矿工在做什么。有一个非常好的公式来捕获这一点,这就是说,任何给定的矿工Alice将要赢得下一个区块的概率相当于她控制的全局哈希能力的百分比。这意味着如果Alice的采矿硬件占总哈希能力的大约百分之零点一,那么每1000个区块中大约会有一个区块被她发现。

这次调整的目的是什么?为什么要保持这个10分钟的不变量?原因很简单。如果区块之间的距离非常接近,那么会有很多低效率,我们将失去在一个区块中放置大量交易的优化优势。对于数字10,没有什么神奇的,如果你想从10分钟降到5分钟,那可能会很好。有很多关于山寨币或其他加密货币应该具有的理想块延迟有很多讨论。但是,尽管对理想的延迟有一些分歧,但每个人都同意应该是一个固定的数额。它不能被允许没有限制的下降。这就是为什么我们有自动目标重新计算功能的原因。

这种成本函数和工作证明的设置方式使我们能够重新构建我们的安全假设。在这里,我们终于摆脱了我们要求你早些时候采取的最后的信念飞跃。而不是不知何故地说,大多数甚至没有身份,也不清楚那意味着什么的节点在上下文中都是诚实的,我们现在可以爽快地声明,如果大多数矿工遵照协议或者诚实的通过哈希加权,比特币的很多攻击是不可行的。这是真的,因为如果大多数被哈希加权的矿工都是诚实的,则提议下一个区块的竞争将自动确保至少有50%的机会在任何时候提出的下一个区块来自一个诚实的节点。

边栏在分布式系统和计算机安全性的研究领域,通常假设有一定百分比的节点是诚实的来表明系统的工作原理,即使其他节点的行为是任意的。这基本上是我们在这里所采取的方法,除了我们通过哈希加权计算节点的多数。原始的比特币白皮书对这种类型也有分析。

但博弈论领域提供了一个完全不同的,可以说是更为复杂,更为现实的方式来确定系统的行为方式。在这种观点下,我们不会讲节点分解为诚实的和恶意的。相反,我们假设每个节点根据它的奖励来行动。每个节点选择一个(随机)策略以最大化其收益,同时考虑到其他节点的潜在策略。如果协议和激励设计的很好,那么大多数节点绝大多数时候都遵循这些规则。“诚实”的行为只是许多人的一个策略,我们没有特别的道德观念。

在博弈论的观点中,最大的问题是默认的矿工行为是否是“纳什均衡”,也就是说,它是否代表了一个稳定的情况,即矿工不能通过偏离诚实的行为来实现最高的回报。这个问题仍然是存有争议的,也是一个积极的研究领域。

解决哈希谜题是概率性的,因为没有人可以预测哪个随机数能解决哈希谜题。唯一的办法是一个接一个地尝试随机数,希望一个能成功。在数学上,这个过程被称为伯努利试验。伯努利试验是一个具有两个可能结果的实验,每个结果发生的概率在连续试验中是固定的。这里,两个输出结果就是哈希是否落在目标中,并假定哈希函数的行为像一个随机函数,这些输出结果的概率是固定的。通常,节点尝试伯努利试验的许多随机数,一个离散的概率过程,可以很好地被连续概率过程近似地称为泊松过程,过程中所发生的事件以恒定的平均速率独立发生。所有这些的最终结果是,显示找到下一个区块的时间的相对可能性的概率密度函数如图2.5所示。

图2.5发现下一个区块的时间的概率密度函数

这被称为指数分布。有一个很小的可能性,如果一个区块现在被发现,下一个区块将在几秒钟或一分钟之内被发现。而且还有一些很小的可能性,要花一个较长的时间,比如说一个小时,才能找到下一个区块。但总的来说,网络会自动调整难度,以便区块的间隔时间长期维持在一个平均时间——10分钟。请注意,图2.5显示了整个网络创建区块的频率,不关心哪个矿工真正找到区块。

如果你是一个矿工,你可能对花多长时间才能找到一个区块感兴趣。这个概率密度函数是怎么样的?它将具有相同的形状,但它只是在x轴上将具有不同的刻度。再次,它可以用一个很好的方程表示。

对于特定的矿工:

如果你拥有全网络0.1%的哈希能力,这个方程式告诉我们,你将每隔10000分钟找到一个区块,这只需要一个星期。不仅你们之间区块的平均时间是非常高的,而且你发现的区块之间的时间差异也将非常高。这有一些重要的后果,我们将在第5章中看到。

简单的验证

现在让我们看看这个工作证明函数的第三个重要属性,即验证一个节点是否正确计算了工作证明是微不足道的。即使它需要一个节点,平均来说,10尝试找到一个使区块哈希落在目标下的随机数,该随机数必须作为区块的一部分发布。因此,任何其他节点都可以查看区块内容,将它们全部哈希在一起,并验证输出是否小于目标。这是一个相当重要的财产,因为它再次允许我们摆脱集权。我们不需要任何集中的权力来验证矿工正在做正确的工作。任何节点或任何矿工都可以立即验证另一个矿工发现的区块是否符合工作性能证明。

2.5把一切放在一起

开采成本现在让我们来看看矿业经济学。我们提到作为一个矿工经营相当昂贵。在目前的困难水平上,找到一个单独的区块需要大约10个哈希的计算能力,区块奖励大约是25比特币,这在当前的汇率下是一笔可观的金额。这些数字可以轻松计算一个人是否有利可图,我们可以用简单的语句来获得这个决定:

假如

挖矿奖励>挖矿成本

矿工盈利

挖矿奖励=区块奖励+交易费用

挖矿成本=硬件投入+运营成本(电力,冷却,等等.)

从根本上来说,矿工获得的矿业奖励是按照区块奖励和交易费来计算的。矿工问自己如何与总支出(硬件和电费)进行比较。

但是,这个简单方程式有一些复杂。首先,你可能已经注意到,硬件成本是固定成本,而电费是随时间推移的可变成本。另一个复杂的因素是,矿工获得的奖励取决于他们发现区块的速率,这不仅取决于硬件的能力,还取决于他们的哈希率与全局哈希率的比值。第三个复杂因素是,矿工的成本通常以美元或其他传统货币计价,但他们的报酬是用比特币计算的。所以这个方程在任何给定的时间都有比特币汇率的隐藏依赖。最后,到目前为止,我们假设矿工有兴趣诚实地遵守协议。但矿工可能会选择使用其他一些采矿策略,而不是总是试图延长最长的有效分支。所以这个方程式并没有抓住矿工可以采用的不同策略的所有细微差别。实际上,分析它是否有意义的是一个不容易回答的复杂的博弈论问题。

在这一点上,我们已经很好地理解了比特币是如何实现分散化的。现在我们将再回顾一下高层次的观点,把它们放在一起,以便更好的理解。


让我们从身份开始吧。据我们所知,参与比特币协议并不需要现实世界的身份。任何用户都可以随时创建任意数量的假名密钥对。当Alice想在比特币中支付Bob时,比特币协议并未提及Alice如何得知Bob的地址。给定这些假名密钥对以身份,交易基本上是广播到比特币对等网络的消息,这些消息是将硬币从一个地址传送到另一个地址的指令。比特币只是交易输出,我们将在下一章中更详细地讨论这一点。

边栏比特币没有像美元这样的固定面额,特别是没有“1比特币”的特殊名称。比特币只是交易输出,而在当前的规则中,它们可以具有8位小数位精度的任意值。最小可能值为0.00000001BTC(比特币),称为1中本聪。

比特币对等网络的目标是将所有新交易和新区块传播到所有比特币对等节点。但是网络是非常不完善的,并且尽最大努力来传递这些信息。系统的安全性不是来自于对等网络的完善。相反,安全来自于本章大部分章节研究的区块链和共识协议。

当我们说一个交易被包含在区块链中时,我们真正的意思是交易已经取得了大量的确认。在我们充分相信其包含之前,没有固定的数字来定义需要多少确认是必要的,但是六个是一种常用的启发式。交易获得的确认越多,你可以更确定此交易是共识链的一部分。经常会有孤儿区块或区块不能进入共识链。有各种各样的原因可能导致区块成为孤儿区块。该区块可能包含无效的交易或双重支付的尝试。它也可能只是网络延迟的结果。也就是说,两个矿工可能只相差几秒钟之内找到新的区块。所以这两个区块几乎同时广播到网络上,其中一个将不可避免地被孤立。

最后,我们看看哈希谜题和挖矿。矿工是特殊类型的节点,他们决定在这场创建新区块的游戏中竞争。只要其他矿工建立在他们的区块上,他们就会获得新造币比特币(新区块奖励)和现有比特币(交易费)的奖励。一个微妙但至关重要的一点:说Alice和Bob是两个不同的矿工,Alice的计算能力是Bob的100倍。这并不意味着Alice将永远赢得比赛,找到下一个区块。相反,Alice和Bob找到下一个块的概率,基本符合100比1的比例。从长远来看,Bob平均发现区块的数量是Alice的百分之一。

我们预计矿工通常会处于靠近经济均衡的地步,在这个意思上,它们在硬件和电力方面的支出大致等于他们获得的回报。原因是如果矿工一直亏损,她可能会停止采矿。另一方面,对比采矿硬件和电力成本,如果采矿非常有利可图,则采矿硬件将进入网络。哈希率的增加将导致难度增加,每个矿工的预期奖励将会下降。

这种分布式共识的概念渗透到比特币相当深层次。在传统货币中,共识确实在一定程度上发挥作用。具体来说,由一个共识程序决定了货币的汇率。在比特币的世界也是如此;我们需要对比特币的价值达成共识。但是在比特币方面,另外,我们需要对分类账的状态达成共识,这就是靠区块链来实现的。换句话说,即使你拥有再多比特币账户,也要达成共识。当我们说Alice拥有一定数额或数量的比特币时,我们实际上意味着,在比特币对等网络,如在区块链中记录的那样,考虑所有Alice地址拥有比特币数量的总和。这是比特币真实性的本质:比特币的所有权只不过是其他节点同意给定的一方拥有这些比特币。

最后,我们需要对系统的规则达成共识,因为偶尔,系统的规则必须改变。比特币的规则有两种类型的变化,分别被称为软叉和硬叉。我们将把这些差异的讨论推迟到后面的章节,我们将详细讨论这些差异。

获取一个加密的外来物品。另一个微妙的概念是引导。比特币的三个不同想法之间存在棘手的相互作用:区块链的安全性,采矿生态系统的健康状况以及货币的价值。我们显然希望区块链可以保证比特币成为一种可行的货币。为了使区块链得到安全,对手必须无法压倒共识程序。这反过来意味着对手不能创建大量的采矿节点,占据新区块创建的50%或更多。

但是什么时候会实现呢?一个先决条件是拥有一个健康的采矿生态系统,由大量诚实的协议跟随节点组成。但是,这是一个前提条件——我们什么时候可以确定很多矿工会把很多的计算能力投入到这个解决哈希谜题的竞争中呢?那么,如果比特币的汇率相当高,那么他们只可能这样做,因为他们收到的回报是以比特币计算的,而他们的支出则是美元。因此,货币的价值越高,这些矿工的竞争将会越激烈。

但是什么能确保货币的高价值和稳定的价值呢?这只有在一般用户都信任区块链的安全性的情况下才会发生。如果他们认为网络可能在任何时候被攻击者淹没,那么比特币作为货币就不会有很大的价值。所以在区块链的安全性,健康的采矿生态系统和汇率之间有这种互相依赖、相互依存的关系。

由于这种三向依赖的自然循环,每一种的存在取决于其他方面的存在。当比特币第一次被创造时,这三个都不存在。除了Nakamoto自己经营采矿软件之外,没有其他矿工。比特币作为一种货币没有很多价值。事实上,这个区块链是不安全的,因为没有大量的采矿工作,任何人都可以轻而易举地完成这个过程。

比特币是如何从没有任何这些属性到拥有所有的三个的,这没有一个简单的解释。媒体的关注是故事的一部分——越多人听到比特币,他们对采矿的兴趣就越大。他们对采矿越感兴趣,人们对区块链的安全性就越有信心,因为现在有更多的采矿活动在进行,等等。顺便说一句,每个想要成功的新的Altcoin也都必须以某种方式来解决这个由自举引起的问题。

51%的攻击最后,让我们考虑一下如果共识失败会发生什么,比如,实际上51%的攻击者控制了Bitcoin网络中的51%或以上的采矿能力。我们会考虑各种可能的攻击,看看这些攻击者实际上可以执行哪些攻击。

首先,这个攻击者可以从现有的地址窃取硬币吗?你可能已经猜到了,答案是否定的,因为除非你颠覆了加密技术,否则从现有的地址窃取是不可能的。仅仅颠覆共识进程是不够的。这并不完全明显。假设51%的攻击者创建一个无效的区块,它包含一个无效的交易,代表从攻击者不会控制的现有地址中窃取Bitcoins,并将其转移到自己的地址。攻击者可以假装这是一个有效的交易,并继续在这个区块上建立新的区块。攻击者甚至可以成功地使其成为最长的分支。但是其他诚实的节点根本不会接受这个无效交易的区块,并且将继续基于他们在网络中找到的最后一个有效区块进行挖掘。那么,将会发生的是,出现我们称之为链中的分叉。

现在,从攻击者试图花费这些无效硬币的角度来想象这一点,并将其发送给一些商人比如Bob作为某些商品或服务的支付方式。Bob自己可能运行一个比特币节点,它将是一个诚实的节点。Bob的节点将拒绝该分支并将其视为无效,因为它包含无效的交易。它是无效的,因为签名没有签出。所以Bob的节点将简单地忽略最长的分支,因为它是一个无效的分支。因此,颠覆共识是不够的。你必须颠覆加密技术来窃取比特币。所以我们得出结论,51%的攻击者进行这个攻击是不可能的。

我们应该注意,这只是一个思想实验。实际上,如果有51%的攻击迹象,可能会发生的情况是开发人员会注意到这一点,并作出反应。他们将更新Bitcoin软件,我们可能期望系统的规则(包括对等网络)可能以某种形式发生变化,从而使此攻击更难成功。但我们不能很好的进行预测。所以我们在一个发生了51%的攻击的简化模型中工作,但除此之外,系统的规则没有任何变化或调整。

让我们考虑另一次攻击。51%的攻击者可以抑制一些交易吗?假设有一些用户,卡罗尔,攻击者真的不喜欢他。攻击者知道卡罗尔的一些地址,并希望确保这些地址中的任何一个硬币都不可能花费掉。那可能吗?由于他控制了区块链的共识过程,攻击者可以简单地拒绝创建任何包含卡罗尔地址的交易的新区块。攻击者可以进一步拒绝创建基于包含这些事务的区块。然而,他不能阻止这些交易被广播到对等网络,因为网络不依赖于区块链或共识,我们假设攻击者并没有完全控制网络。攻击者无法阻止交易到达大多数节点,因此即使攻击成功,至少攻击正在发生也很明显。

攻击者可以改变块奖励吗?也就是说,攻击者可以开始假装进行区块奖励,而不是25比特币,说100比特币?这是对系统规则的更改,并且因为攻击者不能控制所有诚实节点正在运行的Bitcoin软件的副本,这也是不可能的。这类似于攻击者不能包括无效交易的原因。其他节点根本无法识别区块奖励的增加,因此攻击者将无法使用它们。

最后,攻击者能否以某种方式破坏比特币的信心?好吧,我们来想象会发生什么。如果存在各种各样的双重支付尝试,即节点没有扩展最长有效分支,以及其他尝试攻击的情况,那么人们可能会决定,比特币不再作为他们可以信任的分散分类帐。人们将会对货币失去信心,我们预计比特币的汇率将会暴跌。事实上,如果单单知道有一个控制51%哈希能力的组织,那么即使攻击者不一定要试图发动任何攻击,人们也可能失去对比特币的信心。所以这不仅是可能的,但实际上可能的是,任何一个51%的攻击者都会摧毁对货币的信心。事实上,如果51%的袭击能够实现,这将是主要的实际威胁。考虑到对手必须投入支出攻击比特币并实现51%的大多数,我们所描述的其他攻击没有一个从财务角度来看是真的有意义的。

希望在这一点上,你已经真正了解Bitcoin如何实现分权化。你应该对Bitcoin中的身份如何工作,交易如何传播和验证,P2P对等网络在比特币中的作用,如何使用区块链来实现共识以及如何解决哈希谜题和挖掘工作有一个很好的指导。这些概念为理解比特币的更细微细节和细微差别提供了坚实的基础和良好的启发点,我们将在下一章中看到。

进一步阅读

比特币白皮书:

中本聪比特币:点对点电子现金系统。(2008年)

Nakamoto,Satoshi. B itcoin: A peer‐to‐peer electronic cash system. (2008)

工作证明的原始应用:

Back,Adam. Hashcash‐a denial of service counter‐measure. (2002)

Paxos共识算法:

Lamport,Leslie.Paxos made simple. ACM Sigact News 32.4 (2001):18‐25.

练习

1.为什么矿工运行“完整节点”来跟踪整个块链(这只适用于不是采矿池的“独奏”矿工,但我们还没有讨论过),而Bob商人可以用一个“简化节点”来实现“简化支付验证”,只需要检查最后几个块?

2.如果恶意ISP完全控制用户的连接,它是否会对用户发起双重支付攻击? 这需要多少计算量?

3.考虑Bob商家决定是否接受C(A)→B交易。Bob真正感兴趣的是其他链条是否会赶上。那么为什么他只是检查C(A)→B收到了多少次确认,而不是计算两条链之间的长度差异?

4.即使所有的节点都是诚实的,区块也会偶尔得到孤儿块:如果两名矿工Minnie和Mynie几乎同时发现区块,在广播她的区块之前也不会有时间听到对方的区块。

4a.什么决定哪个区块将最终出现在共识分支上?

4b.什么因素影响孤儿区块的比率?你能否根据这些参数得出一个关于比率的公式呢?

4c.尝试在Bitcoin网络上经验性地测量这个比率。

4d.如果Mynie在她要发现她的区块之前听到关于Minnie的区块,那是否意味着她浪费了她的努力?

4e.所有的矿工都是以同样的速度孤立地发现他们的区块,还是有些矿工受到了不成比例的影响?

5a.矿工如何以难以伪造的方式建立身份?(即任何人都可以知道哪些区块是由她开采的)

5b.如果矿工行为不当,其他矿工是否可以通过拒绝持续在其基础上搭建区块来“抵制”她?

6a.假设网络的总哈希功率保持不变,在接下来的10分钟内发现一个区块的概率是多少?

6b.假设商家Bob希望有一个政策,订单将在收到付款后x分钟内发货。鲍伯应该选择什么x值,这样在x分钟内就可以99%的找到6个置信区间?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容