Soteria 创始人 Mr. Ming Guo 在魔笛手社区分析 DAG 的前世今生。DAG 曾经风靡一时,然而因为它缺乏共识,所以热度很快就过了。那么,如何在 DAG 的基础上改进,以实现共识和去中心化的理念呢?让我们带着这些问题和分享嘉宾 Mr. Ming Guo 一起探讨一下 DAG 的最新发展。

Soteria 是传承中本聪共识的 PoW 高性能公链,基于 Block DAG 其特点是具有高吞吐量,巨数据隐私保护和安全智能合约。

Ming Guo,Soteria 创始人,在硅谷担任软件工程师 20 年,曾是一位火箭专家,在高性能算法设计,网络协议和交易系统业务方面有很多贡献;创业孵化投资人,共同创立深圳 Make Mountain Accelerator,利用硅谷-深圳资源帮助世界各地的智能硬件创业公司。

以下为 Ming Guo 分享内容。


大家好,我是 Soteria 公链项目创始人 Ming Guo.

首先我来介绍一下 Soteria 的来历。Soteria 是希腊神话里的安全、保护和拯救的女神 — Σωτηρία, Soteria,苏缇雅。

Soteria 为下一代区块链项目,有望成为「内生去中心化经济体」(SSDE - Self Sustainable Decentralized Economy)的基础设施技术。由比特币开启的区块链革命已经在我们的生活中留下了不可磨灭的印记 - 但是直到今天仍未释放出其全部潜力。

Soteria 的愿景是将区块链革命提升到一个新的水平 - 创造一个基于个人数字主权的全方位自我可持续的去中心化经济体—缺乏这样的经济体是区块链领域发展和应用市场落地遇到瓶颈以及极端波动性和混乱炒作的罪魁祸首。

Soteria 正在开发一套整体解决方案,以解决当前一代区块链的一些紧迫问题,同时为其预想的去中心化经济体提供足够的功能集 - 例如基于区块图 (blockDAG) 的可扩展的吞吐量以及链数据存储,通过内存进行的平等挖矿,保护巨数据安全的隐私计算和富表达的非图灵完备、无 GAS 的轻链重应用智能合约。

Soteria 团队位于硅谷,其团队成员是具有思科、EMC、雅虎以及斯坦福大学、卡内基梅隆大学、麻省理工学院等背景的资深工程师。

今天的直播分享主要通过 Soteria 公链的第一个特性集 — Soteria DAG,来梳理一下区块链领域里各种 DAG 实现方式。

Soteria DAG 是对比特币区块链的扩展

比特币把我们带入到去中心化时代,但是本身面临性能扩展的瓶颈。很多区块链项目落入到通过牺牲去中心化这个区块链最重要的特性来追求性能的陷阱里。Soteria DAG 把区块链 blockchain 扩展到区块图 blockDAG,让比特币式的挖矿更具包容性,突破性能可扩展性瓶颈。我们的目标是在捍卫比特币带给我们的去中心化特性的基础上来继续增强区块链领域的创新和应用。

什么是 DAG?

DAG 是英文 Directed Acyclic Graph 的缩写。中文叫有向无环图,特点是任意一条边有方向,且不存在环路。DAG 是一个有向图,它具有拓扑顺序,顶点的序列使得每个边在序列中都是由前到后定向的。

Soteria 创始人 Ming Guo:blockDAG 是中本聪共识的延续DAG — 有向无环图

比特币区块链

在区块链中,每一个块都是链接到前一个块,一直延伸到 Genesis (创世块)。经常会有些小的分支(side-chains)出现,但是最终会被剪掉。在区块链技术中,有向无环图意味着块与块之间的链接会更加自由,一个块可以有不止一个父辈(parent block),父辈还可以在不同的区块高度 (height)。

在 Soteria 项目中,我们称 BlockDAG 为区块图。就是说,在 Soteria DAG 的有向无环图里,图的节点是区块,这是很重要的一个设定,因为后面我们会讲到,其他一些区块链 DAG 的实现里,图的节点不是区块,而是交易。

区块图长什么样子?

下面是一个很活跃的区块图,Genesis Block 就是最下方没有颜色的块,tips 是最上面的块(没有任何其他的块链接「到」这个块)。在这个例子中,不同 miner 产生的块被染成不同的颜色,以便直观的看到每一个 miner 对网络的贡献。

Soteria 创始人 Ming Guo:blockDAG 是中本聪共识的延续

Soteria 的测试网(testnet)有一个对外开放的 soterdash application,可以显示测试网的实时状况。比如:相关链接

Soteria 创始人 Ming Guo:blockDAG 是中本聪共识的延续试网的实时区块图

Soteria DAG 采用区块图,有什么优势呢?

就是说,为什么我们需要区块图(blockDAG)?区块图(blockDAG)是中本聪共识的延续,在原有的特性基础之上,提供了更强的包容性+安全性+可扩展性。

包容性

