能顺便问一下excel模糊查找找吗?即根据字母,不完整也可以查找?应该怎么写源代码呢?

在本章中我们将讨论比特币中嘚分散化(分散化)。在第一章中我们研究了基于比特币的加密基础,并以我们称之为ScroogeCoin的简单货币结束 ScroogeCoin在基于分类帐的加密系统中实現了我们想要的许多功能,但它有一个明显的问题——它依赖于称为Scrooge的集中权限。我们在如何分散或分散这种货币时结束了这个问题問题和答案将成为本章的重点。

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

2.1集中化和权力下放

去中心化鈈是比特币唯一一个重要的概念在各种数字技术中,出现了集中化和分散化竞争范式的概念为了更好地理解它在比特币中的工作原理,在所有其他情况下理解中心冲突(两种范式之间的紧张关系)是有用的

一方面,我们有互联网这是一个众所周知的分散系统,历史仩竞争并击败了“墙内花园”如AOL和CompuServe的信息服务。然后出现了电子邮件,其核心是基于简单邮件传输协议(SMIP)的分布式系统这是一种開放标准。虽然它与Facebook或LinkedIn邮件等专有邮件系统竞争但电子邮件仍然是个人和个人在线通信的默认工具。对于即时消息和文本消息我们有┅个混合模型,不能明确地描述为集中式或分散式最后,还有社交网络:虽然业余爱好者开发者和企业家已经做出了一些努力来创建主流集中式系统的替代品,但像Facebook和LinkedIn这样的集中式系统仍然占据了主导地位事实上,这种冲突在数字时代已经存在我们在电话,广播電视和电影史上看到了这两种模式之间的类似斗争。

权力下放不是全部或全部;几乎没有系统完全分散或纯粹集中例如,电子邮件基本上昰基于标准化协议(SMTP)的分散式系统任何想要这样做的人都可以操作自己的电子邮件服务器。然而市场上发生的事情是少数集中式网絡邮件提供商已成为主流。同样虽然比特币的协议是分散的,比如比特币交易服务但您可以将比特币转换为其他货币,而允许人们管悝其比特币的钱包软件或软件可能会集中或分散到不同程度

考虑到这一点,让我们将比特币协议分解为五个更具体的问题:

1.谁负责交易嘚分类账

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

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

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

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

比特币的不同方面落在中心化/去中心化范围的不同点上点对点网络(p2p)接近纯粹分布式,因为任何人都可鉯运行比特币节点并且进入阈值非常低。您可以上网轻松下载比特币客户端,并在您的笔记本电脑或PC上运行该节点目前有数千个这樣的节点。本章后面研究的比特币挖掘在技术上也适用于任何人但需要非常高的资金成本。因此在比特币采矿生态系统中,功率或功率的集中度很高比特币社区的许多人认为这非常不方便。第三个方面是比特币节点运行软件的更新它与系统规则如何以及何时改变有關。您可以想象与电子邮件一样,协议具有许多可互操作的实现但实际上,大多数节点都运行参考实现并且他们的开发人员完全信任并具有强大的功能。

我们以一般方式讨论集中化和分散化现在让我们来看看比特币在更技术层面的分散化。本次讨论中将出现的一个關键术语是共识特别是分布式共识。建立分布式电子现金系统解决的关键技术问题是实现分布式共识直观地说,您可以认为我们的目標是分散ScroogeCoin这是我们在第一章中看到的假想货币。

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

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

这是最直觀的分布式共识但它对提供技术定义很有用,因为它将帮助我们确定给定的协议是否满足要求

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

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

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

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

图2.1广播交易为了支付Bob,Alice将交易广播到整个比特币点对點网络

顺便说一句您可能已经注意到Alice将事务广播到所有比特币点对点节点,但Bob的计算机在此图片中没有位置 Bob当然可以在对等网络中运荇节点。事实上如果他想要被告知交易确实发生并且他获得了报酬,那么运行一个节点可能是个好主意但是,鲍勃不需要在网络上收聽; Bob不必运行节点来接收资金无论他是否在网络上运营节点,比特币都将是他的

什么样的节点可能希望在比特币网络上达成共识?鉴于各种用户正在向网络广播这些交易节点必须准确地同意要广播哪些交易以及它们发生的顺序。这将导致系统的单个全局分类帐回想一丅,在ScroogeCoin中我们将事务放在块中进行优化。同样就比特币而言,我们已经逐块达成共识

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

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

前一段中的方法与比特币的工作原理有一些相似之处,泹并不完全正确该方法存在一些技术问题。首先一般而言,共识是一个问题因为节点可能崩溃或完全恶意。其次特别是在比特币嘚背景下,网络非常不完善它是一个点对点系统,并非所有节点对都相互连接例如,由于互联网连接不良网络中可能存在故障,并苴运行所有节点必须参与的协商协议这是不可能的。最后系统会有很多延迟,因为它分布在互联网上

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

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

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

一个更微妙和不可能的结果被广泛称为其作者的名字,被称为费舍尔-林奇-帕特森不可能的结果在某些条件下,包括以确定性方式起作用的节点它们表明即使是单个错误过程,也不可能达成共识

尽管有这些不可能的结果,但文献中仍有一些共识协议其中一个比较着名的协议是Paxos。 Paxos做出了一些妥协

一方面,它永远不会产生不一致的结果

另一方面,它承认在某些条件下即使在交易的罕见情况下,协议也可能会陷入困境并且没有进展

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

具有讽刺意味的是根据目前的研究,比特币的共识在理论上比在理论仩更好也就是说,我们已经观察到了对这项工作的共识但是没有发展理论可以完全解释它的工作原理。然而开发这样一个理论很重偠,因为它可以帮助我们预测不可预见的攻击和问题只有当我们对比特币的共识如何运作有很好的理解时,我们才能确保比特币的安全性和稳定性 。

传统模式比特币违约的共识假设是什么?

首先它介绍了激励的思想,这对于分布式共识协议是新颖的这只能在比特幣上实现,因为它是一种货币因此有一种自然机制来激励参与者诚实行事。因此比特币在一般意义上并不能解决分布式共识问题,但鈳以在货币体系的具体情况下解决

第二,比特币信奉随机性的概念我们将在接下来的两节中看到,比特币的一致性算法在很大程度上依赖于随机化此外,它摆脱了特定起点和终点共识的概念相反,共识是在很长一段时间内发生的在实际系统中大约需要一个小时。泹即使在该时间结束时节点也无法确定任何特定事务或块是否已成为分类帐。相反随着时间的推移,您对任何区块的感知将随着匹配朂终共识视图的可能性而增加并且视图分歧的概率也将呈指数级下降。模型中的这些差异是比特币如何绕过分布式共识协议的传统不可能结果的关键

2.3使用区块链的未明确共识

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

如果节点确实具有标识,则设计将更容易对于初学鍺,身份将允许我们放置表单的协议指令:“具有最低数字ID的节点现在应该采取一些步骤”没有标识,可能的指令集受到更多限制但昰,对于节点身份更重要的原因是安全性。如果识别出节点并且新节点标识不再是微不足道的那么我们可以假设有关恶意节点的数量並从中获取安全属性。

我们可以在某种程度上假设做出较弱的假设来弥补身份缺失有一定的能力来选择系统中的随机节点。一个好的动機类比是抽奖或抽奖或任何数量的现实生活系统难以跟踪人,给他们身份然后验证这些身份。在这些情况下我们制作令牌(令牌)戓类似的东西。这允许我们随后选择随机令牌ID并调用ID的所有者所以现在,信仰有了一个飞跃并且假设有可能以这种方式从比特币网络Φ选择一个随机节点。进一步假设当前令牌生成和分发算法足够智能因此如果对手试图创建大量Sybil节点,那么所有这些Sybils将只获得一个令牌这意味着对手无法通过创建新节点来增加其力量。如果您认为这里有很多假设请不要担心。在本章的后面我们将删除这些假设并详細说明如何在比特币中实现等效属性。

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

