亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于DAG的區(qū)塊鏈新模型設(shè)計與實現(xiàn)

        2021-10-15 12:48:40四川大學(xué)計算機學(xué)院四川成都610065
        計算機應(yīng)用與軟件 2021年10期
        關(guān)鍵詞:用戶系統(tǒng)

        張 震 李 強 甘 俊 張 超(四川大學(xué)計算機學(xué)院 四川 成都 610065)

        0 引 言

        自2008年中本聰發(fā)布比特幣白皮書以來,比特幣這類點對點電子現(xiàn)金系統(tǒng)引起了社會各界的極大重視。學(xué)者在對該系統(tǒng)深入研究之后,從比特幣的基礎(chǔ)架構(gòu)凝煉出了區(qū)塊鏈技術(shù)。

        區(qū)塊鏈技術(shù)巧妙融合了以共識算法為核心的諸多技術(shù),它以去中心、自治、開放、匿名、不可篡改的特性為人知曉。區(qū)塊鏈系統(tǒng)的安全性基于密碼學(xué)算法,而不是傳統(tǒng)意義上的“信用”。區(qū)塊鏈被認(rèn)為是人類社會關(guān)于信任和協(xié)作的跨越式進步。2015年10月,《經(jīng)濟學(xué)人》封面文章稱區(qū)塊鏈?zhǔn)侵圃煨湃蔚臋C器。

        學(xué)術(shù)界和商業(yè)界都對區(qū)塊鏈技術(shù)顯示出了極大的興趣。眾多研究人員共同推動了區(qū)塊鏈技術(shù)的發(fā)展,Swan[1]在《Blockchain:Blueprint for a New Economy》中將區(qū)塊鏈技術(shù)的發(fā)展分為了3個階段。

        區(qū)塊鏈1.0時代是以比特幣為代表的加密數(shù)字貨幣時代。去中心的比特幣系統(tǒng)在全球范圍內(nèi)平穩(wěn)運行近十年更加彰顯了區(qū)塊鏈技術(shù)的不平凡之處。比特幣之后,眾多加密貨幣如雨后春筍般涌現(xiàn)。隨著加密數(shù)字貨幣的興盛,區(qū)塊鏈的去中心特性逐漸深入人心并被更多的人接受。比特幣更像是一次極為成功的社會實驗,驗證了區(qū)塊鏈強大的生命力。然而,作為區(qū)塊鏈1.0時代的標(biāo)志性產(chǎn)物,比特幣系統(tǒng)存在著諸多缺憾。

        比特幣系統(tǒng)采用的共識算法是PoW(Proofof Work)。自2008年至今,PoW算法始終安全可靠地維護著比特幣系統(tǒng)的運行。然而,PoW的弊端也隨之顯露。弊端之一是世界范圍內(nèi)大算力礦池的出現(xiàn),在一定程度上削弱了區(qū)塊鏈去中心化的設(shè)計初衷,也消減了大部分小算力參與者的熱情,為51%攻擊提供了更多的可能性。弊端之二是PoW會導(dǎo)致巨量的能源浪費,每年消耗資源數(shù)十億美元。弊端之三是區(qū)塊的建議最終確認(rèn)時間長達60 min左右,吞吐量是7筆/s,效率較低。

        PoS(Proofof Stake)共識算法的提出正是為了解決PoW共識算法所引起的低效高耗能問題。從2011年出現(xiàn)相關(guān)概念開始,就出現(xiàn)了一大批PoS的簇?fù)碚?,他們以PoS思想為核心,提出了各自的鏈?zhǔn)浇Y(jié)構(gòu)系統(tǒng)。如Casper[2]、Algorand[3]、Nxt[4]、Peercoin[5]等知名區(qū)塊鏈系統(tǒng)。PoS算法在改善PoW算法的同時也引進了新的弊端,如PoS類系統(tǒng)極易分叉、記賬人權(quán)力過大等。

        區(qū)塊鏈2.0時代是以智能合約為代表的可編程金融時代。1995年Nick S首次提出智能合約概念。之后,Ethereum(以太坊)將智能合約與區(qū)塊鏈相結(jié)合,極大地擴展了區(qū)塊鏈的應(yīng)用場景,諸如股票、債券、產(chǎn)權(quán)等數(shù)字資產(chǎn)領(lǐng)域紛紛與區(qū)塊鏈結(jié)合。區(qū)塊鏈將會重塑相關(guān)領(lǐng)域的交互方式,重構(gòu)商業(yè)環(huán)境。

        區(qū)塊鏈2.0時代的主要工作就是擴容,提升區(qū)塊鏈的擴展性。以以太坊為代表的諸多系統(tǒng)從增大區(qū)塊容量、提升記賬節(jié)點帶寬、提升記賬節(jié)點處理性能、減小區(qū)塊時間和減小記賬節(jié)點數(shù)量等角度對鏈?zhǔn)浇Y(jié)構(gòu)做了研究。然而,鏈?zhǔn)浇Y(jié)構(gòu)從基礎(chǔ)架構(gòu)上限制了區(qū)塊鏈整體性能的提升。作為一種數(shù)據(jù)結(jié)構(gòu),有向無環(huán)圖(Directed Acyclic Graph,DAG)從數(shù)據(jù)層給了區(qū)塊鏈更大的性能提升,是區(qū)塊鏈邁向3.0時代的關(guān)鍵技術(shù)。

        區(qū)塊鏈3.0時代是區(qū)塊鏈技術(shù)的廣泛應(yīng)用時代。以去中心化自洽組織(Decentralized Autonomous Organizations,DAO)和去中心化自洽公司(Decentralized Autonomous Corporations,DAC)標(biāo)志的自我管理組織常態(tài)化,人類社會協(xié)作方式出現(xiàn)新的可能。人們的生產(chǎn)、生活各個方面都會接受相應(yīng)的區(qū)塊鏈概念。萬物互聯(lián)互信時代是區(qū)塊鏈3.0時代的愿景。區(qū)塊鏈3.0時代的數(shù)據(jù)量必然是海量的,鏈?zhǔn)浇Y(jié)構(gòu)難以承受海量數(shù)據(jù)中蘊含的信息運作方式。目前看來,DAG架構(gòu)是區(qū)塊鏈性能提升的首選。

        DagCoin[6]最早闡述了有關(guān)DAG式區(qū)塊鏈的理論設(shè)想,后由IOTA[7]和ByteBall[8]一脈相承,對DAG式區(qū)塊鏈做了擴展。DAG中融合了極多的分叉,這些分叉構(gòu)成了局部交易之間的相對順序。DAG式區(qū)塊鏈憑借異步通信機制打破了鏈?zhǔn)絽^(qū)塊鏈的性能瓶頸。眾多DAG模型均自稱達到了物理極限,TPS(Transaction Per Second)僅受制于物理因素。海量TPS的提升為區(qū)塊鏈挺進3.0時代指明了方向。

        DAG最大的弊端來自于異步通信造成的全局無序狀態(tài)。一種解決方案是控制用戶的規(guī)模,進而弱化無序狀態(tài)的影響,如應(yīng)用于聯(lián)盟鏈的Hashgraph[9]系統(tǒng);另一種解決方案是主鏈延遲選擇策略。系統(tǒng)從過去一段時間內(nèi)的歷史交易中選出一些符合標(biāo)準(zhǔn)并且持續(xù)相連的交易組成主鏈,通過主鏈順序為所有交易排序,如Byteball、Conflux[10]等。

        目前,DAG式區(qū)塊鏈的研究集中在主鏈延遲選擇策略上。一方面,如果不同用戶本地歷史交易數(shù)據(jù)不一致,那么這種方法必定會造成不同用戶主鏈的不一致,如Conflux采用的GHOST[11]主鏈選擇算法,子樹節(jié)點最多的區(qū)塊當(dāng)選主鏈區(qū)塊。另一方面,目前的DAG式區(qū)塊鏈主鏈共識機制多為見證人共識,易造成系統(tǒng)安全性降低、交易時長不可控等問題,如ByteBall。本文提出一種基于DAG的區(qū)塊鏈新模型——權(quán)益有向無環(huán)圖模型(SDAG),將DAG這種最底層的數(shù)據(jù)組織方式與POS鏈?zhǔn)焦沧R算法結(jié)合起來。通過DAG結(jié)構(gòu)去解決鏈?zhǔn)浇Y(jié)構(gòu)吞吐量有限、易分叉等問題,同時PoS鏈?zhǔn)焦沧R會即時構(gòu)建DAG式區(qū)塊鏈的主鏈,控制全局狀態(tài),控制交易時長,縮短共識時間。

        1 已有研究

        PoS類共識算法根據(jù)用戶的資源占比賦予用戶相應(yīng)的投票權(quán)重。通過某種規(guī)則被選擇的礦工具有發(fā)布下一個區(qū)塊的權(quán)利,有投票權(quán)的一組用戶對每一個合法區(qū)塊進行驗證并投票。主流的PoS共識模型有兩種,一種是需要累積確認(rèn)的鏈?zhǔn)侥P?,另一種是結(jié)合BFT共識的模型。Nxt和Peercoin都是對比特幣鏈?zhǔn)浇Y(jié)構(gòu)的模仿,屬于需要累積確認(rèn)的模型。而Algorand等系統(tǒng)則是屬于結(jié)合BFT共識的模型。

        傳統(tǒng)分布式一致性算法中,Paxos[12]和Raft[13]比較有代表性,在非拜占庭(Byzantine Fault Tolerance)環(huán)境下較為適用。Pease和Lamport 在20世紀(jì)80年代提出BFT問題和解決算法,Castro等[14]提出了實用拜占庭容錯共識算法PBFT(Practical Byzantine FaultTolerance)。PBFT共識算法中,如果某個交易通過了三分之二節(jié)點的驗證,那么該交易就會被所有人接受,無須等待即可達成共識。

        在DAG式區(qū)塊鏈模型中,PHANTOM[15]要求新區(qū)塊的反錐面中節(jié)點數(shù)小于等于k才被允許加入系統(tǒng)。雖然PHANTOM具有良好的擴展性,但是不能保證強的線性排序和一定的活性。SPECTRE[16]通過一種投票算法,依據(jù)錐面節(jié)點數(shù)對區(qū)塊進行排序,排序靠前的區(qū)塊可信度越高。不同于SPECTRE和PHANTOM中的區(qū)塊之間只有父子連接,Conflux采用了父子連接和引用連接,引用連接用來標(biāo)記所有未被主鏈區(qū)塊所引用的葉子區(qū)塊,極大地提升了排序效率。

        1.1 DAG式區(qū)塊鏈和鏈?zhǔn)絽^(qū)塊鏈

        區(qū)塊鏈系統(tǒng)是一種運行在不受控環(huán)境中,可以解決拜占庭問題的分布式系統(tǒng)。共識算法是區(qū)塊鏈的核心。區(qū)塊鏈通過設(shè)定某一條件作為分布式節(jié)點達成共識的基礎(chǔ)。共識算法負(fù)責(zé)區(qū)塊鏈中信息的完整性,同時防御雙重花費攻擊,因此是區(qū)塊鏈技術(shù)的重要組成部分。最終目標(biāo)是在沒有中央機構(gòu)的分布式網(wǎng)絡(luò)中實現(xiàn)共識,并且與不一定相互信任的參與者達成共識[17]。

        根據(jù)系統(tǒng)中數(shù)據(jù)的組織形式(鏈?zhǔn)交蛘逥AG式)可以將區(qū)塊鏈分為鏈?zhǔn)絽^(qū)塊鏈和DAG式區(qū)塊鏈,其中的共識算法也多有不同。

        1.1.1鏈?zhǔn)絽^(qū)塊鏈

        結(jié)構(gòu)上,鏈?zhǔn)絽^(qū)塊鏈中的每個區(qū)塊有自己的時間戳,每個時間戳應(yīng)當(dāng)將前一個區(qū)塊的時間戳納入其隨機散列值中,每一個隨后的時間戳都對之前的一個時間戳進行增強,這樣就形成了一個鏈條。圖1是鏈?zhǔn)絽^(qū)塊鏈的結(jié)構(gòu)。區(qū)塊是區(qū)塊鏈的網(wǎng)絡(luò)節(jié)點,是用于記錄交易的數(shù)據(jù)結(jié)構(gòu)。時間戳是對區(qū)塊鏈中的每個區(qū)塊上的信息加上時間驗證,對每一個數(shù)據(jù)的輸入追本溯源、根據(jù)時間順序排列、驗證、確保數(shù)據(jù)的真實性,不容數(shù)據(jù)被篡改,證明數(shù)據(jù)的原創(chuàng)性和所有權(quán)的歸屬。

        圖1 鏈?zhǔn)絽^(qū)塊鏈

        區(qū)塊鏈的鏈?zhǔn)浇Y(jié)構(gòu)是對比特幣系統(tǒng)的延續(xù),是鏈?zhǔn)絽^(qū)塊鏈共識算法的理論基礎(chǔ)。其共識算法是為了維護系統(tǒng)中只有一條唯一的合法鏈,任何分叉鏈都被視作對系統(tǒng)的攻擊。正是基于此種考慮,比特幣系統(tǒng)產(chǎn)生新塊的時間被設(shè)定為10 min,系統(tǒng)需要足夠的時間保證新塊被傳遞給所有的用戶節(jié)點,保證最長鏈的產(chǎn)生者會有更多的競爭者,保證系統(tǒng)會有更少的分叉(這些沒有收到最新區(qū)塊的用戶節(jié)點會產(chǎn)生不合法的區(qū)塊)。

        在鏈?zhǔn)浇Y(jié)構(gòu)的場景中,系統(tǒng)內(nèi)節(jié)點的周期性工作是:

        (1) 接收驗證。用戶節(jié)點時刻監(jiān)聽網(wǎng)絡(luò)中的新交易,對接收的新交易進行驗證,將合法的新交易放入本地緩沖區(qū)。

        (2) 選擇礦工。用戶節(jié)點根據(jù)共識算法程序選擇出唯一的礦工,即該礦工獲得記賬權(quán)。

        (3) 打包廣播。取得記賬權(quán)的礦工從緩沖區(qū)中篩選出部分合法且有利的交易,將其打包并廣播給所有用戶節(jié)點。

        (4) 最終確認(rèn)。在一定時間后,該區(qū)塊所在的鏈被逆轉(zhuǎn)的風(fēng)險低于用戶的承受度,即完成最終確認(rèn),交易完成。

        在最終確認(rèn)階段,區(qū)塊鏈中交易順序被改變的可能性可以被接受時,則認(rèn)為完成了交易。如在比特幣安全實驗中,在假設(shè)攻擊節(jié)點的算力占全網(wǎng)算力10%時,等待6個區(qū)塊的確認(rèn),攻擊行為成功的概率為0.059%,小于0.1%,所以比特幣系統(tǒng)的建議確認(rèn)時間是60 min左右,即歷史交易需要6個新塊的確認(rèn)。

        1.1.2DAG式區(qū)塊鏈

        在圖論中,如果一個有向圖無法從某個頂點出發(fā)經(jīng)過若干條邊回到該點,則這個圖是一個DAG。有向無環(huán)圖常被用于交易速度極為重要的領(lǐng)域,比如編譯器、人工智能、統(tǒng)計和機器學(xué)習(xí)等。

        Nxt社區(qū)首次提出將DAG跟區(qū)塊鏈結(jié)合起來。區(qū)塊鏈本質(zhì)上是DAG的受限版本,僅允許在單軌道上進行連接[6]。DAG式區(qū)塊鏈的結(jié)構(gòu)如圖2所示。

        在結(jié)構(gòu)上。首先,不同于鏈?zhǔn)絽^(qū)塊鏈中每個塊只能有一個父節(jié)點,它允許每個區(qū)塊指向兩個或者兩個以上的區(qū)塊,容納了很多分叉,這些分叉共同構(gòu)成了一幅有向無環(huán)圖。其次,它允許每個區(qū)塊只有一個交易,如IOTA,而鏈?zhǔn)絽^(qū)塊鏈中每個區(qū)塊中的交易可能多達幾千筆,如比特幣。最后,該結(jié)構(gòu)中的交易在進入系統(tǒng)之前就已經(jīng)確立了相互之間的引用關(guān)系,該引用關(guān)系為交易確立了局部的時間先后關(guān)系,而鏈?zhǔn)絽^(qū)塊鏈中默認(rèn)交易之間是無序的,交易之間的順序是由礦工來隨機決定的。

        在DAG式結(jié)構(gòu)的場景中,每個用戶節(jié)點把接收到的全部交易經(jīng)初步驗證后存儲到本地緩沖區(qū),然后根據(jù)主鏈共識算法從交易中挑選出能構(gòu)成主鏈的交易,再剔除掉重復(fù)和雙重支付的交易,最終在交易的總順序上達成共識。系統(tǒng)內(nèi)節(jié)點的周期性工作是:

        (1) 接收驗證。用戶節(jié)點時刻監(jiān)聽網(wǎng)絡(luò)中的新交易。

        (2) 緩存交易。對接收的新交易進行驗證,將合法的新交易放入本地緩沖區(qū)。

        (3) 確定主鏈。系統(tǒng)根據(jù)某種主鏈共識算法從近期交易(區(qū)塊)中篩選出唯一一條區(qū)域合法主鏈,進而延長從創(chuàng)世區(qū)塊貫穿到葉子交易(區(qū)塊)的主鏈。

        (4) 最終確認(rèn)。在一定時間后,主鏈區(qū)塊被逆轉(zhuǎn)的概率小于用戶所能承受的風(fēng)險,即交易順序已經(jīng)被絕大部分用戶同意,并且很難再發(fā)生改變,則完成最終確認(rèn)。

        目前的主鏈研究工作中,主鏈交易(區(qū)塊)均是從歷史交易中篩選出來的,所以在最終確認(rèn)階段,采用累積確認(rèn)的方式較多。SDAG從DAG的特殊結(jié)構(gòu)出發(fā),通過BFT類共識算法即時發(fā)布主鏈交易,達到快速確認(rèn)的目的。

        1.1.3鏈?zhǔn)絽^(qū)塊鏈與DAG式區(qū)塊鏈的不同

        鏈?zhǔn)絽^(qū)塊鏈與DAG式區(qū)塊鏈除了結(jié)構(gòu)上的不同,兩者之間其他方面的不同如下:

        (1) 鏈?zhǔn)絽^(qū)塊鏈中,礦工在存入每一條交易數(shù)據(jù)之前會在全局范圍內(nèi)查找是否有交易與將要存儲的交易數(shù)據(jù)沖突。DAG式區(qū)塊鏈在存入數(shù)據(jù)交易之前沒有全局狀態(tài),故而選擇將所有數(shù)據(jù)先存儲,再按某種共識將所有交易排序和剔除。

        (2) 鏈?zhǔn)絽^(qū)塊鏈中的交易只能由礦工按照固定時間周期添加至系統(tǒng),屬于定期存儲策略。DAG式區(qū)塊鏈中的交易可以由任何用戶在任何時候向系統(tǒng)中添加,屬于異步并發(fā)策略。

        (3) 鏈?zhǔn)絽^(qū)塊鏈的共識算法發(fā)生在階段2(選擇礦工)中,發(fā)生在將數(shù)據(jù)存入本地緩沖區(qū)之前。DAG式區(qū)塊鏈的共識算法發(fā)生在階段3(確定主鏈),發(fā)生在將所有數(shù)據(jù)存入本地緩沖區(qū)之后。

        (4) 即使某些非合法鏈上的區(qū)塊是由誠實節(jié)點發(fā)布的,鏈?zhǔn)浇Y(jié)構(gòu)也會放棄它,并且礦工會重新打包提交給系統(tǒng),浪費了很多誠實節(jié)點的算力。DAG式區(qū)塊鏈則會保留所有人發(fā)來的交易,在排序之后剔除不合法交易。

        (5) 鏈?zhǔn)絽^(qū)塊鏈的共識算法的作用對象是用戶節(jié)點,輸出的是礦工。DAG式區(qū)塊鏈的主鏈共識算法的作用對象是區(qū)塊(交易),輸出的是可以構(gòu)成主鏈的區(qū)塊(交易),是所有交易的線性順序。

        (6) 鏈?zhǔn)絽^(qū)塊鏈通過保證礦工的唯一,進而確保鏈中交易順序的唯一,最后通過累計確認(rèn)階段將這種交易順序固化。DAG式區(qū)塊鏈借助有向無環(huán)圖節(jié)點(代表交易和區(qū)塊)之間局部有序特性,通過主鏈順序為系統(tǒng)中的所有交易確定順序,最終使得所有用戶在交易總順序上達成共識。

        (7) 當(dāng)同時存在兩個不沖突或者沒有任何關(guān)系的區(qū)塊(交易)的時候,鏈?zhǔn)浇Y(jié)構(gòu)規(guī)定只能保留一個,DAG式區(qū)塊鏈則暫時全部保留。

        (8) 由于DAG式區(qū)塊鏈中,沒有固定的角色向系統(tǒng)添加交易數(shù)據(jù),幾乎不會存在單點故障,任何人想要重建歷史交易網(wǎng)絡(luò)的可能性幾乎為0。

        1.2 現(xiàn)有DAG區(qū)塊鏈系統(tǒng)

        現(xiàn)有區(qū)塊鏈系統(tǒng)中,國外以IOTA和ByteBall最為知名,國內(nèi)以Conflux最為知名。

        IOTA的系統(tǒng)模型是Tangle。系統(tǒng)中每個區(qū)塊只有一個交易,DAG結(jié)構(gòu)的節(jié)點是一條交易,每個交易必須引用兩個或兩個以上歷史交易,以此構(gòu)建DAG。新交易對歷史交易的引用代表新交易的發(fā)送者對歷史交易的認(rèn)可,可進行分區(qū)并行驗證。IOTA的共識機制是置信度共識,即新交易對歷史交易的認(rèn)可度。只有置信度達到一定閾值的交易才被認(rèn)為是被完全確認(rèn)。IOTA的優(yōu)勢是并行驗證,劣勢是無全局狀態(tài)、交易時長不可控、安全性取決于活躍用戶占比。目前的IOTA系統(tǒng)依靠中心化的協(xié)調(diào)器維護。

        ByteBall系統(tǒng)是對IOTA的發(fā)展,引入了主鏈共識等重要概念。ByteBall系統(tǒng)采用特定人數(shù)的權(quán)威見證人幫助用戶達成共識,屬于主鏈共識。用戶節(jié)點通過在歷史交易有向無環(huán)圖中選擇出富集權(quán)威見證人交易最多的一條鏈,依此錨定其他交易的全局順序,是主鏈延遲選擇的策略。ByteBall的優(yōu)勢在于主鏈共識能夠幫助交易確定全局狀態(tài),劣勢是主鏈選擇算法復(fù)雜,本地交易視圖不同的用戶選擇出的主鏈容易出現(xiàn)不一致,見證人選擇及操作偏向中心化。

        Conflux系統(tǒng)是對比特幣系統(tǒng)的擴展,通過使用DAG提升比特幣系統(tǒng)的擴展性。Conflux采用主鏈共識機制,主鏈共識算法采用GHOST協(xié)議,通過挑選出子樹最多的交易來延長主鏈,也是主鏈延遲選擇策略。由于依然使用PoW算法,Conflux的劣勢是耗時耗資源,并且主鏈延遲選擇會導(dǎo)致主鏈不一致。

        本文提出的SDAG模型主要是對主鏈延遲選擇策略的改進,利用DAG的特殊結(jié)構(gòu),提出一種主鏈并行即時選擇策略。

        2 SDAG區(qū)塊鏈模型設(shè)計

        DAG結(jié)構(gòu)中交易之間天然部分有序,整體無序。每個用戶節(jié)點都有向系統(tǒng)寫入數(shù)據(jù)的權(quán)利,并且可以為交易指定前置交易。只需要維護一條貫穿整個有向無環(huán)圖的主鏈,所有交易間的順序就可以被線性化?;贐FT的PoS類共識算法能夠即時確認(rèn)歷史交易,具有數(shù)學(xué)可證的安全性、不分叉等特點,可以被用來維護主鏈。

        2.1 SDAG模型中的角色和交易

        模型中有兩種角色,一類是普通用戶,另一類是主鏈委員會用戶。普通用戶節(jié)點中權(quán)益排名靠前的節(jié)點成為主鏈委員會用戶,主鏈委員會用戶可以同時保留普通用戶的角色。

        普通用戶負(fù)責(zé)將自己的交易廣播給其他人,同時將監(jiān)聽到的交易緩存到本地緩沖區(qū)。主鏈委員會用戶負(fù)責(zé)周期性共識出一個主鏈交易。

        SDAG模型中沒有區(qū)塊,只有交易,可類比于區(qū)塊鏈中的一個塊中只有一筆交易,而不是上千筆交易。交易有兩種類型,一種是普通交易,另一種是主鏈交易。普通交易由普通用戶發(fā)出,只包含用戶自己的交易數(shù)據(jù)以及該交易引用了哪些父交易。這些引用構(gòu)成了有向無環(huán)圖的單向箭頭,而每一筆交易成為了有向無環(huán)圖的節(jié)點。

        如圖3所示是SDAG中的交易結(jié)構(gòu)。一個交易由時間戳、交易hash值、簽名、引用hash值、交易內(nèi)容組成。時間戳標(biāo)識了該交易的產(chǎn)生時間,交易hash值確保交易數(shù)據(jù)的完整性和不可篡改,簽名標(biāo)識交易的發(fā)出者是哪一個用戶,引用hash值用來指明該交易的父交易是哪些,交易內(nèi)容則記錄了用戶的交易數(shù)據(jù)或者操作信息。

        主鏈交易是由主鏈委員會周期性共識產(chǎn)生的,每個主鏈交易不包含任何有效交易內(nèi)容,交易內(nèi)容僅僅是主鏈交易的標(biāo)識。主鏈交易只包含交易發(fā)出時主節(jié)點本地視圖中的所有葉子節(jié)點,如圖4中主鏈交易A1引用了交易I和交易J,主鏈交易A2引用了交易I2、交易H2、交易J2。

        圖4 SDAG的數(shù)據(jù)結(jié)構(gòu)

        模型規(guī)定普通用戶必須引用兩個或兩個以上的歷史交易,主鏈交易引用所有的葉子節(jié)點交易。主鏈交易引用的交易數(shù)量可能遠超普通交易。兩個主鏈交易之間的時間段是一個時間間隙,如圖4中主鏈交易A1和主鏈交易A2之間存在時間間隙。

        在交易構(gòu)成的DAG中,將一個時間間隙內(nèi)的所有交易稱作交易子圖,如圖4中的(A2,B1,C1,D1,E1,F1,G1,I1,H1,J1)構(gòu)成了一幅交易子圖。

        2.2 SDAG的主鏈共識算法

        模型中的主鏈交易通過主鏈共識算法周期性產(chǎn)生。主鏈共識算法是PoS-PBFT,它僅僅是將PoS構(gòu)想和PBFT相結(jié)合,是對PBFT中的角色進行定義。

        2.2.1PBFT算法

        PBFT算法中有三種角色:客戶端、主節(jié)點、從節(jié)點。功能如下:

        (1) 客戶端:發(fā)送交易請求消息。

        (2) 主節(jié)點:將接收到的消息排序編號,廣播消息給從節(jié)點。

        (3) 從節(jié)點:驗證從主節(jié)點和其他從節(jié)點處接收到的消息并回應(yīng)。

        如果所有節(jié)點中存在f個惡意節(jié)點,那么PBFT算法需要2f+1個誠實節(jié)點就可以保證系統(tǒng)的正常運行。

        如圖5所示,PBFT共有五個階段:request,pre-prepare,prepare,commit和reply。

        圖5 PBFT的共識階段

        request階段:客戶端c向主節(jié)點0發(fā)送請求消息m,格式是,其中:o代表的是請求的操作;t代表消息的時間戳;c代表消息的發(fā)出者是客戶端。

        pre-prepare階段:主節(jié)點0給消息m編號,并將消息廣播給從節(jié)點1、從節(jié)點2、從節(jié)點3。消息的格式是<,m>,其中:v代表視圖編號;d代表消息m的摘要。

        prepare階段:三個從節(jié)點對收集到的pre-prepare消息進行驗證,并將自己的驗證結(jié)果廣播給其他人。如果從節(jié)點認(rèn)為消息有誤,則不會發(fā)送消息。只有收集到包含自身在內(nèi)超過2f+1個一致的回復(fù),節(jié)點才會進入下一階段。消息的格式是,其中i是節(jié)點自身的編號。

        commit階段:節(jié)點完成消息對應(yīng)操作后,會把自己的完成狀態(tài)廣播給其他人,消息的格式是。節(jié)點同樣需要收集包含自身在內(nèi)超過2f+1個一致的回復(fù)才會進入下一個階段。

        reply階段:節(jié)點收集足夠的消息后進入reply階段,然后向客戶端發(fā)送完成消息,消息的格式是,其中r是節(jié)點的執(zhí)行結(jié)果。客戶端只有收集到f+1個不同節(jié)點的響應(yīng)才會認(rèn)為request請求被完成。

        一個交易經(jīng)過3個階段驗證,就會被系統(tǒng)中的絕大部分人確認(rèn),那么該交易就可以被認(rèn)為是完全確認(rèn)的。

        2.2.2POS-PBFT主鏈共識算法

        PBFT運行最少需要3f+1個節(jié)點,也就是4個節(jié)點。系統(tǒng)中參與共識的節(jié)點越少,共識的速度越快,去中心化越低。本文從每個用戶節(jié)點的權(quán)益值出發(fā),使得權(quán)益占有總數(shù)大于一半的普通節(jié)點參與共識,既保證了系統(tǒng)的共識速度,又保證了系統(tǒng)的去中心化程度。由于實驗節(jié)點規(guī)模所限,本文從所有用戶中篩選出權(quán)益最高的5個用戶節(jié)點,這5個用戶節(jié)點共同組成了主鏈交易委員會,在每輪交易周期后,系統(tǒng)會計算出排名靠前的用戶節(jié)點,用來替換上一周期的主鏈交易委員會,而主鏈交易委員會的席位總是固定的。

        在PBFT中有三種角色:客戶端、主節(jié)點、從節(jié)點。將權(quán)益最高的用戶節(jié)點作為主節(jié)點,主節(jié)點同時也作為客戶端發(fā)起request請求,權(quán)益排名第2至第5的用戶節(jié)點作為從節(jié)點。

        不同于礦工獨享記賬權(quán),SDAG中的所有普通節(jié)點都擁有向系統(tǒng)添加普通交易的權(quán)利。但是,主鏈交易只有主節(jié)點可以作為客戶端的身份發(fā)起。主鏈交易不包含任何交易信息,只包含主鏈交易引用了哪些葉子交易。主節(jié)點提交的主鏈交易會經(jīng)歷PBFT共識,通過共識的主鏈交易才會被所有的用戶接收。

        所有用戶接收到主鏈交易后,會根據(jù)主鏈交易提供的葉子節(jié)點信息對本地交易子圖進行更新,如果缺少對應(yīng)的交易,用戶可以向其他節(jié)點請求同步,保證數(shù)據(jù)的一致性。在數(shù)據(jù)一致性的基礎(chǔ)上,用戶在本地運行排序算法。排序算法輸入的是交易子圖,輸出的是交易子圖內(nèi)交易的線性順序。并把該交易子圖的順序連接在上一個交易子圖的線性順序之后,主鏈得以延伸,全局狀態(tài)取得一致。

        由于模型SDAG中數(shù)據(jù)的一致性,用戶節(jié)點能夠依據(jù)本地數(shù)據(jù)同步更新各節(jié)點的權(quán)益,每一輪主鏈交易委員會由最新一輪狀態(tài)中的前5名用戶擔(dān)任,這保證了委員會的去中心性。而作為模型中權(quán)益最多的前5名用戶,他們的權(quán)益之和會遠遠大于其他用戶,只要委員會保持行動一致,他們的行動就能代表系統(tǒng)中絕大多數(shù)誠實節(jié)點的利益,因為如果系統(tǒng)受到攻擊,委員會成員的利益將會受損最大。

        2.2.3POS-PBFT算法流程

        系統(tǒng)初始化,所有用戶節(jié)點中權(quán)益前五的用戶節(jié)點成為主鏈交易委員會成員,權(quán)益第一的用戶節(jié)點成為主節(jié)點。

        主鏈交易的產(chǎn)生和普通交易的產(chǎn)生并行執(zhí)行。主鏈委員會周期性產(chǎn)生主鏈交易,并且更新委員會成員,成員更換信息可以被用戶節(jié)點在本地感知,無須消耗額外通信資源。網(wǎng)絡(luò)中所有用戶節(jié)點監(jiān)聽其他用戶的交易信息,對于接收到的消息進行判斷,如果是普通交易則緩存至本地緩沖區(qū),如果是主鏈交易,則用戶執(zhí)行交易子圖的排序算法,執(zhí)行完畢后將排在后面的雙花交易剔除,最后緩沖區(qū)中的數(shù)據(jù)被持久化到本地數(shù)據(jù)庫。圖6是SDAG模型中一個普通用戶節(jié)點的工作流程,算法1是主鏈共識算法偽代碼。

        圖6 SDAG普通節(jié)點工作流程

        算法1主鏈共識算法

        輸入:交易子圖。

        輸出:達成共識的主鏈交易。

        // NEW_ROUND:

        State=NEW_ROUND

        //從交易子圖中更新每個用戶的權(quán)益值變化,取出權(quán)益值排名

        //前5的節(jié)點作為委員會節(jié)點,權(quán)益值最高的節(jié)點作為主節(jié)點

        proposer=get_proposers_address(transactionsGraph)

        if (current_validator==proposer)

        MCtransaction=create_MainChainTransaction(transactionsGraph)

        broadcast_block(MCtransaction)

        State=PRE_PREPARED

        // PRE_PREPARED:

        On MCtransaction.type==PRE_PREPARE

        verify_transaction (MCtransaction)

        verify_validator(MCtransaction)

        broadcast_prepare(MCtransaction)

        State=PREPARED

        // PREPARED:

        On MCtransaction.type==PREPARE

        verify_prepare(MCtransaction.prepare)

        verify_validator(MCtransaction.prepare)

        prepare_pool.add(MCtransaction.prepare)

        if (prepare_pool.length>2F+1)

        broadcast_commit(MCtransaction.prepare)

        State=COMMITTED

        // COMMITTED:

        On MCtransaction.type==COMMIT

        verify_commit(MCtransaction.commit)

        verify_validator(MCtransaction.commit)

        commit_pool.add(MCtransaction.commit)

        if (commit_pool.length>2F+1)

        transactions.append(MCtransaction)

        State=FINAL_COMMITTED

        // FINAL_COMMITTED:

        broadcast_ commited(MCtransaction)

        2.3 SDAG的交易排序

        交易之間的引用拓?fù)潢P(guān)系是交易的發(fā)送者指定的,為用戶交易的執(zhí)行設(shè)定前置條件。但是這種順序只能是局部的,全局交易之間是完全無序的,雖然DAG追求的是所有交易都應(yīng)有一個準(zhǔn)確的線性順序,但是這種順序是不可求解的,也不是必須的。如在比特幣系統(tǒng)中,雖然區(qū)塊之間是線性關(guān)系,但是一個區(qū)塊中有幾千筆交易,這些交易之間的順序并不是交易的發(fā)送者指定的,比特幣系統(tǒng)默認(rèn)這幾千筆交易并行執(zhí)行。如圖7所示的那樣,區(qū)塊內(nèi)的所有交易之間是毫無關(guān)聯(lián)的。

        圖7 鏈?zhǔn)浇Y(jié)構(gòu)中的區(qū)塊和交易

        本文所述SDAG模型將區(qū)塊解構(gòu)為交易子圖,等同于將區(qū)塊中的交易展開,并附加上交易之間的原始先后關(guān)系,這種細粒度的交易執(zhí)行關(guān)系對于智能合約等時序性和嚴(yán)謹(jǐn)性要求較高的適用場景是極為必要的。

        交易子圖的排序規(guī)則如下:

        (1) 被引用的交易一定先于發(fā)出引用的交易??梢詡鬟f引用,如a引用b,b引用c,那么a一定晚于c。傳遞引用按照最長路徑計算。

        (2) 對于不在引用關(guān)系的交易按照時間戳進行排序。

        (3) 對于時間戳相同的交易,按照hash值的字典順序進行排序。

        交易子圖越小,該子圖內(nèi)的交易順序越精確,反之越模糊。交易之間最精確的順序是由引用關(guān)系推導(dǎo)出來的,把交易的時間戳納入排序因素得到的順序精確度次之,把交易hash值納入排序因素得到的交易順序最模糊。

        交易排序算法見算法2。

        算法2排序算法

        輸入:交易子圖。

        輸出:交易子圖中交易的鏈?zhǔn)巾樞颉?/p>

        //從主鏈交易開始, 依據(jù)葉子節(jié)點把交易子圖中的交易按照引

        //用關(guān)系導(dǎo)出為幾條交易鏈,返回鏈表頭部

        List lists=getAllTransactionList();

        List newList=new List();

        While(allLisyIsNotNull){

        //依次取出每條交易鏈表中的交易,按照時間戳和交易hash值

        //的字典順序插入到新的交易鏈中

        newList.add( transctionFromLists );

        }

        return newList;

        2.4 SDAG的數(shù)據(jù)一致性

        雖然DAG中的交易順序沒有唯一的解,但是只要每個用戶節(jié)點接收到的交易是完全一致的,并且按相同的原則處理,那么依然可以保證所有用戶數(shù)據(jù)的一致性。

        由于每個交易都會存儲父交易的hash值,并且會把父交易的hash值作為自己交易的一部分進行hash。這種增強的關(guān)系,確保了只要葉子交易(未被其他交易引用的交易)是一致的,那么交易子圖就是一致并且完整的。用戶可以根據(jù)葉子節(jié)點中父交易的hash進行回溯遍歷,遍歷的起點是此時的主鏈交易,終點邊界是被上一個主鏈交易引用過的已排序交易。

        SDAG模型的一致性不僅代表交易內(nèi)容的一致性,還隱含有交易執(zhí)行順序的一致性。

        2.5 確認(rèn)交易

        由于普通交易的順序完全取決于主鏈交易,所以只需要確認(rèn)主鏈交易即可。主鏈共識采用PoS-PBFT共識算法,每一個新交易的產(chǎn)生都需要經(jīng)過主鏈交易委員會的投票確認(rèn)。獲得委員會的多數(shù)通過即代表該主鏈交易已經(jīng)被確認(rèn),該主鏈交易引用的交易子圖中的交易也被確認(rèn)。這種確認(rèn)是即時的,并不依賴于后續(xù)主鏈交易對該主鏈交易的引用。

        主鏈交易的定期產(chǎn)生和即時確認(rèn)特性保證了SDAG中交易的確認(rèn)時間是可控的,不會出現(xiàn)DAG式區(qū)塊鏈中常見的交易時長不可控問題和主鏈偏差問題。

        3 SDAG區(qū)塊鏈模型的實現(xiàn)

        3.1 SDAG架構(gòu)

        SDAG模型中的普通交易由普通用戶實時產(chǎn)生并廣播,主鏈交易由主鏈交易委員會周期性共識產(chǎn)生并廣播,這兩部分工作可以并行進行,只要用戶節(jié)點在收到主鏈交易的時候?qū)Ρ镜財?shù)據(jù)進行同步檢查即可。

        如圖8是SDAG的架構(gòu),由網(wǎng)絡(luò)層、共識層、緩沖區(qū)和本地數(shù)據(jù)庫四部分組成。圖中的加粗黑色圓環(huán)代表主鏈交易,而細實線圓代表普通交易。網(wǎng)絡(luò)層負(fù)責(zé)用戶節(jié)點間的點對點通信,所有交易通過網(wǎng)絡(luò)層進行廣播。共識層負(fù)責(zé)定期產(chǎn)生主鏈交易。緩沖區(qū)負(fù)責(zé)對接收到的數(shù)據(jù)進行初步驗證,保留合法數(shù)據(jù)。本地數(shù)據(jù)庫用以持久化經(jīng)過全局驗證的合法交易。

        3.2 系統(tǒng)平臺和開發(fā)工具

        本文使用Java平臺實現(xiàn)SDAG模型,開發(fā)環(huán)境如表1所示。

        3.3 程序結(jié)構(gòu)

        圖9是SDAG系統(tǒng)的程序結(jié)構(gòu),分為以下幾個部分:dao部分用來實現(xiàn)用戶節(jié)點的數(shù)據(jù)持久化;service部分實現(xiàn)了節(jié)點收到交易后的一系列操作;socket部分實現(xiàn)了節(jié)點間的網(wǎng)絡(luò)通信;resources部分存儲了節(jié)點的配置文件;test部分用以對相關(guān)功能的測試。

        圖9 SDAG系統(tǒng)的程序結(jié)構(gòu)

        3.4 網(wǎng)絡(luò)層實現(xiàn)

        SDAG系統(tǒng)采用P2P網(wǎng)絡(luò)結(jié)構(gòu),各節(jié)點之間無須通過服務(wù)器或者其他節(jié)點中轉(zhuǎn)。節(jié)點之間使用TCP協(xié)議,通過Socket套接字通信。交易數(shù)據(jù)通過指定的端口和用戶節(jié)點的IP地址進行傳輸。

        主鏈交易和普通交易都是通過網(wǎng)絡(luò)層傳輸。transocket部分用來實現(xiàn)普通交易的傳輸和接收,MCsocket部分用來實現(xiàn)主鏈交易的共識算法部分的通信。模型實現(xiàn)過程中,使用5個用戶節(jié)點,分別為2種交易分配端口1和端口2,每個用戶對端口1保持監(jiān)聽從而收集網(wǎng)絡(luò)中的普通交易,對端口2進行監(jiān)聽從而收集網(wǎng)絡(luò)中的主鏈交易。

        3.5 數(shù)據(jù)層實現(xiàn)

        數(shù)據(jù)層實現(xiàn)了對交易進行hash運算和存儲。系統(tǒng)采用SHA-256算法對交易進行hash運算。具體做法是在生成交易信息后,對時間戳、交易內(nèi)容和引用的父hash三部分進行hash運算得到一串字符串,并將它作為交易的唯一識別標(biāo)識。

        系統(tǒng)采用MySQL數(shù)據(jù)庫對交易數(shù)據(jù)進行持久化。在交易數(shù)據(jù)被持久化到數(shù)據(jù)庫中之前,系統(tǒng)會使用一個緩沖隊列去保存被初步驗證過的普通交易,直到接收到主鏈交易后,緩沖區(qū)內(nèi)的所有交易作為一個交易子圖被持久化到數(shù)據(jù)庫中。

        3.6 普通交易的方法實現(xiàn)

        3.6.1普通交易的產(chǎn)生

        當(dāng)普通用戶節(jié)點P1產(chǎn)生一條新交易時,他會首先為自己的交易選擇兩個歷史交易作為父交易。這兩個歷史交易可以是該用戶指定的,也可以是系統(tǒng)隨機選擇的,其中選擇最新的歷史交易最佳。P1發(fā)出的普通交易結(jié)構(gòu)如圖10所示。

        3.6.2普通交易的廣播和接收

        用戶在廣播的時候,會選擇所有其他用戶的IP地址,使用端口1進行發(fā)送數(shù)據(jù)。多個用戶可以同時發(fā)起并廣播交易。

        所有用戶在通過Java ServerSocket接收方式監(jiān)聽端口1的時候,會接收到P1發(fā)送的交易數(shù)據(jù)。由于實際運行過程中會接收到很多不同用戶的交易,SDAG系統(tǒng)中的用戶需要使用線程池提供多線程的方式接收突然而至的大量數(shù)據(jù)。在接收到P1的交易數(shù)據(jù)時,用戶節(jié)點會調(diào)用普通交易的驗證方法,并把合法交易放在緩沖區(qū)中。

        3.7 主鏈交易的方法實現(xiàn)

        系統(tǒng)初始化的時候會為所有用戶節(jié)點分配一定的權(quán)益值,權(quán)益值是總數(shù)一定的積分,無論各節(jié)點間的權(quán)益如何轉(zhuǎn)讓,系統(tǒng)中的權(quán)益總和是不變的。權(quán)益值最高的用戶節(jié)點會自動當(dāng)選為PoS-PBFT主鏈共識算法中的主節(jié)點。

        收到主鏈交易后,每個用戶節(jié)點會自動根據(jù)交易子圖中的交易信息感知該時間間隙內(nèi)的權(quán)益變化。權(quán)益值最高的用戶自動當(dāng)選下一周期的主鏈節(jié)點,權(quán)益值最高的5個節(jié)點當(dāng)選為下一個周期內(nèi)的主鏈委員會用戶。如果交易子圖中并無權(quán)益流動轉(zhuǎn)移,則原有節(jié)點的角色不變。

        模型實現(xiàn)的過程中分配給P1最多的權(quán)益,即P1當(dāng)選主鏈委員會中的主節(jié)點,P2、P3、P4和P5為主鏈委員會用戶中的從節(jié)點。主鏈交易由主節(jié)點P1發(fā)起,并引用主節(jié)點本地的所有葉子節(jié)點。主節(jié)點P1將主鏈交易通過端口2和IP地址發(fā)送給其他主鏈委員會用戶進行投票確認(rèn)。主鏈交易結(jié)構(gòu)如圖11所示。

        3.8 主鏈交易的共識過程

        (1) 從節(jié)點Pi(i=2,3,4,5)收到主節(jié)點P1的交易后,驗證并生成準(zhǔn)備消息,對準(zhǔn)備消息進行簽名后進行廣播。

        (2)Pi(i=1,2,3,4,5)接收到其他用戶節(jié)點的準(zhǔn)備消息后進行驗證。若來自不同節(jié)點的消息數(shù)量超過2f+1(f為作惡節(jié)點)并且消息一致無誤,Pi節(jié)點生成提交消息,簽名后廣播。

        (3)Pi(i=2,3,4,5)接收到其他用戶節(jié)點的提交消息后進行驗證。若來自不同節(jié)點的消息數(shù)量超過2f+1并且消息一致無誤,Pi節(jié)點生成確認(rèn)提交消息,簽名后廣播。

        (4) 主節(jié)點P1收到包含自己在內(nèi)f+1個一致的確認(rèn)提交消息后,即可認(rèn)為發(fā)出的主鏈交易獲得了主鏈委員會的共識。

        3.9 交易的確認(rèn)和存儲

        在接收到共識的主鏈交易后,所有用戶會做出調(diào)整,保證在該時間間隙內(nèi)與主節(jié)點具有相同的葉子節(jié)點交易和交易子圖。主鏈交易的連續(xù)性和hash值的持續(xù)增強,保證了該時間間隙內(nèi)所有節(jié)點的交易子圖完整性和唯一性。

        所有用戶節(jié)點根據(jù)主鏈交易內(nèi)引用的葉子節(jié)點構(gòu)造該時間間隙內(nèi)的交易子圖。用戶節(jié)點運行交易子圖排序方法,進而為每一個交易安排一個唯一的全局順序。最后每個用戶會對雙重花費交易等惡意交易進行剔除。至此,所有用戶對歷史交易的順序達成共識。

        交易子圖內(nèi)的交易和主鏈交易會被存儲到每個用戶的本地數(shù)據(jù)庫中。

        4 模型分析

        由于SDAG數(shù)據(jù)組織方式是DAG,并且每個用戶節(jié)點都有普通交易的讀寫權(quán)限,系統(tǒng)可以實現(xiàn)并行寫入。同時普通交易的產(chǎn)生和主鏈交易的產(chǎn)生也可以并行進行,因為主鏈交易僅僅只是在普通交易子圖中做了個標(biāo)記。主鏈交易不包含需要被復(fù)雜程序驗證的交易數(shù)據(jù),驗證簡單,帶寬消耗少。以下公有鏈數(shù)據(jù)均來自官方文檔。

        本文實驗采用30個用戶節(jié)點去實現(xiàn)SDAG模型。實驗環(huán)境所用帶寬是10 Mbit,表2是實驗節(jié)點的配置。

        4.1 吞吐量分析

        TPS代表每秒系統(tǒng)交易數(shù),計算公式為:

        TPS=TransactionNum/t

        式中:t代表時間段;TransactionNum代表系統(tǒng)處理的交易數(shù)量。TPS是系統(tǒng)承載能力的指標(biāo),單位時間內(nèi)系統(tǒng)能夠處理的交易越多,系統(tǒng)的TPS越高。圖12是本系統(tǒng)在實驗環(huán)境下的5節(jié)點吞吐量測試數(shù)據(jù),5個節(jié)點時系統(tǒng)TPS最高為380。如圖13所示,隨著普通用戶節(jié)點的增多,參與共識節(jié)點數(shù)量不變的情況下,TPS穩(wěn)定在330左右。

        4.2 確認(rèn)時間測試

        由于SDAG采用PoS-PBFT共識算法,參與共識節(jié)點少,主鏈交易處理程序簡單,故而系統(tǒng)確認(rèn)時間可以達到秒級,并且隨著系統(tǒng)規(guī)模的擴大,系統(tǒng)的確認(rèn)時間僅與網(wǎng)絡(luò)規(guī)模相關(guān)性較強。而比特幣的確認(rèn)時間是10 min左右,conflux的確認(rèn)時間在7 min左右。

        如圖14所示,隨著節(jié)點數(shù)的增多,SDAG的確認(rèn)時間穩(wěn)定在3 350 ms左右,可以為系統(tǒng)提供即時確認(rèn)。

        4.3 數(shù)據(jù)一致性分析

        SDAG的主鏈共識算法采用PoS-PBFT,通過主鏈交易這個檢查點,能夠以點帶面,保證交易子圖的完全一致,進而使得所有用戶節(jié)點的本地狀態(tài)保持一致。SDAG的一致性相對于Conflux采用的GHOST共識更高,比Byteball等采用的見證人共識等滯后確定主鏈方案更可靠即時。

        此外,DAG能給交易附加引用邊,該引用可以由用戶為交易設(shè)定,用來控制交易的細粒度執(zhí)行順序,使得SDAG的一致性在交易的執(zhí)行順序上更加深入細膩。SDAG較高的一致性使它更符合重要場景的需求,更符合智能合約的部署。

        4.4 安全性分析

        SDAG應(yīng)用PoS-PBFT共識算法來選擇主鏈交易,因此,SDAG主鏈的安全性不低于PBFT共識算法的安全性,只要惡意用戶節(jié)點的權(quán)益低于系統(tǒng)總權(quán)益的三分之一,系統(tǒng)就是安全的。由于系統(tǒng)中的權(quán)益是封閉的,非系統(tǒng)節(jié)點不會獲得權(quán)益,權(quán)益也無法從外部補充,只能在封閉系統(tǒng)內(nèi)部流轉(zhuǎn),所以系統(tǒng)的安全性要高于PBFT的安全性。

        主鏈共識算法為系統(tǒng)所有交易確定了線性順序,只要主鏈交易得到確認(rèn),那么全局順序就是確定的,是不可逆的。

        由于系統(tǒng)內(nèi)的最小數(shù)據(jù)單元是交易,完全重復(fù)的交易很容易被識別并被清除,所以系統(tǒng)不會出現(xiàn)鏈?zhǔn)浇Y(jié)構(gòu)中重復(fù)區(qū)塊分叉現(xiàn)象,誠實算力不會被浪費,惡意節(jié)點會被最大程度地壓制。

        DAG是一種特殊的數(shù)據(jù)組織結(jié)構(gòu),其拓?fù)渑判蚴俏ㄒ坏?。一方面,DAG中海量的分叉結(jié)構(gòu)使得交易之間聯(lián)系更加緊密,另一方面普通用戶也有存儲數(shù)據(jù)的權(quán)利,所以即使攻擊者獲得了系統(tǒng)的掌控權(quán),他也不可能偽造一份新的歷史交易,從而消除自己的歷史花費。特殊的結(jié)構(gòu)使得SDAG也不會遭受PoS鏈?zhǔn)浇Y(jié)構(gòu)中的無風(fēng)險支持分叉攻擊、理性分叉、幣齡攻擊、長程攻擊等攻擊。

        5 結(jié) 語

        本文提出一種基于DAG的區(qū)塊鏈新模型,并將PBFT共識算法與PoS結(jié)構(gòu)相結(jié)合作為新模型的主鏈共識算法PoS-PBFT。由于DAG結(jié)構(gòu)的特性,該模型吞吐量較高,交易間聯(lián)系更緊密。特殊的主鏈共識方法使得模型一致性比多數(shù)DAG模型更高。該模型同時還具有快速確認(rèn)、交易更有序等特點。

        未來工作將會進一步降低網(wǎng)絡(luò)通信量,根據(jù)實際場景對主鏈共識算法進行優(yōu)化,尋求主鏈交易時間間隙和網(wǎng)絡(luò)傳輸交易數(shù)量的平衡。

        猜你喜歡
        用戶系統(tǒng)
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機系統(tǒng)
        ZC系列無人機遙感系統(tǒng)
        北京測繪(2020年12期)2020-12-29 01:33:58
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        關(guān)注用戶
        商用汽車(2016年11期)2016-12-19 01:20:16
        關(guān)注用戶
        商用汽車(2016年6期)2016-06-29 09:18:54
        關(guān)注用戶
        商用汽車(2016年4期)2016-05-09 01:23:12
        Camera360:拍出5億用戶
        久久久精品亚洲懂色av| 99久久人人爽亚洲精品美女| 久久精品人妻一区二区三区| 久久青青草原国产精品最新片| 国产无套粉嫩白浆内精| 成人国产一区二区三区| 久久久www成人免费精品| 无码的精品免费不卡在线| 麻豆av一区二区天堂| 久久综合久久综合久久| 国产欧美日韩精品丝袜高跟鞋| 日韩精品无码一区二区三区视频| 国产成社区在线视频观看| 免费看片的网站国产亚洲| 久爱www人成免费网站| 香蕉久久人人97超碰caoproen| AV中文码一区二区三区| 国产精品亚洲一区二区三区16| 精品国内在视频线2019| 天天天综合网| 国产精品污一区二区三区在线观看 | 亚洲一区亚洲二区视频在线| 亚洲欧美乱日韩乱国产| 国产99视频精品免费视频免里| 日本一区二区三区的免费视频观看 | 少妇人妻偷人精品免费视频| 亚洲成在人线电影天堂色| 国产一区二区三区在线观看黄| 免费a级毛片在线播放不收费| 无码精品a∨在线观看十八禁| 亚洲欧美日韩在线精品2021| 亚洲国产人成综合网站| 亚洲热妇无码av在线播放| 国内精品一区视频在线播放| 激情视频在线播放一区二区三区| 国产大屁股喷水视频在线观看| 亚洲一区精品无码色成人| 国产91在线|亚洲| 中文字幕乱码日本亚洲一区二区| 久久99精品国产麻豆不卡| 亚洲偷自拍另类图片二区|