Byteball的主干链选择:
Byteball采用了向无环图(DAG)技术,虽然从表面形态上看和Bitcoin链式结构有着明显的差别,但事实上,「交易定序过程」依赖于「主链生成算法」,DAG账本的轴心仍然是链式结构。在DAG账本中,由于顶点V是通过自身引用的父顶点表达了(确认了)对账本历史的看法,因此求解某一DAG顶点V对应的主链MC,就得先求解V的父顶点Vp1、Vp2、Vp3...所对应的主链MC1、MC2、MC3...。这种求解依赖类似于数学归纳法和递归降解,若想较为透彻地理解DAG账本的主链生成算法,回顾一下数学归纳法和递归降解的思想是有所裨益的。
数学归纳法的核心思想是:
以自然数为例,若需证明某个范式F(N)成立,可以分3步来做:
第1步,证明:若F(N-1)成立,可推导出F(N)成立;
第2步,验证:F(1)成立,F(2)成立,F(3)成立...;
第3步,结论:对于任意的N,有F(N)成立。
即:先假设范式F(N-1)是成立的,在这个假设基础上,推导出F(N)是成立的;所以若F(1)成立则可推导出F(2)成立,F(2)成立就又可推导F(3)成立而,而F(1)、F(2)的成立是显而易见、可以通过事实验证的,因此依次类推,则后续的任意N都有F(N)成立。
递归降解的核心思想是:
若N是一个相对较大的数,求解F(N),则需先解出F(N-1),求解出F(N-1)后,通过一定量的计算就能求解出F(N),只要能求出该问题直接依赖的较小规模的问题,则该问题就能被解决;
而对于一个较小的X(比如1、2、3...),F (X)是显而易见有具体解法的;
因此,既然小问题F(X)可以被求解,那么就可以解出F(X+1),依次类推,就能求解出较大规模的问题F(N)。
举例:
创世顶点是G,然后产生了三笔交易,对应DAG顶点V1、V2、V3,这三者没有选择的余地,因为他们只看见了创世顶点G,所以只能引用G作为父节点,而且因为只有一个父节点,因此其对应的MC是确定的,类似于在数学归纳法或递归降解中,F(1)的解是确定的;
接着又产生了两笔交易,分别对应V4和V5,V4看见了V1和V2,V5看见了V2和V3,这是就需要根据明确的算法选择出一个最优父节点即可解出顶点V对应的MC,比如V5选择了V2作为最优父节点,也就继承并扩展了V2对应的MC;
接着又产生了一笔交易,对应V6,它看见了V1和V5,并通过明确的算法选择出了V5作为最优父节点,也就继承并扩展了V5对应的MC;
![](https://img.haomeiwen.com/i11279453/28d9bd41929375ef.jpg)
接着又发生了三笔交易,分别对应V7、V8、V9,其中V9是最后产生的,因为其引用了V7、V8。三笔交易都通过明确的算法,选择出了最优父节点,表达了(确认了)对交易历史的看法。
![](https://img.haomeiwen.com/i11279453/ae62ae362ba748ea.jpg)
每发生一笔新的交易,该交易的MC计算都依赖于其父节点的MC,可见这种计算方法和数学归纳法以及递归降级思想是多么相似。若只保留最优父节点引用指针,可得到图3:
![](https://img.haomeiwen.com/i11279453/1a52f551bedea620.jpg)
对图3进行整理,可以明显得图4所示的最优树:
![](https://img.haomeiwen.com/i11279453/a692186c6379dc13.jpg)
假定在这个树的各个分支中,{G、2、5、7}分支包含了最多的「由不同的见证人节点产生的交易」,那么{G、2、5、7}就形成了整个DAG账本的MC。根据MCI定序规则,目前的整个账本的交易全排序为:G、2、3、5、1、4、{7, 6, 8}、9;由于V7、V6、V8三个顶点之间无法找到顺序关系,所以暂时无法定序,需要等待一段时间后被见证人节点产生的交易所引用后,即可根据MCI进行定序。
回过头再思考一下,某一顶点V引了多个父节点,最优父节点选择算法是按照什么规则选择出最优父节点的呢?可参考后续文章。
网友评论