在区块图的设计理念中,所有有效的区块都会被接受,被连接到 blockDAG。对比起区块链,区块图会接受所有有效的区块,而区块链只保留最长的链,所有侧链上的区块都会被抛弃。

通过接受更多的区块到整个网络,会有更多的人参与到网络建设,比如 mining。比较小的 miner 也可以从网络中获取利益,区块图还可以使用一种比现有 SHA256 (bitcoin use it) 更公平的 PoW 算法,具体算法我们将在以后的章节中讲解。

既然我们会接受所有有效的区块,一个区块的合法性就变得非常重要,尤其是从整个网络的视角来看,以防止恶意攻击(比如双花)。

实际上,区块图的状态,就是比特币网络里的实时状态,比特币的区块链是达到共识后的状态,并不是网络的实时状态

扩展性

在 Soteria DAG 的设计中,整体网络吞吐量的瓶颈不再被共识协议层所限制。通过调整区块大小和出块速度 , 我们可以灵活的设计网络的性能和吞吐量。交易的吞吐量不再是一个被协议所限制的常量,而是一个可以根据不同需求和具体应用场景变化的参数组。

安全性

Soteria DAG 优化了基于 Phantom 的「染色」算法,为区块图 blockDAG 提供了可确定性的排序,有效的避免了网络中常见的「双花」问题。Soteria DAG 还引入一系列的行为分析机制,针对区块和交易的时间序列进行异常检测,以防止其他的未知攻击。

总结

Soteria DAG 实际上是比特币中本聪共识算法的扩展,使其具有包容性,并在保证安全性的基础上提供了灵活弹性的可扩展特性。关健是 Soteria DAG 在保证可扩展性的同时严格遵循了中本聪共识。

对比其他的 DAG 实现方式

目前 DAG 项目有 3 类,其中两类是「交易 DAG」,即 DAG 的节点是交易 Transaction,不是区块 block。

交易 DAG 的第一类有 IOTA、xDAG、Raiblock (NANO)等,他们可以认为是「没有」严格共识的「交易 DAG」,特点是没有确定的「Finality 终局性」 , 也就是没有共识。交易 DAG 的第二类有 Hashgraph、Avalanche,他们实现分布式系统的「经典共识」,即「拜占庭容错共识」。

上面说的这两类「交易 DAG」的共同点就是他们都不是区块链。

还有一类就是我们 Soteria DAG 的区块图「Block DAG」(blockDAG),实现的是严格的「中本聪共识」,是比特币协议的扩展,区块图是中间状态,Finality 是要收缩成一条区块链的。

所以要再次强调的是,Soteria DAG 是区块链,而且是根正苗红的「中本聪共识」区块链。

第一类交易 DAG 里,大家比较熟悉的是 IOTA,所以我来分析一下 IOTA。IOTA 不是区块链,它的网络的交易形成一个 DAG,每一个新的交易必须通过确定两个之前的交易来连接到网络的这个 DAG 里。这个连接要有一个 PoW 的计算。但是 IOTA 的 PoW 计算的难度是固定的,这么做的原因是为了适应所谓的物联网的比较低级的硬件。但是固定的 PoW 计算难度使得 IOTA 的 DAG 不具有可扩展性,而且易于被洪水攻击—spamming。洪水攻击造成的后果就是整个网络无法确保共识终局性 Finality,表现出来就是经常一个交易好些天都不能确定。所以基本上 IOTA 的网络不具有共识终局性,而一个连共识都不能确定的「账本」,是不能和区块链账本相比的。

所以 IOTA 采用了中心化的「协调节点」 — Coordinator 和 「快照」 — Snapshot 的方式来强制达到共识,但是在洪水攻击的情况下,经常连 Coordinator 也不能达到可以收敛的共识终局性,所以我们会看到 IOTA 网络会「停机」好几天。这样 IOTA 就连分布式系统的基本的「可持续性」 — Liveness 整个基本要求也达不到了。IOTA 还有别的一些问题,由于和 DAG 无关,我就不展开讲了。

现在来说说第二类交易 DAG,Hashgraph 和 Avalanche,它们也不是区块链,但是它们试图达到分布式网络系统的「经典共识」,比如「拜占庭容错共识」。它们也具有「拜占庭容错共识」的一类特征,即通过优化节点(交易)的通讯成本来提高可扩展性。

但是如果作为去中心化数字货币账本的应用,其实用性是有问题的,因为去中心化网络里的节点是可以随时加入,随时离开的;那么同步这些节点需要的通讯量的优化就很难保证性能和可扩展性。

这也是「中本聪共识」相比「拜占庭容错共识」的重大优势,即节点达到共识的通讯成本可控。在这一点上,比特币和我们的 Soteria DAG 都是严格的「中本聪共识」 — 即去中心化,防审查以及「无信任」的信任。


以下为社区 Q&A 环节。

Q1. DAG 目的是啥?不能顺藤摸瓜,有尾无头加密备份?

