近日,TokenGazer 邀请了 Conflux CTO 伍鸣博士进行了技术探讨,伍博士枚举了详尽的例子,以帮助提问者理解。回答要点如下:

  • Conflux 是和比特币、以太坊类似的 PoW 公链,但允许一个区块引用多个区块作为祖先,从而构成一个 DAG;
  • Conflux 通过设计安全的拓扑排序算法,解决「交易顺序问题」;
  • 和比特币、以太坊相比,Conflux 可以在不牺牲去中心化和安全性的情况下,提高吞吐率。

本期项目:Conflux

活动时间:12 月 27 日 20:00

Conflux:可扩容、可延展、且安全的区块链,可用于打造世界级的去中心化应用程序。

以下为互动文字整理版:

01 TokenGazer 研究员 旭蝈蝈:Conflux 使用的有向无环图(DAG)跟比特币、以太坊的区块链结构有什么具体不同,优势是什么?

伍鸣 @Conflux:

这个问题是一个非常本质的问题,我愿意展开来谈一谈,这要从比特币的效率局限性谈起。根据一些论文,在比特币协议中,无论如何调整出块速度和区块大小这两个参数,速度与安全不可兼得。

这其中的原理是什么呢?我们想象一下,如果两个区块都是由诚实节点生成的,但是因为网络延迟,他们在生成的时候互相没有看到对方,那么在两个不同的分叉上,那么它们就会在不同的分叉上。一旦进入到不同的分叉上,二者便是你死我活的竞争关系,最终有一个区块被丢弃。诚实节点的区块被丢弃,损失的诚实节点的总算力。

分叉越多,好人区块的内讧越多,坏人的攻击门槛越低,比特币越不安全。为了安全,比特币必须维持一个低的吞吐量。

Conflux 使用有向无环图结构(DAG),我们允许每个区块引用多个区块作为自己的祖先区块,可以避免好人之间的这种竞争,从而打破比特币的矛盾,在提高效率的前提下不牺牲安全性。

以太坊与比特币相比特殊一些,以太坊其实有了 DAG 的雏形。关注区块链技术的朋友可能知道,以太坊中有叔块的概念。一些区块选一个父块,几个叔块,看似也构成了一个 DAG。
但是,以太坊的叔块只是为了给没有进主链的区块发一点鼓励安慰的系统奖励,叔块中的交易依然会被丢弃。如果将以太坊的出块速度提高,导致分叉过多,其有效吞吐率依然很低。

下面有几个图可以更好地展示优势,这张图展示了 4MB 大小区块下不同出块时间下被保留区块的数量。Conflux 保留了所有区块,比特币和 Ghost (以太坊协议改自这个协议)则由于分叉丢失了大量的区块。

对话 Conflux CTO 伍鸣:DAG+拓扑排序算法为什么可以突破不可能三角

总结一下:

① Conflux 是和比特币、以太坊类似的 PoW 公链,但允许一个区块引用多个区块作为祖先,从而构成一个 DAG。

② 比特币、以太坊的实际吞吐率很低,即使你尝试减少出块间隔或者增加区块大小,也无法得到一个安全性和效率兼得的公链。

③ 和比特币、以太坊相比,Conflux 可以在不牺牲去中心化和安全性的情况下,提高吞吐率。

02 TokenGazer 研究员 旭蝈蝈:基于 DAG 的智能合约会遇到「交易顺序问题」,比如谁先预定到某航班的座位跟交易顺序有关,Conflux 有没有比较好的设计解决这个问题?

伍鸣 @Conflux:

「预定航班座位」是一个很好的例子,从这个例子可以看到,在 DAG 中,如果不同的交易需要竞争合约中的资源(比如航班座位),区块排序与交易排序是一件十分必要的事情。这将决定谁的交易在前,谁的交易在后,谁最终得到了这个座位。

也是因为这一点,我们需要对 DAG 中的区块设计一个拓扑排序算法,将所有区块排一个顺序,然后根据区块的顺序决定交易的执行顺序。而且这个拓扑排序需要满足以下几点:

  • 一致性:不同矿工节点排的结果是一致的。如果一些矿工告诉你选座成功,一些矿工告诉你选座失败,你就会很困惑。
  • 安全性(不可更改性):排序结果不能被坏人的攻击更改。比如说,你选了一个座位,5 分钟后,这笔交易确认成功了,你很开心。三天后你登机的时候,发现排序发生了更改,你的座位没了。这也是很严重的公链安全事故。

Conflux 设计了一个满足上述要求的安全拓扑排序算法,算法输入一个 DAG,输出 DAG 中区块的一个拓扑排序。每个矿工(全节点)将本地机器的 DAG 上输入这个算法,就可以得到区块排序,根据这个结果,就知道了应该先执行谁,后执行谁。

「一致性与安全性」可能比较抽象,我们举个例子。今天,这个 DAG 中有 10000 个区块,9900 个区块里的交易已经被确认。明天,这个 DAG 有 20000 个区块,那么把明天的 DAG 和今天的 DAG 分别作为算法的输入,前 9900 个区块应当是一样的,哪怕有坏人在做双花攻击。这就是一致性与安全性。

Conflux 的算法设计可以保证一致性与安全性。关于这个排序算法具体是如何设计的,感兴趣的伙伴们可以阅读我们的论文或者科普文章。

总而言之,Conflux 通过设计安全的拓扑排序算法,解决「交易顺序问题」。

