亦來云為了減輕主鏈的壓力,同時為 DAPP提供更好的使用體驗,采用了主鏈+側(cè)鏈的分層架構(gòu)。主鏈只擔(dān)負(fù) ELA的流通職責(zé),DAPP運(yùn)行在側(cè)鏈上,通過亦來云的側(cè)鏈轉(zhuǎn)賬機(jī)制完成價值在主鏈和側(cè)鏈間的安全轉(zhuǎn)移。
亦來云公鏈?zhǔn)褂弥俨萌寺?lián)合簽名以及 SPV(Simplified Payment Verification,簡單交易驗證)的機(jī)制來保障與側(cè)鏈間的轉(zhuǎn)賬安全,主鏈的持幣人共同選舉出一定數(shù)量的“仲裁人”,仲裁人負(fù)責(zé)對側(cè)鏈到主鏈的提幣交易進(jìn)行簽名,多數(shù)的仲裁人簽名就可以解鎖主鏈上從代表側(cè)鏈的賬戶向普通賬戶轉(zhuǎn)賬的“提幣交易”。主鏈到側(cè)鏈充值操作的安全通過 SPV來保障,每個側(cè)鏈節(jié)點都會同步主鏈的所有區(qū)塊頭,再加上 merkle證明路徑以及交易信息,就可以從數(shù)據(jù)結(jié)構(gòu)和算法的角度完成對轉(zhuǎn)賬交易的去中心化共識。
亦來云的側(cè)鏈可以使用任意的共識機(jī)制,目前亦來云團(tuán)隊已經(jīng)開發(fā)出了基于 POW共識的側(cè)鏈,可以接入主鏈完成基于 SPV和 DPOS的充值和提幣操作。這個基于 POW的側(cè)鏈可以借助主鏈的算力來保障自己的安全,主鏈算力的使用權(quán)交給基于 DPOS共識選舉出的“仲裁人”,每個仲裁人輪流對側(cè)鏈進(jìn)行基于 POW的打包出塊。
亦來云通過跨鏈技術(shù)實現(xiàn)與自有 token的區(qū)塊鏈系統(tǒng)的相互轉(zhuǎn)賬,這種與亦來云能夠相互轉(zhuǎn)賬的區(qū)塊鏈,我們稱為“友鏈”。
主側(cè)鏈間的轉(zhuǎn)賬
側(cè)鏈技術(shù)關(guān)鍵是要解決主鏈和側(cè)鏈間的轉(zhuǎn)賬問題,要有機(jī)制保障主鏈側(cè)鏈間的轉(zhuǎn)賬是安全可信的。為此 Adam Back等人發(fā)表了那個著名的側(cè)鏈白皮書,提出了一種叫做雙向錨定(Two-waypeg)的技術(shù),來解決資產(chǎn)在兩條鏈間的轉(zhuǎn)移問題?;镜脑硎腔?SPV來互相驗證交易在另一條鏈上確實存在,但是這有一個前提,就是都要保存對方的所有區(qū)塊頭信息。亦來云主鏈和側(cè)鏈?zhǔn)?1對多的關(guān)系,使用對稱的雙向錨定,對于側(cè)鏈只保存一份主鏈的全部區(qū)塊頭信息沒有什么問題,如果主鏈需要保存所有側(cè)鏈的區(qū)塊頭信息,是不可接受的,所以在亦來云的主側(cè)鏈架構(gòu)上不能夠使用對稱的基于 SPV的雙向錨定。
亦來云對于主鏈和側(cè)鏈之間兩個方向的轉(zhuǎn)賬分別采用不同的機(jī)制來保障。
1. 主鏈到側(cè)鏈轉(zhuǎn)賬
亦來云主鏈到側(cè)鏈的轉(zhuǎn)賬基于 SPV來實現(xiàn),側(cè)鏈上需要集成主鏈的 SPV模塊,用于隨時同步主鏈區(qū)塊以及主鏈上向側(cè)鏈的轉(zhuǎn)賬交易。轉(zhuǎn)賬過程如下:
1. 用戶通過錢包在主鏈從地址 U向主鏈上代表側(cè)鏈的地址 S轉(zhuǎn)賬 n個 ELA,并在交易中附加上自己在側(cè)鏈的地址 u,發(fā)送到主鏈上,這個交易標(biāo)記為 tx1。
2. 主鏈的礦工節(jié)點將 tx1打包并成功出塊。
3. 等待足夠的確認(rèn)后輪值的仲裁人節(jié)點 A的 SPV模塊獲得這個主鏈上的轉(zhuǎn)賬交易,從交易中獲得轉(zhuǎn)賬地址 u,構(gòu)造給 u發(fā)幣的交易 tx2,發(fā)幣數(shù)量等同于 tx1中 U給 S的轉(zhuǎn)賬數(shù)量,tx2中同時攜帶 SPV證明路徑和 tx1。
4. 輪值的仲裁人節(jié)點 A將 tx2發(fā)送到側(cè)鏈節(jié)點。
5. 側(cè)鏈將 tx2打包出塊。
6. 等待足夠的確認(rèn)后,用戶在錢包上看到的自己的側(cè)鏈地址 u入賬了 n個 SToken。
2. 側(cè)鏈到主鏈轉(zhuǎn)賬
亦來云側(cè)鏈到主鏈的轉(zhuǎn)賬安全通過主鏈的仲裁人機(jī)制來保證,下面是轉(zhuǎn)賬過程:
1. 用戶通過錢包在側(cè)鏈從地址 u發(fā)起?幣交易,?取 m個 SToken,并在交易中附加上自己在主鏈的地址 U,發(fā)送到側(cè)鏈,這個交易標(biāo)記為 tx3。
2. 側(cè)鏈的礦工節(jié)點將包含 tx3的交易打包并成功出塊。
3. 輪值的仲裁人節(jié)點 A向自己運(yùn)行的側(cè)鏈節(jié)點獲取 tx3。
4. 輪值的仲裁人節(jié)點 A根據(jù) tx3構(gòu)造一個在主鏈上從 S轉(zhuǎn)移 m個 ELA到 U的交易 tx4,將這個交易廣播給所有的仲裁人節(jié)點簽名。
5. 輪值的仲裁人節(jié)點 A收到超過 2/3的仲裁人對 tx4的簽名,就將攜帶這些簽名的 tx4?交到主鏈。
6. 礦工將包含 tx4的交易打包出塊。
7. 等待足夠的確認(rèn)后,用戶在錢包上看到自己的主鏈地址 U入賬了 m個 ELA。
3. 仲裁人
上面的轉(zhuǎn)賬過程都有仲裁人的參與,在主鏈到側(cè)鏈的轉(zhuǎn)賬過程中,仲裁人的作用是生成和轉(zhuǎn)移交易到側(cè)鏈,并不參與簽名;在側(cè)鏈到主鏈的轉(zhuǎn)賬過程中,仲裁人的作用除了生成和轉(zhuǎn)移交易,同時還要對交易簽名,讓主鏈上從代表側(cè)鏈的賬戶向普通賬戶轉(zhuǎn)賬的“提幣交易”能夠被各個主鏈節(jié)點驗證通過。
仲裁人通過在主鏈上投票選舉產(chǎn)生,并且定期輪換。每個仲裁人需要提供足夠的計算和網(wǎng)絡(luò)資源,以便能夠至少運(yùn)行一個主鏈節(jié)點和對應(yīng) N條側(cè)鏈的 N個節(jié)點。仲裁人的收益來自于為側(cè)鏈打包出塊所獲得的交易費(fèi)。
基于 POW的側(cè)鏈
亦來云提供了基于 POW的側(cè)鏈實現(xiàn),使用這個實現(xiàn),可以方便的搭建出一條側(cè)鏈來開發(fā) DAPP應(yīng)用。
這條基于 POW的側(cè)鏈采用與亦來云主鏈聯(lián)合挖礦的方式獲得算力,主鏈的當(dāng)前輪值仲裁人作為礦工將側(cè)鏈的交易打包生成挖礦交易放在主鏈上,主鏈再通過與比特幣聯(lián)合挖礦的方式出塊,按照聯(lián)合挖礦的原理,算力證明再傳遞到側(cè)鏈,側(cè)鏈的任意全節(jié)點可以依據(jù)這個算力證明來驗證出塊的有效性。
主鏈在一個仲裁人選舉周期內(nèi)的所有仲裁人會按照順序輪流作為“側(cè)鏈出塊輪值仲裁人”履行相應(yīng)的職責(zé),這里面就包括為側(cè)鏈出塊的職責(zé)。輪換動作通過側(cè)鏈出塊觸發(fā),每個仲裁人輪流對一個側(cè)鏈出塊,順序通過上一輪的投票統(tǒng)計結(jié)果確定。出塊行為最終通過發(fā)布到主鏈上的挖礦交易體現(xiàn),每個主鏈節(jié)點都會對這個挖礦交易是否合法進(jìn)行共識,其中一個主要的驗證就是看發(fā)布這個挖礦交易的簽名人是否是當(dāng)前有權(quán)對這個側(cè)鏈出塊的“側(cè)鏈出塊輪值仲裁人”。
側(cè)鏈的出塊收益(只有交易費(fèi),沒有創(chuàng)幣)仍然是分配給礦工和基金會,這里的礦工就是當(dāng)前在主鏈發(fā)起“挖礦交易”的仲裁人,當(dāng)然這個挖礦交易放到主鏈上也是要付礦工費(fèi)的,這個礦工費(fèi)是付給真正付出算力的比特幣礦工。
在上述的側(cè)鏈聯(lián)合挖礦的模型中,側(cè)鏈的安全依靠主鏈的選舉信任以及聯(lián)合挖礦提供的算力來保證,完成了從主鏈到側(cè)鏈的信任傳遞。側(cè)鏈?zhǔn)褂?POW的共識策略,簡單可靠,交易歷史不會因為側(cè)鏈某些相關(guān)方作惡而被篡改。側(cè)鏈也可以自己單獨挖礦,但是要和主鏈聯(lián)合挖礦的算力競爭,所以在遵循 POW規(guī)則的情況下,主鏈會為側(cè)鏈提供足夠強(qiáng)大的安全保障。
基于 DPOS的側(cè)鏈
亦來云同時在規(guī)劃開發(fā)基于 DPOS共識的側(cè)鏈,側(cè)鏈上 DPOS共識中的代理人由主鏈的仲裁人來擔(dān)任,仍然相當(dāng)于通過主鏈保證側(cè)鏈的安全,只是減少了挖礦的過程,會獲得更快的出塊速度。側(cè)鏈的每個節(jié)點都可以通過掛接的主鏈 SPV模塊來獲得主鏈對仲裁人的投票信息,從而對仲裁人的合法性達(dá)成共識。
友鏈
側(cè)鏈的概念來自于比特幣,在這個場景下側(cè)鏈沒有自有的 token,有自有 token的鏈有獨立的經(jīng)濟(jì)體系,亦來云與這種自有 token鏈之間的轉(zhuǎn)賬需要基于當(dāng)前兩種 token的市場兌換匯率來進(jìn)行,這個自有 token的鏈我們稱為“友鏈”。
亦來云對友鏈的支持分為兩個階段:第一個階段支持友鏈和亦來云主鏈跨鏈的原子交易,這種交易是點對點的,需要交易雙方自己約定兌換匯率,創(chuàng)建互相制約的原子兌換交易;第二個階段會基于去中心的交易所,完成主鏈和友鏈 token的自由兌換,不需要用戶間再點對點的創(chuàng)建兌換交易。
第一個階段的原子交易會借助哈希鎖來實現(xiàn),下面通過一個具體的例子來描述兌換過程。
假設(shè)有一條友鏈 F,自有 token FToken,Alice和 Bob需要在亦來云公鏈(這里用 E來代表)和鏈 F之間完成 ELA和 FToken的兌換。Alice在鏈 E和鏈 F上分別有地址 EA和 FA,Bob在鏈 E和鏈 F上分別有地址 EB和 FB。假設(shè)此時的市場兌換匯率為 1:10(一個 ELA兌換 10個 FToken),Alice希望用 10個ELA和 Bob兌換 100個 FToken。
1. Alice在鏈 E上發(fā)起一筆從 EA向 EB的特殊轉(zhuǎn)賬交易 tx1,轉(zhuǎn)賬金額為 10個 ELA,這個交易的解鎖條件除了 EB對應(yīng)私鑰的簽名,還增加了一個哈希鎖,Alice先生成一個隨機(jī)數(shù) x,對 x取哈希 hash(x),放到這筆交易中,Bob需要提交 x才能夠解鎖這個哈希鎖。
2. Bob看到了鏈 E上的 tx1,就在鏈 F上構(gòu)造另外一筆特殊的交易 tx2,從 FB向 FA轉(zhuǎn)賬 100個FToken,這個交易的解鎖條件除了 FA對應(yīng)私鑰的簽名,還增加了一個哈希鎖,同樣是hash(x),解鎖條件同樣是需要提供 x。
3. Alice在鏈 F上提供對 tx2的簽名以及 x來解鎖 tx2,將 100個 FToken轉(zhuǎn)賬到自己在鏈 F上另外的地址。
4. Bob看到 tx2被解鎖,同時也就得到了 x,然后 Bob用 EB的私鑰簽名 tx1并提供 x,從而解鎖tx1,將 10個 ELA轉(zhuǎn)賬到自己在鏈 E上另外的地址。