探索价值 53 期:从中本聪 1.0 到 Gossip 3.0,AVA 的实用型区块链架构

分享人:Ted Yin 整理:红军大叔 ( 无涯社区 )

01 我们知道区块链领域有一个经久不衰的话题 , 就是不可能三角 , 即可扩展性 , 安全性和去中心化很难全面获得 , 那么 AVA 是如何看待这个问题又是如何做取舍的 ?

这个是非常好的问题,就是我当时我之前在别的地方也碰到过类似的问题,这是一个需要澄清的事情。 为什么一定要三个?为什么不是不可能六角?有没有人思考过这个问题? 我猜测原因是因为这个问题,它其实是在对于系统研究里面的另一个不可能的三角进行的一个模仿,另一个不可能三角叫CAP 不可能。 然后 CAP 是指的是一致性、可获得性和网络分块,然后这三者不可得兼。就是说你不能做一个系统,它即是完全一致的,然后又随时可以去访问它的服务,并且这个系统里面内部的网又断了一下,这系统还能继续满足前两个,这是做不到的。 比较搞笑的是,这两个不可能都没有严格证明。 就是说第一个是系统原来这个研究里面有人提的所谓CAP Theorem,这个东西就是一个经验之谈,就是说我们觉着好像很困难对吧?然后我们就说他不可能了,区块链的不可能三角也是类似的。 我觉得是说可能有人最开始提到过这个,但是不知道为什么就被炒作起来了。其实相比于 CAP Theorem 的话,这个不可能三角,我觉得相对要更水一点。为什么?因为谈论一个事情是否可能,只是要去证明他可能就可,比如说这个事情能发生,那我能让它发生就行了。 你要说明一个事情不可能,是做不到的,就是很困难的。我知道的目前系统里最知名的所谓不可能其实叫做FLP 不可能,指的是你不能设计这样一个共识协议,它既安全又有活性,它在网络完全没有任何别的对于延迟的额外假设的情况下,是安全的又不会卡死,这个是不可能,这是有严格证明的。 但如果你好奇去看那篇论文的话,你会被震惊,你要证明一个不可能是非常困难的,你需要严格去定义这个东西到底什么情况下是不可能的,对吧? 然后回到刚才您提的问题,就是我们知道这三种不可能的东西,每一个词其实都很模糊,什么叫做扩容,什么叫做安全?没有具体的定义。 如果有人恶意地去揣测的话,这其实是在兜售概念,就是说:“你们不要嫌弃我系统慢,因为我做不到,别人也一定做不到。” 但我觉得这样的心态是不太好的。毕竟你希望产业前进,并不是靠提不可能来完成,这也是为什么学术界去做偏实用领域的这种系统,能做出不可能证明的相对较少。因为大家都希望把东西变成可能,而不是说不可能就结束了。 然后你又会看到后面又有一些项目会说他们突破了不可能三角,我们把不可能变成了可能,这又是另一中兜售概念,又可以再炒作一遍了。 所以我不是很喜欢说大家过分的去相信这个东西。如果你现实中认为有一些相互制约的因素,没有办法同时去满足,那么有两种可能,一种是你做了错误的假设,那么原来可能的就变成不可能了,那么解决办法只要找出这种思维定制的错误假设即可。 还有一种就是被路径限制住了。就拿我们原来用的很顺手的中本聪也好,像 pbft 这类也好,都是相对有历史积淀的。这些方案也有他们自己的限制,能不能设计一个完全不一样的共识机制突破这个路径的依赖? 因为我观察到的现象,虽然市面上有很多共识算法,但是其实基础机制还是很单一的,基本上就是这两条路径上的翻新。我们想的是能不能从根本上去做一个完全不一样的第三类(我们都不说第三代了,第三代可能有点膨胀)。所以我们希望通过这种根本上的思考去突破所谓的不可能三角。 红军大叔: 这个回答其实挺大的,你说到了一个要点,就是我们总感觉这个问题已经变成了某一个既定事实,而大家好像从来不质疑它。 我也在联想一个问题,现在区块链领域里面是否也存在一些类似存在巨大偏见的东西? Ted: 前面提到了 TPS、不可能三角、分片这种执念,我觉得这三个本身的想法没有什么问题,比如说我想提高 TPS,提高吞吐量,提高系统的负载能力,这没什么问题,但是最后就发展成了唯 TPS 论就不对了。这种执念让大家脱离实际,最后就执迷于那个数字。 另一个就是分片,这也变成了一个营销词汇。分片,就是说原来是大家都在干一件事情,一起来把它干好,现在变成了说你不用干这件事情,咱们分管一下,然后这些人干这些事情,另外人干另外的事情。 其实很多分布式数据库就是这么做的,比如谷歌就这么做的,但问题在于这也有问题,比如说你分了片以后,你的别的方面就会受到影响。 你也不能无限制的分片,不可能说我有 10 个节点就分 10 个片,每个人都跑自己的东西,那就没有共识了,对吧? 其实每个技术方案都有两面,但大家太多执着于其中一面,这不是一件 好事。 现在我觉得科普工作还没有做好做够,行业掺杂了很多伪概念,如果你听些 TPS 数字或者看到这类营销词汇的时候,就得留个心眼得想一下,得有个独立的思考。