03 TokenGazer 研究员 旭蝈蝈:如何解决不同区块内的打包交易的交易冲突问题,了解到当交易冲突时时间稍后的冲突交易会被「discard」掉,这个被丢弃的交易是怎样和有效交易进行状态区分的?

伍鸣 @Conflux:

在问题 2 中我们已经解决了交易顺序问题。那么当所有节点对 DAG 得到一个一致的区块排序时,只要遵循一个规则:「发生重复或冲突者,排序居后的交易无效」,就可以判断哪些交易是无效的交易,然后自己在本地标记一下就行。区块排序的一致可以保证「无效交易标记」的一致。

额外说一点,由于每笔交易是否有效是每个矿工自己做出的判断,而没有持久化写在区块中,所以无法实现像比特币那样,通过 Merkle Path 向轻节点证明一个交易在区块中,因为你无法通过 Merkle Path 知道它是有效的还是无效的。但是,Conflux 采用账本模型,每个区块头会存储当前账本状态的哈希值。通过这个哈希值,很容易向轻节点证明指定地址的余额等。

总结一下:

① 被丢弃的交易由全节点本地进行标记,一致的排序结果保证一致的标记。

② 基于这一点,Conflux 轻节点的交易验证与比特币有所不同。

TokenGazer 研究员 旭蝈蝈:那无效的交易会被追加一个状态么,或者说我在区块浏览器只查看交易哈希时,能否看出这两笔交易(有效和无效)的区别 ?
伍鸣 @Conflux:

交易是否无效可以看成是交易执行的某种结果,这种结果状态是可以记录在区块中的,这样,在区块浏览器中就可以查到这种状态。

TokenGazer 研究员 旭蝈蝈:这个交易执行结果是标记在本地还是在链上?
伍鸣 @Conflux:

标记是在本地,但链上也会有所提现。之前的回答中其实提到,每个区块头会存储当前账本状态的哈希值,通过主链区块的账本状态,会体现历史区块中每笔交易是否有效。

04 TokenGazer HD:追问一下,跟其他链不同,无效的交易不会记录在链上,Conflux 是需要对无效交易本地打标,这是否可能对不了解的用户有学习成本,以及利用这一点来混淆用户的可能 ?

伍鸣 @Conflux:

通过浏览器提供标记,可以帮助普通用户判断一笔交易是否有效。

05 TokenGazer 研究员 旭蝈蝈:DAG 结构中不存在「叔块」问题,网络中是否会存在过多的空块或者区块中的交易重复导致区块数据冗余,从而对节点的网络和硬件配置带来压力?

伍鸣 @Conflux:

首先,DAG 中每一个区块都是需要消耗算力才能生成的,所以网络中各种区块,无论是正常的区块还是空块,其数量受挖矿难度的制约,是有一个上界的。所以,对节点的网络和硬件不会带来额外的压力。

其次,空块或重复交易过多确实会影响利用率和实际的交易吞吐率。所以我们需要为矿工们设计一个激励兼容(Incentive Compatible)的交易选择算法,从交易等待池中,根据交易费加权随机抽取交易,以最大限度避免交易重复。

TokenGazer HD:这个算法是否已经完成?
伍鸣 @Conflux:

这个算法的设计和理论分析已经有了。现在在我们的系统中正在开发实现,还没有完成。

TokenGazer 社区成员 Feng Liu:理论基础就是姚教授的新论文?
伍鸣 @Conflux:

姚老师的论文是基于比特币进行分析的,对我们这个算法的理论基础有一定的启发。

06 TokenGazer 研究员 旭蝈蝈:项目是否会进行预挖?主网启动后矿工奖励是否会有变化,枢轴链和分叉链上的区块的区块奖励是否一样。

伍鸣 @Conflux:

有预挖,每个区块的系统奖励开始比较多,时间长了以后会逐渐减少。

在 Conflux 中,每个区块的系统奖励不是一个固定值,是根据一个规则算出来的。枢轴链和分叉链的区块奖励计算规则是一致的。

为了介绍规则,先讲一个概念:「光锥外区块」(anticone-block)。在 DAG 中,如果两个区块之间没有一条路径,这两个区块的互为对方的「光锥外区块」, 比如在下图中,B 和 C 互为对方的光锥外区块。

对话 Conflux CTO 伍鸣:DAG+拓扑排序算法为什么可以突破不可能三角

一个区块的系统奖励会与它的光锥外区块的数量有关,光锥外区块越多,其奖励越少。如此设计,是为了鼓励每个矿工遵守选择引用边的协议。

TokenGazer 研究员 旭蝈蝈:项目预挖的比例是多少呢。还有区块减少的规则(比如比特币每隔 4 年减半)?
伍鸣 @Conflux:

这些具体的数据会在我们主网上线之前公布,大家可以关注我们的公众号。

TokenGazer 研究员 旭蝈蝈:这个设计的会让区块内的奖励会有不同,矿工要额外技术要挖快的预计奖励对吧?那这样的话,币的数量是否会有不确定性?因为区块的奖励不确定,导致一年之后挖的币的数量不可控?
伍鸣 @Conflux:

这个设计会让区块内的奖励有不同,但是,在正常情况下,这个差异不会很大。我们希望用这个差异,来鼓励矿工们遵守协议。

07 TokenGazer 研究员 旭蝈蝈:Conflux 预计主网上线是什么时间,tps 能达到多少?

伍鸣 @Conflux:

我们的测试网预计在明年 3 月份上线,主网上线预计在明年 Q3 或 Q4。

来源链接:mp.weixin.qq.com