找回密码
 立即注册

扫一扫,登录网站

首页 自媒体 查看内容
  • 1098
  • 0
  • 分享到

对话 Conflux: Layer1 还有很大提升空间,公链还没到需要 trade-off 的时候

2019-8-29 00:01

来源: chengpishu

Conflux 办公室在五道口,距离清华大学很近。这是一个有很强学术背景的公链团队。创始人龙凡博士 5 岁开始学编程,获得过两块国际信息学奥赛(IOI)金牌,保送清华大学,在麻省理工学院拿到博士学位后,于多伦多大学担任助理教授。华人唯一图灵奖得主姚期智教授是Conflux的首席科学家。团队中研究核心协议的技术人员,几乎也全是清一色的竞赛保送学霸,加上“清华姚班”的标签,这个五十多人的团队无论在哪里都显得有点特别。

同 Algorand 一样,Conflux 也是先有论文再开始筹备的项目。可能是因为这种学术基因,团队很看重提出一种新的技术方案时有没有严格的数学证明。Conflux 负责理论研究工作的研究总监杨光博士告诉橙皮书,对于公链这样的涉及到密码学和安全性的项目,学术背景的团队通常会更倾向于先把理论上的东西搞清楚,证明方案在数学上是完备可靠的再动手做。这个证明过程最直观的产出就是相应的学术论文。

在看重技术理论的同时,龙凡也对鱼龙混杂的行业现状感到无奈。他发现这个圈子充斥着大量的骗子、民科,很多时候谈技术是没有用的。以前常有人问 Conflux 和其它 DAG 项目的区别,龙凡起初会尝试小心地解释二者技术上的差异,当被问太多次之后,他更习惯直接说,区别就是“他们是错的,而我们是对的”。对错在币圈创业者眼里或许是一个很陌生的表达,在这里指的是技术方案在理论上是否可行。

在凶险的公链赛道里,竞争往往是全方位的。任何形式的市场,不管是公募、ICO 还是上交易所,对团队来说都是走入一个又一个搏杀的斗兽场,里面挤满了对风险一无所知又想一夜暴富的散户。这样的散户往往有一种奇怪的逻辑:既然你技术这么好,那你就拉盘给我看看。在这种逻辑下,币价下跌就是项目的原罪。市场表现一旦不好,散户的质疑就会扑面而来。

这也是为什么近期第三代公链集中上线却遭遇许多之前没有料想到的质疑。说白了,很多团队其实低估了市场的凶险。“教授币”从最初受到热烈追捧的概念,再到如今成为某种警告散户不要碰的标签,就是最好的证明。“学术基因”未来可能也会成为人们质疑 Conflux 的一个标签。不过 Conflux 团队之前已经公开承诺了绝不会进行公募,更不会和任何中心化交易所合作进行IXO。“谨慎”看起来是他们目前采取的最好的策略。

对于自己所选择的技术路线,以龙凡为首的 Conflux 则显得非常有自信。他们在社区建设上的思路也和其他团队不太一样。龙凡告诉橙皮书,Conflux 上线后,除了一些常规的动作,比如对 DAPP 开发者进行扶持外,还会尝试和政府机构展开一些合作,共同打造一个开放的开发平台。因为行业目前还远未发展成熟,政策方面仍有很多空白,Conflux 希望通过这个开发平台,为开发者和政府之间提供一个有效的沟通管道,“至少能让他们问一句什么东西可以做,什么不能做,这可能会是开发者非常重要的需求”。

事实上,学术基因不仅会影响团队做事的风格,也在一定程度上塑造着 Conflux 想达成的目标。“MIT 一所大学所拥有的 IP 地址数量和全中国一样多。为什么?因为美国是互联网游戏规则的制定者。将来区块链可能成为和互联网一样重要的东西,无论从国家战略层面还是其他层面,现在都是个很好的时机”,在北美读博士时,龙凡能明显感觉到,同样做一些研究,中国人想得到美国学术圈和社会的认可,其实并不容易。因此他身上有很强烈的证明自己的欲望。“We can beat them。”龙凡如是说。

