俞學(xué)勱



閃電網(wǎng)絡(luò)與雷電網(wǎng)絡(luò)的設(shè)計已經(jīng)將擴(kuò)展性問題的解決引導(dǎo)向了主鏈之外的第二層,將不同需求的網(wǎng)絡(luò)和主鏈網(wǎng)絡(luò)分層,成了解決擴(kuò)展性問題的一大趨勢。
比特幣作為第一個區(qū)塊鏈應(yīng)用與運行到目前為止最被信任的公鏈,其擴(kuò)展性問題卻持續(xù)被作為焦點貫穿著整個鏈的發(fā)展周期。類似的問題,在以太坊上依然存在。
在主鏈擴(kuò)展難以破局的過程中,一方面出現(xiàn)了將主鏈區(qū)塊鏈數(shù)據(jù)驗證和計算的責(zé)任僅交由一小組高性能節(jié)點來完成的解決方式,比特股、EoS等的DPoS機制即通過這種方式來實現(xiàn)。這類解決方案通過模擬現(xiàn)實中的議會制選舉高性能節(jié)點,而難免引起了利益集團(tuán)與中心化趨勢的疑議。除此之外,也有通過鏈下交易來解決這類問題的嘗試,其中比特幣的閃電網(wǎng)絡(luò)和以太坊的雷電網(wǎng)絡(luò)是較為典型的兩個實例。
由于比特幣UTXO的區(qū)塊鏈模型和以太坊基于賬戶余額模型的區(qū)別,在鏈下交易通道的具體協(xié)議設(shè)計上就有了閃電網(wǎng)絡(luò)和雷電網(wǎng)絡(luò)的差異。但不管如何,閃電網(wǎng)絡(luò)與雷電網(wǎng)絡(luò)的設(shè)計已經(jīng)將擴(kuò)展性問題的解決引導(dǎo)向了主鏈之外的第二層,將不同需求的網(wǎng)絡(luò)和主鏈網(wǎng)絡(luò)分層,成了解決擴(kuò)展性問題的一大趨勢。
主子鏈設(shè)計與分片概念
分片源于數(shù)據(jù)庫設(shè)計中的概念,通過分類備份和冗余來增加整體數(shù)據(jù)庫的處理效率和容錯性。分布式數(shù)據(jù)庫中通過建立不同的分片機制滿足業(yè)務(wù)系統(tǒng)的不同要求。區(qū)塊鏈中針對性能擴(kuò)展所提出的第二層(Layer 2)解決方案也借用了這一概念,通過將不同業(yè)務(wù)對區(qū)塊鏈的不同需求進(jìn)行分類,并各自分布在不同的子鏈當(dāng)中,從而解決全鏈共識的性能瓶頸。
然而,區(qū)塊鏈與分布式數(shù)據(jù)庫中較大的區(qū)別在于,分布式數(shù)據(jù)庫的增刪改查以及計算來自業(yè)務(wù)系統(tǒng)或者中心化的數(shù)據(jù)管理系統(tǒng),分布式數(shù)據(jù)庫各節(jié)點僅負(fù)責(zé)響應(yīng)數(shù)據(jù)管理員(DBA);而區(qū)塊鏈的業(yè)務(wù)邏輯也來自各節(jié)點即包含業(yè)務(wù)邏輯、計算,也包含了至少賬本層面數(shù)據(jù)的管理,也就是每個節(jié)點都可以是DBA,或者理解為根本沒有DBA,因此在設(shè)計上則更為復(fù)雜。
由于分布式數(shù)據(jù)庫的交易邏輯為中心化控制,因此其分片可以被看作是單純的存儲分片。區(qū)塊鏈的分片則主要分為相對簡單的交易分片:即仍然保持全網(wǎng)絡(luò)節(jié)點在數(shù)據(jù)上的全同步,僅通過分片來讓不同節(jié)點運行不同的運算邏輯;和更為困難的狀態(tài)分片:即同時包含了對交易與存儲的分區(qū)。狹義上來理解,最直觀的狀態(tài)分片其實就是各種分叉,不同分叉鏈上各自處理自己的交易、存儲自己的賬本數(shù)據(jù),驗證歷史區(qū)塊有效性的時候可以選擇一直回溯到分叉發(fā)生前的區(qū)塊,通過快照來確認(rèn)歷史交易。但這種類型的分片由于沒有后續(xù)跨片交互的機制設(shè)計,因此并沒有提升太多實際價值。
那么狀態(tài)分片的跨片交易需要解決的就是如何去相互驗證不同分片內(nèi)交易的有效性了。分片內(nèi)部交易的有效性由分片內(nèi)的節(jié)點通過共識機制確保,也因此在SimpleChain(上鏈)的設(shè)計當(dāng)中,不同的分片內(nèi)也同樣擁有著區(qū)塊鏈的運行機制,因此跨片交易問題在SimpleChain(上鏈)當(dāng)中就被理解為跨鏈交易的問題,而分片則被定義為子鏈。
跨鏈交易的形成
由于跨子鏈交易來自兩個賬本數(shù)據(jù)不一致的區(qū)塊鏈用戶之間,因此通過構(gòu)造一個不作為狀態(tài)存儲在賬本中的“對象”,可以實現(xiàn)類似于SPV(簡單支付驗證)的機制,即通過互相之間所同步的區(qū)塊頭來完成梅克爾證明,驗證這個構(gòu)造出來的“對象”所傳遞信息的有效性。在這里,可以把這個“對象”稱為收據(jù)。
在圖1中,表示的是一個從區(qū)塊鏈X中的用戶A向在區(qū)塊鏈Y中的用戶C發(fā)送100個單位的資產(chǎn)的過程。
為了確保上面這個機制的持續(xù)有效,還需要考慮跨鏈交易中的終局性問題,或者叫做分叉選擇機制。區(qū)塊鏈Y所驗證的區(qū)塊鏈X交易必須來自區(qū)塊鏈X有效鏈的塊中的交易,而不是來源于一個孤塊或者孤鏈。Vlad Zamfir提出過一個合并塊的設(shè)計,也就是兩條鏈在需要發(fā)起跨鏈交易時,兩個在不同鏈上的塊合并為同一個區(qū)塊,各自的鏈都基于這個合并塊去延長之后的塊數(shù)據(jù)。但實際上合并塊意味著兩條鏈的賬本同步,因此其實并不能解決兩個分片或者兩個鏈之間的相互獨立性問題。但是跨鏈交易中,如何尋找正確的對方鏈的塊去完成收據(jù)的梅克爾證明,是可以從Vlad Zamfir的思路中找到答案的。
Vlad Zamfir將兩條需要實現(xiàn)跨鏈的鏈進(jìn)行等級排序,分為“父鏈”和“子鏈”,“子鏈”需要在與“父鏈”高度相同,或高于“父鏈”高度所產(chǎn)生的區(qū)塊與“父鏈”進(jìn)行區(qū)塊合并,或者在場景中是在“父鏈”上進(jìn)行區(qū)塊跨鏈驗證。這樣能夠確保兩個鏈在各自延長的過程中,跨鏈部分?jǐn)?shù)據(jù)能夠持續(xù)保持一致。
但是,在上述的解決方案中存在需要兩個區(qū)塊鏈同步出塊的前提,因為如果“父鏈”X的交易遲遲不能確認(rèn),或者沒有延長,或者“子鏈”Y沒有及時收到X的延長情況,抑或“子鏈”與“父鏈”存在間斷性同步,則“子鏈”Y的后續(xù)交易有效性也都會受到相應(yīng)的影響。
在以太坊2.0的設(shè)計中,信標(biāo)鏈被賦予了這個職能。信標(biāo)鏈可以被認(rèn)為是以太坊2.0設(shè)計中所有分片鏈的主鏈,這條主鏈通過Casper共識機制來選舉并在每一輪中隨機產(chǎn)生分片驗證者,用于協(xié)調(diào)分片之間的交易正確性。但是在屬于PoS的Casper共識機制中,由于沒有了難度要求、nonce、塊哈希這些原本在PoW中能夠執(zhí)行無狀態(tài)SPV證明的工具,因此要驗證分片鏈的有效性需要回溯到可信區(qū)塊,再重新計算可信區(qū)塊后的區(qū)塊狀態(tài)一致到當(dāng)前區(qū)塊,才能完成驗證,導(dǎo)致驗證者增加了工作量。因此在SimpleChain當(dāng)中,為了減少驗證者的工作量,類似信標(biāo)鏈的角色通過PoW的主鏈來完成。
主鏈當(dāng)中存在錨定礦工的角色,所謂錨定礦工承擔(dān)三個功能角色:一是負(fù)責(zé)在某子鏈發(fā)起跨鏈交易時驗證該子鏈狀態(tài)的有效性;二是負(fù)責(zé)在主鏈中寫入子鏈交易并廣播獲得確認(rèn);三是將意在主鏈確認(rèn)的跨鏈交易結(jié)果分別寫入交易發(fā)起子鏈與交易接收子鏈的區(qū)塊中。錨定礦工在驗證、廣播和傳遞跨鏈交易時,既作為子鏈礦工也作為主鏈礦工存在。然而在主鏈上的礦工數(shù)量會比子鏈中的礦工數(shù)量多,因此在子鏈中偽造交易傳遞到主鏈的成本將大大低于在主鏈偽造交易寫入子鏈。因此需要一種更為合理的錨定礦工選舉機制。
錨定礦工不針對于某個子鏈長期存在,但需要長時間作為主鏈礦工存在。由于PoW的主鏈能夠允許無狀態(tài)SPV證明,因此在SimpleChain中將錨定礦工的選舉通過隨機的形式來完成。
由于錨定礦工來自PoW主鏈礦工,因此通過從小到大排列主鏈礦工所計算出的工作量證明計算結(jié)果,進(jìn)行錨定礦工篩選。由于數(shù)值越小的工作量證明計算結(jié)果獲得的概率越低,因此在錨定礦工預(yù)選列表中的排名越高,超出該次錨定礦工數(shù)量上限排名的礦工則在當(dāng)前輪的交易驗證中不參與簽。錨定礦工選舉過程的PoW排序與主鏈延長的PoW同步進(jìn)行,即主鏈礦工不僅將使用工作量證明計算結(jié)果獲得主鏈SIPC獎勵,還將獲得錨定礦工獎勵。錨定礦工獎勵來自子鏈跨鏈交易發(fā)起者所支付的SIPC礦工手續(xù)費。
在保證主子鏈的一致性問題上,采用n個確認(rèn)的機制。當(dāng)發(fā)起一筆跨鏈交易時,子鏈內(nèi)的區(qū)塊應(yīng)首先獲得n個塊高的確認(rèn),才能夠通過錨定礦工的驗證并廣播至主鏈上。
主子鏈結(jié)構(gòu)持續(xù)穩(wěn)態(tài)的經(jīng)濟(jì)設(shè)計
SimpleChain在白皮書1.0中提出了主鏈數(shù)字資源SIPC的微通脹機制,即隨著子鏈的增加、子鏈活躍度的增加以及對跨鏈交易需求的增加,SIPC的區(qū)塊獎勵會在原本的衰減曲線基礎(chǔ)上產(chǎn)生微調(diào)。這種微調(diào)的結(jié)果就是當(dāng)主鏈SIPC被作為一種資源,子鏈對其的需求量增加的時候,主鏈出塊獎勵將相應(yīng)增加,以當(dāng)前狀態(tài)為例,主鏈出塊獎勵將可能從20SIPC增加到21SIPC。
假設(shè)一個資料的啟動運營池容量是10SIPC,在跨鏈過程中,每次會分出其中的0.1SIPC給到跨鏈礦工作為跨鏈礦工的部分獎勵,一次交易過后運營池容量減少為9.9SIPC。此時,一般主鏈礦工收取到的交易手續(xù)費為20+0.01,這0.01就是微通脹調(diào)節(jié)獎勵。
運營池可以由任何SimpleChain用戶選擇再次注入SIPC,也可由子鏈共識觸發(fā)活躍度下限,更改跨鏈礦工獎勵來使得跨鏈礦工獲得的s2為負(fù),即部分跨鏈?zhǔn)掷m(xù)費被存入子鏈運營池。此時,一般主鏈礦工收取的手續(xù)費中的微通脹調(diào)節(jié)獎勵k將為0或轉(zhuǎn)向負(fù)數(shù)。這種情況下表明子鏈走向衰退期,或子鏈與主鏈將逐漸通過減少互相激勵而脫離關(guān)系。
不過,需要指出的是,上述模型中可能存在的技術(shù)風(fēng)險包括主鏈區(qū)塊當(dāng)中對于包含跨鏈交易的交易量上限問題,以及過多錨定礦工造成的主鏈負(fù)擔(dān)過重的問題。經(jīng)濟(jì)模型方面,也存在“損人不利己”攻擊的可能,即通過創(chuàng)建衰減子鏈,影響主鏈礦工與用戶利益的情況。
(作者單位:浙江數(shù)秦科技有限公司。本文由浙江省區(qū)塊鏈技術(shù)應(yīng)用協(xié)會供稿)