XDAG技术详解3-主链
XDAG技术详解3-主链
作者:社区成员Larry
根据定义,主链是链难度最大的的链(chain),所以,如何计算链难度(chain-diff)是关键。
链难度(chaindiff)
在xdag中,chaindiff的直接定义,是把chain上面所有block的diff直接累加起来。但是有特殊场景,当一个chain在一个时间片中经过了多个block,diff累加过程中,只累加当前时间片中diff最大的那个block的diff值。
下面对常见的几种情况举例说明:
- 链上每个block都跨越时间片
这种是最简单的类型,每个block刚好跨越了时间片,chaindiff等于所有block难度之和。
chaindiff = t01 + t02 + t03 + t04
。
- chain在单个时间片内经过多个block,最终跨越时间片。
这种场景,chaindiff在time frame3的时间片中累加的时候,只取这三个中diff最大的一个,其他两个会忽略。
chaindiff = t6 + maxdiff(t5, t4, t3) + t2 + t1
。
因为单个周期中有大量交易,这个模式实际上是最常见的模式。
在实际构造的过程中,主链上每个时间片中顶部的block会被判定会主块,也就是说,main-chain只包含每个时间片中顶部那个block,尽管也会走过同时间片中其他block,但其他block在定义上不属于main-chain,这个定义也在前一章特别说过了。那么根据定义,t5会被赋予挖矿奖励。
- chain在单个时间片内经过多个block,终结于时间片内。
这种类型是前面一种类型的特例,计算方法是一样的,只不过这个chain在time frame3中终结了,发生了某种分叉。
chaindiff = t6 + maxdiff(t5, t4, t3)
- chain直接跨过某个时间片
这种情况是第一种模式的特例,系统允许这种场景存在,比如系统重启过程中。
主链决策
在区块链系统中,主链是动态决策的,主链上的交易是有效交易,非主链上的交易作废或者无效,xdag中也是类似的,只不过xdag扩展了这种定义,不止主链上有效,主链直接和间接关联的图上的block也都算有效,这也是为什么xdag能大幅度的提高tps的原因。
- 主链选择
假设机器1中的结点图如上所示,t1/t2/t3是最新的三个顶点,从这三个顶点出发向下,分别计算各个路径上block难度之和(注意前面说的计算规则)后,发现从t1开始走蓝色路径的diff和最大,则蓝色路径被选为了主链,被主链直接或间接引用的block都为有效交易(图中绿色block)。
- 主链切换
随着网络block不断互相同步,在随后的某个时间,假设机器2存储中的结点与机器1略有不同,经过一番计算后,发现从t2开始的这条红色链条上难度和最大,则机器2会判定t2开始的这条红色链才是主链。
在新的主链下,
- 黄色为先前无效,新规则下有效block。
- 紫色为新老主链交叉部分,继续有效。
- 绿色为老主链有效,新主链下无效block,则被判定无效,其中所有交易被回退。
- 直接与间接引用
假设图中蓝色路径为主链,则有效block为:
- 蓝色,主链路径上的block。
- 红色,主链路径直接引用的block。
- 黄色,主链路径间接引用block。