浅谈hotstuff和bft

这篇具有很好参考价值的文章主要介绍了浅谈hotstuff和bft。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、区块链共识算法

因为hotstuff是一种被用于区块链的共识算法,所以先讲一下区块链的共识。
大家都知道,比特币的出现,尤其是比特币价格的夸张涨幅,带动了整个区块链行业的发展。用的人多了,自然讨论就多了。大家就发现比特币的很多的不足,其中一个非常让人诟病的,就是其所采用的pow共识机制。pow带来了几个很大的问题,比如能源消耗大(如果当作一个国家,排名20多位,当然是好是坏其实是有争议的),比如tps非常低(6-7笔)、交易确认时间长(概率性、最好de等待1小时以上)。
这些问题,如果要改进,一个很有效的方法就是要改进其共识算法。而关于此,也有个所谓的不可能三角问题(类比CAP定理),即安全性、去中心化、性能(可称做scalability, speed…)。
hotstuff,区块链
个人觉得,大部分共识算法,其实就是围绕这三个特性,根据自身需求、认识做不同的取舍。当然,解决比特币的上述问题除了在共识算法下功夫,还有其它方案,比如分片、分层等等,这里就先不讲了。
有需求、就有解决方案,伴随者区块链的发展,比特币、以太坊暴露了越来越多的问题。有段时间,学术界和工业界关于共识的研究、讨论非常的火热,也衍生出了非常多的共识算法,比如POS、DPOS、POA、POSA、POH等等。这一类算法,个人觉得,可以算作是跟着区块链而诞生的,没有区块链、加密货币,就没有它们。
然而,共识其实是分布式系统的固有问题,原本就存在很多解决方案,比如著名的paxos、raft等等。所以,自然就有人翻翻旧书堆,然后就发现BFT类算法,貌似有点意思,貌似有点用。这个和AI领域的神经网络有点类似,指不定啥时候就发扬光大了(也可能永远没人用…)。

二、BFT类算法

那什么叫BFT呢,BFT是拜占庭容错(Byzantium Fault Tolerance)的缩写,意味着系统的每个节点的行为是任意(好意、恶意、断网、崩溃…)的,具体可以网上查阅拜占庭将军。是不是发现和公链的使用场景,或者说有点类似呢?

1、早期历史

  • lamport 1982 就提出了拜占庭将军问题,并给出了解决方案
  • Barbara Liskov、Miguel Castro 1999 提出了PBFT,大幅提高了算法的效率
    可以发现,这两个算法距今少则20年,长则40年,确实称得上历史尘埃中的金子。
    大家可以想想pow是不是bft,虽然我这里把两者区分了。

2、优点

  • 确定性,commit的块不会回滚,无需等待足够长的块
  • 高性能,轻松达到数千tps,有些联盟链号称几万tps,比如百度超级链、FiscoBcos…

3、缺点

  • 中心化,要求提前确定节点
  • 性能仍然不够高(针对pbft),尤其是节点数量(几百几千甚至更多)过多的时候

4、pbft基本流程

hotstuff,区块链
可以忽略request和reply阶段

  • pre-prepare:所有节点收到请求,验证请求合法后,广播自己的vote
  • prepare:所有节点收集2f+1签名形成prepareQC,并广播
    QC是quorum certificate的缩写,代表法定人数证明
  • commit 所有节点收集2f+1 prepareQC后,回复给客户端
    便于理解的话,可以记住:每个阶段每个节点都会先收集信息,然后再广播信息。
    可以发现,通信复杂度为O(N*N),N为节点数量。

5、区块链

区块链的爆发也带来了bft类算法的爆发式发展,上图是一个示例,还有很多其它的优秀算法。

6、优化

a、基于leader

hotstuff,区块链
大家首先发现,让一个节点负责消息的分发和收集,会使得整个流程简化不少。每轮流程和原始pbft类似,只是都先把消息发给leader,再由leader广播给所有节点。
可以发现网络消息数从O(NN)下降到O(N),但因为每个prepareQC包含2f + 1 签名,所以通信量复杂度还是O(NN)。
同样的,每个阶段,每个节点也是收集一轮信息,在发送一轮信息,leader和follower都类似。
缺点是如果leader作恶,那么共识无法达成,需要切换leader。

