区块链分叉algorand
❶ 简评三个基于VRF的共识算法
上交所技术公司 朱立
Algorand、Dfinity和Ouroboros Praos三个共识算法(Dfinity虽然是项目名,这里用来称呼其共识算法也应无不妥)近期较受关注,而且都是基于VRF(Verifiable Random Function) 设计,可以对照学习。Algorand的版本很多,以下单指 1607.01341v9 ,暂称其为Algorand'(笔者手中另有Algorand的 最新版本 ,其中已对下文提及的几处问题完成了修正,可与本文参看)。
一、VRF的共性
VRF的意义很好理解——用以完成出块人(群)的随机选择。为此,VRF的返回值应尽力难以预测。先看Algorand'和Dfinity的套路是怎么做的:大体上是先将前一个随机数(最初的随机数却是协议给定的)和某种代表高度、轮次的变量进行组合,用某种私钥对之进行签名(或者是先签名再组合),最后哈希一下得出最新的随机数。这样产生的随机数旁人很容易验证其合乎算法,"V"就这样得到了;而哈希返回值又是随机分布的,“R”也因此得到保证。在此过程中,为降低操纵结果的可能性,有两个注意事项: A) 签名算法应当具有唯一性,也就是用同一把私钥对同样的信息进行签名,只有一个合法签名可以通过验证——普通的非对称加解密算法一般不具备这个属性,如SM2。如果用的签名算法没有这种uniqueness属性,那在生成新随机数的时候就存在通过反复多次尝试签名以挑出最有利者的余地,会降低安全性。 B) 避免在生成新随机数时将当前块的数据作为随机性来源之一,比如引用本块交易列表的merkle root值等等,因为这样做会给出块人尝试变更打包交易顺序、尝试打包不同交易以产生最有利的新随机数的余地。在设计和检视新的共识算法时,以上两个注意事项是要特别留意的。
考察一下VRF的返回结果应该如何运用。目前所见用法中,VRF的返回结果可以用来公开完成节点或节点群体的选择,也可以私密地完成选择。以Dfinity为例,它是利用mod操作来唯一、公开地确定一个Group。Algorand'、Ouroboros Praos是私密选择的范例,大致套路是对VRF的最新返回值,配上轮次等变量后用私钥进行签名并哈希,如果哈希值小于某个阈值,节点就可以私密地知道自己被选中。这种方法很可能在网络节点数较多时的表现会更稳定,否则幸运儿个数上下波动会较大,进而影响协议表现,包括空块和分叉。
二、简评强同步假设版本的Algorand'
私密选择提供了较强的抗击定点攻击的能力,但由于幸运儿的总数对于任何一个幸运儿都是不能预知的,也因此给后续共识算法的设计和区块链的优化带来了困难。Algorand‘采用了很强的同步网络假设(同步网络假设下的共识算法当然容易做一些),要求预先知道网络消息传播时间的上限:在固定时间内完成对固定比例的用户的网络传播。比如要知道,1KB消息,在1秒钟内完成全网95%的传播,而1MB消息需要1.5分钟完成全网95%的传播。但这个传输上限应该如何选择? 通过一段时间的统计结果再乘以一个系数这种经验统计?只能说“感觉上可以”,但如果要严谨和安全,Algorand‘算法应该补充证明即使在遭遇DDOS或互联网拥堵的情况下消息传播严重超限后算法仍然能够保证安全——然而这个证明是缺失的。作为对照,Ouroboros Praos公开承认之前在同步网络假设下设计的Ouroboros协议在异步网络条件下会出错,所以才又做了Ouroboros Praos;新版本的Algorand承认在弱同步网络时会在不同的块上达成共识(后续网络恢复强同步时分叉可以得到解决)云云,这些都可资参考。
即使我们暂且认可Algorand'算法可以通过设定一个很大的传播时间上限来回应上述问题,但随之而来的是此时可以看出此算法缺乏一个非常好的特性:Responsiveness。这个特性指的是:若一个协议被设计为在一个较大的传播时间上限DELTA下工作,但若实际传播时间是较小的delta,则协议的实际推进步调将只和delta有关,这种协议被称为Responsive的。具有Responsive特性的共识算法再配以同步网络假设会非常理想——出于安全,上限可以设置很大,然而协议执行速度只和当时网络条件有关。Algorand'并不具有这种特性。平均而言,Algorand'完成共识所需的消息传送次数是11轮,每轮如果要确保安全,完成共识的时间就会很长,单个分区的吞吐量就不会太高。当然,架构设计涉及很多取舍,最终评价一个算法好还是不好还是要回到初心——准备拿来实现的目标是什么。上述分析只是尝试客观地指出Algorand'算法的几个少为人知的固有特征,供读者自行评估。
三、简评Dfinity的可扩展性问题
私密选择并且立即上任的做法,也给系统分片带来了极大挑战。Dfinity是明确要做分片(Sharding)的,所以必须直面挑战。可扩展性问题非常复杂,完整解决这个问题需要通盘考虑网络、存储、计算三方面的可扩展性——时下大多数区块链3.0项目只注意到计算的分片和可扩展性,忽略了其余二者,从而不可能真正实现理想的扩展。由于公链节点网络带宽的制约,计算合约所需的数据通常很难迅速地从一个节点拷贝到另一节点,所以就算用VRF实现了飘忽来去的出块节点选择,存储节点是没法同样飘逸如风的。明显的选择有那么几个:全部节点存储全部数据,不同节点静态地分配用来存储不同分区。前者的可扩展性很差,对于后者而言,如果出块节点漂浮不定且出块节点还需要完成合约运算,就意味着基于P2P网络来回远程访问存储,性能多半急剧下降;动态决定的出块节点只完成排序共识,计算能力和存储捆绑,通过静态分区提供可扩展性,可能是合理的应对。然而,最可恨的就是“然而”二字——即使如此,系统还存在一处对存储和网络构成压力的所在:最终用户提交的待打包交易。普通公链(先不考虑EOS那种)的带宽有限,如果用户提交的待打包交易必须粗放型地全网泛滥传播,那现有网络带宽可以提供多少TPS?如果出块节点是静态分区或者至少提前一段时间公开知晓,事情尚有回旋余地;如果出块节点是如此飘忽不定,而且直到最后一刻也只有这些节点自己知道,那无论是用户还是出块节点候选人看起来最直接的应对之道就是全网泛滥传播全部待打包交易、保存全部待打包交易,这样带宽和存储仍然成为系统瓶颈。
所以这里碰到的,本质上还是安全、可扩展性、去中心化的不可能三角。
四、简评Ouroboros Praos
BM怼 Ouroboros的文字已经流传广泛。BM的话当然有些明显是不对的,比如Ouroboros的DPOS是指"Dynamic [stake distribution] POS"而不是BM的Delegate POS,但其关于Pareto分布的评论则值得玩味。如果我们仔细浏览后出的Ouroboros Praos,可以发现协议的安全假设和安全证明完全没有考虑经济博弈因素,因此洋洋洒洒的证明很可能会不得要领而错过真正需要防护的方向——毕竟一直以来POS/DPOS这些协议的血管里面流淌的就是基于经济博弈和人性进行设计的血液。最明显的例子是在forward secure signature的实现方法上,协议目前的设计是要求每个好的节点自觉主动地安全删除用过的私钥,而完全没有考虑近乎零的私钥保存成本如何面对bribe attack的诱惑,然而这却是值得考虑的。除了形式化证明之外,Ouroboros Praos本身并没有太多值得关注的协议特征,总体上就是用VRF抽签结合POS算法并针对某些安全假设进行了形式化证明,其做事的态度是非常值得赞赏的。
五、总结
这几个算法本身颇有创意,也很值得学习。与此同时,在看过以太坊CASPER目前披露的分区技术后,笔者的体会是:区块链3.0的竞争才刚刚开始,从以太坊团队的技术路线看,他们的技术考量和选择要比很多宣称要超越以太坊的团队来得深刻和全面。如果当真要超越以太坊,还是应该先从理解以太坊开始。
顺便感谢趣链邱炜伟博士对本文的贡献!
❷ 区块链为什么有分叉分叉会发生什么情况
区块链的分叉(fork)的形成原因可能有多种。
当两个结点几乎在同一个时间挖到了矿并同时发布区块,此时就出现临时性的的分叉(state fork),
本质上是对比特币这个区块链当前的状态产生了意见分歧,
当人为的发起分叉攻击(forking attack),也就是故意造成这类分叉(deliberate fork)还有一类分叉是,当比特币的协议发生了改变的时候,软件需要升级。而在分布式系统中不能保证所有节点同时升级软件,假设存在部分节点未升级,会导致协议分叉(protocol fork)。对协议修改的内容的不同,又可以将分叉分为硬分叉(hard fork)和软分叉(soft fork);
比特币协议增加新协议,扩展新功能,未升级软件的旧节点会不认可这些修改,会认为这些特性是非法的。这也就是对比特币协议内容产生分歧,从而导致的分叉叫 硬分叉 。此时,就出现了新节点永远沿着新节点产生的链挖矿,旧节点永远沿着旧节点链挖矿,由于新节点算力足够强,所以形成两条永远都在延伸且平行的链。只要这部分旧节点永远不更新,则旧链将一直延续,可见这种分叉是持久性的。
出现hard fork后,便变成了两条平行的链,也就造成了社区分裂。社区中有一部分人,会认为下面的链才是根正苗红,各个链上的货币独立。以太坊历史上的一件大事就是硬分叉事件。以太坊称为ETH,但目前看到的ETH已经不是最初的ETH了,以太坊在历史上发生过硬分叉,另一个链称为ETC。实际上,ETC才是以太坊设计原本的协议,而ETH是黑客攻击ETH上一个智能合约THE DAO后,进行回滚的协议链(将黑客攻击偷取的以太币采用硬分叉方式回滚回到另一智能合约,然后退还给真正拥有者)。
分叉之初,由于两个链分叉造成了互相影响,产生了很多麻烦。比如:在ETH链上有一笔转账B->C,有人便在ETC链上回放,将ETC链上的货币页转给了C(C收到两笔钱)。后来,对两条链各添加了一个chainID,将两个链区分开,才使得这两条链真正分开。
如果对BTC协议添加限制,使得原本合法交易在新交易中不合法,便会形成软分叉。
当大多数节点已经更新完毕之后,旧节点认可新节点挖出的区块,因此发布自己挖出的区块,但新节点不认可旧结点挖出的区块,便沿着上一个新节点发布的区块继续挖矿,当新节点拥有大部分算力的时候,新链会越来越长,从而旧节点挖出并发布的区块一直被抛弃,无法获得出块奖励,最终倒逼旧节点升级软件,实现所有节点认可新协议并进行升级。可见,只要系统中拥有半数以上算力节点更新软件,此类分叉不会出现永久性分叉。比特币脚本中的P2SH就是通过软分叉方法加进去的。
这一部分我并没有查到太多的资料,但是在绝大多数共识协议之中我们都假设需要过半算力;
在理论上,如果掌握了50%以上的算力,就拥有了获得记账权的绝对优势,可以更快地生成区块,也拥有了篡改区块链数据的权利。因此,当具有过半的算力,也就是51%都是诚实可靠的,能保证整一个区块链在合法有序的进行运行。
但是为什么选择过半的算力,而不是过半的用户?比特币系统,任何人都可以加入,且创建账户及其简单,只需要本地产生公私钥对即可。只有转账(交易)时候,比特币系统才能知道该账户的存在。这样,黑客可以使用计算机专门生成大量公私钥对,当其产生大量公私钥对超过系统中一半数目,就可以获得支配地位(女巫攻击)。因此,比特币系统中很巧妙的使用算力作为投票的依据。
❸ 到底啥是区块链分叉
分叉,是区块链世界中一个神奇的名词。区块链网络从此一分为二,不同共识的人们从此分道扬镳。这究竟是一次动荡的分裂,还是一次新的共识的形成?
区块链的分叉,可以说是区块链网络中独有的一种版本升级方式,就像我们生活中使用的互联网软件一样,使用了一段时间以后,自然而然就需要进行优化升级,从而去解决一些用户的使用问题。区块链也是这样,只不过它的升级比较特别,升级的时候会由参与的矿工共同来决定,甚至还能产生多种版本,不像互联网一样一家独裁、没有选择的余地。
它的原理是这样的,由于区块链是一个由数据块组成的链式结构。所以,当他要升级的时候,实际上会从某一个数据块开始,连到两个不同的数据块上,从而分成了两条链;就好像树枝一样,大家共用同一个树干,共享会分开前的数据,但是又有很多条树枝属于多条链,而这个过程就叫做分叉。
之前我们也说了,区块链的升级是由矿工们一起来决定,既然参与的人多了,就会有不同的意见,当大家能达成共识的时候,分叉出来的两条链相当于一个是老的版本,一个是新的版本,两者兼容;老链上的矿工升级后,逐渐向新链过渡,最终大家升级完成只剩新链,这叫做软分叉。具体来说软分叉属于系统内的短暂现象,并不会分叉出一个新的区块链。区块链系统升级,一部分节点并哪怕没有及时升级,也仍旧可以工作。比特币软分叉之后不会像硬分叉一样产生两条链,而是还会保持在一条链上,软分叉会进行一些升级,但是不会影响整个系统的稳定性和有效性,旧节点会兼容新节点,只是新节点不兼容旧节点而已,二者依然可以共存在一条链上。
当矿工们不能达成共识的时候,大家虽然共用之前的数据,但是形成了两条新的链,就好比物种进化一样,一部分猴子进化成了人类,另一部分进化成了猩猩,两种物种都发生了改变,互不兼容,这叫做硬分叉。也就是说区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。代码出现一个硬分叉,会改变算法的难度级别。
实质意义上的分叉之所以产生,是因为项目在动态发展过程中原社区内部理念产生了不可调和的分歧。区块链背后的社区作为去中心化组织,主张非暴力自由人的自由联合,这意味着在向未知的将来迈进的过程中,当遇到的新问题超出了原有既定 游戏 规则之时,分歧一旦产生将很难达成一致,这是由区块链基因里去中心化的属性决定的。
区块链技术的发展还处于很初期的状态,分叉对于区块链来说,就相当于一个技术迭代的过程,随着人们不断发现区块链技术现有的限制,只有不断升级和扩展这项技术,才能让区块链技术走向成熟。当然,这种分叉跟区块链不可篡改的特性正在背道而驰,但没有天生完美的技术,区块链也不例外,技术的发展如果在发生错误时都不可控,那这种技术就无法做到普世,人们对它的信任度也无法提升。且分叉的结果是由社区成员投票决定的,某种程度上来说依旧遵守着去中心化的原则。
人们对区块链分叉各执己见,但在区块链发展的 历史 进程里,分叉无疑让区块链变得更有故事性和可能性了。总的来说,分叉这种升级方式虽然麻烦很多。但是,他却给了每个人更多选择的权利。也许,区块链就在这样的求同存异之中孕更多的可能性。
❹ 区块链鼻祖比特币之8:分叉带来的双花支付、51%攻击与解决办法
分叉
前面讲到了比特币通过区块链+工作量证明的独特设计来解决了时间顺序,但是不能保证在同一时刻有两个节点算出了正确的解,虽然这种可能性很低很低。这就带来了区块的分叉。
虽然说几乎同时有两个节点计算出这一数学问题的可能性微乎其微,但是仍然存在这样的可能性,所以分叉就以为着同一个区块的后面可能会跟上两个不同的区块。
规则的打破一直要到下一个区块被人解开。则会立即转向最长的区块,而那些短的区块则会被抛弃。数学问题使得区块很难被同时拆解。要连续发生多次更是困难。最终区块链会稳定下来。也就是说所有人对最后几个区块顺序达成共识。分叉意味着,譬如,若你的交易出现在较短的支链,它就会失去进入区块链的位置。一般而言,只代表他会回到未确认交易池。然后被纳入到下一个区块。
比特币网络如何解决分叉带来的双花支付
可惜,交易失去区块位置的潜在可能,给了本来定序系统防范的重复支付攻击机会。考虑下面的一个攻击者A,其首先用自己的比特币交换B节点的货物,其立即又支付给自己。然后其通过努力的制造更长的链条来让自己的支付替代掉B节点的支付,从而实现了双重支付,B节点既得不到钱,还失去了货物。
这时交易会退回到未确认池中,因为A节点已经利用参照同样的input交易取而代之。节点就会认为Bob的交易无效。因为已使用掉。
你可能会猜测A节点会预先的计算出一支区块链,然后抓住时机发布到网络。但是每个区块的数学谜题阻挡了这个可能性。如前面所诉,解开区块是猜测出一个随机数的过程。一旦得出答案,解出的哈希值就会成为指纹一样的区块识别。只要区块内容有一丁点变化,下一个区块的参考值就会完全不同。此机制的结果就是无法在区块链中置换区块。在得到前一个区块之前,下位区块无法被解开。前一个区块的指纹也是杂凑函数的引数之一。
同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对业已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(the proof-of-work difficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。
如果有一台超级电脑,能够在区块解题中获胜?
即便是一台超级电脑,或者时几百上千台电脑也很难赢得解一个区块的胜利,因为竞争对手不是任一台电脑,而是整个比特币网络。你可以用买彩票来比拟。操作千百台电脑,如同买了千百张彩票一样。
51%攻击是指的什么
根据前面的例子,我们知道,要想有50%的概率领先其他人解题得到胜利,就需要掌握全网50%以上的算力。要连续领先他人解出区块,掌握的运算能力还需要高得多。所以区块链中的交易是受到数学竞赛所保护。恶意用户必须和整个网络较量。区块连接建立的结果,使得在支链越前方的交易越安全。恶意的用户必须在更长的时间赢过全网络,来达成重复支付,替换前面的区块链。所以,系统只有支端末尾易受到重复支付攻击。这也是为什么系统建议多等几个区块,才能确认收款成功。
个人博客:https://dreamerjonson.com/
❺ 「数字方案」央行数字货币CBDC,来自Algorand的新贡献
当前,中国数字人民币正在稳步推进,试点地区已经从“10+1”拓展到15个省市的23个地区,数字人民币累计交易笔数约2.64亿笔,金额约830亿元,商户门店数量达456.7万个。此外,欧盟和欧洲中央银行积极支持数字欧元,印度则承诺推出数字卢比。
在各国央行数字货币方兴未艾之际,由图灵奖得主、密码学先驱Silvio Micali教授创建的Algorand公链,作为2020年就被马绍尔群岛共和国选中作为发行全球首个央行数字法币的区块链基础设施,继续在中央银行数字货币(CBDC)领域展现赋能“未来金融”(FutureFi)的风采。
Algorand 研究团队7月12日发布了《使用 Algorand 发行中央银行数字货币》(Issuing Central Bank Digital Currency Using Algorand)年度报告,对一年多来全球各中央银行的CBDC进展进行了持续研究,提出了建立在两层零售系统中的公共区块链实例的CBDC混合模型。
在该模式下,中央银行对 CBDC 拥有完全控制权,同时商业银行、汇款服务商和其他金融 科技 公司等获得许可的服务提供商(LSP)能够促进分销和交易。与传统系统相比,基于区块链的零售 CBDC,还促进了更广泛的金融包容性,特别是对于那些在非正规经济中可能难以开设传统银行账户的人。总体而言,与传统的集中式数字货币相比,拟议的设计,可望有助于中央银行更简单、更经济地实现CBDC运作的规模化。
Algorand 研究团队于2021 年首次发布了关于CBDC的研究报告,本次报告新增了一个部分,聚焦 CBDC 的好处以及中央银行在更广泛数字时代背景下的首要作用。该报告定义了数字时代的四个关键趋势,包括不断增长的数字经济、作为新的商业模式的资产代币化、对替代货币形式的需求不断增长,以及去中心化金融作为一种新的金融系统。这些趋势直接挑战了中央银行的一项关键任务:确保价格稳定。公共区块链的用例,比如该报告提出的模型,有助于中央银行在数字时代继续履行其职责。
该报告由几位出色的经济学家和研究人员共同撰写。其中,Andrea Civelli 博士毕业于普林斯顿大学,专注于货币政策传导和通胀建模研究,目前是美国阿肯色大学沃尔顿商学院经济学副教授、Algorand 高级经济学家。
Co-Pierre Georg博士,南非开普敦大学副教授,南非储备银行(南非央行)金融稳定研究组主席,也是Algorand 基金会经济顾问委员会成员,他在德国耶拿大学获得博士学位,先后在麻省理工学院、普林斯顿大学、牛津大学和哥伦比亚大学访学。
Pietro Grassano,Algorand欧洲业务解决方案总监,曾在 J.P Morgan工作超过 15 年,担任过该机构在法国、意大利、希腊等多个欧洲国家分支机构的领导职位。更早时期,他曾经在巴黎银行资产管理公司、安达信咨询公司工作。Naveed Ihsanullah,Algorand 工程研究主管,专注于分布式系统,在下一代应用安全软件领域拥有 20 多年从业经历。
除了引言和结论外,该报告其他6个部分的主要内容是:1、中央银行数字货币的好处:强调数字时代的四个主要趋势,对中央银行构成的挑战,也激发了中央银行应该发行 CBDC。2、设计高效的 CBDC:基于各种 CBDC 项目经验,概述了设计高效中央银行数字货币的原则。3、发行 CBDC 的经济考虑:讨论发行 CBDC 时的经济影响,从资产负债表和金融稳定影响到货币政策效果。4、Algorand 协议:Algorand 协议概述,包括设计原则和协议本身的高阶概述。5、使用 Algorand发行零售型 CBDC:Algorand 发行零售型CBDC 的方法,包括相关设计的考虑因素、Algorand网络支持用例的详细介绍。6、使用 Algorand 发行批发型 CBDC:Algorand 的批发型 CBDC 的设计方法和相关用例。
Algorand 顾问强调CBDC是商业银行的生命线
CBDC出现后,从国际范围看,还存在一定的分歧。一些国家的商业银行甚至将央行可能发行的数字法币视为生存威胁。
《使用 Algorand 发行中央银行数字货币》研究报告的主要作者之一、南非开普敦大学副教授、Algorand 基金会经济顾问Co-Pierre Georg博士,在近期接受媒体采访时认为:“商业银行真的不应该将数字法币视为威胁”,“央行数字货币正在为商业银行提供生命线。”
对于大型 科技 公司越来越多地涉足银行服务的状况,目前担任南非储备银行金融稳定研究组主席的Georg认为:“商业银行确实倒退了,他们会害怕 科技 巨头们。”
正如中央银行已将基于区块链、与法定货币挂钩的稳定币视为调控经济的潜在威胁,商业银行也意识到,如果Facebook的 Libra 幸存下来,“如我们所知的,这将是银行业的终结,”Georg说,“那将是一个不受金融监管的实体,拥有 23 亿客户和比摩根大通银行市值更多的现金。包括美国的银行在内,如何与它竞争?他们做不到。”
Georg认为,问题在于商业银行是在建了围墙的花园内运营。“他们做产品,他们不做基础设施,”他说,“商业银行应该感谢央行在公共基础设施方面提供了一条生命线,它们都可以聚集在一起,可以竞争,重要的是,他们可以与 科技 公司竞争。”
“当你与市场上的许多参与者交谈时,他们将 CBDC 视为一种可以出售给中央银行的产品,”Georg说,“这不是正确的做法。如果你建立一个产品,你最终只是拥有 Facebook,而如果你建立基础设施,你最终会拥有互联网。”
这就意味着可以与互联网早期开发者们大致相同的方式共享信息,Georg声称,互联网领域用了大约 30年的时间来制定网络具有交互性的标准。同时,他还认为,CBDC 从一开始就具有互操作性的需求,可以做的事情太多了。
结合包括Algorand进行的研究,Georg 建议,一些国家的 CBDC 可以拥有不止一个账本和一个协议,不一定分为银行间批发 CBDC 和面向消费者的零售 CBDC。
“你可以拥有一个参与成本更高的零售分类账本,但它为你提供智能合约;你也可以拥有一个没有智能合约但每秒交易量非常高的零售分类账本,”Georg 说,“作为中央银行,可以同时操作两者。”
至于区块链,Georg 表示,一场不必要的争斗是,银行界的一些人将基于区块链的 CBDC 视为实时结算系统的竞争对手。
“现有的支付系统运行良好,”他说,而且价格低廉、运营可靠,“据我所知从未失败过。”但是,实时结算系统没有“促进我们从需要去中心化分类账的私人加密资产中看到的一些新创新”,例如物理或数字资产的代币化。鉴于加密货币的惊人增长,该领域显然存在潜力。
“如果你可以将其引入公共基础设施,假设受到良好监管、由受信任的机构维护,那么这种新型基础设施可以支持处于数字经济核心的新商业模式。我认为这就是为什么区块链进来的原因,”他说,“你需要一个分布式账本来确保这个系统中没有任何人可以复制数据,区块链的秘密超能力就在于它使数据独一无二。”
就潜力而言,他指出“支付系统的最后一次迭代出现在 60 和 70 年代,当时引入了数字支付。”因为技术的支持,“区块链确实可以促成新的商业模式。”
(END)
商业及非商业用途的转载,均请获得作者授权,并注明“赫美兹数字坊出品”。
❻ 【区块链知识】当我们遇到分叉问题时,该怎么办
遇到分叉问题,该听谁的?
假想这样一个场景,在区块链中,一定会遇到这样的情况,区块甲和区块乙同时把一条信息记录下来,并且做好编码和时间戳。
他们两个区块同时发布信息,说这个编码为4495662的信息是我记账的,它的报酬应该归我!
然后,大家就有的认为报酬应该归区块甲,有的则认为归区块乙,而报酬只有一份,只能给一个区块。这下好了,出现不同意见了,该怎么办?
更严重的是,有的区块会认为这件事是区块甲做的,也记下来,顺着编码继续往后记账;另外一些区块则认为这件事是区块乙做的,跟着在区块乙后边继续记账。
这样事情就大条了!原本严谨的唯一的一条信息链,到区块甲和区块乙这里,硬生生给分开了,它们各自后边分别跟着常常的链条。
这种情况持续下去,就导致每个人都无法辨别自己掌握的信息链,是否正确了!
为了解决这个问题,区块链技术又出台了一个新的规则:每条记录都要顶格写,同时要保证中心离田字格上边缘要保持0.897 57毫米的位置上。
为了符合要求,每个人都得拿着尺子去量好位置,然后才能开始记录。这样记录每条信息时,增加了难度,延长了操作时间。
只要一个人做好了记录,大喊一声,我记录好了!
其他人就停笔不再记录这条信息,反而开始记录这条信息是某某记录的接着那个编码继续往下记录。
遇到分叉问题,就是这样解决的。
❼ 区块链分叉是什么
区块链分叉是什么?分叉会导致我的比特币一分为二吗?
在中心化系统中升级软件十分简单,在应用商店点击“升级”即可。但是在区块链等去中心化系统中,“升级”并不是那么简单,甚至可能一言不合造成区块链分叉。
简单说,分叉是指区块链在进行“升级”时发生了意见分歧,从而导致区块链分叉。因为没有中心化机构,比特币等数字资产每次代码升级都需要获得比特币社区的一致认可,如果比特币社区无法达成一致,区块链很可能形成分叉。
以比特币为例,2017年7月,为了解决比特币区块链拥堵问题,一些比特币爱好者提出了bitcoin cash分叉方案,导致比特币区块链一分为二。
根据分叉后的区块链是否能兼容旧区块链,分叉又分为“硬分叉”和“软分叉”。
❽ 什么是比特币区块链的分叉
分叉有区别为普通的升级,普通的升级在升级前后是没有影响协议共识的,也一般不需要社区共识或算力共识的参与。而分叉根据对协议的修改情况分为软分叉和硬分叉。
现有的定义:
【闪电定义】硬分叉是指比特币区块格式或交易格式(这就是广泛流传的“共识”(应该是部分协议共识))发生改变时,未升级的节点拒绝验证已经升级的节点生产出的区块,不过已经升级的节点可以验证未升级节点生产出的区块,然后大家各自延续自己认为正确的链,所以分成两条链。
A permanent divergence in the the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules.
【闪电定义】软分叉是指比特币交易的数据结构(这就是被广泛流传的“共识”(应该是部分协议共识))发生改变时,未升级的节点可以验证已经升级的节点生产出的区块,而且已经升级的节点也可以验证未升级的节点生产出的区块。
A temporary fork in the block chain which commonly occurs when miners using non-upgraded nodes violate a new consensus rule their nodes don’t know about.
我觉得不能说哪个定义正确还是错误,具体的定义可以根据已经较大社区共识的两者的区别来自己总结,不需要权威来指定。
硬分叉:没有向前兼容性,之前的版本将不可再用,需要强制升级。
软分叉:有较好的兼容性,之前版本至少部分功能可用,可不升级。
硬分叉:在区块链层面会有分叉的两条链,一条原旧链,一条分叉新链。
软分叉:在区块链层面没有分叉的链,只是组成链的区块,有新区块和旧区块。
硬分叉:需要在某个时间点全部同意分叉升级,不同意的将会进入原旧链。
软分叉:相当长的时间里,可允许不进行升级,继续使用原版本生成旧区块,与新区块并存
❾ 知链区块链金融应用实践平台成绩怎么算
1. 工作量证明(PoW)
中本聪在2009年提出的比特币(Bitcoin)是区块链技术最早的应用,其采用PoW作为共识算法,其核心思想是节点间通过哈希算力的竞争来获取记账权和比特币奖励。PoW中,不同节点根据特定信息竞争计算一个数学问题的解,这个数学问题很难求解,但却容易对结果进行验证,最先解决这个数学问题的节点可以创建下一个区块并获得一定数量的币奖励。中本聪在比特币中采用了HashCash[4]机制设计这一数学问题。本节将以比特币采用的PoW算法为例进行说明,PoW的共识步骤如下:
节点收集上一个区块产生后全网待确认的交易,将符合条件的交易记入交易内存池,然后更新并计算内存池中交易的Merkle根的值,并将其写入区块头部;
在区块头部填写如表1.1所示的区块版本号、前一区块的哈希值、时间戳、当前目标哈希值和随机数等信息;
表1.1 区块头部信息
随机数nonce在0到232之间取值,对区块头部信息进行哈希计算,当哈希值小于或等于目标值时,打包并广播该区块,待其他节点验证后完成记账;
一定时间内如果无法计算出符合要求的哈希值,则重复步骤2。如果计算过程中有其他节点完成了计算,则从步骤1重新开始。
比特币产生区块的平均时间为10分钟,想要维持这一速度,就需要根据当前全网的计算能力对目标值(难度)进行调整[5]。难度是对计算产生符合要求的区块困难程度的描述,在计算同一高度区块时,所有节点的难度都是相同的,这也保证了挖矿的公平性。难度与目标值的关系为:
难度值=最大目标值/当前目标值 (1.1)
其中最大目标值和当前目标值都是256位长度,最大目标值是难度为1时的目标值,即2224。假设当前难度为,算力为,当前目标值为,发现新区块的平均计算时间为,则
根据比特币的设计,每产生2016个区块后(约2周)系统会调整一次当前目标值。节点根据前2016个区块的实际生产时间,由公式(1.4)计算出调整后的难度值,如果实际时间生产小于2周,增大难度值;如果实际时间生产大于2周,则减小难度值。根据最长链原则,在不需要节点同步难度信息的情况下,所有节点在一定时间后会得到相同的难度值。
在使用PoW的区块链中,因为网络延迟等原因,当同一高度的两个区块产生的时间接近时,可能会产生分叉。即不同的矿工都计算出了符合要求的某一高度的区块,并得到与其相近节点的确认,全网节点会根据收到区块的时间,在先收到的区块基础上继续挖矿。这种情况下,哪个区块的后续区块先出现,其长度会变得更长,这个区块就被包括进主链,在非主链上挖矿的节点会切换到主链继续挖矿。
PoW共识算法以算力作为竞争记账权的基础,以工作量作为安全性的保障,所有矿工都遵循最长链原则。新产生的区块包含前一个区块的哈希值,现存的所有区块的形成了一条链,链的长度与工作量成正比,所有的节点均信任最长的区块链。如果当某一组织掌握了足够的算力,就可以针对比特币网络发起攻击。当攻击者拥有足够的算力时,能够最先计算出最新的区块,从而掌握最长链。此时比特币主链上的区块大部分由其生成,他可以故意拒绝某些交易的确认和进行双花攻击,这会对比特币网络的可信性造成影响,但这一行为同样会给攻击者带来损失。通过求解一维随机游走问题,可以获得恶意节点攻击成功的概率和算力之间的关系:
图1.1 攻击者算力与攻击成功概率
2. 权益证明(PoS)
随着参与比特币挖矿的人越来越多,PoW的许多问题逐渐显现,例如随着算力竞争迅速加剧,获取代币需要消耗的能源大量增加,记账权也逐渐向聚集了大量算力的“矿池”集中[6-9]。为此,研究者尝试采用新的机制取代工作量证明。PoS的概念在最早的比特币项目中曾被提及,但由于稳健性等原因没被使用。PoS最早的应用是点点币(PPCoin),PoS提出了币龄的概念,币龄是持有的代币与持有时间乘积的累加,计算如公式(1.4)所示。利用币龄竞争取代算力竞争,使区块链的证明不再仅仅依靠工作量,有效地解决了PoW的资源浪费问题。
其中持有时间为某个币距离最近一次在网络上交易的时间,每个节点持有的币龄越长,则其在网络中权益越多,同时币的持有人还会根据币龄来获得一定的收益。点点币的设计中,没有完全脱离工作量证明,PoS机制的记账权的获得同样需要进行简单的哈希计算:
其中proofhash是由权重因子、未消费的产出值和当前时间的模糊和得到的哈希值,同时对每个节点的算力进行了限制,可见币龄与计算的难度成反比。在PoS中,区块链的安全性随着区块链的价值增加而增加,对区块链的攻击需要攻击者积攒大量的币龄,也就是需要对大量数字货币持有足够长的时间,这也大大增加了攻击的难度。与PoW相比,采用PoS的区块链系统可能会面对长程攻击(Long Range Attack)和无利害攻击(Nothing at Stake)。
除了点点币,有许多币也使用了PoS,但在记账权的分配上有着不同的方法。例如,未来币(Nxt)和黑币(BlackCion)结合节点所拥有的权益,使用随机算法分配记账权。以太坊也在逐步采用PoS代替PoW。
3. 委托权益证明(DPoS)
比特币设计之初,希望所有挖矿的参与者使用CPU进行计算,算力与节点匹配,每一个节点都有足够的机会参与到区块链的决策当中。随着技术的发展,使用GPU、FPGA、ASIC等技术的矿机大量出现,算力集中于拥有大量矿机的参与者手中,而普通矿工参与的机会大大减小。
采用DPoS的区块链中,每一个节点都可以根据其拥有的股份权益投票选取代表,整个网络中参与竞选并获得选票最多的n个节点获得记账权,按照预先决定的顺序依次生产区块并因此获得一定的奖励。竞选成功的代表节点需要缴纳一定数量的保证金,而且必须保证在线的时间,如果某时刻应该产生区块的节点没有履行职责,他将会被取消代表资格,系统将继续投票选出一个新的代表来取代他。
DPoS中的所有节点都可以自主选择投票的对象,选举产生的代表按顺序记账,与PoW及PoS相比节省了计算资源,而且共识节点只有确定的有限个,效率也得到了提升。而且每个参与节点都拥有投票的权利,当网络中的节点足够多时,DPoS的安全性和去中心化也得到了保证。
4. 实用拜占庭容错算法(PBFT)
在PBFT算法中,所有节点都在相同的配置下运行,且有一个主节点,其他节点作为备份节点。主节点负责对客户端的请求进行排序,按顺序发送给备份节点。存在视图(View)的概念,在每个视图中,所有节点正常按照处理消息。但当备份节点检查到主节点出现异常,就会触发视图变换(View Change)机制更换下一编号的节点为主节点,进入新的视图。PBFT中客户端发出请求到收到答复的主要流程如图4.1所示[10] [11],服务器之间交换信息3次,整个过程包含以下五个阶段:
图4.1 PBFT执行流程
目前以PBFT为代表的拜占庭容错算法被许多区块链项目所使用。在联盟链中,PBFT算法最早是被Hyper ledger Fabric项目采用。Hyperledger Fabric在0.6版本中采用了PBFT共识算法,授权和背书的功能集成到了共识节点之中,所有节点都是共识节点,这样的设计导致了节点的负担过于沉重,对TPS和扩展性有很大的影响。1.0之后的版本都对节点的功能进行了分离,节点分成了三个背书节点(Endorser)、排序节点(Orderer)和出块节点(Committer),对节点的功能进行了分离,一定程度上提高了共识的效率。
Cosmos项目使用的Tendermint[12]算法结合了PBFT和PoS算法,通过代币抵押的方式选出部分共识节点进行BFT的共识,其减弱了异步假设并在PBFT的基础上融入了锁的概念,在部分同步的网络中共识节点能够通过两阶段通信达成共识。系统能够容忍1/3的故障节点,且不会产生分叉。在Tendermint的基础上,Hotstuff[13]将区块链的块链式结构和BFT的每一阶段融合,每阶段节点间对前一区块签名确认与新区块的构建同时进行,使算法在实现上更为简单,Hotstuff还使用了门限签名[14]降低算法的消息复杂度。
5. Paxos与Raft
共识算法是为了保障所存储信息的准确性与一致性而设计的一套机制。在传统的分布式系统中,最常使用的共识算法是基于Paxos的算法。在拜占庭将军问题[3]提出后,Lamport在1990年提出了Paxos算法用于解决特定条件下的系统一致性问题,Lamport于1998年重新整理并发表Paxos的论文[15]并于2001对Paxos进行了重新简述[16]。随后Paxos在一致性算法领域占据统治地位并被许多公司所采用,例如腾讯的Phxpaxos、阿里巴巴的X-Paxos、亚马逊的AWS的DynamoDB和谷歌MegaStore[17]等。这一类算法能够在节点数量有限且相对可信任的情况下,快速完成分布式系统的数据同步,同时能够容忍宕机错误(Crash Fault)。即在传统分布式系统不需要考虑参与节点恶意篡改数据等行为,只需要能够容忍部分节点发生宕机错误即可。但Paxos算法过于理论化,在理解和工程实现上都有着很大的难度。Ongaro等人在2013年发表论文提出Raft算法[18],Raft与Paxos同样的效果并且更便于工程实现。
Raft中领导者占据绝对主导地位,必须保证服务器节点的绝对安全性,领导者一旦被恶意控制将造成巨大损失。而且交易量受到节点最大吞吐量的限制。目前许多联盟链在不考虑拜占庭容错的情况下,会使用Raft算法来提高共识效率。
6. 结合VRF的共识算法
在现有联盟链共识算法中,如果参与共识的节点数量增加,节点间的通信也会增加,系统的性能也会受到影响。如果从众多候选节点中选取部分节点组成共识组进行共识,减少共识节点的数量,则可以提高系统的性能。但这会降低安全性,而且候选节点中恶意节点的比例越高,选出来的共识组无法正常运行的概率也越高。为了实现从候选节点选出能够正常运行的共识组,并保证系统的高可用性,一方面需要设计合适的随机选举算法,保证选择的随机性,防止恶意节点对系统的攻击。另一方面需要提高候选节点中的诚实节点的比例,增加诚实节点被选进共识组的概率。
当前在公有链往往基于PoS类算法,抵押代币增加共识节点的准入门槛,通过经济学博弈增加恶意节点的作恶成本,然后再在部分通过筛选的节点中通过随机选举算法,从符合条件的候选节点中随机选举部分节点进行共识。
Dodis等人于1999年提出了可验证随机函数(Verifiable Random Functions,VRF)[19]。可验证随机函数是零知识证明的一种应用,即在公私钥体系中,持有私钥的人可以使用私钥和一条已知信息按照特定的规则生成一个随机数,在不泄露私钥的前提下,持有私钥的人能够向其他人证明随机数生成的正确性。VRF可以使用RSA或者椭圆曲线构建,Dodis等人在2002年又提出了基于Diffie-Hellman 困难性问题的可验证随机函数构造方法[20],目前可验证随机函数在密钥传输领域和区块链领域都有了应用[21]。可验证随机函数的具体流程如下:
在公有链中,VRF已经在一些项目中得到应用,其中VRF多与PoS算法结合,所有想要参与共识的节点质押一定的代币成为候选节点,然后通过VRF从众多候选节点中随机选出部分共识节点。Zilliqa网络的新节点都必须先执行PoW,网络中的现有节点验证新节点的PoW并授权其加入网络。区块链项目Ontology设计的共识算法VBFT将VRF、PoS和BFT算法相结合,通过VRF在众多候选节点中随机选出共识节点并确定共识节点的排列顺序,可以降低恶意分叉对区块链系统的影响,保障了算法的公平性和随机性。图灵奖获得者Micali等人提出的Algorand[22]将PoS和VRF结合,节点可以采用代币质押的方式成为候选节点,然后通过非交互式的VRF算法选择部分节点组成共识委员会,然后由这部分节点执行类似PBFT共识算法,负责交易的快速验证,Algorand可以在节点为诚实节点的情况下保证系统正常运行。Kiayias等人提出的Ouroboros[23]在第二个版本Praos[24]引入了VRF代替伪随机数,进行分片中主节点的选择。以Algorand等算法使用的VRF算法为例,主要的流程如下:
公有链中设计使用的VRF中,节点被选为记账节点的概率往往和其持有的代币正相关。公有链的共识节点范围是无法预先确定的,所有满足代币持有条件的节点都可能成为共识节点,系统需要在数量和参与度都随机的节点中选择部分节点进行共识。而与公有链相比,联盟链参与共识的节点数量有限、节点已知,这种情况下联盟链节点之间可以通过已知的节点列表进行交互,这能有效防止公有链VRF设计时可能遇到的女巫攻击问题。
7. 结合分片技术的公式算法
分片技术是数据库中的一种技术,是将数据库中的数据切成多个部分,然后分别存储在多个服务器中。通过数据的分布式存储,提高服务器的搜索性能。区块链中,分片技术是将交易分配到多个由节点子集组成的共识组中进行确认,最后再将所有结果汇总确认的机制。分片技术在区块链中已经有一些应用,许多区块链设计了自己的分片方案。
Luu等人于2017年提出了Elastico协议,最先将分片技术应用于区块链中[25]。Elastico首先通过PoW算法竞争成为网络中的记账节点。然后按照预先确定的规则,这些节点被分配到不同的分片委员会中。每个分片委员会内部执行PBFT等传统拜占庭容错的共识算法,打包生成交易集合。在超过的节点对该交易集合进行了签名之后,交易集合被提交给共识委员会,共识委员会在验证签名后,最终将所有的交易集合打包成区块并记录在区块链上。
Elastico验证了分片技术在区块链中的可用性。在一定规模内,分片技术可以近乎线性地拓展吞吐量。但Elastico使用了PoW用于选举共识节点,这也导致随机数产生过程及PoW竞争共识节点的时间过长,使得交易延迟很高。而且每个分片内部采用的PBFT算法通讯复杂度较高。当单个分片中节点数量较多时,延迟也很高。
在Elastico的基础上,Kokoris-Kogias等人提出OmniLedger[26],用加密抽签协议替代了PoW选择验证者分组,然后通过RandHound协议[27]将验证者归入不同分片。OmniLedger。OmniLedger在分片中仍然采用基于PBFT的共识算法作为分片中的共识算法[28],并引入了Atomix协议处理跨分片的交易,共识过程中节点之间通信复杂度较高。当分片中节点数量增多、跨分片交易增多时,系统TPS会显著下降。
Wang等人在2019年提出了Monoxide[29]。在PoW区块链系统中引入了分片技术,提出了连弩挖矿算法(Chu ko-nu mining algorithm),解决了分片造成的算力分散分散问题,使得每个矿工可以同时在不同的分片进行分片,在不降低安全性的情况下提高了PoW的TPS。
❿ 区块链为什么会分叉
分叉是区块链体验的核心,类似于系统升级。“分叉”一条链,本质上就是要对运行区块链的软件做出改变。根据不同的情况,分叉所引发的问题也非常多,有的很快能够达成共识,有的则极具争议。 在中心化系统中,软件升级极其简单,只需要打补丁或者对其某些功能的兼容性等迭代更新。而去中心化系统中,升级远没有那么简单轻松,它需要取得链上各节点或者交易方达成共识。在一些重大功能上的改善时,常会遭到社区某些人的反对,一旦有超过 2/3 的人不同意,那么他们就得选择其它途径,创造它们自己的协议和分支区块链,于是分叉也就随之发生。在比特币中,其通过 比特币软件 (也叫比特币协议)的形式实现,它确定了针对所有人的规则,包括 区块大小、对矿工的奖励等 。如果所有人使用比特币,那就得同意这份协议。类似于国家的法律,每个人必须遵守。然而,不仅仅是比特币,其它加密数字货币也是一样的,作为软件项目,总是不乏需要完善的地方,因此,技术更新和开发基本都是一往直前的,比特币开发者是通过更新软件(比特币协议)来解决问题或增强功能的。简单而言,区块链网络中只要发生意见分歧、协议改进(新增、升级)等就有可能产生分叉。其实,谈起分叉我们并不难理解,以比特币为例,可以将比特币分叉分为两大类:比特币协议和存储交易系统。比特币协议完全是开源的,如果要创建自己的分支区块链,那就要先把比特币软件源代码复制下来,然后再根据自己的需要进行适当修改。最后,通过指定的区块编号让比特币开始分叉并生效,其实就是相当于中心化系统程序中的定时指令。比如可以规定区块编号在到达 10000 时分叉开始生效,当该区块编号传送的指令到社区时会分成两部分,一部分支持原协议,一部分支持分叉协议,然后每个部分会再次添加新的区块到它们所支持的那一条链上。