致信底層鏈網(wǎng)絡(luò)中存在礦工節(jié)點(diǎn)和用戶節(jié)點(diǎn)兩種類型,礦工節(jié)點(diǎn)指繳納保證金后,加入了候選陪審員列表的節(jié) 點(diǎn),這種節(jié)點(diǎn)又分為 Mediator 節(jié)點(diǎn)和 Jury 節(jié)點(diǎn)。
礦工節(jié)點(diǎn)都是全節(jié)點(diǎn),保留了全部的賬本數(shù)據(jù)。礦工節(jié)點(diǎn)需要 運(yùn)行合約,進(jìn)行共識(shí)等操作。礦工節(jié)點(diǎn)必須保證長(zhǎng)時(shí)間在線和良好的運(yùn)算環(huán)境(CPU、內(nèi)存、硬盤等)以及網(wǎng) 絡(luò)環(huán)境(高帶寬、低延遲)。
用戶節(jié)點(diǎn)是瀏覽和發(fā)起交易的節(jié)點(diǎn),用戶節(jié)點(diǎn)不需要保證是全賬本,允許更長(zhǎng)時(shí)間的延遲。
我們假定礦工節(jié)點(diǎn)長(zhǎng)時(shí)間在線,而用戶節(jié)點(diǎn)會(huì)隨時(shí)上線和離線,但是不會(huì)出現(xiàn)大量用戶節(jié)點(diǎn)同時(shí)上線和同時(shí)離線的情況發(fā)生。
每個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù),在理想狀態(tài)下是一致的,礦工節(jié)點(diǎn)要求較低的延遲,用戶節(jié)點(diǎn)不要求實(shí)時(shí)性,但是在足夠長(zhǎng)的時(shí)間后也能同步到所有的數(shù)據(jù)。
致信底層鏈網(wǎng)絡(luò)中的Mediator 節(jié)點(diǎn),會(huì)相互之間建立 P2P 連接,保證了 Mediator 之間數(shù)據(jù)延遲更低。Jury 只是臨 時(shí)組件的團(tuán)體,所以并不要求 Jury 內(nèi)部每個(gè)陪審員之間兩兩連接。
有向無環(huán)圖(Directed Acyclic Graph)簡(jiǎn)稱 DAG。在 DAG 中沒有區(qū)塊概念,所有數(shù)據(jù)并不打包成區(qū)塊再用 區(qū)塊鏈接區(qū)塊,而是每個(gè)用戶都可以提交一個(gè)數(shù)據(jù)單元,這個(gè)數(shù)據(jù)單元里可以有很多東西,比如交易、消息等。數(shù)據(jù)單元間通過引用關(guān)系鏈接起來, DAG的特點(diǎn)是把數(shù)據(jù)單元的寫入操作異步化,大量節(jié)點(diǎn)可以自主地把交易數(shù)據(jù)寫入DAG。 致信區(qū)塊鏈 使用 DAG 的目的是為了解決傳統(tǒng)區(qū)塊鏈中只有一條主鏈,無法并行執(zhí)行的問題,同時(shí)節(jié)省了打包交易出塊的時(shí)間。
傳統(tǒng)的區(qū)塊鏈里,在生成區(qū)塊之前,需要給所有的交易做一個(gè)交易池,礦工從交易池中挑選要打包的交 易,然后根據(jù)共識(shí)算法打包為區(qū)塊,最后放到鏈中。在交易被打包到區(qū)塊并廣播到全網(wǎng)之前,交易是屬于未確 認(rèn)狀態(tài),這阻塞了其他的交易寫入,從而使得傳統(tǒng)區(qū)塊鏈交易確認(rèn)時(shí)間非常長(zhǎng)。 DAG并行處理的特點(diǎn)使其有潛力為各行業(yè)的經(jīng)濟(jì)活動(dòng)和價(jià)值交易帶來全新的技術(shù)革新與升級(jí),在彌補(bǔ)不同交易主體之間信任鴻溝的同時(shí),通過時(shí)間戳、不可逆性、可追溯性、并行處理等特點(diǎn),降低交易成本,實(shí)現(xiàn)具 有更強(qiáng)表達(dá)力的智能合約,更快的交易確認(rèn),更廣泛的應(yīng)用場(chǎng)景,更強(qiáng)的安全性和隱私保護(hù)。
要在致信雙層共識(shí)平臺(tái)中,Mediator是整個(gè)PalletOne的核心部分,Mediator使用代理權(quán)益證明(Delegated Proof of Stake,DPoS)來進(jìn)行共識(shí)。Mediator節(jié)點(diǎn)是由致信Token持有者投票產(chǎn)生。Mediator節(jié)點(diǎn)輪流“工作”,每個(gè)節(jié)點(diǎn)在一個(gè)Time Slot中負(fù)責(zé)的其中兩項(xiàng)工作包括利用VRF(Verifiable Random Function,可驗(yàn)證隨機(jī)函數(shù))算法隨機(jī)選擇陪審員組建陪審團(tuán),和在陪審員無法達(dá)成共識(shí)時(shí)進(jìn)行仲裁。
陪審團(tuán)(Jury)是維護(hù)致信區(qū)塊鏈安全性和完整性的基本單位。更具體的說,陪審團(tuán)被委任運(yùn)行和驗(yàn)證智能合約以及管理多重簽名賬戶。
為了實(shí)現(xiàn)安全和去中心化的設(shè)計(jì),陪審團(tuán)被設(shè)計(jì)為由許多參與者組成,這些參與者被稱為陪審員。Mediator“每受理一個(gè)案件”時(shí),從候選陪審員中隨機(jī)選出一組陪審員組成陪審團(tuán),對(duì)“該案件進(jìn)行評(píng)審”,“案件審理”結(jié)束后,陪審團(tuán)會(huì)隨之解散。陪審團(tuán)內(nèi)采用 BFT的算法來實(shí)現(xiàn)共識(shí)。
智能合約(Smart Contract)這個(gè)概念最早由 Nick Szabo 于 1996 年提出,該概念在區(qū)塊鏈中被廣泛使用, 并誕生了以太坊、量子鏈、EOS 等眾多支持圖靈完備的智能合約的區(qū)塊鏈。概括下來,智能合約具有以下特性:
(1) 智能合約必須是一種合約,是平等的當(dāng)事人之間執(zhí)行約定內(nèi)容的協(xié)議。智能合約與傳統(tǒng)合約不同之 處在于,智能合約是數(shù)字形式的,是由計(jì)算機(jī)讀取和執(zhí)行。
(2) 智能合約是部分或者完全自我執(zhí)行或者自我強(qiáng)制的。
(3) 智能合約需要安全的運(yùn)行環(huán)境。合約運(yùn)行環(huán)境必須安全可靠,執(zhí)行結(jié)果能在多方達(dá)成一致。
(4) 只有智能合約才能修改賬本數(shù)據(jù)。
出于智能合約的特點(diǎn),合約安全以及在多語(yǔ)言,多平臺(tái)智能合約上的考慮,致信區(qū)塊鏈默認(rèn)采用Docker容器化技術(shù)實(shí)現(xiàn)智能合約。在業(yè)界,Docker 作為智能合約的虛擬機(jī)已經(jīng)在 HyperLedger Fabric 中應(yīng)用,被大量的企業(yè)和項(xiàng)目所論證。
在致信區(qū)塊鏈應(yīng)用平臺(tái)中,所有類型的服務(wù)都是通過合約來創(chuàng)建。合約的創(chuàng)建是基于合約模板的,我們?yōu)槌R姷膱?chǎng)景提供了合約模板供用戶使用。用戶也可以自己創(chuàng)建新的合約模板并部署到致信區(qū)塊鏈上。合約模板的部署需要調(diào)停中介(Mediator)來完成。調(diào)停中介負(fù)責(zé)檢 查合約模板的語(yǔ)法、規(guī)范等,只有滿足要求的合約模板才能部署成功。部署成功的合約模板將被保存在分布式存儲(chǔ)中以備以后部署合約時(shí)使用。
系統(tǒng)為不同的編程語(yǔ)言提供了不同的運(yùn)行時(shí) Docker 鏡像,另外也提供了對(duì)應(yīng)語(yǔ)言的 SDK 幫助合約開發(fā)人員快速便捷的開發(fā)出智能合約。合約開發(fā)人員基于SDK 在本地編譯好合約程序后,只需要將編譯后的文件放到 致信區(qū)塊鏈進(jìn)行發(fā)布,發(fā)布后的合約程序被稱為合約模板。用戶基于模板創(chuàng)建合約時(shí),合約執(zhí)行節(jié)點(diǎn)(陪審員) 會(huì)根據(jù)合約的語(yǔ)言選擇對(duì)應(yīng)的運(yùn)行時(shí)鏡像,構(gòu)建新的合約模板鏡像,并最終實(shí)例化合約容器,
合約模板就是基于致信區(qū)塊鏈合約 SDK,符合致信區(qū)塊鏈合約規(guī)范的可執(zhí)行程序。智能合約開發(fā)人員使用自己熟悉的開發(fā)語(yǔ)言,在本地編寫和編譯好合約模板程序,另外出于開發(fā)調(diào)試的方便,后期 致信區(qū)塊鏈會(huì)提供單機(jī)致信區(qū)塊鏈網(wǎng)絡(luò)的模擬運(yùn)行。