b、门限签名

密码学的进步:包含2f + 1 签名信息的prepareQC,占用空间降至O(1),整个通信量复杂度下降到O(N)。

三、基本概念

1、网络通信模型

  • 同步模型:假定最大的网络延时T,得设置比较大(min级别?)。因为实际情况,网络可以出问题,而解决问题可能几分钟,也可能几小时,甚至几天。
  • 异步模型: 网络时延无保证
    网络是无法保证达成共识的,著名的FLP定理
  • 半异步模型: partial synchronous model,上面两个模型的折中
    也叫部分同步,网络可能处于异步状态,但是GST(global stable time)后会进入同步状态
    大部分共识算法都是基于半同步模型,这也符合实际情况,可以参考下文。
    https://decentralizedthoughts.github.io/2019-06-01-2019-5-31-models/

2、响应性(Responsiveness)

一旦网络进入同步状态,好的leader以实际网络延时的速度,达成共识。
也叫做(Optimistic) Responsiveness乐观响应性,我觉得也比较直观。就是网络达到同步状态(GST)后,即解决了所有网络问题后,真正干完活所需的时间和实际网络延迟一致。类似于要搬1000块砖,现在砖也准备好了,人也吃饱喝足了,那么假定一分钟搬10块砖,100分钟就能搬完。
(Optimistic) Responsiveness After GST, any correct leader, once designated, needs to wait just for the first (n−f) responses to guarantee that it can create a proposal that will make progress. “As fast as the network propagates, on a good day”

3、安全性(safety)

坏事情永远不发生,即所有的好节点不可能提交(commit)相冲突的数据
注意区别密码学的security,这个概念其实和共识算法无关,区块链中的security是通过密码学保证。

4、活性(liveness)

只要系统网络进入同步状态,系统最终都能达成新共识。
区块链中就是链的高度会增长,不断出新块。

5、两阶段提交

hotstuff,区块链
假设节点收到prepareQC即提交(如上图称作commitQC),
再假设除了leader之外,其它节点都未收到prepareQC,如何保证被leader提交的数据将来被其它节点提交呢?
只能要求其它节点记录所有的proposal,并保证后续的共识与此不分叉。而在有的情况下,proposal可能只被少数节点收到,如果每次都有一个好节点出现此类问题,那么系统的好且工作的节点将不断减少,直至无法共识(无活性)。

6、鸽笼(抽屉)原理

如果把n+1个东西放进n个盒子里,有一些盒子必须包含最少2个东西。
hotstuff,区块链

7、3f + 1

假定总节点为n, 坏节点(作恶节点)为f。 那么在每轮共识的时候,最多只能收集n-f个签名,否则就极有可能永远没法共识了。
容易得到:
每轮共识的票数不能大于N - f,否则可能永远打不成共识(坏节点一直不干活)。
每轮共识的最少好节点票数: (N – f)– f
相邻轮次共识的好节点数量: 2 * (n – 2f)
好节点永不作恶,那么只要保证这2 * (n – 2f)节点中有重复节点,就安全了。根据鸽笼原理,可得:
2 * (n – 2f)> n – f =》n > 3f,即n >= 3f + 1

鸽笼原理中的盒子,其实就是好节点,相当于有n-f盒子,要放2*(n – 2f)个东西。
两阶段以及切换leader的过程,为了保证安全性,都应用了这个原理。

四、hotstuff

1、基本情况

第一个实现Linear view change且拥有(Optimistic)Responsiveness的共识算法。
应用:知名的Facebook Libra

2、比较

hotstuff,区块链
可以发现从大的主要维度看,hotstuff基本实现了最优。

3、基本流程

hotstuff,区块链

4、关键点

相比其它共识,之所以能达到这个目标,得益于下几点:

  • 增加一轮共识
  • 新节点的替换规则
    if m.node extends from m.justify.node ∧ safeNode(m.node, m.justify)
    function safeNode(node, qc)
    return (node extends from lockedQC.node) // safety rule
    ∨ (qc.viewNumber > lockedQC .viewNumber ) // liveness rule
  • Viewchange,leader切换与共识流程融合

5、优化