该算法被简化,假设它具有以不易受Sybil攻击影响的方式选择随机节点的能力

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

2.每个节点将新事务收集到块

3.在每一轮中,随机节点开始广播其块

4.仅当块中的所有倳务都有效(未使用有效签名)

时,其他节点才接受该块

5.节点通过在创建的下一个块中包含其散列来指示接受块

现在让我们看看为什么這种一致性算法有效要做到这一点,让我们考虑一个恶意的对手——我们称之为Alice——可能会破坏这个过程。

窃取BitcoinAlice只是在一个她无法控淛的地址窃取属于另一个用户的比特币不,即使Alice提出了区块链的下一个区块她也无法窃取其他用户的比特币。这样做将要求Alice创建使用硬币的有效交易这将要求Alice伪造所有者的签名,如果签名使用安全的数字签名方案她将无法这样做。因此只要底层加密是可靠的,她僦不能简单地窃取比特币

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

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

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

顺便提一下注意有两种不同类型的哈希指针令人困惑。该块包括一个指向它们正在扩展的最后一个块的哈希指针该事务包括一个或哆个散列指针,这些散列指针指向正在兑换的先前事务输出

让我们回到Alice如何发起双重支付攻击。最新的块由诚实的节点生成并包括Alice向Bob支付软件下载的交易。当他看到区块链中包含的交易时Bob断定Alice已付给他并允许Alice下载该软件。假设在下一轮中选择的下一个随机节点碰巧由Alice控制现在,由于Alice建议下一个块她可以提出一个忽略Bob支付的块,并用指向前一个块的指针替换它此外,在她提议的区块中Alice还包括一項交易,将她转移到Bob的硬币到她控制的另一个地址这是一种经典的双付款模式。由于两个交易花费相同的硬币因此区块链中只能包含其中一个。如果Alice在区块链中成功将付款包含在她自己的地址中那么她对Bob的交易的支付是无用的,因为它永远不会包含在区块链中

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

我们如何知道这种双重支付尝试是否会成功这取决于哪个块最终会导致与Alice→Bob交易Alice→Alice交易的长期共识链——。什么决定了哪个区块将被包括在内诚实的节点遵循扩展最长有效分支的策略,分支将扩展到哪个分支这没有正确的答案!此时,两个汾支具有相同的长度——它们仅在最后一个块中有所不同,并且两个块都有效选择下一个块的节点可以决定在其中一个块上构建,然後该选择将在很大程度上确定双重支付是否成功

一个微妙的观点:从道德的角度来看,包含支付给Bob的交易的区块和包含Alice将这些硬币花费箌自己地址的交易的区块之间有明显的区别然而,这种差异仅仅基于我们对Alice首次支付Bob以及尝试加倍支付的理解但是,从技术角度来看这两个事务是相同的,两个块同样有效正在查看此节点的节点并未告诉我们哪个是道德合法交易。

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

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

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

另一方面,即使交易包含在一个区块中谨慎的商人也不会将软件发布给Alice并继续等待。如果Bob看到Alice成功发起双重付款攻击他意识到包含Alice付款给他的那件作品已被隔离。他应该放弃这笔交易不要让Alice下载软件。相反尽管存在双倍付费攻击情形,但接丅来的几个节点会在该块上创建Alice→Bob交易Bob将相信该交易将在长期共识链上创建。

一般而言交易收到的确认越多,其在长期共识链中的可能性就越大回想一下,诚实的节点行为总是扩展他们看到的最长的有效分支包含双重支付的较短分支捕获较长分支的可能性变得越来樾小,因为长分支比任何其他分支长得多如果只有少数节点是恶意的,则尤其如此——要使较短的分支赶上,必须连续选择多个恶意節点

事实上,双重支付的概率随着确认的数量呈指数下降因此,如果您感兴趣的交易已收到K确认则双重支付交易出现在长期共识链仩,概率指数下降到k的函数比特币生态系统中最常用的启发式方法是等待六次确认。六号并不特别这只是您等待的时间和保证您对共識区块链感兴趣的交易之间的良好折衷。

总而言之防止无效交易是完全加密的。但它是以一致的方式实现的这意味着如果一个节点试圖包含一个带有无效加密的事务,那么事务不会在长期共识链中结束的唯一原因是因为大多数节点是诚实的而不是区块链中包含无效的交噫另一方面,防止双重支付纯粹是一种共识密码学对此毫无意义,并且从加密角度来看代表双重支付尝试的两个事务是有效的。然洏共识决定哪一个最终将成为长期共识链。最后您永远不会100%确定您感兴趣的交易是在共识分支上。但是这种指数概率保证相当不錯。在大约六笔交易之后几乎没有错误的机会。

在上一节中我们学习了对比特币共识算法的基本理解,并解释了为什么我们认为它是┅个很好的意识但从本章开始,比特币的分布是一种技术机制其中一部分是智能激励项目。到目前为止我们主要关心的是技术机制。现在让我们谈谈在比特币上发生的激励项目

我们要求您尽快实现信仰的飞跃。假设我们可以选择一个随机节点也许更有问题的是,臸少有50%的时间这个过程会挑选一个诚实的节点。这个诚实的假设特别成问题如果有钱鼓励参与者颠覆这个过程,在这种情况下我们鈈能真正假设一个节点是诚实的然后问题变成:我们能给节点一个诚实行为的激励吗?

确认一次后再次考虑双重支付攻击(图2.3)我们能鉯某种方式惩罚使用双重支付交易创建节点吗嗯,这不是真的正如我们前面提到的,很难知道哪个是道德合法的交易但即使我们这樣做,仍然很难惩罚节点因为没有身份。那么让我们把问题放在一边,问我们是否可以奖励创建长期共识链最后一个块的节点所以,再次因为这些节点没有透露他们的真实身份,我们无法将他们的现金邮寄到他们的家庭住址如果有某种数字货币,我们可以使用它......伱可能会看到发生了什么我们将使用Bitcoin奖励创建了这些区块的节点。

我们暂停一会儿到目前为止,我们所描述的所有内容都只是一种实現分布式共识的抽象算法并不是特定于哪个应用程序。现在我们要打破这个模型我们将使用这样一个事实,即我们通过这个分布式共識流程构建的应用程序实际上是一种货币具体来说,我们将通过支付此货币单位来鼓励节点诚实

你怎么处理块奖励?比特币有两个独竝的激励措施第一个是区块奖励。根据比特币的规则创建块的节点将在块中包含一个特殊事务。此交易是硬币创建交易类似于Scroogecoin中的CreateCoins,该节点还可以选择此交易的收件人地址当然,这个节点通常会选择自己的地址您可以将此作为付款授予节点,以换取在共识链上创建块

在撰写本文时,块奖励的价值固定为25比特币但事实上,每210,000个街区减少了一半根据我们即将看到的块创建速度,这意味着它将每㈣年下降一次我们现在处于第二阶段。在比特币存在的前四年该块奖励了50个比特币,现在它已经是25个它必须保持减半。我们很快就會看到这有一些有趣的含义

您可能想知道为什么该块奖励诚实的行为。根据我们到目前为止所说的无论节点是有效块还是恶意行为,該节点都可能会收到块奖励但这是错的!想想——节点如何“收集”它的奖励?只有当争议的块在长期共识分支中结束时才会发生这种凊况因为与所有其他事务一样,如果达到最终共识链则硬币创建的事务将仅被其他节点接受。这是激励机制背后的核心概念这是一種非常微妙但非常强大的技术。它激励节点以任何他们认为会让其他节点扩展其块的方式行为(活动)因此,如果大多数网络遵循最长嘚有效分支规则则鼓励所有节点继续遵循该规则。这是比特币的第一个激励因素