当然,Conflux 自己也清楚,公链不仅仅是技术,更重要的是整个生态。龙凡拿操作系统举例子,“中国为什么不能设计自己的操作系统?我认识至少有四五十个人就可以干这事,因为做一个操作系统其实并不难,难的是生态,难的是做出一个安卓,上面能有那么多的资源和开发者。”

作为对比,现阶段的区块链生态更加不完善。在龙凡看来,它仍然只是一个大赌场:“核心原因在于,因为存在吞吐量的问题、预言机的问题、layer2 的问题等等,区块链还是一个被隔离开的独立的小生态,不能跟其它世界交互,所以我们只能玩一些无中生有的东西,比如赌博”。

要改变这样的现状,作为最重要的基础设施,公链首先需要突破的最大瓶颈是吞吐量。Conflux 希望成为让所有有价值的比特完成验证和交换的地方(where valuable bits are exchanged and validated ),这意味着需要把足够多的信息上链,也意味着需要通过扩容大幅度降低上链的成本。

Conflux 采用了不太一般的扩容思路。他们希望在 POW 的机制下鼓励矿工尽可能参与出块,通过节点并行出块来提高整个网络的吞吐量,然后再借助树图结构为所有区块确定出一个统一的顺序,以此确定所有交易的先后顺序并解决交易冲突的问题。这种通过改变账本结构来扩容的方案,更聚焦于共识算法本身的扩展,与行业里更常见的分层、分片、状态通道等扩容方案分属不同的派别。

“在保证安全性的前提下,layer1 的性能远没有做到极致。现有共识算法的效率,跟物理硬件所能达到的性能还有很大的差距。我们想先让共识算法充分使用硬件的计算能力、网络传输的速率,到达这个天花板之后,再去考虑 layer2、分片等扩容方案。而且,Conflux 本质上跟这些方案也没有冲突,它们都可以叠加在 Conflux 上面。”

除了希望把 layer1 的性能榨干之外,Conflux 使用树图方案的另一个原因是,分片这类技术在龙凡看来其实还很不成熟。“Sharding (分片)在历史上从来都只在没有攻击者和对手方的环境里出现过。大家做 sharding 的时候,最多只会假设某个数据库 down 掉了,无法响应,从来不会假设这里面还藏着一个恶意的攻击者。所以 ETH 2.0 想实现 sharding,这里面会有非常多的坑要踩,技术难度很大。这会是一件让人很恐惧的事。”

Conflux 希望在一点都不牺牲安全性的情况下扩容,同时提高共识算法的效率。杨光认为,区块链现在的性能其实还远没有到必须进行 trade-off 的时候,急于往上加 sharding 等方案只会引入不必要的复杂性。

这个观点很有意思。从17年以来,整个公链赛道发生了很多的变化。大家放弃了和不可能三角正面搏斗,纷纷选择尝试一些迂回的技术路线,包括分片、状态通道、在 layer2 上做更多的扩展等等。但 Conflux 的想法是,我们脑子里想的比脚上走的快太多了,需要后退一步,先把 layer1 的性能做到极致再说。技术的进展有时候比我们想象得要慢。

公链是一个技术与非技术因素双重叠加的行业。很多时候,先发优势所积攒的社区力量会带来额外的收益和反哺。我不知道 Conflux 这种方案最终是不是正确的,但他们对公链的问题有自己的思考,也给出了自己的答案。这篇文章,希望能把 Conflux 基于树图的技术方案介绍清楚,让更多人参与到这种不同思路的讨论中来。

1


   

从比特币和以太坊开始说起

众所周知,比特币确定主链的方法是选出最长的那一条,即最长链算法。比特币的所有分叉区块都会被视为废块,不影响对最长链的选择,其中交易不被计入交易历史,挖到废块的矿工也不会得到任何奖励。因此,投入到废块上的算力不能为系统增加任何安全性和吞吐量。