02 在 why AVA 里提到 : 使用 AVA 既可以构建 application 也可以定制 blockchain 网络 , 这让我想到之前我们常提到的应用链与智能合约之争 . 那么 AVA 是怎么定位二者的区别或者说是如何看待链与应用之间的关系 ?

我们之前也有过内部讨论,比如说包括我们之前决定在 DAG 上集成不用合约就能跑的 NFT,因为我们看到它在金融方面,包括电子商务方面的极大潜力。 然后我们当时就想过一个问题就是说,你这些 NFT 这些东西,就像当年云养猫一样,可不可以?你为什么不做成智能合约,你直接在智能合约上跑不就完了吗?这就有一个取舍点,哪些功能是应该焊死在这个系统里面,作为原生的功能? 按现在手机说法就原生系统提供,哪一些是通过插件提供服务,哪些通过各种智能合约提供,这是个很有意思而且很有深度的问题。这没有标准答案,我自己的看法是,首先这两者并不矛盾,就很多人认为他们是对立的,其实更多是一种选择问题。 比如说我有一个开源的软件,它有一些功能,然后有的人就会说我想要额外的功能。那些开源软件就让大家自己去 fork,然后根据需求去修改里面的东西,然后加一些功能就行了,这样就会形成一个社区,就有很多不同版本的软件,或者是插件。 这其实也像游戏,比如说原来大家玩的半条命,有的人就觉得老打怪物不好玩,我们要竞技性的,然后就产生 CS 了。CS 这个游戏原来只是半条命的一个 MOD,一个插件,就像智能合约一样的东西,它受主体游戏的限制。但因为爱好者太多,最后就单独做成了一个游戏。这是一个不错的模式,智能合约它的最大的作用在于它很有弹性,它可以去做各种事情,可以去建模各种通用的计算,这个功能很强大,但它的缺点也有,比如相对开销比较大,要慢一点。 然后如果真的一套逻辑已经发展到足够常见,而且大家都很想用的地步了,那么就应该被固化成为系统的内置的属性之一,这样就能实现更多的优化。而原来智能合约的时候,你为了保证它的灵活性,就损失了一些性能。

03 看到 AVA 里有 subnets 的概念 , 能否从和 ETH2.0 的分片以及波卡的平行链比较来看 AVA 的 subnet 有什么独特的地方 ? AVA 里有跨链的概念么 ? 或者说和外部的链会有交互么 ?

其实可以想象成多个链或者分片,或者是类似互联网的子网,这种东西本质的 idea 很简单,我相信即使是没有做架构背景的人,也很容易想到。 所以我觉得想法本身的价值其实是低于它实践起来的价值的。大家都有这类的东西,但是我们希望有用一种更好的方式把它组织起来,所以我着重介绍一下我们是什么样的,然后大家自己去评判区别和优缺点。 所有的子网、链这些东西,我们都希望它在基础的代码层面,因为如果全部抽象成类智能合约,就会把性能拖 得很低,因为这相当于是在模拟一个东西。 我们首先提供给大家一个模板,让大家来了个自己去实现一个在子网。就像刚才提到的,当你不想再用智能合约虚拟出一个假的链来运行逻辑时,就可以去克隆这个代码产生新的虚拟的链,而这其实是在同样的一批节点上运行的。那我们能不能把运行的节点进行一个划分?这里就存在两个层面上的自由度。 第一个自由度是说对于同一个节点,它其实可以去同时去模拟多个链。在不同的场景下,有时就需要更高的效率和更多的控制控制,比如说我是一家银行,我希望有自己的链,这些链上的东西不能跟大家同步。而在银行的同一个节点上,通过模拟多条链,就能很好的虚拟化这样的逻辑。 然后另一个维度的自由是说不同节点之间虚拟的这些链,他们之间不一定完全重合。比如说我有个节点,我只可以运行我喜欢那几条链。而有特殊需求的链,就可以完全不够同步数据出来。所以我们的体系架构就相当于给了大家更多的可能性。 这种组合的可能性是很多的,这两个层面的自由度是非常重要的。因为我感觉金融的场景就有很多这种苛刻的要求,总不能让大家都混在一起吧?我们得能分开。