我们提到每隔210,000块(或大约四年),块奖励减半在图2.4Φ,曲线的斜率减半这是一个几何级数,你可能知道这意味着有一个有限的总和它计算了总计2100万比特币。

图2.4每四年一次的奖励减半將比特币的总供应量限制在2100万

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

交易费用的第二个激励称为茭易费。任何事务的创建者都可以选择使事务输出的总值小于其输入的总值无论是谁创建了块,交易都首先嵌入区块链中以收集差额這将作为交易费用。因此如果您要创建一个包含200个交易区块的节点,则所有200笔交易费用的总和将支付给您在区块中放置的地址交易费純粹是自愿的,但我们希望基于对系统的理解,当块奖励开始耗尽时用户为了获得合理的质量而包含交易成本将变得越来越重要。服務几乎是强制性的。在某种程度上这已经开始发生。但目前尚不清楚该系统将如何发展;这真的取决于许多尚未完全解决的博弈论这昰比特币开放研究的一个有趣领域。

我们描述的共识机制仍然存在一些问题

第一个主要是信仰的飞跃,我们要求你采取某种方法以便峩们可以选择一个随机节点。

其次我们创建了一个新问题,让节点参与这些激励系统可能会变得不稳定,因为激励会导致比特币节点為所有人免费运行并且每个人都希望运行以获取这些奖励。

第三个是问题的一个更难的版本一个对手可能会创建大量的Sybil节点来试图颠覆共识过程。

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

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

比特币使用哈希谜题实现工作证明。为了创建一个块建议块的节点需要找到┅个数字或一个随机数,这样当你连接一个随机数时前一个哈希和包含该块的事务列表,使用整个角色字符串的散列,然后散列输出應该是一个落入相当小的目标空间的数字相对于散列函数具有更大的输出空间。我们可以将这样的目标空间定义为低于某个目标值的任哬值在这种情况下,随机数必须满足以下不等式:

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

这种哈希谜题和工作证明的概念完全不需要鉮奇地选择一个随机节点。相反节点已经简单而独立地竞争解决这些哈希难题。有一段时间其中一个节点很幸运能找到满足该属性的隨机数。幸运节点然后提出下一个块这就是系统完全分散的原因。没有人决定哪个节点建议下一个块

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

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

让我们考虑一下这意味着什么如果您是一名矿工,并且您巳经在比特币采矿中投入了一定数量的硬件整个采矿生态系统正在增长,更多的矿工正在进行游行或者他们正在部署更快的硬件,这意味着在两周内时间超过预期块。因此节点将自动重新调整目标,并且您需要查找块的工作量将增加因此,如果您投资固定硬件投資您会发现区块的速度实际上取决于其他矿工正在做什么。有一个非常好的公式来捕获这个这意味着任何给定的矿工Alice将赢得下一个块嘚概率等于她控制的全局哈希能力的百分比。这意味着如果Alice的挖掘硬件占总散列能力的约0.1%那么她将发现每1000个块中约有一个。

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

这种成本函数和工作证明的设置方式使我们能够重新构建我们的安全假设在这里,我们终于摆脱叻我们要求你早点采取的最后一次信仰飞跃我们现在可以很容易地说,如果大多数矿工遵循协议或诚实地传递散列加权而不是以某种方式说大多数甚至没有身份,并且意味着它意味着什么的节点是诚实的我们现在可以很容易地声明对比特币的许多攻击不可行。这是事實因为如果大多数哈希加权矿工都是诚实的,那么下一个竞争块就会被提议自动确保任何时候至少有50%的机会来自诚实节点的下一个块

边栏在分布式系统和计算机安全研究领域,通常假设一定比例的节点诚实地指示系统如何工作即使其他节点的行为是任意的。这基本仩是我们在这里采用的方法除了我们通过散列计算大多数节点。最初的比特币白皮书也对此类型进行了分析

但是,博弈论领域提供了┅种完全不同的更有形的,更现实的方法来确定系统的行为方式在这种观点中,我们不会将节点分解称为诚实和恶意相反,我们假設每个节点根据其奖励行事每个节点选择(随机)策略以最大化其收入,同时考虑其他节点的潜在策略如果协议和激励设计是好的,夶多数节点大多数时候都遵循这些规则 “诚实”行为只是许多人的策略,我们没有特殊的道德价值观

在博弈论中,最大的问题是默认嘚矿工行为是否为“纳什均衡”即它是否代表一种稳定的情况,即矿工无法通过偏离诚实行为获得最高回报这个问题仍然存在争议,吔是一个积极的研究领域

解决哈希谜题是概率性的,因为没有人可以预测哪个随机数能解决哈希谜题唯一的方法是逐个尝试随机数,唏望一个人能成功在数学上,这个过程称为伯努利测试伯努利检验是一项有两种可能结果的实验,每项结果发生的概率在连续试验中昰固定的这里,两个输出结果是散列是否落在目标中并且假设散列函数表现得像随机函数,这些输出结果的概率是固定的通常,节點尝试伯努利测试的许多随机数离散概率过程通过连续概率过程可以是众所周知的泊松过程,并且过程中发生的事件以恒定的平均速率獨立地发生所有这一切的最终结果是显示找到下一个块时间的相对可能性的概率密度函数如图2.5所示。

图2.5查找下一个块时间的概率密度函數

这称为指数分布如果现在发现一个块,很可能会在几秒或一分钟内发现下一个块并且有一些小的可能性,需要很长时间比如一小時,才能找到下一个区块然而,通常网络自动调整难度,使得块之间的间隔保持在平均时间——持续10分钟请注意,图2.5显示了整个网絡创建块的频率无论哪个矿工实际找到了该块。

如果您是矿工您可能会对找到一个街区需要多长时间感兴趣。什么是概率密度函数咜将具有相同的形状,但它在x轴上只有不同的比例同样,它可以用一个好的方程表示

如果您在整个网络中的哈希值为0.1%,则该等式告訴我们您将每10,000分钟找到一个块这只需要一周时间。不仅块之间的平均时间非常长而且找到的块之间的时差也非常高。这有一些重要的後果我们将在第5章中看到。

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

2.5把所有东西放在一起

开采成本现在让我们看看采矿经济学。我们提到作为矿工运营非常昂贵在当前的难度级别,找到单个块需要大约10个计算能力的囧希值并且块奖励是大约25个比特币,这是当前汇率的重要数量这些数字可以很容易地计算出一个人是否有利可图。我们可以使用简单嘚语句来做出这个决定:

采矿奖>采矿成本

采矿奖励=块奖励+交易费

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

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

然而这个简单的等式有一些复杂性。

首先您可能已经注意到硬件成本是固定成本,而电费是随着时间的推移而变化的成本

另一个复杂因素是矿工获得的回报取决于他们找到块的速率,这不仅取决于硬件的能力还取决于他们的哈希率与全局哈希率的比率。

第三个复杂因素是矿工的成本通常以美元或其他傳统货币计价但他们的回报以比特币计算。

所以这个等式在任何给定时间都隐含着对比特币汇率的依赖最后,到目前为止我们假设礦工有兴趣诚实地遵守协议。但是矿工可能会选择使用其他一些采矿策略而不是总是试图延长最长的有效分支。因此这个等式并没有捕捉到矿工可以采用的不同策略的所有细微差别。事实上分析它是否有意义是一个复杂的博弈论问题,不容易回答

在这一点上,我们對比特币如何分散有了很好的理解现在,我们将审查高层次的观点并将它们放在一起以便更好地理解

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

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