链式共识,n高度的commit, n+1高度的lock,n+2高度的prepare,可以同时验证。
提高了系统的吞吐量,但是latency还是没变。
hotstuff,区块链文章来源地址https://www.toymoban.com/news/detail-808852.html

6、tradeoff

  • 增加了共识的阶段,增加了一个分叉块,latency延长50%。
  • 增加了分叉的可能性,增加了实现的复杂度
    hotstuff,区块链

到了这里,关于浅谈hotstuff和bft的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浅谈区块链DAPP学习·续

    昨天发布了关于自己学习区块链和DAPP的学习小结式的文章,朋友对我提了几点意见说:合约没有身份,一个人可以很多次的投票只要舍得花gas这是个刷票漏洞。 仔细想来是有点偷懒了,所以今天补一篇。就两点:1,补上身份认证避免反复投票;2,对web3.0以及他的部署和调用

    2023年04月08日
    浏览(34)
  • 【区块链 | IPFS】浅谈 | IPFS数据存储原理

    IPFS在数据存储方面采用的是分散式的文件存储,区别于HTTP协议的位置寻址,IPFS是基于内容寻址,当文件上传到IPFS节点存储时,节点会对文件进行Merkle DAG(默克尔有向无环图)的格式组织分块存储,在存储完毕后,文件将以Merkle DAG的根哈希数来表示该文件,用户可以从IPF

    2024年02月10日
    浏览(36)
  • 浅谈市场降温后的区块链发展前景

    近期以来,以区块链技术为核心延伸出来的整个市场都有一种降温的趋势。特别是在国外的加密市场,更是一度惨淡,整个加密市场可以说是一度大崩。 尽管是在这样一股下行的趋势下,目前资本在区块链领域中的投资依然持续存在,据统计,2022年上半年的投资额已经超过

    2024年02月04日
    浏览(41)
  • HotStuff: BFT Consensus in the Lens of Blockchain

    Facebook 近日公布的 Libra 白皮书引起各界持续关注,其网站公开的技术文档也被诸多专家审视,文档提到Libra 区块链将使用基于拜占庭容错共识的「LibraBFT」共识算法,而 LibraBFT 则是「HotStuff」的一个变种。 HotStuff的论文由云计算公司 VMWare 的研究团队发表,第一作者尹茂帆,

    2024年02月09日
    浏览(54)
  • 浅谈Xpath注入漏洞

    目录 知识简介 攻击简介 基础语法 语法演示 漏洞简介 漏洞原理 漏洞复现 Xpath盲注 攻击简介 XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入发生在当站点

    2024年02月03日
    浏览(65)
  • 浅谈浏览器调试

    至此, 全篇结束。

    2024年02月01日
    浏览(30)
  • 浅谈端口扫描原理

    端口扫描,顾名思义,就是逐个对一段端口或指定的端口进行扫描。通过扫描结果可以知道一台计算机上都提供了哪些服务,然后就可以通过所提供的这些服务的己知漏洞就可进行攻击。其原理是当一个主机向远端一个服务器的某一个端口提出建立一个连接的请求,如果对方

    2024年04月24日
    浏览(31)
  • 浅谈 开源许可证

    最近帮开源社区打杂,有个任务涉及到使用其他开源仓库来开发。留意了一下开源许可证,发现帮忙开发的项目使用的 Apache 2.0 开源许可证,可能使用的其他开源仓库有以下几种开源许可证类型 BSD-License BSD-2-Clause license BSD-3-Clause license MIT license GPL license 突然意识到自己仓库大

    2024年01月17日
    浏览(52)
  • 硬件板级调试浅谈

    目录 1、前言 2、硬件调试常规步骤 2.1、检查板卡 2.2、测试静态电阻 2.3、上电测试电源 2.4、测试时钟和复位 2.5、烧写逻辑和UBOOT(通过FPGA的JTAG调试口)、串口登录uboot(看有没有串口打印信息) 2.6、USB或者网口烧录操作系统、软件调试其他部分。 2.7、调试其他功能模块。

    2024年02月06日
    浏览(67)
  • 浅谈对Maven的理解

        Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队交流,每天都有数以万计的开发者在访问中央

    2024年01月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包