以太坊把出块时间从比特币的 10 分钟变成了 15 秒,这是一个巨大的提升,但也因为出块时间缩短,产生分叉块的数量大大增加。在这种情况下,继续选择最长链作为主链是不合适的,因此,以太坊采用了 GHOST 算法选择最重的一条链作为自己的主链。GHOST 是一种主链选择协议,遇到有分叉的情况会选择拥有最重子树的分支。

那么,最重链和最长链有什么区别呢?

简单点说,一个看区块的数量,一个看区块连起来的长度:

以太坊使用了一个变种的 GHOST 协议。在区块奖励上,被后续区块引用的分叉块,也就是“叔块”,也会给挖出这些叔块的矿工带来一定的奖励。这样一方面能让更多的算力为系统的安全性做出贡献,另一方面,也能解决因为大量分叉区块而带来的一些中心化和公平性的问题。GHOST 协议会让分叉区块尽量统一到一条主链上。

2


   

Conflux 并行出块的思路

以太坊虽然保留了对叔块的一点奖励,但叔块内的交易仍然是无效的,不被记录在链上。这部分吞吐量相当于被浪费了。

Conflux 采用了一个类似 GHOST 的方案(他们自己的算法称为 GHAST 算法)选择主链,也被称为“枢轴链”。不同的是,分叉区块会被 Conflux 视为是有效的,不仅挖这些分叉块的矿工能得到出块奖励,区块内的交易还会被记录到链上。这样相当于把分叉块上被浪费的吞吐量捡了回来。矿工不需要等待收到所有最新的区块就可以并行出块。

把分叉块捡回来需要解决的问题,就变成了分叉块和正常块上所有交易的排序问题。因为如果我们能把所有交易排出一个顺序,就能解决分叉产生交易冲突的问题,最终得到一个干净的账本。

2.1


   

排队的例子

从一个更高层次的角度来理解,Conflux 这种扩容思路其实很简单。

比特币需要等当前区块结束之后才能出下一个块。这就像在排一个队,所有人都拥挤在同一条队伍里。为了避免很多人一拥而上导致混乱,比特币选择通过调高 PoW 的目标难度限制来人的速度(即出块速度),因此这条队伍的速度注定是很慢的。

另外,最长链规则规定,分叉的队伍都是无效的,除非它们能排得比现在这条队伍更长。这样虽然保障了排队秩序的安全,但也损失了排队的效率。

Conflux 的做法是,允许所有人排成许多不同的队伍,随便分叉。假设同时有10个队伍在排队,只要我们最后能在这10个队伍里找出一种方式确定出每个人的先后顺序就可以了。

通过这种思路,可以鼓励矿工更积极地出块,不过分限制系统同一时刻出块的数量,从而充分利用带宽资源,提高整个系统的吞吐量。这样我们把一个扩容问题转变成了排序问题:当允许分叉块存在的时候,怎么确定所有区块的先后顺序?在10个队伍里,怎么确定谁先来后到?

答案就藏在树图结构里。

2.2


   

什么是树图结构

Conflux 的区块结构不是链式的,而是一个图,同时图中又包含一棵树。所以 Conflux 把它称为树图结构。

Conflux 的树图结构为每个区块引入了两种边,一条边叫父边,一条叫引用边。

所谓的“边”指的是区块的引用关系,一个块引用了另一个块就会建立一条边,用排队的例子来看,“边”就相当于把在你之前排队的人引用起来,以后通过这条边,我们就可以知道对方是排在你前面的。

Conflux 规定,每个区块有且只有一条父边。相当于一个矿工在打包一个新区块的时候,必须选择前面的某个区块作为自己的父亲,并且只能选择一个父亲,不能选择多个父亲。

除了父边,每个区块还必须把自己看到的其它分叉上未被引用的区块引用起来,作为引用边。引用边的作用是,说明在一个块加入的时候那些被引用的分叉块是排在自己前面的,表达一种先后顺序。每个区块可以有 0 或多条引用边。

如果只看父边,Conflux 整个区块结构就是一棵树。

如果同时看引用边和父边的话,整个结构就是一个图。

3


   

怎么确定顺序

弄清楚了 Conflux 的树图结构,接下来我们再来讨论,在分叉区块都被接受的情况下,系统是怎么确定这些区块的排序的。