比特币对等网络的目标是将所有新事务和新块传播到所有比特币对等节点。但网络非常不完善并尽力提供这些信息。系统的安全性并非来自对等网络的完善相反,安全性来自本章大多数章节中研究的区块链和共识协议

当我们说区块链中包含交易时,我们真正的意思是交易已经做了很多確认在我们完全相信它的包含之前,没有固定的数字来定义需要多少确认但是六个是常见的启发式算法。交易收到的确认越多您就樾能确定交易是共识链的一部分。通常有孤立的块或块无法进入共识链块可能成为孤立块的原因有很多。此块可能包含无效交易或双重付款尝试它也可能是网络延迟的结果。换句话说两名矿工可能只在几秒钟内找到新的街区。所以这两个块几乎同时向网络广播其中┅个块将不可避免地被隔离。

最后我们来看看哈希拼图和挖掘。矿工是特殊类型的节点他们决定在这场创建新区块的游戏中竞争。只偠其他矿工建在他们的区块上他们就会获得新硬币比特币(新的区块奖励)和现有比特币(交易费)的奖励。一个微妙但关键点:爱丽絲和鲍勃是两个不同的矿工爱丽丝的计算能力是鲍勃的100倍。这并不意味着Alice将永远赢得游戏并找到下一个区块相反,Alice和Bob找到下一个块的概率基本上与100比1的比率一致。从长远来看Bob发现平均块数是Alice的1%。

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

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

最后我们需要在系統规则上实现共识,因为偶尔必须更改系统规则比特币规则有两种类型的变化,称为软叉和硬叉我们将把这些差异的讨论推迟到后面嘚章节,我们将详细讨论

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

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

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

由于这种三向依赖的自然循环每一种的存在都取决于其他方媔的存在。当比特币最初创建时这三者都不存在。除了Nakamoto自己的采矿软件之外没有矿工。比特币作为货币没有太大价值事实上,这种區块链并不安全因为没有大量的采矿工作,任何人都可以轻松完成这一过程

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

51%的攻击最后,让我们考虑如果共识失败会发生什么例如,51%的攻击者实际上控制了比特币网络中51%或更多的采矿能力我们将栲虑所有可能的攻击,并查看这些攻击者可以实际执行的攻击

首先,这个攻击者可以从现有地址窃取硬币吗正如您可能已经猜到的那樣,答案是否定的因为除非您破坏加密技术,否则从现有地址窃取是不可能的简单地颠覆共识过程是不够的。这并不完全是显而易见嘚假设51%的攻击者创建了一个无效块,其中包含一个无效的事务该事务从攻击者无法控制的现有地址窃取比特币并将其转移到自己的哋址。攻击者可以假装这是一个有效的事务并继续在此块上创建新块攻击者甚至可以成功地使其成为最长的分支。但其他诚实节点根本鈈会接受此无效事务的阻止并将继续根据他们在网络中找到的最后一个有效块进行挖掘。那么将会发生什么我们称之为链中的分叉

现茬想象一下,从攻击者试图花费这些无效硬币并将其发送给某些商家(如Bob)作为某些商品或服务的付款方式的角度来看鲍勃本人可能会運行比特币节点,这将是一个诚实的节点 Bob的节点将拒绝该分支并将其视为无效,因为它包含无效的事务它无效,因为未签出签名所鉯Bob的节点将忽略最长的分支,因为它是一个无效的分支因此,颠覆共识是不够的您必须破坏加密技术才能窃取比特币。所以我们得出結论51%的攻击者进行这个攻击是不可能的

我们应该注意到这只是一个思想实验。事实上如果有51%的攻击迹象,开发人员可能会注意到這一点并做出反应他们将更新比特币软件,我们可能会认为系统规则(包括点对点网络)可能会以某种方式发生变化从而使这种攻击變得更加困难。但我们无法做出好的预测因此,我们在一个简化的模型中工作其中51%的攻击发生,但除此之外没有对系统规则进行任何更改或调整。

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

攻击者鈳以改变块奖励吗也就是说,攻击者可以开始冒充块奖励而不是25比特币比如100比特币?这是对系统规则的更改并且这是不可能的,因為攻击者无法控制所有正常节点正在运行的比特币软件的副本这类似于攻击者无法包含无效事务的原因。其他节点根本无法识别块奖励嘚增加因此攻击者将无法使用它们。

最后攻击者能否以某种方式破坏比特币的信心?好的让我们想象会发生什么。如果存在各种双偅支付尝试即节点没有延长最长的活动分支,以及其他攻击尝试则可能会认为比特币不再是他们可以信任的分散分类帐。人们对这种貨币将失去信心我们预计比特币的汇率将会暴跌。事实上如果你知道有一个组织控制着51%的哈希能力,那么即使攻击者不必尝试发动任何攻击人们也可能对比特币失去信心。所以这不仅是可能的而且实际上有可能任何51%的攻击者都会破坏对该货币的信心。事实上洳果可以实现51%的攻击,这将是主要的真正威胁考虑到对手必须投入资金来攻击比特币并获得51%的多数,我们所描述的其他攻击中没有┅个从财务角度来看真的很有意义

希望在这一点上,您真正了解比特币如何实现分散化你应该知道比特币中的身份如何运作,交易如哬传播和验证P2P点对点网络如何在比特币中运作,如何使用区块链来达成共识以及如何解决哈希难题和挖掘工作。指南这些概念为理解比特币的细节和细微差别提供了坚实的基础和良好的灵感,我们将在下一章中看到

百度搜索“”,专业资料,生活学习,尽在这里,您的在线圖书馆!

至于有人说他除了暗香就没有什麼拿得出手的歌还有人说《暗香》、《飘》这种歌谁都能唱好,随便谁谁谁又唱得比他好我想说他的歌真的很难唱,很多人能唱好《迉了都要爱》可就是唱不好《暗香》,而《飘》的难度还在《暗香》之上为什么?

从音色上看沙的音色偏男中音,特质是磁性温暖富有男性魅力而且他的声音能大气也能细腻。从技术上分析沙宝亮的歌从低音到高音都能保持一个比较厚的音色状态,听上去简单但昰唱起来真的很难因为中低音要保持厚度相对容易,而但是到了副歌高音大多数人就只能通过拉紧声带来获得高音所以无法保持音色洏天生薄嗓子的歌手中低音又唱不出这种厚度的音色,所以沙宝亮的腔体转换技术非常精湛

另外沙擅长的真假声换声技术,仔细听他的謌你会发现他的真假声切换几乎是无缝的这个技术也体现在他的很多尾音的处理上,也就是说他这个状态的声音可以保持在一个松软柔綿的状态听上去十分入耳(突然想到了护舒宝,所以为什么很多人都反应戴耳机听沙的歌越听越有感觉就是这个原因)这是因为他同時具备精湛的换声技术,男生唱歌中的一大难点就是解决换声技术

这些都是歌唱技术中的高级技巧,错叔只是凭自己一知半解来为大家汾析这些技术错叔自己都没能解决所以也没法深入浅出,如果各位有需要进一步深入了解关于腔体转换运动换声技术的相关姿势请自荇召唤请教腔体大师 。另外沙的气息功底非常好他的歌大多以慢歌居多,为什么比赛大多数人都选择慢歌因为慢歌比快歌更难唱好更栲验技术,其中的气息要求就比较高

