摘要:安全性不可更改性排序结果不能被坏人的攻击更改。这也是很严重的公链安全事故。总而言之,通过设计安全的拓扑排序算法,解决交易顺序问题。区块排序的一致可以保证无效交易标记的一致。枢轴链和分叉链的区块奖励计算规则是一致的。
12月27日,Conflux受邀参与TokenGazer举办的在线问答活动,Conflux CTO伍鸣博士与参与活动的百余名研究员进行了深度问答、科学辨析。此次活动让大家深刻的了解到Conflux的技术优势和发展潜力,也让更多人对Conflux的未来发展坚定了积极的信念。
(以下为此次活动的文字整理版)
问题1:Conflux使用的有向无环图(DAG)跟比特币、以太坊的区块链结构有什么具体不同,优势是什么?伍鸣@Conflux: 这个问题是一个非常本质的问题,我愿意展开来谈一谈,这要从比特币的效率局限性谈起。根据一些论文,在比特币协议中,无论如何调整出块速度和区块大小这两个参数,速度与安全不可兼得。
这其中的原理是什么呢?我们想象一下,如果两个区块都是由诚实节点生成的,但是因为网络延迟,他们在生成的时候互相没有看到对方,那么在两个不同的分叉上,那么它们就会在不同的分叉上。一旦进入到不同的分叉上,二者便是你死我活的竞争关系,最终有一个区块被丢弃。诚实节点的区块被丢弃,损失的诚实节点的总算力。
分叉越多,好人区块的内讧越多,坏人的攻击门槛越低,比特币越不安全。为了安全,比特币必须维持一个低的吞吐量。
Conflux使用有向无环图结构 (DAG),我们允许每个区块引用多个区块作为自己的祖先区块,可以避免好人之间的这种竞争,从而打破比特币的矛盾,在提高效率的前提下不牺牲安全性。
以太坊与比特币相比特殊一些,以太坊其实有了DAG的雏形。关注区块链技术的朋友可能知道,以太坊中有叔块的概念。一些区块选一个父块,几个叔块,看似也构成了一个DAG。但是,以太坊的叔块只是为了给没有进主链的区块发一点鼓励安慰的系统奖励,叔块中的交易依然会被丢弃。如果将以太坊的出块速度提高,导致分叉过多,其有效吞吐率依然很低。
下面有图可以更好地展示优势,这张图展示了4MB大小区块下不同出块时间下被保留区块的数量。Conflux保留了所有区块,比特币和Ghost (以太坊协议改自这个协议) 则由于分叉丢失了大量的区块。
总结一下:
①Conflux是和比特币、以太坊类似的PoW公链,但允许一个区块引用多个区块作为祖先,从而构成一个DAG。
②比特币、以太坊的实际吞吐率很低,即使你尝试减少出块间隔或者增加区块大小,也无法得到一个安全性和效率兼得的公链。
③和比特币、以太坊相比,Conflux可以在不牺牲去中心化和安全性的情况下,提高吞吐率。
问题2:基于DAG的智能合约会遇到“交易顺序问题”,比如谁先预定到某航班的座位跟交易顺序有关,Conflux有没有比较好的设计解决这个问题?伍鸣@Conflux: “预定航班座位”是一个很好的例子,从这个例子可以看到,在DAG中,如果不同的交易需要竞争合约中的资源(比如航班座位),区块排序与交易排序是一件十分必要的事情。这将决定谁的交易在前,谁的交易在后,谁最终得到了这个座位。
也是因为这一点,我们需要对DAG中的区块设计一个拓扑排序算法,将所有区块排一个顺序,然后根据区块的顺序决定交易的执行顺序。而且这个拓扑排序需要满足以下几点:
· 一致性:不同矿工节点排的结果是一致的。如果一些矿工告诉你选座成功,一些矿工告诉你选座失败,你就会很困惑。
· 安全性(不可更改性):排序结果不能被坏人的攻击更改。比如说,你选了一个座位,5分钟后,这笔交易确认成功了,你很开心。三天后你登机的时候,发现排序发生了更改,你的座位没了。这也是很严重的公链安全事故。
Conflux设计了一个满足上述要求的安全拓扑排序算法,算法输入一个DAG,输出DAG中区块的一个拓扑排序。每个矿工(全节点)将本地机器的DAG上输入这个算法,就可以得到区块排序,根据这个结果,就知道了应该先执行谁,后执行谁。
“一致性与安全性”可能比较抽象,我们举个例子。今天,这个DAG中有10000个区块,9900个区块里的交易已经被确认。明天,这个DAG有20000 个区块,那么把明天的DAG和今天的DAG分别作为算法的输入,前9900个区块应当是一样的,哪怕有坏人在做双花攻击。这就是一致性与安全性。
Conflux 的算法设计可以保证一致性与安全性。关于这个排序算法具体是如何设计的,感兴趣的伙伴们可以阅读我们的论文或者科普文章。
总而言之,Conflux通过设计安全的拓扑排序算法,解决“交易顺序问题”。
问题3:如何解决不同区块内的打包交易的交易冲突问题,了解到当交易冲突时时间稍后的冲突交易会被“discard”掉,这个被丢弃的交易是怎样和有效交易进行状态区分的?伍鸣@Conflux: 在问题2中,我们已经解决了交易顺序问题。那么当所有节点对DAG得到一个一致的区块排序时,只要遵循一个规则:“发生重复或冲突者,排序居后的交易无效”,就可以判断哪些交易是无效的交易,然后自己在本地标记一下就行。区块排序的一致可以保证“无效交易标记”的一致。
额外说一点,由于每笔交易是否有效是每个矿工自己做出的判断,而没有持久化写在区块中,所以无法实现像比特币那样,通过Merkle Path向轻节点证明一个交易在区块中,因为你无法通过Merkle Path知道它是有效的还是无效的。但是,Conflux采用账本模型,每个区块头会存储当前账本状态的哈希值。通过这个哈希值,很容易向轻节点证明指定地址的余额等。
总结一下:
①被丢弃的交易由全节点本地进行标记,一致的排序结果保证一致的标记。
②基于这一点,Conflux轻节点的交易验证与比特币有所不同。
问题4:那无效的交易会被追加一个状态么,或者说我在区块浏览器只查看交易哈希时,能否看出这两笔交易(有效和无效)的区别?伍鸣@Conflux: 交易是否无效可以看成是交易执行的某种结果,这种结果状态是可以记录在区块中的,这样,在区块浏览器中就可以查到这种状态。
问题5:这个交易执行结果是标记在本地还是在链上?伍鸣@Conflux: 标记是在本地,但链上也会有所提现。之前的回答中其实提到,每个区块头会存储当前账本状态的哈希值,通过主链区块的账本状态,会体现历史区块中每笔交易是否有效。
问题6:跟其他链不同,无效的交易不会记录在链上,Conflux是需要对无效交易本地打标,这是否可能对不了解的用户有学习成本,以及利用这一点来混淆用户的可能?伍鸣@Conflux: 通过浏览器提供标记,可以帮助普通用户判断一笔交易是否有效。
问题7: DAG结构中不存在“叔块”问题,网络中是否会存在过多的空块或者区块中的交易重复导致区块数据冗余,从而对节点的网络和硬件配置带来压力?伍鸣@Conflux: 首先,DAG中每一个区块都是需要消耗算力才能生成的,所以网络中各种区块,无论是正常的区块还是空块,其数量受挖矿难度的制约,是有一个上界的。所以,对节点的网络和硬件不会带来额外的压力。
其次,空块或重复交易过多确实会影响利用率和实际的交易吞吐率。所以我们需要为矿工们设计一个交易选择算法,从交易等待池中,根据交易费加权随机抽取交易,以最大限度避免交易重复。这个算法的设计应当考虑激励兼容性 (Incentive Compatible),以从经济激励上鼓励矿工遵守这个算法。
问题8: 这个算法是否已经完成?伍鸣@Conflux: 这个算法的设计和理论分析已经有了,现在在我们的系统中开发实现,还没有完成。
问题9:理论基础就是姚教授的新论文?伍鸣@Conflux: 姚老师的论文是基于比特币进行分析的,对我们这个算法的理论基础有一定的启发。
问题10:项目是否会进行预挖?主网启动后矿工奖励是否会有变化,枢轴链和分叉链上的区块的区块奖励是否一样。伍鸣@Conflux: 和以太坊一样,创始块会分配一定比例的代币。每个区块的基础系统奖励开始比较多,时间长了以后会逐渐减少。
在 Conflux 中,每个区块的系统奖励不是一个固定值,是根据一个规则算出来的。枢轴链和分叉链的区块奖励计算规则是一致的。
(小编注释:在介绍这个规则之前,我们先来考虑一下一种情形。在Conflux 规则里,每个新的区块应该选择一些引用边,使所有已经存在的区块成为它的祖先。(具体的选边规则参见我们的文章)。但是一个坏人可能会出于某种目的,在挖出一个新的区块时,假装没收到或没看见一些区块,以获取更多的交易费。我们就要惩罚坏人这种行为,假装没看到的区块越多,这个区块的区块奖励越少。)
如果要具体地描述这个规则,就要先讲一个概念:“光锥外区块”(anticone-block)。什么是“光锥外区块”呢?在DAG中,如果两个区块之间没有一条路径,这两个区块的互为对方的 “光锥外区块”, 比如在下图中,B和C互为对方的光锥外区块。
一个区块的系统奖励会与基础系统奖励和它的光锥外区块的数量有关,光锥外区块越多,其奖励越少。(小编注释:当坏人挖出一个新区块时,那些假装没收到没看见的区块,都会成为新区块的“光锥外区块”。)如此设计,是为了鼓励每个矿工遵守选择引用边的协议。
问题11:项目预挖的比例是多少呢。还有区块减少的规则(比如比特币每隔4年减半)?伍鸣@Conflux: 这些具体的数据会在我们主网上线之前公布,大家可以关注我们的公众号。
问题12:这个设计的会让区块内的奖励会有不同,矿工要额外技术要挖快的预计奖励对吧?那这样的话,币的数量是否会有不确定性?因为区块的奖励不确定,导致一年之后挖的币的数量不可控?伍鸣@Conflux: 这个设计会让区块内的奖励有不同,但是,在正常情况下,这个差异不会很大。我们希望用这个差异,来鼓励矿工们遵守协议。
问题13:Conflux预计主网上线是什么时间,TPS能达到多少。伍鸣@Conflux: 我们的测试网预计在明年3月份上线,主网上线预计在明年Q3或Q4。
---
小编:
在这次在线问答中,我们发现很多关心区块链的小伙伴对奖励机制和挖矿规则很感兴趣,我们会在后期特别推出一篇关于此话题的技术文章,欢迎小伙伴们关注我们的公众号来随时掌握更新状态!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/11960.html
摘要:安全性不可更改性排序结果不能被坏人的攻击更改。这也是很严重的公链安全事故。总而言之,通过设计安全的拓扑排序算法,解决交易顺序问题。区块排序的一致可以保证无效交易标记的一致。枢轴链和分叉链的区块奖励计算规则是一致的。 showImg(https://segmentfault.com/img/remote/1460000017710155?w=893&h=380); 12月27日,Conf...
摘要:安全性不可更改性排序结果不能被坏人的攻击更改。这也是很严重的公链安全事故。总而言之,通过设计安全的拓扑排序算法,解决交易顺序问题。区块排序的一致可以保证无效交易标记的一致。枢轴链和分叉链的区块奖励计算规则是一致的。 showImg(https://segmentfault.com/img/remote/1460000017710155?w=893&h=380); 12月27日,Conf...
摘要:第二十二期掘金团队请来了进阶解密作者刘望舒做了为期三天的活动活动已结束。我们在此精选了一些来自用户的提问及刘望舒的回答。提醒本期分布式微服务主题的正在进行,欢迎前去提问,传送门关于刘望舒进阶之光进阶解密的作者,安卓巴士等技术大会特邀讲师。第二十二期 AMA 掘金团队请来了《Android进阶解密》作者-- 刘望舒做了为期三天的 Ask Me Anything (AMA) 活动(活动已结束)。...
阅读 701·2021-11-24 10:30
阅读 1231·2021-09-24 09:48
阅读 3058·2021-09-24 09:47
阅读 3557·2019-08-29 17:11
阅读 2859·2019-08-29 15:38
阅读 2254·2019-08-29 11:03
阅读 3577·2019-08-26 12:15
阅读 990·2019-08-26 10:45