主页 > 比特派钱包和imtoken哪个安全 > 公链七大超级难题:设计可持续发展的共识算法

公链七大超级难题:设计可持续发展的共识算法

公有链的以太坊运行速度_siteblockvalue.com 以太坊公链_以太坊公链查询

区块链的本质远不止是一个分布式账本。 区块链如何安全达成共识? 为什么以比特币 PoW 为代表的共识不可持续? 以及如何设计可持续的共识机制?

从2018年开始,沉淀多年的区块链技术终于火起来了,大家对区块链的认识还停留在分布式账本上。 不可篡改的分布式账本可以说是区块链最原始的特征。 目前的公链技术可以承载更多类型的应用。 对区块链的理解也可以从多个角度展开。 让我们从技术的本质入手,从理解区块链到底是什么的角度来理解。

公有链的以太坊运行速度_siteblockvalue.com 以太坊公链_以太坊公链查询

区块链是一种存储数据的方式,其本质是状态机和数据库。

1个

状态机:表示状态及其转换的机器

状态可以看作是系统当前指标的值,状态机是指某些条件的发生,当前状态转变为下一个状态。 比如我现在的状态是我口袋里有十块钱,我把五块钱给了之前的老板,然后我就到了下一个状态:我口袋里还剩下五块钱。

对于比特币:就是交易单的状态转移。

siteblockvalue.com 以太坊公链_以太坊公链查询_公有链的以太坊运行速度

对于以太坊,智能合约允许更复杂的状态转移规则,当满足触发条件时,可以按照约定的规则进行状态转移。

siteblockvalue.com 以太坊公链_以太坊公链查询_公有链的以太坊运行速度

讲一个程序员笑话:

老婆给做程序员的老公打电话:买一斤包子,下班带回来,看到西瓜就买一个。 那天晚上,程序员老公手里拿着一个馒头进了屋。 . . 老婆怒道:“你怎么就买了个包子?!” 丈夫回答说:因为看到卖西瓜的。

这个智能合约的条件是:“你是否看到有人卖西瓜”。 状态转换规则是:没看到就买一斤包子,看到就买一个包子。 状态的转变是:程序员因为“看到卖西瓜的”这个条件被触发,从买一斤包子的状态变成了只买一个包子的状态。

对于 Genaro Network 来说,稍微复杂一些,因为它涉及到网络中数据存储引起的状态变化:

公有链的以太坊运行速度_以太坊公链查询_siteblockvalue.com 以太坊公链

2个

数据库:是按照数据结构组织的,

用于存储和管理数据的仓库

数据结构:计算机存储数据的方式。 常见的基本数据结构包括队列、栈、链表、树、图等。 对于复杂的系统,它们的数据结构也是由基本数据结构的组合改编而来的。

在区块链中,数据结构是一个链表,链表的每个节点都是一个区块,一个区块就是一棵默克尔树,其中包含若干笔交易记录。

1.链表

以太坊公链查询_公有链的以太坊运行速度_siteblockvalue.com 以太坊公链

2.区块(默克尔树结构)

以下图为例,具体交易记录为:D0、D1、D2、D3,两两结合,不断向上计算哈希值,得到树的根,也就是常说的“区块头” ”。

siteblockvalue.com 以太坊公链_公有链的以太坊运行速度_以太坊公链查询

公有链的以太坊运行速度_siteblockvalue.com 以太坊公链_以太坊公链查询

这实际上是一个双层结构。 区块链之所以采用这样的“双层”数据结构,是因为每个区块中的交易相当于并行,多个交易包含在一个区块中,增加了区块大小,提高了区块生成速度。 在 的情况下,增加了块数据量,从而提高了系统的性能。

如上图所示,D0、D1、D2、D3由一个矿​​工计算,然后广播验证,其余矿工也可以同时验证四笔交易。

