如果采用基本的隨機游走算法,會導(dǎo)致新的交易批準老的交易而不被懲罰;而如果采用超權(quán)重算法的話,比如給不同的交易設(shè)置一個權(quán)值,又會造成新交易始終優(yōu)先批準高權(quán)值交易,很多權(quán)值較低的交易永遠也得不到確認。
一、DAG中的交易共識
目前交易的確認在StreamNet中主要有三種方式:
· 第一種方式:所有tip覆蓋到的公共節(jié)點是被完全確認的。舉一個例子,下圖中,TIp1引用或間接引用的交易為藍線條和黃線條覆蓋,而TIp2引用或間接引用的交易為黃線條覆蓋。那么被TIp1和TIp2共同覆蓋到的就是標綠的交易,也就是被完全確認的交易。
· 第二種方式:系統(tǒng)每隔1分鐘會發(fā)送一個Coordinator的tip附著在StreamNet上,這個tip被稱之為里程碑(milestone),所有被Coordinator引用的交易都是被確認的。
· 第三種方式: 蒙特卡洛隨機游走(MCMC)方式,即使用基本的隨機tip選擇算法來選擇一個tip,如果一個交易被這個tip引用,那么它的可信度便增加1,經(jīng)過N次選擇后如果有M次被引用到了,那么其可信度便是M/N。
二、StreamNet主要算法
· 基于中心度的去COO起點選擇算法
現(xiàn)階段,在DAG中選擇tip的時候,不會從創(chuàng)世交易開始,而是會簡單的以某個Coordinator作為起點出發(fā)來選擇tip ,這就會造成一個中心化的問題。所以在設(shè)計StreamNet的時候,首先要考慮的問題就是如何弱化COO而實現(xiàn)真正的分布式DAG,所以我們需要找到一個共識的交易作為起點,而不是由中心化節(jié)點強制規(guī)定的Coordinator作為起點。
在此我們選擇Katz中心度作為選擇起點的標準。因為StreamNet中的交易是不斷進入到網(wǎng)絡(luò)中的,如果每一筆新交易的選擇都重新計算一次Katz中心度的話,那計算量會非常大,因此我們采用增量算法來計算:
其中,A表示交易之間的鏈接關(guān)系,k次方表示k階鏈接矩陣,α表示重要性權(quán)值向量,I是一個全部為1的矩陣。
值得注意的是,在計算的結(jié)果中,我們并不需要尋找到Katz中心度最大的交易,因為這永遠是創(chuàng)世交易(Genesis),所以我們應(yīng)該在Katz中心度和離當(dāng)下時間最近的交易中找到這個初始節(jié)點。
· 考慮邊信息的交易權(quán)值算法
雙花問題的一個典型場景便是側(cè)鏈攻擊,攻擊者往往會在短時間內(nèi)發(fā)出多個交易快速增長側(cè)鏈,并在它們相互之間進行批準,一系列的欺騙性側(cè)鏈可能就會導(dǎo)致雙花成功。
為阻止這種情況發(fā)生,我們在兩個approve交易之間會做加權(quán)的set join,而這個權(quán)值的判定由邊的信息所確定,而邊的信息則由時間來確認。通過使用邊的信息來對交易進行重調(diào),從而將攻擊效應(yīng)進行衰減,維護了網(wǎng)絡(luò)的平穩(wěn)運行。
· 基于流式圖計算的權(quán)值更新算法
靜態(tài)的圖算法在更新節(jié)點權(quán)值的時候,需要從初始節(jié)點開始從頭計算每個節(jié)點的權(quán)值,這個計算的復(fù)雜度是非常高的。而如果我們把靜態(tài)計算的信息緩存起來,只在新的tip加入的時候更新已經(jīng)緩存的信息,那么新tip加入時計算的復(fù)雜度將會大大降低。
三、結(jié)語
現(xiàn)在DAG的方案已經(jīng)陸續(xù)從研討走向落地,業(yè)界有很多新穎的DAG方案正在被提出,從技術(shù)角度來說,DAG或許會對現(xiàn)有的區(qū)塊鏈項目帶來一次沖擊,一定程度上改變現(xiàn)有的區(qū)塊鏈設(shè)計思維。
DAG具有速度快,吞吐量高的優(yōu)勢,隨著越來越多項目參與到DAG的生態(tài)發(fā)展中來,長期看來,DAG是非常有前景的機制。Trias作為首先采用DAG技術(shù)的公鏈,創(chuàng)造性的設(shè)計了基于DAG的吞吐緩存層,從理論和現(xiàn)實率先做出了突破,在公鏈之爭中占得先機。