排序非常重要,如果我们能为所有区块确定一个“一致”且“无法被篡改”的顺序,那么:

1、相当于我们可以根据顺序逐一确定交易的有效性,两笔交易如果冲突的话,后一笔就是无效的。2、双花攻击也是不可能的。除非攻击者可以创建一个更重的分支,而这需要的工作量超过了原有分支上包括分叉区块在内的所有区块——而不仅仅是其中一条最长链上的区块。因此,所有用于产生分叉区块的算力都为系统贡献了安全性。

所以问题变成了一个排序算法的问题。因为有了引用边和父边的存在,这个排序算法其实非常简单。

排序算法需要分两部分进行。

通过父边,我们能够根据最重链原则,先找出一条主链,Conflux 把这条主链叫作枢轴链。上面的图里,红色的区块就构成一条枢轴链。

枢轴链上的区块天然就能排出一个顺序:A -> C -> G -> J -> M -> N

其它黄色区块怎么排序呢?

这时候就要使用“引用边”所表达的先后顺序了。例如,在上图中,F 区块引用了 B 区块,这说明在 F 区块产生之前它就已经观察到了 B 区块的存在,所以 B 区块应该排在 F 之前。

这种情况很好理解,你可能会问:B 和 D 又该怎么排序呢?

这里需要再介绍一个新概念。Conflux 为枢轴链上的区块引入了一个叫 Epoch 的概念,类似于“时间段”、“阶段”的意思。

比如,A 区块是枢轴链上的第一个区块,所以 A 区块处于“阶段0”;C 区块处于枢轴链的第二个区块,所以 C 区块属于“阶段1”,以此类推。

对于枢轴链之外的区块,则根据第一个直接或间接引用它的枢轴链区块来判断它属于什么阶段。具体算法并不复杂,我们用一个实际例子走一遍就能清楚了,我们以“阶段3”为例:

首先,枢轴链上的区块 J 属于“阶段3”:

J 的引用块 F 因为之前还没有被排序,所以它也属于“阶段3”,同时根据引用边的关系,我们知道 F 应该排在 J 前面;

F 的父亲区块 C 已经被纳入“阶段2”了,所以不属于“阶段3”,但 F 的引用区块 B 还没有被排序,所以 B 也属于“阶段3”。并且,根据引用关系,B 排在 F 之前。

所以,“阶段3”内部区块的排序顺序是:B -> F -> J

也就是说,枢轴链区块的引用块,以及引用块的父块及其引用块,如果还没有被排序,那么都同属于同一阶段。这里还有一种例外的情况,就是同一阶段内,有两个引用块彼此无法确定先后顺序,那么这时候就采用哈希ID来排序。

总结起来,排序的时候:

1、先用枢轴链为不同阶段排出一个顺序,2、再为同一阶段内的区块进行排序。

利用这套算法,我们可以为上图中包括红色和黄色的所有区块进行一个确定的排序。你可以按照上面的步骤算一遍,看是否得出了相同的结果。

4


   

Conflux 方案的分析

不管什么样的区块链系统,任何区块只要产生了,都需要通过网络广播到各个节点进行同步。只要涉及到广播,网络的传输速率和负载能力就不可被忽略,因为在网络上传输数据是有瓶颈的。假设网络带宽是一个固定值,广播时传输的数据越大,速度就越慢。

所有广播的数据 = 真正有用的区块 + 分叉无效的区块 + 系统自身的开销

在 Conflux 系统里,分叉区块也是有效区块。Conflux 乐观地假设,分叉区块上的交易和主链上的交易大部分是不冲突的,所以保留全部区块理论上就能更有效的利用带宽。

当然,这种方案也并非完全没有问题。我们看看 Conflux 是怎么解决一些潜在问题的。

4.1


   

重复交易被打包的问题

分叉块内的交易可能是不冲突的,分叉块上的算力也是诚实算力,是好人在挖,但如果分叉区块内的交易重复了怎么办?也就是说,怎么解决多名诚实矿工重复打包同一笔交易的问题?显然,如果每个人打包的交易都是重复的,那么即使保留所有分叉区块,也难以达到增加吞吐量的目的。

