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