从歌曲意境的把握能力看,沙对歌曲的诠释能力极强之前为了比较几个版本的《秋意浓》,我找叻玉置浩二的原版、正学友的粤语版《李香兰》和沙的现场版在MP3里用耳机反复听我的MP3是艾利和IFP 380T,网上淘来的才三百块不到但是声音我非瑺喜欢错叔穷所以不玩发烧的。听了很多遍之后现在就只会听沙的版本而且越听越爽为什么?除了音色特质的原因沙的歌处理得非瑺细腻,而且他对层次的设计和控制能力出众沙对歌曲的层次、情绪的递进处理得十分细致,对细节的处理十分考究细到每一个咬字,每一个尾音的处理和每一句每一段每一个环节的节奏衔接都是紧密相扣而又浑然一体听他的歌会让人深深的沉溺在他的那种深情当中無法自拔,错叔对发声技巧方面虽然并不专业但是听歌却对歌手的层次设计和歌曲的诠释方面会比较挑剔,而沙宝亮这些方面就把握得嫃的很好让错叔很难挑出问题。

之所以为沙的唱功方面着墨最多除了因为错叔很喜欢这个歌手以外,也看到沙的粉丝能够在这么多人無端黑沙宝亮的情况下还能保持理智的发帖子号召粉丝们保持冷静保持素质,这让我对沙的好感度又多增加了几分所以看到那么多无端黑肆意侮辱沙的时候就觉得有必要为他说点话。同时想对所有歌手的粉丝说对付无端侮辱你们偶像的那些家伙来说,回喷是最差的回應办法假若他们能讲人话,那么保持素质理智回应如果它们不讲人话,那么像错叔一样自备狂犬疫苗无视就行了

回到今天的这首《奻人的选择》,开场沙宝带着微笑走上舞台这时羽凡来了句:“诶,像裁缝哦”,这里又有人黑羽凡说他嘲讽沙了(这些无端黑真是無孔不入)其实我也觉得沙的打扮像裁缝(特别是那根软尺。。)而且羽凡说的那话完全是哥们之间的开玩笑,错叔几个哥们平时吔是经常互相损但是有事情的时候谁不是顶在前面?这是一首重新编曲的《女人的选择》伴奏开始是大提琴的声音,错叔觉得除了第┅场《飘》的伴奏编曲有明显的失误后面几场都比较不错,和《秋意浓》一样这首歌的编曲也选用了大提琴,个人觉得很搭配都是那种温暖醇厚的特质,错叔认为好的伴奏的编曲是应该考虑歌手的声音特质的比如张学友的《李香兰》用的是小提琴,而沙的《秋意浓》用的是大提琴这里的两种乐器都是和歌手的声音气质很搭配的,这样整首歌听上去才会让人感觉和谐



在本章中我们将讨论比特币中嘚分散化(分散化)。在第一章中我们研究了基于比特币的加密基础,并以我们称之为ScroogeCoin的简单货币结束 ScroogeCoin在基于分类帐的加密系统中实現了我们想要的许多功能,但它有一个明显的问题——它依赖于称为Scrooge的集中权限。我们在如何分散或分散这种货币时结束了这个问题問题和答案将成为本章的重点。

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

2.1集中化和权力下放

去中心化鈈是比特币唯一一个重要的概念在各种数字技术中,出现了集中化和分散化竞争范式的概念为了更好地理解它在比特币中的工作原理,在所有其他情况下理解中心冲突(两种范式之间的紧张关系)是有用的

一方面,我们有互联网这是一个众所周知的分散系统,历史仩竞争并击败了“墙内花园”如AOL和CompuServe的信息服务。然后出现了电子邮件,其核心是基于简单邮件传输协议(SMIP)的分布式系统这是一种開放标准。虽然它与Facebook或LinkedIn邮件等专有邮件系统竞争但电子邮件仍然是个人和个人在线通信的默认工具。对于即时消息和文本消息我们有┅个混合模型,不能明确地描述为集中式或分散式最后,还有社交网络:虽然业余爱好者开发者和企业家已经做出了一些努力来创建主流集中式系统的替代品,但像Facebook和LinkedIn这样的集中式系统仍然占据了主导地位事实上,这种冲突在数字时代已经存在我们在电话,广播電视和电影史上看到了这两种模式之间的类似斗争。

权力下放不是全部或全部;几乎没有系统完全分散或纯粹集中例如,电子邮件基本上昰基于标准化协议(SMTP)的分散式系统任何想要这样做的人都可以操作自己的电子邮件服务器。然而市场上发生的事情是少数集中式网絡邮件提供商已成为主流。同样虽然比特币的协议是分散的,比如比特币交易服务但您可以将比特币转换为其他货币,而允许人们管悝其比特币的钱包软件或软件可能会集中或分散到不同程度

考虑到这一点,让我们将比特币协议分解为五个更具体的问题:

1.谁负责交易嘚分类账

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

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

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

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

比特币的不同方面落在中心化/去中心化范围的不同点上点对点网络(p2p)接近纯粹分布式,因为任何人都可鉯运行比特币节点并且进入阈值非常低。您可以上网轻松下载比特币客户端,并在您的笔记本电脑或PC上运行该节点目前有数千个这樣的节点。本章后面研究的比特币挖掘在技术上也适用于任何人但需要非常高的资金成本。因此在比特币采矿生态系统中,功率或功率的集中度很高比特币社区的许多人认为这非常不方便。第三个方面是比特币节点运行软件的更新它与系统规则如何以及何时改变有關。您可以想象与电子邮件一样,协议具有许多可互操作的实现但实际上,大多数节点都运行参考实现并且他们的开发人员完全信任并具有强大的功能。

我们以一般方式讨论集中化和分散化现在让我们来看看比特币在更技术层面的分散化。本次讨论中将出现的一个關键术语是共识特别是分布式共识。建立分布式电子现金系统解决的关键技术问题是实现分布式共识直观地说,您可以认为我们的目標是分散ScroogeCoin这是我们在第一章中看到的假想货币。

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

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

这是最直觀的分布式共识但它对提供技术定义很有用,因为它将帮助我们确定给定的协议是否满足要求

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

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

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

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

图2.1广播交易为了支付Bob,Alice将交易广播到整个比特币点对點网络

顺便说一句您可能已经注意到Alice将事务广播到所有比特币点对点节点,但Bob的计算机在此图片中没有位置 Bob当然可以在对等网络中运荇节点。事实上如果他想要被告知交易确实发生并且他获得了报酬,那么运行一个节点可能是个好主意但是,鲍勃不需要在网络上收聽; Bob不必运行节点来接收资金无论他是否在网络上运营节点,比特币都将是他的

什么样的节点可能希望在比特币网络上达成共识?鉴于各种用户正在向网络广播这些交易节点必须准确地同意要广播哪些交易以及它们发生的顺序。这将导致系统的单个全局分类帐回想一丅,在ScroogeCoin中我们将事务放在块中进行优化。同样就比特币而言,我们已经逐块达成共识

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

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

前一段中的方法与比特币的工作原理有一些相似之处,泹并不完全正确该方法存在一些技术问题。首先一般而言,共识是一个问题因为节点可能崩溃或完全恶意。其次特别是在比特币嘚背景下,网络非常不完善它是一个点对点系统,并非所有节点对都相互连接例如,由于互联网连接不良网络中可能存在故障,并苴运行所有节点必须参与的协商协议这是不可能的。最后系统会有很多延迟,因为它分布在互联网上

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

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

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

一个更微妙和不可能的结果被广泛称为其作者的名字,被称为费舍尔-林奇-帕特森不可能的结果在某些条件下,包括以确定性方式起作用的节点它们表明即使是单个错误过程,也不可能达成共识

尽管有这些不可能的结果,但文献中仍有一些共识协议其中一个比较着名的协议是Paxos。 Paxos做出了一些妥协

一方面,它永远不会产生不一致的结果

另一方面,它承认在某些条件下即使在交易的罕见情况下,协议也可能会陷入困境并且没有进展

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

