你好,我是高朋,这里是8分钟区块链,我们昨天在聊什么是Tendermint算法的时候聊到一个名词,什么是拜占庭容错算法?我看评论区有超过10条的评论要求我们讲讲这个算法,那么们今天也用最简单的语言,让你稿明白什么是拜占庭容错算法?
我们先来看下什么是拜占庭将军问题?
好,我们了解了拜占庭将军问题,那拜占庭容错算法就好理解了,拜占庭容错算法,是一类分布式计算领域的容错技术,用于更好的进行工作证明和验证算法。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理这些异常行为,并满足当这些问题出现的时候,依然能够达成共识的一种算法
PBFT算法存在的问题:
· 计算效率依赖于参与协议的节点数量,不适用于节点数量过大的区块链系统,扩展性差。
· PBFT算法要求总节点数n>=3f+1(其中,f代表作恶节点数)。容错率相对较低。
另外PBFT算法有一个弱点,其不能很好的存贮记录其交易信息,黑客能够截取一些失效的副本,这会让信息外漏。
本质上来说,拜占庭容错方案就是少数服从多数。目前有一些机构正在关注实用拜占庭容错算法,比如中国ChinaLedger 联盟和HyperLedger联盟就在研究探讨其的实际应用。迅雷发布的迅雷链也是使用的这一共识算法。
我找到一篇最通俗的文章,放在了文末,感兴趣的同学可以去了解一下。
拜占庭容错算法确实不太好理解,你在学习的时候也可以去网上搜些视频,有很多,不过不明白也没关系,
PBFT算法存在的问题:
· 计算效率依赖于参与协议的节点数量,不适用于节点数量过大的区块链系统,扩展性差。
· 系统节点是固定的,无法应对公有链的开放环境,只适用于联盟链或私有链环境。
· PBFT算法要求总节点数n>=3f+1(其中,f代表作恶节点数)。系统的失效节点数量不得超过全网节点的1/3,容错率相对较低。
另外PBFT算法有一个弱点,其不能很好的存贮记录其交易信息,黑客能够截取一些失效的副本,这会让信息外漏。
本质上来说,拜占庭容错方案就是少数服从多数。目前有一些机构正在关注实用拜占庭容错算法,比如中国ChinaLedger 联盟和HyperLedger联盟就在研究探讨其的实际应用。迅雷发布的迅雷链也是使用的这一共识算法。
什么是Tendermint。它将自己描述为"用任何编程语言的拜占庭容错复制状态机",让我们来破译这个东西。拜占庭容错意味着我们不需要单一的可信实体。就像发行货币的中央银行,我们相信它会以合理的方式发行货币。它被称为拜占庭容错,是因为有一些人骑着骆驼,想要征服拜占庭帝国。
因此,他们需要同时攻击君士坦丁堡城。到目前为止都很容易。他们所要做的就是从四面八方同时发起攻击,因为他们带来了军刀和前面提到的骆驼,这听起来像是一个可行的计划。但是他们没有手机,所以不能给其他人打电话或者发快照。更糟糕的是,有些将军可能是叛徒,而且骆驼的粪便也很难闻。
因此,叛徒们想通过提供虚假信息,把其他忠诚的将军送上断头台。相反,所有的部队领导人不想输,所以需要防止叛徒传播误导信息。不幸的是,没有人知道谁是叛徒,在某种程度上,不可能知道信息是否可信。整个困境被称为拜占庭将军问题,这也是区块链正在解决的典型/示例问题。
该问题的一个解决方案是允许去中心化的组织系统。将军们是一个去中心化系统的好例子,因为技术上不可能把所有的将军都连接到一个中央权威机构。因此,只有通过网状网络才能进行足够快的通信,但这将导致拜占庭错误。
一种解决方案是领导者在他们的消息中添加签名,但是如果你得到6条带有2种不同类型签名的消息,3条是假的,3条是真的,会发生什么?在这种情况下,甚至拜占庭容错协议也无法起作用。但如果只有少数叛徒,就有办法确定谁是忠诚的,谁是叛徒。
接下来是“复制状态”,这就是区块链网络实际所做的事情。它们在所有节点之间复制状态。无论你是在澳大利亚、中国还是北极运行你的节点,最终都会得到相同的区块链。我们不想在这里讨论你用比特币复制了什么,有些人会说这不是一种状态,而是一种未花费的交易。
这对开发人员来说很重要,但我们是小白,不需要过分拘泥于细节。既然我们提到了比特币,也会注意到比特币有一种实现拜占庭容错的特殊解决方案。这个解决方案叫做工作量证明。我们稍后再聊。
所以现在我们知道了什么是Tendermint。它是一种在没有任何中央权威机构的情况下,在全球范围内分发某个状态的软件。这里的"某个"可以是任何东西。它可以是一个帐本,一个图片数据库,也可以是一个未成交的交易订单列表。都没有关系。这实在太棒了。
这意味着,使用Tendermint,你可以创建所需的任何区块链系统,并且除了应用逻辑之外,所有事情都帮你做完了。节点之间如何连接,如何达成共识,如何编写区块链,所有这些问题都已经解决,如果你想创建一个token,只需要编写所需的token经济模型。你还可以创建不使用token的去中心化应用程序(dApp)。
这里有一些限制,最重要的是你的应用程序必须是确定性的。这意味着无论你提供什么输入,都可以精确地预测输出,换句话说,所有节点都会根据给定的交易集合和初始状态计算出完全相同的下一个状态。显然这是很有必要的,否则就会一直出现分叉。
所有这些都意味着Tendermint将区块链方案中的共识和网络层与应用层分离了开来。这意味着任何人都可以在不编写加密和网络相关代码的情况下编写区块链程序。这使得开发人员很容易构建解决方案。大公司呢,也许他们想要自己的私有区块链?没问题,Tendermint把决定权交给了你,谁可以成为一个节点,以及如何激励贡献者。
现在,我们意识到Tendermint每天都能创造新的代币,甚至比以前更快,所有这些代币都是建立在相同的基础之上的。也许把它们关联起来也是很有意义的。这就是Cosmos开始发挥作用的地方。
Cosmos是用Tendermint构建的,它有权益证明代币,利用委托来允许任何人,甚至非验证者参与质押。我们把这个称为Cosmos权益证明。这又是一个我们小白无法理解的疯狂的名词。
我们先来了解一下工作量证明(PoW)。这是确保比特币安全性的方法。还记得,在文章的开头,我们需要一种方法来确定谁是叛徒、谁是忠诚的。在加密货币的世界里,这意味着谁在用有效的交易创建新区块,谁可能为了个人利益伪造假交易。
PoW是基于这样一个理念:做一项困难的工作,谁完成这项工作就相信谁。因此,网络同意解决这项困难的任务,同时结果也很容易验证,而且一旦问题解决,就会产生出一个新的任务。此外,任务的难度是可以调整的。无论谁先解决了这个难题,就找到了一个新的区块,然后开始寻找下一个区块。
不过,这些东西是去中心化的。那么我们怎么知道该信任谁呢?在这种情况下,你可以信任最长的链。因为最长的链解决了最困难的工作,所以最值得信赖。啊哈,但这不是会造成出块速度的螺旋式上升,以及出块时间的降低吗?是的,但是正如我们所提到的,工作的难度是可以调整的。
因此,网络会增加问题的难度,因此平均需要10分钟才能找到一个新的区块。现在我们可能会问自己,这玩意儿是怎么保证网络安全的?只是做一些随机的任意的工作?好吧,问题是你必须购买硬件才能做到这一点。你得耗费电力才能做到这一点。
如果你决定作恶,购买大量的哈希算力,完成所有的PoW工作并控制网络,那么你就能窃取所有的比特币。一种反应可能是比特币贬值,这对你来说不算太坏,因为不管怎么说你都窃取了比特币,但你的挖矿硬件现在也变得一文不值。你花了很多钱买硬件。
因此,那些拥有大量哈希算力的人投入了大量的资金,他们也希望比特币能够繁荣发展。此外,还希望挖矿硬件的价值与比特币的市值相称。这是通过手续费和区块奖励来实现的,这意味着当比特币的估值更高时,矿工的收入会更高。
因此,这将激励更多的矿工,从而增加硬件资本。有了这个聪明的机制,比特币通过这个载体被销毁的成本高达数十亿美金。不幸的是,PoW有两个非常关键的缺陷。一个关键的缺陷是浪费电力。比特币浪费了大量的电力。这些计算是随意的,只对保护网络安全有意义,但它们计算的数字并不是为了达成某种目的。浪费总是不好的,并且在全球变暖的背景下,浪费能源更是雪上加霜。
PoW的第二个关键问题是矿工的力量。矿工们不需要保留比特币。对他们来说,比特币多有用并不重要,他们在意的是挖矿带来的收益。如果矿工们想让比特币变得更有用当然更好,但在这里我不想讨论这对比特币有什么好处。
我想要说的是,矿工可能会遵循某种策略,提高手续费从而使其无法作为货币使用,沦为价值储存,甚至更糟糕到只是收藏品 。例如,对于日常支付,你不会使用交易成本高于10美元的货币。如果你在售货亭买一块口香糖,但是交易成本远高于商品本身的话,那我们就不仅仅是小白,而且是绝对的傻瓜。我们可以是小白,但我们不想成为傻瓜。
然而,多年前人们就已经下定决心要解决PoW的问题。最流行的解决方案是权益证明(PoS)。网络不再通过工作量难度,而是依靠高持股获得安全性保障。因此,为了达成共识并找到新区块,你不再需要硬件,而是需要持有大量的代币。
在PoW中,每个人都有机会找到一个与投入的工作量成比例的新区块。在PoS的模拟中,每个人都有机会找到一个与投入的股份数量成比例的新区块。这意味着你可以质押你的代币,使它们被冻结从而参与到共识的回合中来。
还记得那些保障网络安全的昂贵的硬件吗?在这里,同样的情况也发生在质押的代币上。如果你伪造假交易,那么你质押的加密货币就变得一文不值,因此你不会这么做。乍一看,PoS听起来比PoW更简单、更明智,但它也有一些缺陷。
一个突出的例子是"无利害关系(nothing-at-stake)"问题。它适用于分叉,所以当网络分裂成两个独立的部分时,单一的PoS会鼓励持股人跟随所有的分叉链。在PoW中,你不能这么做,因为你的矿机受限于其可以完成的工作量。但是如果你质押的代币以同样的方式存在于所有的分叉上,你在分叉上不会失去什么,为了获取更多盈利,会鼓励分叉。
不幸的是,分叉对于网络来说是不健康的,它们会停止增长,让用户感到困惑,并减缓发展过程。另一个问题是,所有这些权益质押者必须交流并同步他们对链的演进的看法。对PoW来说,这没什么关系。有人会找到下一个区块,其他所有人都可以验证这个解是否正确。
对于PoS,必须确定谁将提议下一个区块,然后所有人都必须同意该块是有效的。如果我们像比特币一样坚持10分钟的区块时间,这也不算个问题,但我们知道可扩展性问题是一方面,另一方面我们也不想等待交易确认。事实上,没有必要像比特币那样等待6个区块确认(=1小时),以确保交易有效。这只是PoW的结果。
很抱歉,这段文字已经太长了。也许这也是喝杯咖啡的好时间。我会尽量缩短时间,但我不知道该怎么做,因为很多人不知道所有这些内在的问题。但好消息是:现在我可以谈谈Cosmos :D
所以Cosmos通过引入“消减”惩罚的概念来解决这个"无利害关系"问题。据我所知,这个想法是由Tendermint的负责人Jae Kwon提出的。他们的想法是,行为不端的权益质押者会被扣除代币。当你行为不端时,就会失去代币。当你伪造假交易时,会损失很多代币。
因此,如果你跟着分叉#2走,你的代币就会在分叉#1处被扣除。同样,权益质押者也可能被迫参与监管过程。这也解决了DAO灾难中出现的一些问题。下一件事情是,如果你偷懒,不参与生产新区块的过程,那么你也会被扣除代币。让权益质押者参与新区块的创建对网络安全很重要。
此外,要鼓励人们质押他们的代币,而不是让他们什么都不做或者天天交易。因此,Cosomos中存在一种动态通胀。质押你的代币会在通货膨胀中占有相应的比例,从而使你不会因为通货膨胀而损失任何东西。这对于保持低手续费,并仍然鼓励代币质押是很有必要的。
下一件事情是(委托)Cosmos权益证明(CPoS),它解决了前面提到的另一个问题。例如,当有10000个权益质押者时,每个人都必须检验每个新的区块,如果没有问题的话,必须通知每一个人。
有两个限制,一个是延迟,另一个是带宽。对于延迟,信号传输的物理限制是光速,传输到地球的另一侧大约需要66毫秒的时间。在媒介中,光的速度会降低,在光纤中的传播速度和在铜缆中不同,但我们就说100毫秒吧。
现在它取决于网络拓扑结构,举个简单的例子,让我们假设共识中的一个参与者将他的知识发送给其他两个参与者。然后需要14次迭代(阶段)来通知所有参与者(因为2¹⁴>10000),这14个阶段需要1.4秒,在所有的参与者都被通知之后,他们必须发送回复,总共2.8秒。这个计算的问题是,它是错的。因为在这种情况下,不能有一个叛徒。例如,如果在第一阶段有一个叛徒,那么一半的网络会得到错误的信息。
此外,我们没有考虑到计算机也必须进行计算。假设一次计算需要50毫秒,例如实际检查一个区块是否有效。但也有优化空间,不必将新区块只发送给其他2个网络成员。我们可以发送给所有的10000个参与者。因此生产新区块的人,发送给所有的10000个参与者,他们进行计算看是否正确,已经过去了150毫秒。然后所有的10000个参与者都发送给所有其他的10000个参与者,他们计算谁可能是叛徒,又过了150毫秒。然后所有的10000个参与者都同意新的区块,提出他们对叛徒的担忧,并建议下一个区块的生产者。再加上150毫秒,总共450毫秒。
太好了,我们可以得到小于1秒的区块时间。和比特币的10分钟相比相当不错。此外,区块是最终确认的。使用这种方法,无需等待6个或32个区块以确保所有内容有效。这是因为我们不再信任最长的链,而是根据我们的利害关系来达成一致。好,那么让我们检查一下另一个限制,也就是带宽。
对于第一种计算,我们假设跟原始比特币的区块一样的大小,1MB。假设我们必须每150毫秒向所有10000个参与者发送整个区块,则需要一个67 GB/s带宽的互联网连接。通常这是以bit/s而不是byte/s表示的,所以这将是532 Gbit/s。这是相当好的连接。有些人有100 Mbit/s的带宽,有些幸运儿在学生宿舍有1 Gbit/s的带宽,但没人有532 Gbit/s的带宽,至少没法到达世界上的任何地方。
不过,在每个阶段只有2个接收者的初始示例中是可行的,如果我们以150毫秒的时间间隔计算,那么只需要大约100 Mbit/s的带宽。实际上,我们需要得更少,因为我们不需要在所有回合中都传输整个区块。
在最后一轮中,我们只需要发送确认。但是,第一轮不能延迟太多。我们已经回退到每轮2名接收者,但又出现了另外一个问题。用这个值我们算出的结果是2.8秒。不幸的是,我们犯了一个错误,没有考虑拜占庭容错能力。为了达到这一点,必须有更多的阶段,从而没法把区块时间限制到1秒范围内。
因此这里我们遇到了一个真正的困境。对于10000个网络参与者,我们要么没有足够的带宽同时向所有参与者广播,要么延迟太高,无法进行多个阶段的信息分发,并且没法把区块时间限制在几秒钟的范围内。
请记住,这里提到的网络参与者指的是参与共识的人。刚刚读取和发送交易的区块链用户不需要参与此过程。最终确认的区块可以广播给数百万用户,因为不需要双向同步。
解决这个问题的办法是委托。所以叫委托Cosmos权益证明。权益质押者分为两组,委托人和验证人。验证人是共识机制的参与者,而委托人不直接参与网络通信。在这种情况下,我们可以将验证人的数量限制到一个固定的数目,例如100。
现在,即使有10000人甚至100000人想要质押,同步所有这些节点的问题也不复存在。同步100个参与者不是什么大问题,我们的初始示例是2的幂次,如果有10个接收者需要获取新区块的话需要7个阶段,对于简单的信息传递,2个阶段就足够了。
对于拜占庭容错,我们需要一些额外的回合,但在正常的互联网连接下,可以在几秒钟内创建新的区块。那么,委托人需要做什么呢?他们投票给验证人。他们仍然用自己的代币保护网络安全。选择质押了很多代币的的验证人是很有意义的,这样他们就不会作恶,但是委托人也可以决定要支持哪个验证人。
因此,你可以参与获取质押代币奖励,但不需要设置一个强节点。这是验证人的工作,他们的工作会得到更多的回报。但正如Cosmos中每年的通货膨胀是动态的一样,验证人委员会也是动态的。
对前者进行调整是为了保证超过66%的代币质押(在工作量证明中,50%的哈希算力必须是诚实的,在实用拜占庭容错中则需要66%),对后者进行调整是为了使委员会保持在合理的低数量水平,但验证人仍有运行节点的动机。这是通过验证人之间竞争委托权来实现的。
这里还有一句话很重要,如果你的验证人遭到消减惩罚,你质押的代币也会丢失。这就是为什么分拆你的委托代币以及密切关注验证人是很重要的,这是一种监控发生了什么的激励,从而保持网络安全。1 MB区块大小只是这里的一个例子,当然这也是动态的。但这里选它的目的是为了证明Cosmos能够处理比比特币多600倍的信息,而不会浪费电力。
好,所以Cosmos在技术上考虑得很好,并且在某种程度上提高了垂直扩展性。这很棒,但是很多代币都在这么做,对吧?完全正确。有很多代币在做这个。老实说,这并不是Cosmos中了不起的东西。所以请系好安全带,我们现在正在接近美味的正餐。准备舔手指吧。
Cosmos也是一个多token平台。Cosmos中不仅有Atom(原子),这是Cosmos的质押token,也有photon(光子),这是Cosmos的手续费token。因此,一种代币用于整个共识机制,另一种代币用于支付交易。这些Photon没有被质押,因此在交易所里有很强的流动性。
此外,Photon也是ethermint网络的原生token。Ethermint是在Tendermint上托管的以太坊。和以太坊的功能相同,但使用如上所述的共识。这解决了可扩展性问题的垂直部分。由于Cosmos并不打算成为其他生态系统的竞争对手,因此ethermint的创建被称为“hard spoon”。这意味着所有ETH持有者都能获得Photon,并能像使用以太坊一样使用ethermint,但手续费要少得多,而且它和Cosmos网络是相连的。Cosmos网络?
实际上,Cosmos把自己描述为区块链的互联网。这是因为在这个Cosmos中,区是通过中枢相连的。这些区可以是任何用Tendermint创建的东西。ethermint显然是其中一个区。另一个区也可以是和比特币挂钩的区。这意味着你可以把真正的比特币存进来换取Cosmos中的比特币token。(蓝狐笔记注:这就实现了去中心化的跨链代币流通。)
一旦你有了这些token,就可以把它们转移到Cosmos中枢,并通过交易换成其他的token,比如Photon或者任何其他可用的token。另一个区也可能是一个锚定欧元的区,在这里你可以将欧元存入银行账户,换取一些Cosmos中的欧元token。现在你可以用这些欧元token和比特币token进行交易,交易完成后,在比特币挂钩区中赎回真正的比特币。然后,你的对手方会在欧元挂钩区赎回欧元。你们两个进行的是一次去中心化交易。
这在Cosmos中是直接可行的吗?不,但是很容易建立一个与Cosmos相连的区,允许去中心化交易。事实上,创建区并将它们通过中枢相连是Cosmos的突出特征。想象一下以太坊上有一个应用程序通过创建超过10%的流量堵塞了网络,这一切都是关于可爱的小猫。
在Cosmos中,开发者可以决定为这些可爱的小猫创建一个特定的区。如果小猫热完全爆发了,即使那个区处理交易的速度不够快,开发者也可以生成另一个小猫区,和第一个区并行运行。通过Cosmos中枢,区之间的小猫可以以去中心化的方式交易。
我们在这篇文章里听到过垂直扩展;还有另一种方法,被称为水平扩展。水平扩展是异步的,会使事情变得更加复杂,但它没有垂直扩展的那些限制(带宽和延迟…)。所有这些都意味着有可能建立中枢和区的树形结构,为区块链技术的极大扩展打开了大门。
许多人可能听说过以太坊开发者正在开发的分片。这是不同的,分片会自动工作。对于Cosmos中枢和区,开发者必须坐下来手工构建。但分区的一大优势是每个区都可以独立构建。一个区可以有自己的经济模型,私有区块链也可以被连接起来。这已经表明了Cosmos项目的精神。它不是像许多其他项目声称的那样接管整个加密空间。
它只是把一切联系在一起。依靠单一区块链以最好的方式解决所有问题是没有未来的。未来将会有许多应用专属的区块链,以满足其用户和开发者的需求。Cosmos希望将这些区块链连接到现有的区块链。Tendermint希望给这些应用专属的区块链一个基底。这就是为什么Tendermint和Cosmos不能单独分开看的原因。两者都使另外一方更有价值。
有机会聊一期bch…
所有这些都意味着有可能建立中枢和区的树形结构,为区块链技术的极大扩展打开了大门。
越听越糊涂
谢谢老师分享!
在没有中心的情况下如何达成共识的问题!
建议大家多买书看看
感谢老师的付出
最近讲的越来越理论化,越来越像提前录制好的。原来的实时讲热点,操作,行情的以后都不说了吗
8分钟区块链 回复 @赵格瑶: 这个还真是时时的,行情我们短期判断不准