XDAG技术详解3-主链

根据定义,主链是链难度最大的的链(chain),所以,如何计算链难度(chain-diff)是关键。

链难度(chaindiff)

在xdag中,chaindiff的直接定义,是把chain上面所有block的diff直接累加起来。但是有特殊场景,当一个chain在一个时间片中经过了多个block,diff累加过程中,只累加当前时间片中diff最大的那个block的diff值。

下面对常见的几种情况举例说明:

  1. 链上每个block都跨越时间片
XDAG技术详解3-主链_第1张图片
image-20190930161954283.png

这种是最简单的类型,每个block刚好跨越了时间片,chaindiff等于所有block难度之和。

chaindiff = t01 + t02 + t03 + t04

  1. chain在单个时间片内经过多个block,最终跨越时间片。
XDAG技术详解3-主链_第2张图片
image-20190930163728748.png

这种场景,chaindiff在time frame3的时间片中累加的时候,只取这三个中diff最大的一个,其他两个会忽略。

chaindiff = t6 + maxdiff(t5, t4, t3) + t2 + t1

因为单个周期中有大量交易,这个模式实际上是最常见的模式。

在实际构造的过程中,主链上每个时间片中顶部的block会被判定会主块,也就是说,main-chain只包含每个时间片中顶部那个block,尽管也会走过同时间片中其他block,但其他block在定义上不属于main-chain,这个定义也在前一章特别说过了。那么根据定义,t5会被赋予挖矿奖励。

  1. chain在单个时间片内经过多个block,终结于时间片内。
XDAG技术详解3-主链_第3张图片
image-20190930165454508.png

这种类型是前面一种类型的特例,计算方法是一样的,只不过这个chain在time frame3中终结了,发生了某种分叉。

chaindiff = t6 + maxdiff(t5, t4, t3)

  1. chain直接跨过某个时间片
XDAG技术详解3-主链_第4张图片
image-20190930165817696.png

这种情况是第一种模式的特例,系统允许这种场景存在,比如系统重启过程中。

主链决策

在区块链系统中,主链是动态决策的,主链上的交易是有效交易,非主链上的交易作废或者无效,xdag中也是类似的,只不过xdag扩展了这种定义,不止主链上有效,主链直接和间接关联的图上的block也都算有效,这也是为什么xdag能大幅度的提高tps的原因。

  1. 主链选择
XDAG技术详解3-主链_第5张图片
image-20191003210657169.png

假设机器1中的结点图如上所示,t1/t2/t3是最新的三个顶点,从这三个顶点出发向下,分别计算各个路径上block难度之和(注意前面说的计算规则)后,发现从t1开始走蓝色路径的diff和最大,则蓝色路径被选为了主链,被主链直接或间接引用的block都为有效交易(图中绿色block)。

  1. 主链切换
XDAG技术详解3-主链_第6张图片
image-20191003211958699.png

随着网络block不断互相同步,在随后的某个时间,假设机器2存储中的结点与机器1略有不同,经过一番计算后,发现从t2开始的这条红色链条上难度和最大,则机器2会判定t2开始的这条红色链才是主链。

在新的主链下,

  1. 黄色为先前无效,新规则下有效block。

  2. 紫色为新老主链交叉部分,继续有效。

  3. 绿色为老主链有效,新主链下无效block,则被判定无效,其中所有交易被回退。

  4. 直接与间接引用

XDAG技术详解3-主链_第7张图片
image-20191003205908731.png

假设图中蓝色路径为主链,则有效block为:

  1. 蓝色,主链路径上的block。
  2. 红色,主链路径直接引用的block。
  3. 黄色,主链路径间接引用block。

你可能感兴趣的:(XDAG技术详解3-主链)