第三代区块链协议有多酷😎
注: 本文转载自BeWater公众号: https://mp.weixin.qq.com/s/HY2qKnTJBm0RKW9Da61deg
2021年9月4日,在BeWater DevCon 2021 全球开发者大会上,Avalanche 雪崩协议首席协议架构师和联合创始人 Ted Yin,他也是 Facebook 的 Libra/Diem 项目共识 HotStuff 论文作者,远在大洋彼岸的他视频连线,为大家带来了《Avalanche的实践与思考》的分享。
这场深度且系统的分享,引发了全场人的思考,核心观点:
1、2021 年的区块链基础设施是什么?
2、前两代区块链协议的演变
3、第三代区块链:Snow / Avalanche 「雪」之协议
· 区块链的性能不能只看吞吐量,「吞吐量 + 延迟」才能完整衡量;
· 被过分炒作的“分片”概念,与实际应用相关,不是万灵药;
· 我们可以将流言网络作为共识本身!
4、元平台与子网链的设计
全文 7011 字,用时12分钟
大家好!我是上海交大毕业的,是 Avalanche 的联合创始人,也是首席协议架构师。
下面这张PPT 2020年被用过一次,大家说你是敷衍我,没有,其实你会发现有些东西是不变的。尤其是我们从做科研到去年主网上线,我更多的从学术的角度,比较早的观察到,每一年都有新项目出来,但其实基础设施并没有大家想象的更新迭代那么快,这可能出乎你意料,没有那么多本质上不一样的技术。
所以我们可以想想什么叫做区块链的基础设施?
把现在所有的要素 —— 分片、扩容、DAG、智能合约等全部东西揉在一起,制造一个「究极缝合怪」,就会变成下面这张图。
这里面不止会有一个真正意义上的链,而是有多个链作为子系统。
比方说有一个线性的链作为账本,有了线性序,我们就可以把计算和操作编码在这个 log 上面或 ledger 上面,就可以实现 dApp 或者标准的智能合约,如以太坊上的 dApp 与智能合约,以太坊的操作就是一个序列。
又比方说使用了有向无环图 DAG 的链——DAG 在有些系统里是有用的优化,可以让一些时序无关的操作并行执行,就比如说 A 给 B 了几块钱,A 又给 C 了几块钱,只要 A 的钱够用就无所谓,他到底先给 B 多少钱还是先给 C 多少钱,实际上是没有关系的。
这个事情的核心在于,单独抽离的数据结构用处不大,需要通过共识算法或者说是一个一致性的协议来实现落地,保证这个网络不光是分布式的,而是去中心化的,每个机器都 share 了 log,同时这些 log 还是可兼容的,也就是不存在分歧。
区块链技术成就了很多事情,我们无法想象阿里巴巴或腾讯把它的支付系统放在我们家里运行,因为他们的数据库可以随便改余额,那到底信谁的?但是对于区块链技术下的系统,我们都可以运行节点。
在链和 dApp 之间,有 Agent 或者如 Infura 这种中间商。开发者一般不会自己运行一个全节点,而是本地先调试好了,然后通过一个第三方全节点进行部署。
第一代区块链也就是比特币,我们可以理解成 git commit 形成的链,每个 commit 都有一个哈希值 ——所以 git 其实就是某种意义上的区块链。
Git 里面也可以有工作量证明,例如我们设定一个每个块里面的代码必须写多少个小时,而且没有办法偷懒,那就比谁的 commit 的链更长谁就说了算,对应到这里面就是最长链 。
工作量证明没法伪造,很容易验证,很长的时间才能在整个系统里产生,所以我们就有了中本聪共识,最后账本会坍缩到一个主链上面,这就是最长链的原理。
优点1:工作量证明同时能作为准入机制 ——「Permissionless」
有一个很好的地方是工作量证明同时能作为准入机制,这是一个不容易理解的点。
大家经常说联盟链、公链,本质说的是一个准入机制:谁能进来玩?是不是任何一个人都可以来运行这个节点? 但其实准入机制和共识机制并不直接相关,只是中本聪设计的这个协议恰巧用了工作量证明,而这个工作量证明可以形成一个准入机制,也就是说,它不需要特殊的委员会,不需要审批过程,只要有算力,就可以挖矿,而且也不存在一个人可以通过控制节点数就能控制区块链网络,因为节点不代表算力,所以他这点上的设计很有意思。
优点2:优雅的安全性退化
比特币系统有比较优雅的安全性退化,在这种协议里面安全是概率的,如果有人占据了相当比例的算力,协议安全性虽然会受影响,但是影响是光滑的影响,不会说中心化到一定程度,就完全没有安全性了。虽然说 51% 攻击被大家所熟知,但从 1‰ - 51% 的过程,安全性是一个连续的光滑函数。
优点3:松散成员信息
比特币系统也不需要准确的成员信息,挖矿即加入,不需要提前知道这个网络里有多少人参与,进入和退出不需要去登记。
缺点:浪费资源、负载能力低、确认时间长、安全效率差。
以上都是它的优点,缺点也很明显:
1、工作量证明浪费资源:2018年的老数据表明,全网总共消耗的电量相当于一个奥地利、两个爱尔兰全年的电量;
2、负载能力很低:每秒钟只有3个交易左右;
3、确认时间很长:如果按6个区块链的确认规则,需要等一个小时,对于小额交易来说时间太长。
同时,比特币系统和第二代相比安全效率很差,为什么呢?
为什么叫法老王的复生呢?这个东西研究了很久了,只是没有走进大众的视野,在传统的大公司里,如果接触过如 Paxos 和 Raft 这种冗余系统,那么会对 BFT 有点印象 —— 实际在 2000 年的时候,已经商用于宕机或机器崩溃时的冗余场景。
如果你有 f 个机器坏掉,那么只要还有 2f + 1 个机器就可以保持系统正常,比如Google 一般是 5 台机器。这种系统会高效且高可用,表现出来就是,我们现在所有的云服务能给大家一种 24小时 * 7 天不间断的假象。
在零几年的时候,很多网站还需要每个月维护一次或每周维护一次,但现在无需停机维护了,因此通过容错系统来遮蔽掉了这部分出错的机器。整个系统相当于一个大的数据中心,因为机器太多了,每秒钟都有机器坏掉,它会不断的更迭。这个角度来讲,它是好的系统,你可以想成使用了区块链技术,但他其实是中心化的,因为所有东西都由一方在控制。
优点1:网络非常快
在那个年代,依然有更激进的想法,如果几个公司一起来跑,任意一方对不能直接控制这些机器,一旦出了错,这种错可能不是没电,机器、硬盘坏掉,而是可能有恶意的公司修改数据,导致数据对账问题,在这种更弱的假设下如何保障系统的稳定性?
这个当时也做了很多研究,例如 1999 年关于 PBFT(实用拜占庭容错)的论文,这是一个正确的协议,也是第一个被认为比较实用的协议,它弥补了第一代区块链协议的缺点,在网络规模比较小的时候非常的快,甚至可以和中心化的服务效率比较。TPS 可能到上百上千,延迟可能到达毫秒级别。
优点2:确定性安全
在整个网络比较好的情况下, PBFT 这类协议的安全性是确定的——如果只有不超过 1/3 的坏人的话,网络一直是安全的,无需等待6个块,只要确定了就是确定了,而非像一代协议一样是概率的算法。
第二代协议的问题在于,一旦超过阈值(1/3 的坏人),就会立马不安全,很容易被攻击,这个系统就没有用了。
优点3:悠久的科研历史
另一个优点是它有很悠久的科研历史,仔细想想中本聪的操作,不是为了科研目的一步步叠加做出来了,而是说我有这一套系统,我想让它成为无政府主义者的货币系统,然后比特币系统就出来了。只是我们后来的解构分析,发现他使用了算力做了衡量网络中坏人的能力的单位。
问题1:难以扩容
很多协议里大家用的都是身份,这样可能会造成一个人搞多个身份,怎样避免?
因此就有了准入机制,因此这种协议一般被称为 Proof of Stake,基于质押证明的协议。质押并非协议工作原理本身,而是保障正确性的前提。这种协议的问题一是难以扩容;二是大家一起投票的话效率会低下,在没有统一提案的情况下,要探索到统一的提案需要花费大量时间和网络代价。
如果先有一个领袖进行提案,大家来支持或反对,或者对领袖进行弹劾,会快很多。
领袖型 BFT 就像美国总统机制,无领袖型 BFT 就像国会机制,双方都有低效的地方。在 PFBT 网络里面,所有人都会去访问 leader,leader 就好像被 DDOS 一样。如果有 1000 个节点,那么相当于 1000 个节点被 DDOS。所以就会出现扩容的问题——如何让节点数增加,性能不呈反比下降?
随机的全民表决的 BFT 方案,相对于领袖型 BFT 方案来说,效率还会更加捉急。
问题2:要求 100% 准确的参与者信息
PBFT 系统需要准确的知道系统中有谁参加——无需现实身份,但需要有 ID,比如有ABCDE 五个人参加,那就 ABCDE 组成成员名单,容错程度建立在成员名单的基础上,不能有偏差,每个人都要拿到一模一样的名单,所以有一个实现的问题——在一个很松散的网络里,需要用决策机制决策出名单,当然这个事情是可以做到的。
问题3:对于坏人的硬性假设
对于坏人的硬性假设是不能超过共识节点数的 1/3,哪怕超过了 1 个,整个系统就是不安全的。这个系统论文就几页,但是真要实现的话非常困难。
这些协议都特别复杂,论文讲核心的部分只有几页,但是他讲的很模糊,真的要实现的话是非常困难的一件事情。
问题4:核心协议过于复杂
在 13 年的时候有人抱怨看不懂这协议在干嘛,能看懂的就是客户端发送了请求,然后一个服务器给所有别的服务器广播说「hello」,然后这些服务器给所有的人发投票的什么东西,然后就是 maybe do some start,最后就是鬼画符,然后 definitely 了 —— 所以学术界懂这类算法的人也不多。
因此我们有一个结论,一对多或者多对多的广播,是非常糟糕的情况。
对于第三代区块链提出的问题:有没有完全不一样的共识机制?
分片能解决问题吗?
在我们打破这个问题之前,先纠正一个误区:
可能大家都觉得分片好,感觉像是救世主一样:随着分片技术的发展,「扩容难」已经过去了。
其实分片是在分布式系统或数据库领域的一个常见概念。所以如果跟不是搞区块链的人交流,你会“惊喜的发现”,自己被营销了。
分片这个概念本身并没有错,只是他被过分的炒作了——因为它没有直接解决共识层面的扩容问题,只是治标不治本。
为什么这么说?如果你已经给定了一个基础协议效率的情况下,采用分片进行优化没有错,但因为没办法解决原来的问题,所以才增加了人为的修正,这是本末倒置。如果原来的问题解决了,我们还是可以去做分片等优化。
为什么说是治标不治本?因为是以损失容错度为代价的。我们这里做个思维实验,如果每个节点都是一个分片,那么所有的节点都是自己的一套系统,就不产生冗余了,因为分片分得越多,复制同一个状态的、同步整个链的数据的、取得一致性节点就会越少,这是它的规律——分片和共识是一个天平的两边。
所以,分片能进行的情况是,分片之间一致性需求没那么高,例如:在上海做支付系统和在北京做支付系统,多数情况是上海内部银行之间互相转账,北京内部银行之间互相转账,偶尔有北京和上海之间的转账——如果是这种情况下还是需要走慢的办法,取得一致性。
从这个例子看出来,分片是跟实际应用直接相关的,并非万灵药。
如果这个协议很垃圾,相当于汤本来就很难喝,分片相当于给汤里加老干妈,会变得好吃,但我们要知道,难喝的汤里加再多的老干妈,它也是有老干妈的难喝的汤。
如果本来就是个火锅,汤底很好,我还是可以加辣的,就可以更好吃了。
第三代协议:Avalanche 协议
第三代并非意味着秒杀前两代,只是各自有特点。这套协议在具体的应用场景下,可以发挥很强的业务能力和性能。
一篇关于 Avalanche 的论文在 18 年 5 月被放到 IPFS 上,这篇论文是我们这帮科研人员合作的,受传染病模型(epidemic model)和流言(gossip)网络的启发。
第三代结合了前两代的优点:
1)有优雅的安全性的退化——不能说坏人到达一定的数量,网络就不安全了,直接崩溃了。
2)松散的成员信息——网络里面的节点数和名单不太一致,不会对大局观造成影响。
3)足够快——不因网络规模增加而线性甚至超线性的下降,如果是对数的下降就很好。
4)绿色环保
5)符合直觉—— PBFT 中的投票不符合直觉,太复杂了;中本聪共识很符合直觉,但又太慢了。
另一个被曲解的概念——TPS吞吐量
其它协议也说自己很快,有很高的吞吐量 (TPS:transaction per second 每秒钟交易数),但就像我们不会只看跑分结果买手机一样,吞吐量也是被曲解的概念。
如果你看计算机系统的论文,他们测性能,尤其是分布式系统绝对不会只测吞吐量,这个相当于在耍流氓。因为「吞吐量」只反应一个系统的负载缓冲能力,而「延迟」是反映真正响应用户请求的速度。
你作为一个用户不关心吞吐量— 每秒能服务几个人,用户更关心交易递交上去了,什么时候能上链,是一秒还是一小时?这个概念叫做「延迟(latency)」。
评估整个系统不能只评测延迟,「吞吐量」和「延迟」这两者缺一不可。一个系统延迟可能确实很快,好像一个银行平常没有人来,只有一个或十个客户,那么延迟很低,但原因只是负载太低,没有什么用户在里面用,但如果有很多人排队,银行就招架不过来了,所以给定延迟的时候你要看吞吐量。
如果不看延迟,只看吞吐量,会得到另外一个极端的研究。
跟互联网媲美的吞吐量是物流公司的吞吐量,比如我从北京寄一卡车的存储卡到上海,可能三天到货,按秒来算吞吐量是相当惊人的,但是你不能当网络用,也不会用这个东西做决策,所以不考虑延迟,只是谈吞吐量也是在耍流氓。
所以吞吐量和延迟两方面都要看。
上图是节点数翻倍下 Avalanche 协议吞吐量的表现。在节点倍增的情况下,吞吐量受到的影响比较小,这里面也用到了一些别的技术,例如用 DAG 来实现并发交易。
上图是在 2000 个节点的情况下,不考虑额外网络延迟的情况下做出的协议本底延迟。即使 2000 个节点都在投票,还是可以做到低于一秒的延迟——左侧即是延迟的分布。
考虑实际的情况,把节点分散到全球 20 个城市,做完整的数字签名,使用比特币标准 UTXO 模型,结果还是相当客观,可以在维持每秒上千个交易的同时,保证一秒左右的确认时间。
如何实现?—— 流言网络作为共识本身
今天时间有限,我不能把每一步都展开。我从直觉的角度来给大家大致讲一讲主要思路是什么,凭什么?
如果有 N 个人在讨论娱乐圈的瓜是不是实锤,把真或假想象成一种决议,相当于上链或没上链。每个人独立的选 k(如 k = 10)个其它人,就算全国有上亿人也是选 10 个人,然后去看他们认为这个瓜包熟不包熟,真的还是假的。
张三根据他问的 k 个人决定自己对事实的倾向的确信度,张三的倾向又会影响到别人问他的结果。通过随机询问,信息在整个网络的可信度是上升的。
第三代协议相当于第二代协议的优势是不需要问全网所有人,只问一个随机抽样的群体,这个群体只跟安全性有关系,和网络的规模关系很弱。如我们有 100 万个节点,我们设定的 k 值依然可以是 10 或 20。
一个例子:
这个例子里面,我们考虑每一个节点是一个颜色存在差异的圆圈。那可能张三原来觉得蓝色的表示实锤,橘色表示是假的。现在他认为是假的,他随便地问了五个人,发现有三个蓝色(实锤)。李四问了别的五个人,发现和张三意见相左。这个网络可能会在短时间震荡,但是微小的扰动就会让这个网络从
「震荡态」坍缩到「稳定态」——也即,所有的节点都成为同一个颜色。
这里有一个 Avalance 协议的演示 Demo:
https://tedyin.com/archive/snow-bft-demo/
我们会发现这个协议具有相当的鲁棒性。
协议特性总结:
1)我们只需要选一个小的样本,重复进行采样,无需工作量证明,也无需全局的投票。
2)好处就是网络有多快,过程就可以有多快,很容易扩容到大规模节点。
3)可以允许松散的成员。
4)引入任意的准入机制,如 PoS 机制。
我们有一个这个主链是做这种价值转移和交易的。NFT 还没火起来的时候,我们的测试网已经支持 NFT 了,而且是在 UTXO 模型下支持的,也就是说发行 NFT 无需智能合约。
同时,如果想用智能合约的方式实现,也可以,因为支持标准的以太坊智能合约。我们只要在 sdk 中修改 endpoint、 chain id 与 gas fee,就能将 eth 合约原封不动的部署在 Avalanche 的链上。
我们有没有办法像生成智能合约一样来发行自己的链呢?
开发者是只想要一个属于他的支持 eth 规范的链,那么可以发一条自己的链;如果开发者想要做一套支持 wasm 的自己的链,编写自己的一套语法,那么他可以二次开发。
去年 9 月份我们的主网已经上线了,70% 的发行总量上限是留给这些质押挖矿的或者是以后去做生态贡献这些人的,团队和投资人占的比例没有那么大。而且,主网上线的第一天就是去中心化的,目前有 1000 多个去中心化的节点,公司很早就已经没法控制这个网络了。
所以,大家可以考虑吃火锅,尤其是做智能合约开发的,可以考虑快一点的系统。
智能合约链经过一年的打磨,已经相当丝滑了,欢迎大家体验!
提问:Avalanche 它的优势在哪里,solana 他的生态其实相对而言也比较成熟,相对比 Avalanche 领先一丢丢的,您怎么看?
Solana 的技术上我们考察研究过,他们细节披露的不是特别多,我是主观认为没有那么去中心化。Avalanche 去跟市面上所有的项目去比,我觉得没有任何一个能打的过我们去中心化的程度。判断项目的去中心化程度,要看主网到底跑多少个节点,到底谁在跑这些节点,把这两个问题回答清楚,就知道项目到底什么情况。
我见到过项目说先上船再补票,先把东西做出来,把资本运作起来,然后技术慢慢的落实到位,但为什么一开始不好好做呢,应该站着把钱挣了。我们注册在美国,是合规的,我们一开始花了大量时间精力在怎么好好做这个项目,怎么去把真正学术的成果转化成可用可见的系统,你如果去看里面的代码,就是两年前提到的算法,可能有小的改动,但基本上是那样的。
你可以从市场角度去看,市值也好,或币价也好,可能暂时比不过所谓的竞争对手。但我们也不把包括以太坊在内的看成自己的竞争对手,因为我觉得这个行业都还没有被大家正视,就想内部窝里斗,没意义!重要的是市场蛋糕是很大的,但才把小菜上了,就狼吞虎咽把别人的菜抢完了,后面的菜还没上呢。
Solana 是我们的友商,大家一起做大蛋糕,一起吃香。各自的链有各自的优点,性格,或者使用体验。我觉得重要的是,老老实实把事情做出来,真正做到去中心化,把服务做到承诺的级别。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!