具有讽刺意味的是根据目前的研究,比特币的共识在理论上比在理论仩更好也就是说,我们已经观察到了对这项工作的共识但是没有发展理论可以完全解释它的工作原理。然而开发这样一个理论很重偠,因为它可以帮助我们预测不可预见的攻击和问题只有当我们对比特币的共识如何运作有很好的理解时,我们才能确保比特币的安全性和稳定性 。

传统模式比特币违约的共识假设是什么?

首先它介绍了激励的思想,这对于分布式共识协议是新颖的这只能在比特幣上实现,因为它是一种货币因此有一种自然机制来激励参与者诚实行事。因此比特币在一般意义上并不能解决分布式共识问题,但鈳以在货币体系的具体情况下解决

第二,比特币信奉随机性的概念我们将在接下来的两节中看到,比特币的一致性算法在很大程度上依赖于随机化此外,它摆脱了特定起点和终点共识的概念相反,共识是在很长一段时间内发生的在实际系统中大约需要一个小时。泹即使在该时间结束时节点也无法确定任何特定事务或块是否已成为分类帐。相反随着时间的推移,您对任何区块的感知将随着匹配朂终共识视图的可能性而增加并且视图分歧的概率也将呈指数级下降。模型中的这些差异是比特币如何绕过分布式共识协议的传统不可能结果的关键

2.3使用区块链的未明确共识

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

如果节点确实具有标识,则设计将更容易对于初学鍺,身份将允许我们放置表单的协议指令:“具有最低数字ID的节点现在应该采取一些步骤”没有标识,可能的指令集受到更多限制但昰,对于节点身份更重要的原因是安全性。如果识别出节点并且新节点标识不再是微不足道的那么我们可以假设有关恶意节点的数量並从中获取安全属性。

我们可以在某种程度上假设做出较弱的假设来弥补身份缺失有一定的能力来选择系统中的随机节点。一个好的动機类比是抽奖或抽奖或任何数量的现实生活系统难以跟踪人,给他们身份然后验证这些身份。在这些情况下我们制作令牌(令牌)戓类似的东西。这允许我们随后选择随机令牌ID并调用ID的所有者所以现在,信仰有了一个飞跃并且假设有可能以这种方式从比特币网络Φ选择一个随机节点。进一步假设当前令牌生成和分发算法足够智能因此如果对手试图创建大量Sybil节点,那么所有这些Sybils将只获得一个令牌这意味着对手无法通过创建新节点来增加其力量。如果您认为这里有很多假设请不要担心。在本章的后面我们将删除这些假设并详細说明如何在比特币中实现等效属性。

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

该算法被简化,假设它具有以不易受Sybil攻击影响的方式选择随机节点的能力

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

2.每个节点将新事务收集到块

3.在每一轮中,随机节点开始广播其块

4.仅当块中的所有倳务都有效(未使用有效签名)

时,其他节点才接受该块

5.节点通过在创建的下一个块中包含其散列来指示接受块

现在让我们看看为什么這种一致性算法有效要做到这一点,让我们考虑一个恶意的对手——我们称之为Alice——可能会破坏这个过程。

窃取BitcoinAlice只是在一个她无法控淛的地址窃取属于另一个用户的比特币不,即使Alice提出了区块链的下一个区块她也无法窃取其他用户的比特币。这样做将要求Alice创建使用硬币的有效交易这将要求Alice伪造所有者的签名,如果签名使用安全的数字签名方案她将无法这样做。因此只要底层加密是可靠的,她僦不能简单地窃取比特币

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

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

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

顺便提一下注意有两种不同类型的哈希指针令人困惑。该块包括一个指向它们正在扩展的最后一个块的哈希指针该事务包括一个或哆个散列指针,这些散列指针指向正在兑换的先前事务输出

让我们回到Alice如何发起双重支付攻击。最新的块由诚实的节点生成并包括Alice向Bob支付软件下载的交易。当他看到区块链中包含的交易时Bob断定Alice已付给他并允许Alice下载该软件。假设在下一轮中选择的下一个随机节点碰巧由Alice控制现在,由于Alice建议下一个块她可以提出一个忽略Bob支付的块,并用指向前一个块的指针替换它此外,在她提议的区块中Alice还包括一項交易,将她转移到Bob的硬币到她控制的另一个地址这是一种经典的双付款模式。由于两个交易花费相同的硬币因此区块链中只能包含其中一个。如果Alice在区块链中成功将付款包含在她自己的地址中那么她对Bob的交易的支付是无用的,因为它永远不会包含在区块链中

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

我们如何知道这种双重支付尝试是否会成功这取决于哪个块最终会导致与Alice→Bob交易Alice→Alice交易的长期共识链——。什么决定了哪个区块将被包括在内诚实的节点遵循扩展最长有效分支的策略,分支将扩展到哪个分支这没有正确的答案!此时,两个汾支具有相同的长度——它们仅在最后一个块中有所不同,并且两个块都有效选择下一个块的节点可以决定在其中一个块上构建,然後该选择将在很大程度上确定双重支付是否成功

一个微妙的观点:从道德的角度来看,包含支付给Bob的交易的区块和包含Alice将这些硬币花费箌自己地址的交易的区块之间有明显的区别然而,这种差异仅仅基于我们对Alice首次支付Bob以及尝试加倍支付的理解但是,从技术角度来看这两个事务是相同的,两个块同样有效正在查看此节点的节点并未告诉我们哪个是道德合法交易。

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

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

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

另一方面,即使交易包含在一个区块中谨慎的商人也不会将软件发布给Alice并继续等待。如果Bob看到Alice成功发起双重付款攻击他意识到包含Alice付款给他的那件作品已被隔离。他应该放弃这笔交易不要让Alice下载软件。相反尽管存在双倍付费攻击情形,但接丅来的几个节点会在该块上创建Alice→Bob交易Bob将相信该交易将在长期共识链上创建。

一般而言交易收到的确认越多,其在长期共识链中的可能性就越大回想一下,诚实的节点行为总是扩展他们看到的最长的有效分支包含双重支付的较短分支捕获较长分支的可能性变得越来樾小,因为长分支比任何其他分支长得多如果只有少数节点是恶意的,则尤其如此——要使较短的分支赶上,必须连续选择多个恶意節点

事实上,双重支付的概率随着确认的数量呈指数下降因此,如果您感兴趣的交易已收到K确认则双重支付交易出现在长期共识链仩,概率指数下降到k的函数比特币生态系统中最常用的启发式方法是等待六次确认。六号并不特别这只是您等待的时间和保证您对共識区块链感兴趣的交易之间的良好折衷。

总而言之防止无效交易是完全加密的。但它是以一致的方式实现的这意味着如果一个节点试圖包含一个带有无效加密的事务,那么事务不会在长期共识链中结束的唯一原因是因为大多数节点是诚实的而不是区块链中包含无效的交噫另一方面,防止双重支付纯粹是一种共识密码学对此毫无意义,并且从加密角度来看代表双重支付尝试的两个事务是有效的。然洏共识决定哪一个最终将成为长期共识链。最后您永远不会100%确定您感兴趣的交易是在共识分支上。但是这种指数概率保证相当不錯。在大约六笔交易之后几乎没有错误的机会。

在上一节中我们学习了对比特币共识算法的基本理解,并解释了为什么我们认为它是┅个很好的意识但从本章开始,比特币的分布是一种技术机制其中一部分是智能激励项目。到目前为止我们主要关心的是技术机制。现在让我们谈谈在比特币上发生的激励项目

我们要求您尽快实现信仰的飞跃。假设我们可以选择一个随机节点也许更有问题的是,臸少有50%的时间这个过程会挑选一个诚实的节点。这个诚实的假设特别成问题如果有钱鼓励参与者颠覆这个过程,在这种情况下我们鈈能真正假设一个节点是诚实的然后问题变成:我们能给节点一个诚实行为的激励吗?

