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