你看到的移动端的轻钱包就是利用了这个原理。 轻钱包仅作为移动支付工具,不能占用太多空间,不可能保存所有节点数据。 这时候就必须用上面的原理来验证区块头(也就是前面说的根值),就可以确认交易是否存在。 可以过滤掉大量无关数据,减少客户端不必要的下载,同时实现去中心化验证。

这个原理被称为简单支付验证(SPV,Simplified Payment Verification)。 SPV充分利用了Merkle树结构。 查找交易时,只需要下载区块头,不需要下载整个区块。 区块头只有80字节,每小时6个,大小为每年4M,一般设备都可以携带。

总结一下,区块链的本质就是状态机和数据库。

同时,区块链是应用程序的分布式账本,是通过去中心化和去信任化共同维护的可靠数据库解决方案。

以太坊公链查询_siteblockvalue.com 以太坊公链_公有链的以太坊运行速度

那么问题来了,如何让多个完全陌生的网络节点在去中心化、去信任(或者说降低信用成本)的环境下识别区块链的状态机和数据库? 也就是说,如何设计系统规则,让陌生的买卖双方在没有第三方信任机构的情况下,也能产生信任并完成交易?

答案是共识机制。

共识机制非常重要,是区块链技术的核心。 它在很大程度上决定了整个区块链系统节点之间的相互信任程度,也决定了其他用户对区块链上数据的信任程度。 在区块链系统中,共识机制设计得好不好,直接决定了系统的工作效率、运行成本、安全性、稳定性,甚至可以毫不夸张的说,直接决定了系统的价值。

接下来,我们开始讨论本文的主题——如何设计可持续的共识算法。

以太坊公链查询_公有链的以太坊运行速度_siteblockvalue.com 以太坊公链

所谓共识算法就是各个节点对区块的正确性达成共识。

共识是一切交易的基础。 共识越去中心化(参与度越高),其效率越低,但安全性越高,越稳定; 相反,共识越中心化(参与度越低),效率越高,层次越高,越容易出现独裁和腐败,安全性越低。 如何平衡这些因素使其具有应用价值是一个值得讨论的重要课题。

以主流的PoW(Proof of Work)为例,哈希运算是根据区块头和一个随机数进行的,可以简单理解为区块必须经过大量的数学计算后才能插入到区块链中。

以太坊公链查询_公有链的以太坊运行速度_siteblockvalue.com 以太坊公链

为什么矿工不能直接挂块呢?

在区块链中,最长的链被认为是正确的链,所有矿工都选择最长的链进行挖矿,以保证链的唯一性。 公链是一个完全开放的系统——任何节点都可以成为矿工。 其背后的设计理念是“作恶的收益小于付出的代价,所以理性节点不会作恶”。 传奇赛跑运动员普雷方丹也有一句名言:“你可以打败我,但你必须付出足够的努力和汗水。” 如果矿工可以直接把区块挂在链上,那么攻击者就可以分叉,疯狂地拉长这条链,人们误以为这才是正确的区块链。

在PoW中,攻击者必须进行工作量证明来拉长分叉链,并且必须付出比全网更大的算力(超过51%)才能跑得最快,同时形成更多的区块,具有误导性. 以为这是最长的链条,攻击就完成了,但这显然是不可能的。

这个系统的设计逻辑没有问题,但是在PoW的过程中,需要消耗很多不必要的算力和能量。

以太坊公链查询_公有链的以太坊运行速度_siteblockvalue.com 以太坊公链

首先,PoW 需要的算力不断增加。 为了保证每10分钟产生一个区块,同时在2140年产生2100万个所有比特币,每2016个区块后必须升级难度。 因此,挖矿设备不断更新以满足需求。 从CPU挖矿,到GPU挖矿,再到FPGA挖矿等等,功耗也在与日俱增。

英国研究显示,2017年,超过29.05太瓦时twh(1太瓦时为十亿度电)用于比特币“挖矿”,超过全球159个国家年均用电量。 爱尔兰(人口477万)年用电量仅为25太瓦时。 今年的最新估计表明,该数字已经接近哥伦比亚的全国用电量,为 59.6 太瓦时。