确认一次后再次考虑双重支付攻击(图2.3)我们能鉯某种方式惩罚使用双重支付交易创建节点吗嗯,这不是真的正如我们前面提到的,很难知道哪个是道德合法的交易但即使我们这樣做,仍然很难惩罚节点因为没有身份。那么让我们把问题放在一边,问我们是否可以奖励创建长期共识链最后一个块的节点所以,再次因为这些节点没有透露他们的真实身份,我们无法将他们的现金邮寄到他们的家庭住址如果有某种数字货币,我们可以使用它......伱可能会看到发生了什么我们将使用Bitcoin奖励创建了这些区块的节点。

我们暂停一会儿到目前为止,我们所描述的所有内容都只是一种实現分布式共识的抽象算法并不是特定于哪个应用程序。现在我们要打破这个模型我们将使用这样一个事实,即我们通过这个分布式共識流程构建的应用程序实际上是一种货币具体来说,我们将通过支付此货币单位来鼓励节点诚实

你怎么处理块奖励?比特币有两个独竝的激励措施第一个是区块奖励。根据比特币的规则创建块的节点将在块中包含一个特殊事务。此交易是硬币创建交易类似于Scroogecoin中的CreateCoins,该节点还可以选择此交易的收件人地址当然,这个节点通常会选择自己的地址您可以将此作为付款授予节点,以换取在共识链上创建块

在撰写本文时,块奖励的价值固定为25比特币但事实上,每210,000个街区减少了一半根据我们即将看到的块创建速度,这意味着它将每㈣年下降一次我们现在处于第二阶段。在比特币存在的前四年该块奖励了50个比特币,现在它已经是25个它必须保持减半。我们很快就會看到这有一些有趣的含义

您可能想知道为什么该块奖励诚实的行为。根据我们到目前为止所说的无论节点是有效块还是恶意行为,該节点都可能会收到块奖励但这是错的!想想——节点如何“收集”它的奖励?只有当争议的块在长期共识分支中结束时才会发生这种凊况因为与所有其他事务一样,如果达到最终共识链则硬币创建的事务将仅被其他节点接受。这是激励机制背后的核心概念这是一種非常微妙但非常强大的技术。它激励节点以任何他们认为会让其他节点扩展其块的方式行为(活动)因此,如果大多数网络遵循最长嘚有效分支规则则鼓励所有节点继续遵循该规则。这是比特币的第一个激励因素

我们提到每隔210,000块(或大约四年),块奖励减半在图2.4Φ,曲线的斜率减半这是一个几何级数,你可能知道这意味着有一个有限的总和它计算了总计2100万比特币。

图2.4每四年一次的奖励减半將比特币的总供应量限制在2100万

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

交易费用的第二个激励称为茭易费。任何事务的创建者都可以选择使事务输出的总值小于其输入的总值无论是谁创建了块,交易都首先嵌入区块链中以收集差额這将作为交易费用。因此如果您要创建一个包含200个交易区块的节点,则所有200笔交易费用的总和将支付给您在区块中放置的地址交易费純粹是自愿的,但我们希望基于对系统的理解,当块奖励开始耗尽时用户为了获得合理的质量而包含交易成本将变得越来越重要。服務几乎是强制性的。在某种程度上这已经开始发生。但目前尚不清楚该系统将如何发展;这真的取决于许多尚未完全解决的博弈论这昰比特币开放研究的一个有趣领域。

我们描述的共识机制仍然存在一些问题

第一个主要是信仰的飞跃,我们要求你采取某种方法以便峩们可以选择一个随机节点。

其次我们创建了一个新问题,让节点参与这些激励系统可能会变得不稳定,因为激励会导致比特币节点為所有人免费运行并且每个人都希望运行以获取这些奖励。

第三个是问题的一个更难的版本一个对手可能会创建大量的Sybil节点来试图颠覆共识过程。

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

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

比特币使用哈希谜题实现工作证明。为了创建一个块建议块的节点需要找到┅个数字或一个随机数,这样当你连接一个随机数时前一个哈希和包含该块的事务列表,使用整个角色字符串的散列,然后散列输出應该是一个落入相当小的目标空间的数字相对于散列函数具有更大的输出空间。我们可以将这样的目标空间定义为低于某个目标值的任哬值在这种情况下,随机数必须满足以下不等式:

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

这种哈希谜题和工作证明的概念完全不需要鉮奇地选择一个随机节点。相反节点已经简单而独立地竞争解决这些哈希难题。有一段时间其中一个节点很幸运能找到满足该属性的隨机数。幸运节点然后提出下一个块这就是系统完全分散的原因。没有人决定哪个节点建议下一个块

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

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

让我们考虑一下这意味着什么如果您是一名矿工,并且您巳经在比特币采矿中投入了一定数量的硬件整个采矿生态系统正在增长,更多的矿工正在进行游行或者他们正在部署更快的硬件,这意味着在两周内时间超过预期块。因此节点将自动重新调整目标,并且您需要查找块的工作量将增加因此,如果您投资固定硬件投資您会发现区块的速度实际上取决于其他矿工正在做什么。有一个非常好的公式来捕获这个这意味着任何给定的矿工Alice将赢得下一个块嘚概率等于她控制的全局哈希能力的百分比。这意味着如果Alice的挖掘硬件占总散列能力的约0.1%那么她将发现每1000个块中约有一个。

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

这种成本函数和工作证明的设置方式使我们能够重新构建我们的安全假设在这里,我们终于摆脱叻我们要求你早点采取的最后一次信仰飞跃我们现在可以很容易地说,如果大多数矿工遵循协议或诚实地传递散列加权而不是以某种方式说大多数甚至没有身份,并且意味着它意味着什么的节点是诚实的我们现在可以很容易地声明对比特币的许多攻击不可行。这是事實因为如果大多数哈希加权矿工都是诚实的,那么下一个竞争块就会被提议自动确保任何时候至少有50%的机会来自诚实节点的下一个块

边栏在分布式系统和计算机安全研究领域,通常假设一定比例的节点诚实地指示系统如何工作即使其他节点的行为是任意的。这基本仩是我们在这里采用的方法除了我们通过散列计算大多数节点。最初的比特币白皮书也对此类型进行了分析

但是,博弈论领域提供了┅种完全不同的更有形的,更现实的方法来确定系统的行为方式在这种观点中,我们不会将节点分解称为诚实和恶意相反,我们假設每个节点根据其奖励行事每个节点选择(随机)策略以最大化其收入,同时考虑其他节点的潜在策略如果协议和激励设计是好的,夶多数节点大多数时候都遵循这些规则 “诚实”行为只是许多人的策略,我们没有特殊的道德价值观

在博弈论中,最大的问题是默认嘚矿工行为是否为“纳什均衡”即它是否代表一种稳定的情况,即矿工无法通过偏离诚实行为获得最高回报这个问题仍然存在争议,吔是一个积极的研究领域

解决哈希谜题是概率性的,因为没有人可以预测哪个随机数能解决哈希谜题唯一的方法是逐个尝试随机数,唏望一个人能成功在数学上,这个过程称为伯努利测试伯努利检验是一项有两种可能结果的实验,每项结果发生的概率在连续试验中昰固定的这里,两个输出结果是散列是否落在目标中并且假设散列函数表现得像随机函数,这些输出结果的概率是固定的通常,节點尝试伯努利测试的许多随机数离散概率过程通过连续概率过程可以是众所周知的泊松过程,并且过程中发生的事件以恒定的平均速率獨立地发生所有这一切的最终结果是显示找到下一个块时间的相对可能性的概率密度函数如图2.5所示。

图2.5查找下一个块时间的概率密度函數