对于这个问题,Conflux 通过使用一种混合策略,利用博弈机制,让矿工尽可能会为了利益最大化而去随机选择交易池里的交易进行打包。当交易池里的交易数量很多时(也是最需要提高吞吐量的时候),通过随机打包策略就可以极大地减少交易被重复打包的概率。如果交易池里只有一笔交易,那肯定每个矿工都只能打包这笔交易了,这样交易重复度就是最高的——实际上,这也是最不需要利用并行打包提高吞吐量的时候。

Conflux 经过理论测算得出的一个结论是,剔除掉重复交易的无效吞吐量,整套方案仍然能获得无重复交易的理想情况下 60% 以上的扩容效果。

4.2


   

Liveness 活性被攻击的问题

因为采用的是最重链作为主链,如果有一个攻击者通过选择性隐藏区块的方式让诚实节点看到的两条子链保持相近的重量,则诚实节点永远无法一致地选出一条枢轴链,更没法确认交易排序。尽管这不是双花攻击,但可以使整个系统陷入无法确认交易的不可用的状态。这种攻击也被称为 liveness 活性攻击。

Conflux 解决这个问题的方法是,通过改进 GHOST 算法,也就是采用前面提到的 GHAST 算法。这个算法在出现疑似攻击的异常的情况下,会切换成另一种模式,根据区块处在树图中的拓扑位置,来给这个区块打上不同的权重。简单来说,这种带权重的拓扑结构有着和比特币类似的安全性,通过更慢的出块速度和赋予每个块更高的权重来提高整个系统的安全性。直到诚实算力恢复集中后,GHAST 会再切换成原来的快速模式,以此防止活性攻击。

4.3


   

树图结构的开销

树图结构会保留很多区块的引用关系。当一个图非常大的时候,整个结构很复杂,要计算网络中的拓扑关系会有不菲的计算开销。Conflux 处理树图结构的时候怎么才能更高效呢?

以太坊采用修改过的 GHOST 算法,只算七层的关系,如果要算所有层的 GHOST,那么需要 O(N) 复杂度的开销,其中 N 是整条链上所有区块的数量。Conflux 采用了一个更高效率的新算法,能够把 GHAST 算法每一步添加区块的复杂度控制在 O (logN)内。如果感兴趣,可以去阅读 Conflux 相关的论文和资料。

4.4


   

激励机制的问题

比特币中,分叉链的攻击者需要消耗大量算力,一旦失败得不到任何奖励,因此攻击需要付出高额的成本。Conflux 网络里所有分叉区块都是有效的,尽管攻击者无法通过分叉来实现双花攻击,但攻击者如果可以从恶意增加的分叉区块中拿到区块奖励,这也会对系统造成一定的影响。比如说攻击者几乎不用承担损失就可以增加交易确认的时间,或者让整个树图结构复杂度提高很多,增加整个系统的开销。Conflux 怎么解决这个问题?

答案是通过激励机制去罚那些故意分叉的攻击者。在 Conflux 的主链选择协议下,攻击者如果要故意在分叉链上增加区块,那么他必须假装没有看到一些引用块、无视另一些已经出现的块,才能做到这一点。而在 Conflux 的设计中,区块奖励并不是固定的:一个区块“无视其他区块”的数量越多,它能获得的奖励就越少。通过这种经济上的惩罚,在 Conflux 中攻击者也必须要承担经济上的损失。

5


   

总结

Conflux 通过树图的结构,保留矿工消耗 POW 产生的分叉区块,从而提高系统的吞吐量,在保证安全性的前提下达到扩容的目的。整体思路看起来并不复杂,但在工程实现上,所有交易全局的排序、树图复杂拓扑结构的处理、区块激励的问题、怎么减少重复交易,有不少坑都需要有更深的技术理论加以解决。目前 Conflux 已经上线了测试网,感兴趣的朋友可以动手尝试下。

版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。
相关新闻
发表评论

请先 注册/登录 后参与评论

    回顶部