根據(jù)定義,主鏈?zhǔn)擎滊y度最大的的鏈(chain),所以,如何計(jì)算鏈難度(chain-diff)是關(guān)鍵。
鏈難度(chaindiff)
在xdag中,chaindiff的直接定義,是把chain上面所有block的diff直接累加起來。但是有特殊場(chǎng)景,當(dāng)一個(gè)chain在一個(gè)時(shí)間片中經(jīng)過了多個(gè)block,diff累加過程中,只累加當(dāng)前時(shí)間片中diff最大的那個(gè)block的diff值。
下面對(duì)常見的幾種情況舉例說明:
- 鏈上每個(gè)block都跨越時(shí)間片

這種是最簡(jiǎn)單的類型,每個(gè)block剛好跨越了時(shí)間片,chaindiff等于所有block難度之和。
chaindiff = t01 + t02 + t03 + t04。
- chain在單個(gè)時(shí)間片內(nèi)經(jīng)過多個(gè)block,最終跨越時(shí)間片。

這種場(chǎng)景,chaindiff在time frame3的時(shí)間片中累加的時(shí)候,只取這三個(gè)中diff最大的一個(gè),其他兩個(gè)會(huì)忽略。
chaindiff = t6 + maxdiff(t5, t4, t3) + t2 + t1。
因?yàn)閱蝹€(gè)周期中有大量交易,這個(gè)模式實(shí)際上是最常見的模式。
在實(shí)際構(gòu)造的過程中,主鏈上每個(gè)時(shí)間片中頂部的block會(huì)被判定會(huì)主塊,也就是說,main-chain只包含每個(gè)時(shí)間片中頂部那個(gè)block,盡管也會(huì)走過同時(shí)間片中其他block,但其他block在定義上不屬于main-chain,這個(gè)定義也在前一章特別說過了。那么根據(jù)定義,t5會(huì)被賦予挖礦獎(jiǎng)勵(lì)。
- chain在單個(gè)時(shí)間片內(nèi)經(jīng)過多個(gè)block,終結(jié)于時(shí)間片內(nèi)。

這種類型是前面一種類型的特例,計(jì)算方法是一樣的,只不過這個(gè)chain在time frame3中終結(jié)了,發(fā)生了某種分叉。
chaindiff = t6 + maxdiff(t5, t4, t3)
- chain直接跨過某個(gè)時(shí)間片

這種情況是第一種模式的特例,系統(tǒng)允許這種場(chǎng)景存在,比如系統(tǒng)重啟過程中。
主鏈決策
在區(qū)塊鏈系統(tǒng)中,主鏈?zhǔn)莿?dòng)態(tài)決策的,主鏈上的交易是有效交易,非主鏈上的交易作廢或者無效,xdag中也是類似的,只不過xdag擴(kuò)展了這種定義,不止主鏈上有效,主鏈直接和間接關(guān)聯(lián)的圖上的block也都算有效,這也是為什么xdag能大幅度的提高tps的原因。
- 主鏈選擇

假設(shè)機(jī)器1中的結(jié)點(diǎn)圖如上所示,t1/t2/t3是最新的三個(gè)頂點(diǎn),從這三個(gè)頂點(diǎn)出發(fā)向下,分別計(jì)算各個(gè)路徑上block難度之和(注意前面說的計(jì)算規(guī)則)后,發(fā)現(xiàn)從t1開始走藍(lán)色路徑的diff和最大,則藍(lán)色路徑被選為了主鏈,被主鏈直接或間接引用的block都為有效交易(圖中綠色block)。
- 主鏈切換

隨著網(wǎng)絡(luò)block不斷互相同步,在隨后的某個(gè)時(shí)間,假設(shè)機(jī)器2存儲(chǔ)中的結(jié)點(diǎn)與機(jī)器1略有不同,經(jīng)過一番計(jì)算后,發(fā)現(xiàn)從t2開始的這條紅色鏈條上難度和最大,則機(jī)器2會(huì)判定t2開始的這條紅色鏈才是主鏈。
在新的主鏈下,
黃色為先前無效,新規(guī)則下有效block。
紫色為新老主鏈交叉部分,繼續(xù)有效。
綠色為老主鏈有效,新主鏈下無效block,則被判定無效,其中所有交易被回退。
直接與間接引用

假設(shè)圖中藍(lán)色路徑為主鏈,則有效block為:
- 藍(lán)色,主鏈路徑上的block。
- 紅色,主鏈路徑直接引用的block。
- 黃色,主鏈路徑間接引用block。