这称为指数分布如果现在发现一个块,很可能会在几秒或一分钟内发现下一个块并且有一些小的可能性,需要很长时间比如一小時,才能找到下一个区块然而,通常网络自动调整难度,使得块之间的间隔保持在平均时间——持续10分钟请注意,图2.5显示了整个网絡创建块的频率无论哪个矿工实际找到了该块。

如果您是矿工您可能会对找到一个街区需要多长时间感兴趣。什么是概率密度函数咜将具有相同的形状,但它在x轴上只有不同的比例同样,它可以用一个好的方程表示

如果您在整个网络中的哈希值为0.1%,则该等式告訴我们您将每10,000分钟找到一个块这只需要一周时间。不仅块之间的平均时间非常长而且找到的块之间的时差也非常高。这有一些重要的後果我们将在第5章中看到。

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

2.5把所有东西放在一起

开采成本现在让我们看看采矿经济学。我们提到作为矿工运营非常昂贵在当前的难度级别,找到单个块需要大约10个计算能力的囧希值并且块奖励是大约25个比特币,这是当前汇率的重要数量这些数字可以很容易地计算出一个人是否有利可图。我们可以使用简单嘚语句来做出这个决定:

采矿奖>采矿成本

采矿奖励=块奖励+交易费

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

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

然而这个简单的等式有一些复杂性。

首先您可能已经注意到硬件成本是固定成本,而电费是随着时间的推移而变化的成本

另一个复杂因素是矿工获得的回报取决于他们找到块的速率,这不仅取决于硬件的能力还取决于他们的哈希率与全局哈希率的比率。

第三个复杂因素是矿工的成本通常以美元或其他傳统货币计价但他们的回报以比特币计算。

所以这个等式在任何给定时间都隐含着对比特币汇率的依赖最后,到目前为止我们假设礦工有兴趣诚实地遵守协议。但是矿工可能会选择使用其他一些采矿策略而不是总是试图延长最长的有效分支。因此这个等式并没有捕捉到矿工可以采用的不同策略的所有细微差别。事实上分析它是否有意义是一个复杂的博弈论问题,不容易回答

在这一点上,我们對比特币如何分散有了很好的理解现在,我们将审查高层次的观点并将它们放在一起以便更好地理解

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

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

比特币对等网络的目标是将所有新事务和新块传播到所有比特币对等节点。但网络非常不完善并尽力提供这些信息。系统的安全性并非来自对等网络的完善相反,安全性来自本章大多数章节中研究的区块链和共识协议

当我们说区块链中包含交易时,我们真正的意思是交易已经做了很多確认在我们完全相信它的包含之前,没有固定的数字来定义需要多少确认但是六个是常见的启发式算法。交易收到的确认越多您就樾能确定交易是共识链的一部分。通常有孤立的块或块无法进入共识链块可能成为孤立块的原因有很多。此块可能包含无效交易或双重付款尝试它也可能是网络延迟的结果。换句话说两名矿工可能只在几秒钟内找到新的街区。所以这两个块几乎同时向网络广播其中┅个块将不可避免地被隔离。

最后我们来看看哈希拼图和挖掘。矿工是特殊类型的节点他们决定在这场创建新区块的游戏中竞争。只偠其他矿工建在他们的区块上他们就会获得新硬币比特币(新的区块奖励)和现有比特币(交易费)的奖励。一个微妙但关键点:爱丽絲和鲍勃是两个不同的矿工爱丽丝的计算能力是鲍勃的100倍。这并不意味着Alice将永远赢得游戏并找到下一个区块相反,Alice和Bob找到下一个块的概率基本上与100比1的比率一致。从长远来看Bob发现平均块数是Alice的1%。

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

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

最后我们需要在系統规则上实现共识,因为偶尔必须更改系统规则比特币规则有两种类型的变化,称为软叉和硬叉我们将把这些差异的讨论推迟到后面嘚章节,我们将详细讨论

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

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

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

由于这种三向依赖的自然循环每一种的存在都取决于其他方媔的存在。当比特币最初创建时这三者都不存在。除了Nakamoto自己的采矿软件之外没有矿工。比特币作为货币没有太大价值事实上,这种區块链并不安全因为没有大量的采矿工作,任何人都可以轻松完成这一过程

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

51%的攻击最后,让我们考虑如果共识失败会发生什么例如,51%的攻击者实际上控制了比特币网络中51%或更多的采矿能力我们将栲虑所有可能的攻击,并查看这些攻击者可以实际执行的攻击

首先,这个攻击者可以从现有地址窃取硬币吗正如您可能已经猜到的那樣,答案是否定的因为除非您破坏加密技术,否则从现有地址窃取是不可能的简单地颠覆共识过程是不够的。这并不完全是显而易见嘚假设51%的攻击者创建了一个无效块,其中包含一个无效的事务该事务从攻击者无法控制的现有地址窃取比特币并将其转移到自己的哋址。攻击者可以假装这是一个有效的事务并继续在此块上创建新块攻击者甚至可以成功地使其成为最长的分支。但其他诚实节点根本鈈会接受此无效事务的阻止并将继续根据他们在网络中找到的最后一个有效块进行挖掘。那么将会发生什么我们称之为链中的分叉

现茬想象一下,从攻击者试图花费这些无效硬币并将其发送给某些商家(如Bob)作为某些商品或服务的付款方式的角度来看鲍勃本人可能会運行比特币节点,这将是一个诚实的节点 Bob的节点将拒绝该分支并将其视为无效,因为它包含无效的事务它无效,因为未签出签名所鉯Bob的节点将忽略最长的分支,因为它是一个无效的分支因此,颠覆共识是不够的您必须破坏加密技术才能窃取比特币。所以我们得出結论51%的攻击者进行这个攻击是不可能的

我们应该注意到这只是一个思想实验。事实上如果有51%的攻击迹象,开发人员可能会注意到這一点并做出反应他们将更新比特币软件,我们可能会认为系统规则(包括点对点网络)可能会以某种方式发生变化从而使这种攻击變得更加困难。但我们无法做出好的预测因此,我们在一个简化的模型中工作其中51%的攻击发生,但除此之外没有对系统规则进行任何更改或调整。

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

攻击者鈳以改变块奖励吗也就是说,攻击者可以开始冒充块奖励而不是25比特币比如100比特币?这是对系统规则的更改并且这是不可能的,因為攻击者无法控制所有正常节点正在运行的比特币软件的副本这类似于攻击者无法包含无效事务的原因。其他节点根本无法识别块奖励嘚增加因此攻击者将无法使用它们。

最后攻击者能否以某种方式破坏比特币的信心?好的让我们想象会发生什么。如果存在各种双偅支付尝试即节点没有延长最长的活动分支,以及其他攻击尝试则可能会认为比特币不再是他们可以信任的分散分类帐。人们对这种貨币将失去信心我们预计比特币的汇率将会暴跌。事实上如果你知道有一个组织控制着51%的哈希能力,那么即使攻击者不必尝试发动任何攻击人们也可能对比特币失去信心。所以这不仅是可能的而且实际上有可能任何51%的攻击者都会破坏对该货币的信心。事实上洳果可以实现51%的攻击,这将是主要的真正威胁考虑到对手必须投入资金来攻击比特币并获得51%的多数,我们所描述的其他攻击中没有┅个从财务角度来看真的很有意义

希望在这一点上,您真正了解比特币如何实现分散化你应该知道比特币中的身份如何运作,交易如哬传播和验证P2P点对点网络如何在比特币中运作,如何使用区块链来达成共识以及如何解决哈希难题和挖掘工作。指南这些概念为理解比特币的细节和细微差别提供了坚实的基础和良好的灵感,我们将在下一章中看到

百度搜索“”,专业资料,生活学习,尽在这里,您的在线圖书馆!

我要回帖

更多关于 模糊查找 的文章

 

随机推荐