04 关于 51% 攻击 , 直观理解就是攻击者资源比例达到 51% 就可以决定主链方向 , 那么在 AVA 里可以避免 51% 攻击的技术原理是什么 ?

商业概念跟实际的技术概念是有差别的,首要要明白什么叫做可防御攻击?在我们协议里,不会出现到某个临界点就崩溃的情况,而是取得一个平衡。 我们可以通过牺牲系统的活性(性能)来容纳更多的攻击。也就是说如果系统里真的有这么多人攻击,这个系统只有可能卡住了,但不会通过错误的交易,安全性还是没有被破坏的。系统只是卡住了,你的钱还是钱,系统存储的状态还是一致的,但可能在一段时间里没有办法接纳新的交易。 因为我们有这种灵活性,所以说理想情况下,有少量攻击的时候或者没有攻击的时候,处理速度非常快,这是绝大部分的情况,因为处于攻击的经济收益考虑。 但如果突然间出现了大量攻击,那么基于公示的特性,交易的确认可能需要等待更长的时间,但是同时保障了足够的安全性。 红军大叔: 简单的总结一下,可不可以理解为在攻击发生的时这个系统并没有崩溃,而只是共识的速度降下来了,所谓的灵活性就体现在这里吧? Ted: 对,可以这么理解。 因为之前很多的区块链它的原理是说受到攻击的时候,它还是想保证共识出块的速度不变,这很矛盾,也容易出现系统的崩溃,AVA 的灵活性就能解决这个问题。

05 我们发现 AVA 里有两个共识引擎 , 一个是 Avalanche, 一个是 Snowman. 那么 , 为什么会设计两个共识引擎 ? 各自的作用和机制是什么呢 ? 这两个共识是并行运行的嘛,高并发的交易,与合约的逻辑执行是在两个网络中运行的嘛?这两个共识如何互相作用实现交互呢?

如果你去用一个牛刀去杀鸡,显然是没有效率的。 现在的区块链还缺少应用,虽然合约在被越来越的使用,但现在的区块链系统中绝大部分的操作都是普通的转账。 所以说我们得一步一步来,既然主要的都是交易,那咱们为什么不用一把专用的刀来执行特定的任务。但同时另外一边比如智能合约,我们也得让它能够运行,而且性能得足够靠谱。 那为什么不结合一下?让大多数的使用场景下,效率变得非常之高;而对于智能合约这种更复杂级的应用,我们也去实现一个更好的方式。这样你就会得到一个相对混合,但更好用的系统。 有意思的是什么?是这两个系统他们的共识本质是一样的,他们只是共识的利用方式不一样。我们是有一个同一个内核的算法,只是它有两种不同的表现形式。 如果里仔细去思考 DAG,我怎么控制准入机制,谁能进来谁能出去,这时候 staking 就是个很棒的方式。既然有了押金,就需要有一套经济激励机制,那么这套机制肯定靠 DAG 是没法解决的,只有在全序的系统里才能实现,而一个全序的 DAG 除了增加吞吐量之外,就没有太多意义了,还不如把区块体积变大。 那么这种情况下我们需要一个全序的链,它来记录我们在某一时刻加入了多少人、退出了多少人、押金的情况等等,这种准如下就已经发生链与链之间的互动。因为你的钱其实是在主链里的,你要交押金,押金又跟顺序的逻辑相匹配。顺序的逻辑就适合运行在智能合约里,所以我们决定把它分离成另外一个顺序的链。
探索价值 53 期:从中本聪 1.0 到 Gossip 3.0,AVA 的实用型区块链架构