可以推断,如果机制不发生根本性的改变,完成PoW计算的用电量迟早会超过世界上任何一个国家的年均用电量。 更何况电能是二次能源,发电所需的一次能源(煤、油、水、天然气等)消耗量更是难以统计。 长此以往,在利益的驱使下,如果未来世界上大部分的能源都用来挖矿,那将会造成世界范围的能源危机。

siteblockvalue.com 以太坊公链_公有链的以太坊运行速度_以太坊公链查询

其次,同一时间主链上只会有一个区块,由被计算的矿工获得,但是其他参与计算的矿工虽然消耗了大量的算力,但他们没有任何收益,浪费了很多的计算资源。

最重要的一点是,这些计算并不是具有实际意义的计算。 也就是说:以比特币为代表的采用PoW共识的公链,本质上只能起到账本的作用,不具备实际功能,所以它所做的计算也是无用的。

siteblockvalue.com 以太坊公链_以太坊公链查询_公有链的以太坊运行速度

当初我们在讨论建立Genaro共识机制的时候,明确说要做有意义的计算。 也就是说,公链除了作为账本之外,还应该在互联网上承担一些其他的功能。 世界上有很多事情需要大量的计算能力,为什么我们要做一些没有实际意义的哈希计算呢? 为什么不计算蛋白质的分子结构、计算基因工程、计算机器学习?

因此,在完成有意义的计算的同时降低能耗是共识机制设计的关键。

但要同时做到这两点是极其困难的。 第一,如果消耗的资源减少,安全性会降低,因为攻击者更容易将分叉链误认为是主链; 第二,有意义的计算怎么和区块链系统定期对接,比如你做机器学习计算,稳定的Data Set从哪里来,计算奖励怎么分配,这些都需要精心设计。

在这样的背景下,“激进”的 PoS 逐渐获得了更多的认可,几乎完全不需要计算,从而大大降低了能源消耗。

以太坊公链查询_公有链的以太坊运行速度_siteblockvalue.com 以太坊公链

>> PoS(Proof of Stake):权益证明。 如果将PoW比作意大利国家队稳固的防守体系,那么PoS则有着巴西队降低防守力增加进攻性的野心。

PoS 根本不需要计算,而是需要证明者证明拥有一定数量的权益。 证明节点对区块的结果进行押注,押错则输,押对则获得奖励。

然而公有链的以太坊运行速度,无论是在工业界还是学术界,PoS 都是一把双刃剑。 在提高性能的同时难以保证其安全性。 最著名的两个问题是:nothing at stake 和 long range attack(远程攻击)。 以太坊在 PoS 的过程中也遇到了很多困难。

>>Nothing at stake:如果攻击者分叉当前链,则挖矿节点的保证金已经抵押在两条链上,他不需要判断哪条链是正确的,而是支持两条链,从而导致攻击者的成功,而不管攻击者是否成功,节点选择全挖的策略也能保证自己的收益,所以理性的节点只要不是“持币大户”,都会支持攻击者.

有人针对这个问题提出了一些解决方案,比如vitalik提出的“错误惩罚”。 如果节点在出现分叉时选择同时押注两条链,则押注多条链或押错链将受到惩罚。

>>远程攻击是一个比较难的问题:可以理解为PoS中的女巫攻击。 攻击者不分叉现有链,而是返回初始阶段链,创建一条新的、更长的链,使网络误认为它是主链。 由于 PoS 共识中节点的增长速度不受限制(比特币 PoW 有一个限制,每 10 分钟产生一个区块),攻击者可以在很短的时间内构建更长的链。 在区块链系统中,一开始不会有很多矿工。 早期区块由少数矿工挖出。 如果这些矿工互相勾结,他们会联合起来回到早期,因为只有他们才能在那个阶段挖出下一个区块。 他们可以轻松协调这次攻击。

目前对于远程攻击还没有很好的解决方案。 一些客户端(包括 casper)试图通过限制更改块的长度来解决这个问题。 比如NXT的处理方式是超过720块不能改。 但这只是降低了问题出现的概率,或者说是转化了问题,会导致“主观性弱”。