不同类型的 DAG 目的也不相同,但是共通之处是为了连接到更多的节点,无论这个节点是交易还是区块(钱包或矿工),因为分布式网路的一个最基本特点就是节点需要充分连接才能有助于达成共识。

另外,DAG 是「有向无环图」,所以是「有头有尾」的,头就是「创世节点」,尾则是动态变化的。

区块链数据是「不加密」的,除非是匿名区块链;但是里面包含有数字签名的所谓 Merkel Tree.

Q2. 「中本聪共识」跟「拜占庭容错共识」最大差异是什么 ?

我觉得「中本聪共识」跟「拜占庭容错共识」最大差异是,中本聪共识保证的是「概率安全性」,而不是「拜占庭容错共识」的那种「定域安全性」。这就使得」中本聪共识「的网络可扩展性(注意不是性能可扩展性)远远好于」拜占庭容错共识「网路。中本聪共识可以有无限个节点的扩展性网络,而拜占庭共识网络的节点通常比较有限,在几十个或几百个这个量级,据说谷歌可以达到上千个。

Q3. DAG 和 主链的主要优势是什么?

如果你问的是 Soteria DAG 这种 blockDAG 的话,相比比特币抛弃大部分挖出的区块,只留下最长主链的算法,Soteria DAG 会把所有合法的区块都写进最后的区块链里,这就是我们说的「包容性」,它的好处是,不浪费矿工的工作和能量,长远来看有助于防止算力集中等。

Q4. 普通的 blockchain 的 block 也是顺序出,Block 是算好之后再接上去的吧?

完全正确,正是因为这点,很多侧链的块都不能链接上了,最终是被抛弃了,以保证更重要的安全和顺序。blockDAG 就是更多的包容了并发的区块。所以在保证安全的情况下,提高了整体系统性能。

Q5. BlockDAG 还需要 PoW 吗?还是中本聪那套 PoW?

blockDAG 同样需要 PoW.. 我们会在下面几次的分享中细讲我们的 PoW.. 和中本聪的不同。

6: DAG 有哪些潜在需要改进的地方?

DAG 的不同的宽度 (k) 和网络速度还有节点处理速度有很大关系,就是同样的算法,比如 Phantom or Greedy Phantom,都还有很多可以调整的空间,我们写了很多开发者工具,希望大家共同测试找到一个目前网络和系统环节最合适的方案。

Q7. 如何看待未来 PoW、PoS 机制下对应的加密经济市场规模占比?

我其实不知道 PoW 对 PoS 的比例,我比较相信 PoW,因为毕竟那个是现在 10 年 battle tested 唯一的成功范例。PoS 还需要时间考验。而且 Libra 出来以后,很多 PoS 的项目面临更大的挑战了。

Q8. blockdag 是怎么防 51% 攻击,防双花的呢?

blockDAG 是中本聪共识,所以,防 51% 攻击的思路和比特币网络是一致的,就是需要防止常见的算力攻击的手段,比如 selfish mining 等;实际上,由于比特币的最长链胜出策略,实际情况是有很多条链在挖,所以胜出的最长链通常不需要 51% 算力就可以胜出其他的「次长链」,比如 37%-40%,那么 blockDAG 由于容纳了所有的合法「次长链」,所以对抗这种攻击 blockDAG 比比特币更有效。

Q9. 什么叫合法的次长链?就是出现了分叉的区块也是可以接受的?

A:合法的「次长链」就是说大家都在挖自己的「私链」,然后一起公布,那么最长的那个胜出。

Q:那还是没能解决 51 攻击和双花的问题呀!依旧是最长链。

A:我刚才说的这些都是比特币的算力攻击的情况。

Q:那 blockdag 是怎么解决呢?

A:blockDAG 随时在给这些「分叉」的区块「称重」,我们叫「染色」,拓扑排序,所以可以很高效地解决这个问题 . 我重复强调一下,51% 攻击本身不是一个要解决的问题,这就是中本聪共识的安全「阀门」,失守这个阀门,就会失去链的安全性。

Q:同意 51% 攻击本身不是 bug, 但是会对普通投资者和交易所等带来经济损失。如果再 block a 里的一笔交易转到 M 账户,在分叉的 block a 里同样一笔交易转到 N 账户,那怎么解决?

A:实际情况是,由于最长链胜出,selfish mining 很多算力攻击根本不需要 51% 算力就能成功,这是可以优化的,blockDAG 就是针对这种攻击的一个优化算法结构 , 双花问题用排序解决,排在前面的胜出。

Q:分叉的这些区块到底是承认,还是不承认?承认的话怎么记录区块 A 和区块 A’?

A:这些问题都涉及到算法的细节,之后我们会更深入的分享 Soteria DAG 的算法,这些问题就容易明白了。根据 Soteria DAG 的算法,分叉的区块都承认,所以叫「包容性」出块,我们给所有分叉的区块「染色」,然后排序,染成「蓝色」的是「合法」区块,排在前面,染成「红色」的是「可疑」区块,排在后面,在一定情况下(比如很多代以前的)会被丢弃。