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