事实上,已经有很多 PoS 算法试图解决上述问题:

以太坊公链查询_公有链的以太坊运行速度_siteblockvalue.com 以太坊公链

>>Ouroboros:可证明安全的 PoS 区块链协议。 Ouroboros 添加了权益证明算法,并定义了节点对账本状态达成共识的方法。 是第一个声称严格安全分析链协议的PoS型区块。

Ouroboros在一定条件下解决了实践验证中的各种攻击,包括双花攻击、交易拒绝攻击、51%攻击、无抵押、去同步攻击等攻击。 在某些条件下,科学证明它是安全的。 它在亚马逊云中运行基准测试,展示了 Ouroboros 的权益证明区块链协议的性能优势。

但是,频繁回头验证的模式存在问题。 多次回头,一方面影响TPS,一方面会增加更多的沟通,另一方面也很难验证所有的stake是否正确。

>>DPoS,相对于普通的PoS,多了一个选举机制,类似议会制,不仅币的数量很关键,信誉也更关键,从而达到速度和安全性的提升。 DPoS 希望通过投票筛选出可信节点,解决 PoS 安全风险。

同样,还有PoP、PoC:

>>PoP(Proof of Participation),基于账户参与的算法,PoP结合了PoI和DPoS的思想,既能保证设备的公平性,又能得到社区的共识,同时减少浪费的计算能力。 让记账更经济高效,从而支持更大规模的协作系统。

>>PoC(Proof of Credit),信用共识机制,“PoC”继承了“PoW”的特点,通过计算实现账本安全,但同时提出了一个非常创新的点“利用用户的信用值”作为挖矿方式 Entry threshold,从而积累有效节点进行网络加密计算。 同样,“PoC”在社区的发展上要比“PoW”公平得多。 参与挖矿时,根据自身信用值判断是否具备共识(挖矿)资格。 达到共识信用值后,为防止节点违规,需要提交一定数量的担保方可参与共识。 在共识网络中加入一个简单的智能合约作为共识合约,约束每个节点参与共识。 违反者将受到重罚。 这也保证了节点会正常参与共识,用于提高网络的安全性。

但目前,没有任何 PoS 被证明与 PoW 一样安全。 在设计上,它尽可能地通过制定区块规则和奖惩机制来解决无风险等问题,但本质上仍然是不安全的。 一个更可行的方法是做出折衷,PoW+PoS混合共识机制。

例如第一个使用 PoS 的项目:peercoin。 Peercoin 是第一个 PoS 算法。 2012年提出,PPCoin最大的创新在于其挖矿方式混合了PoW+PoS方式,PoW部分加入币龄概念。 越早购买,优势越大。 与纯 PoS 或 Pure PoW 相比,实现了节能和安全的平衡。

与 CFFG 类似,Vitalik Buterin 领导研究 Casper the Friendly Finality Gadget (CFFG) 的 PoW+PoS 混合模型,需要两轮投票和质押 TOKEN。 第一次是 PoW,超过 2/3 可以验证成功,第二次是 PoS,超过 2/3 可以验证成功,然后区块被确认,验证者可以获得收益。 验证者被激励聚集在权威链上,因为如果他们继续在不同的链上投票,他们将受到惩罚。 验证者不仅会因为重复投票而受到惩罚,还会因为在错误的链上投票而受到惩罚。

Tendermin,2014,Jae Kwon 领导的研究,BFT 和 PoS 混合机制,假设少于 1/3 的验证者是拜占庭的,Tendermint 保证安全永远不会被攻破——即验证者(超过 2/3 ) 冲突的块永远不会在相同的高度提交。 因此,基于 Temdermint 的区块链永远不会分叉。 Tendermint 的设计决策有利于安全性和不变性。

然而,这样的混合共识机制虽然降低了能耗,但仍然没有从根本上解决PoW“浪费不必要的能源消耗”的问题。 为了设计一个可持续的共识算法,需要同时做以下两件事:

1. 寻找低能耗实用的算法

2. 使用这个实用工具作为 PoS 的防御机制

要实现以上两点,势必需要PoX+PoS这样的混合共识机制。 至于X是什么,要看各个公链的设计。 如果公链除了账本还有其他功能,那么这个功能就是公式中的“X”。 比如Genaro公链可以解决存储问题,所以就有了SPoR+PoS。

这也是 Genaro 的 SPoR + PoS 混合共识机制的设计初衷。

先简单介绍一下什么是SPoR:它可以看成是一个微型的PoW。

>>SPoR代表sentinel proof of retrievability,即数据可检索性证明。 数据可检索性证明意味着当用户没有检索到文件时,他们仍然可以相信文件在系统上是完好无损的。 在 Genaro 系统中,存储节点每天都在被“挑战”,存储节点表明可以通过运行 SPoR 算法来检索数据。

首先,这个证明的难度不会随着时间的推移而增加。 证明一个文件可以找回,今天的计算量和明年的差不多。

其次,这是现实生活中有用的计算。 甚至云存储本身也需要这样的证明。 SPoR是一种在存储领域已经被验证为可靠的算法,其引入区块链系统不会带来额外的隐患。

以太坊公链查询_siteblockvalue.com 以太坊公链_公有链的以太坊运行速度

Genaro 不会用 SPoR 取代 PoW。 事实上,Genaro 的混合共识机制是基于 PoS 的,而 SPoR 主要是用来要求节点贡献算力、存储空间等资源来加强 PoS 共识的“防御”。 这种混合共识机制的一般流程是:

第1步。 节点押注GNX,共享存储空间,申请加入委员会

第2步。 申请者按实力排名(根据权重和epoch的GNX投注等因素)确定组委会名单

第三步。 委员会积分将按照排名顺序不断产生区块

第四步。 出块节点获得奖励

这个过程相当于通过SPoR来筛选可信节点,即要求共识节点付出一定的代价,即stake something stake,所以任何stake都不能立即被破解。 其中,选择部分节点公有链的以太坊运行速度,让可信节点不断出块是提高TPS的方法。 详见下文《公链七大超级问题提升TPS的必要性和方法》

对于远程攻击,Genaro混合共识机制的本质是将存储网络与公链进行深度绑定。 可以简单理解为:公链中的交易分为两部分:

一、一般交易

2. 存储行为(如上传、下载、分享等)触发的交易

第二种交易会将文件的哨兵相关信息存储到区块中。 那么,如果节点想要实施远程攻击,回到初始阶段的区块链状态,存储网络就无法恢复,区块也无法推进到当前高度。 网络会判断你不是最长链,直接惩罚你。

此外,这种混合共识机制还可以防止分叉。 如果攻击者有意分叉(如ETC、ETH),即使可以拉拢部分矿工在分叉链上继续出块,这条链也会失去用户数据的完整性,成为毫无价值的“伪链”,用户不会用,矿工就没有消费者,自然不会挖。

这样,通过多引入“存储”等维度,所创建的SPoR+PoS混合共识机制成为了可持续共识机制的范例,这也说明了可持续共识机制需要公链本身具备记账能力 更多实用功能比。

最后,共识算法的可持续发展还有一个必要条件:任何节点都可以加入并做出贡献,这对共识算法的选择有更高的要求。 敬请期待系列的下一篇:《公链七大超级难题之一——建立点对点共享社区》。

siteblockvalue.com 以太坊公链_公有链的以太坊运行速度_以太坊公链查询

公链的七大超级问题是公链绕不开的关键。 七大挑战环环相扣,需要从宏观到微观的深刻理解,不仅在技术领域,还要在经济、营销、市场、社会等领域。 Genaro Network点对点存储与公链通证经济的系统设计,不仅是对未知领域的探索,更是一次艺术之旅。 请继续关注《公链七大超级问题》系列文章,与我们一起踏上未来的征程,迎接区块链的挑战与变革。