中國人民解放軍61711部隊 鄧小波
區(qū)塊鏈技術也叫分布式賬本技術,是一種用于數(shù)據(jù)記錄和存儲的信息技術,這種技術以鏈式結構來儲存數(shù)據(jù),用密碼學算法來進行數(shù)據(jù)傳輸和訪問加密,保證數(shù)據(jù)安全。在電子交易逐漸繁榮的當前,區(qū)塊鏈技術也成為了金融、物流、醫(yī)療、稅務、教育、供應鏈等多個領域進行貿(mào)易和去中心化改革的首選技術方案。但該技術雖存在良好的數(shù)據(jù)記錄和存儲優(yōu)勢,但缺點也同樣突出。為了能使區(qū)塊鏈技術更好地應用到各行業(yè)領域,將就區(qū)塊鏈技術的問題進行分體,提出優(yōu)化方案,以便能夠改進區(qū)塊鏈技術的缺陷,提高區(qū)塊鏈技術的應用范圍。
區(qū)塊鏈是一個去中心化的分布式共享數(shù)據(jù)庫,因為去中心化的特性,所以每個節(jié)點都必須能夠儲備完整的區(qū)塊數(shù)據(jù),而因為電子交易過程越來越繁瑣和復雜,系統(tǒng)節(jié)點的數(shù)量在上升,每個節(jié)點儲備的區(qū)塊數(shù)據(jù)就會增大,對本地存儲空間的需求也會越來越大,這成了區(qū)塊鏈技術的應用瓶頸,而唯有解決這一瓶頸,才能讓區(qū)塊鏈技術在電子貿(mào)易中發(fā)揮更大的作用。
區(qū)塊鏈作為去中心化的信息系統(tǒng),其運作原理是依靠共識算法建立的信任機制以及分布式數(shù)據(jù)對唯一數(shù)據(jù)庫進行維護,而為了保證唯一數(shù)據(jù)庫的可靠性,區(qū)塊鏈的所有節(jié)點都必須保持一致性,及要做到共同記錄、共同維護和共同更新。這造成區(qū)塊鏈的存儲擴展性非常薄弱,因為所有節(jié)點都需要保持對唯一數(shù)據(jù)庫的同步性及一致性,在運作過程中,本地存儲要騰出大量空間來同步區(qū)塊鏈數(shù)據(jù)。比如比特幣系統(tǒng),比特幣系統(tǒng)采用了區(qū)塊鏈技術作為數(shù)字貨幣加密技術,到2020的一月份為止,該系統(tǒng)就已經(jīng)擁有超過60萬個區(qū)塊,每個區(qū)塊的容量達到241GB,且這個數(shù)值還在以平均每月4.5GB的趨勢快速增長。且需要注意的是,比特幣系統(tǒng)中的區(qū)塊鏈只是用于基礎的數(shù)字貨幣交易信息記錄,所涉及的內(nèi)容不算復雜,如果要應用于其它的信息記錄,那么區(qū)塊鏈要記錄的數(shù)據(jù)將達到一個驚人的地步。
由此可見,電子交易和區(qū)塊鏈節(jié)點越多,數(shù)據(jù)容量就會越大,加上區(qū)塊鏈的存儲擴展性非常薄弱,為了保持一致性,實現(xiàn)去中心化,每個節(jié)點服務器都需要儲備詳細的賬本信息,這就導致節(jié)點服務器的存儲要求非常高,存儲負荷巨大。尤其是大型區(qū)塊鏈系統(tǒng),因為區(qū)塊鏈系統(tǒng)越大,普通用戶節(jié)點就會越多,但普通用戶由于電腦配置等原因,往往很難達到區(qū)塊鏈系統(tǒng)要求的PC存儲性能,這就更制約了區(qū)塊鏈的存儲擴展性。
要實現(xiàn)區(qū)塊鏈本地存儲的有效增強,可以從區(qū)塊鏈數(shù)據(jù)結構本身以及網(wǎng)絡節(jié)點性能兩個方面出發(fā),首先是區(qū)塊鏈數(shù)據(jù)結構方面,最好的是方式是改變區(qū)塊鏈的數(shù)據(jù)結構,也就是打造輕量型的區(qū)塊鏈,這種區(qū)塊鏈數(shù)據(jù)結構中,區(qū)塊交易被交易哈希索引替代,這樣就可以在區(qū)塊鏈中減輕本地存儲的負荷。設計者可以通過在區(qū)塊頭設計對應的賬戶樹結構,用來對系統(tǒng)節(jié)點賬戶加以記錄,這樣便能夠優(yōu)化存儲性能良,減輕節(jié)點服務器在本地存儲需要承受的存儲負擔。其次是節(jié)點網(wǎng)絡性能方面,可以利用糾刪碼來優(yōu)化區(qū)塊鏈本地存儲,具體做法是通過將數(shù)據(jù)處理層增加到系統(tǒng)層次中,再對區(qū)塊數(shù)據(jù)進行編碼和解碼轉化,數(shù)據(jù)被成功轉化為節(jié)點后進行數(shù)據(jù)切片,這樣節(jié)點就可以根據(jù)本身實際的存儲性能對不需要的編碼數(shù)據(jù)切片進行刪除,而如果要重構區(qū)塊數(shù)據(jù)也可以從另外的節(jié)點再獲取數(shù)據(jù)切片進行區(qū)塊重構,這樣就保證了數(shù)據(jù)庫的去中心化,同時使得區(qū)塊鏈的一致性和穩(wěn)定性得到增強。
所謂輕量型區(qū)塊鏈,即是用在數(shù)據(jù)層增加賬戶數(shù)據(jù),用交易哈希索引替換區(qū)塊交易的系統(tǒng)類型。在常規(guī)的區(qū)塊鏈系統(tǒng)中,實現(xiàn)去中心化的原理是將所有參與節(jié)點全部用于賬本保存,所有交易產(chǎn)生的數(shù)據(jù)信息都會被完整記錄到區(qū)塊中,這樣一來交易數(shù)據(jù)所占用的存儲空間就非常巨大。舉例而言,在區(qū)塊輸入這部分數(shù)據(jù)時,分別需要記錄前一筆交易的哈希值、花費的輸出索引、輸出金額以及腳本系統(tǒng)中的各種操作符,這些內(nèi)容占據(jù)了很大的區(qū)塊容量,且大部分接點和這次交易毫無關系,也就是存在存儲浪費的現(xiàn)象。輕量型區(qū)塊鏈數(shù)據(jù)層是以區(qū)塊數(shù)據(jù)、賬戶數(shù)據(jù)和本地交易共同組成數(shù)據(jù)層,其結構如圖1所示。

圖1 輕量型區(qū)塊鏈數(shù)據(jù)結構

圖2 區(qū)塊數(shù)據(jù)結構
由圖1可見,相比常規(guī)區(qū)塊鏈,輕量型區(qū)塊鏈新增了賬戶數(shù)據(jù)和本地交易,且在區(qū)塊鏈類型中,交易被以哈希值形式存儲到塊數(shù)據(jù),同時,因為塊頭上增加了賬戶樹根,區(qū)塊數(shù)據(jù)結構如圖2所示。
其中,Time是時間戳,也就是記錄挖礦時間的信息,而Nonce是計算出的在要求值以下或者等于要求值的哈希值,是礦工完成工作量的證明。從圖2的區(qū)塊數(shù)據(jù)結構可見,在輕量型區(qū)塊鏈中,PrevBlock Hash是以前塊的整個塊數(shù)據(jù)進行哈希運算后得到的哈希指針,這個哈希指針從結構中的前塊指向后塊,所以后塊就保留了前塊的哈希值,也就是說每個區(qū)塊中會保存上一個塊的哈希值,這樣一來就形成了鏈式結構,同時輕量型區(qū)塊鏈也具備了不可篡改性。因為下一個塊要記錄上一個塊的哈希值,如果改動任意一個區(qū)塊的身前區(qū)塊數(shù)據(jù),就會引發(fā)數(shù)據(jù)沖突,而身后區(qū)塊的PrevBlock Hash就會對身前區(qū)塊的數(shù)據(jù)進行檢驗,避免了交易中存在的數(shù)據(jù)錯誤,利用這種逐層計算交易哈希值的方式,交易本身的合法性就得到保證,這樣哈希索引就可以替換區(qū)塊交易,同時避免出現(xiàn)賬戶數(shù)據(jù)錯誤等問題,確保交易本身的合法性。
在應用輕量型區(qū)塊鏈系統(tǒng)時,操作人員只需要將交易中需要計算的交易數(shù)據(jù)和該區(qū)塊中其他交易做運算,然后將ROOT值做簡單比較就可以驗證交易合法性。這種設計的優(yōu)勢在于使用ROOT值比較驗證取代了傳統(tǒng)交易中用鎖定和解鎖腳本驗證UTXO合法性的復雜操作,節(jié)省了許多不必要的數(shù)據(jù)信息,這些信息的實際信息價值并不高,不存在必須保留的必要性,反而會在區(qū)塊中占用諸多存儲空間,這無疑是一種資源浪費,且因為交易內(nèi)容過于完整和詳細,一但出現(xiàn)信息泄露,有極大可能暴露用戶的個人隱私。在輕量型區(qū)塊鏈中,是利用的哈希運算的不可逆性,用交易的哈希值代替具體交易信息被記錄在區(qū)塊中,哈希值因為自身唯一性,可以對應對應的交易信息,也不可用逆運算的方式恢復交易信息,這樣就可以證明某筆交易存在于區(qū)塊鏈中,既保證了用戶的私信,同時也減少了無意義信息存儲擠占區(qū)塊容量。
節(jié)點網(wǎng)絡性能可以利用數(shù)據(jù)切片的形式進行加強,一般而言每一個區(qū)塊鏈系統(tǒng)有三個用戶節(jié)點,假設區(qū)塊鏈有某塊N,那么使用數(shù)據(jù)切片就能實現(xiàn)數(shù)據(jù)線性切片且不存在重合,也就是公式:N=N1+N2+N3+N4+N5,數(shù)據(jù)切片之后節(jié)點依據(jù)實際的存儲能力可以隨機刪除碎片,不同節(jié)點保留有不同的切片,如第一個節(jié)點有1、4,第二個節(jié)點有切片2、3,第三個節(jié)點有切片5,每個節(jié)點儲備一部分數(shù)據(jù)切片,而切片N1到N5則由全網(wǎng)備份,如果要重構數(shù)據(jù),第一個節(jié)點就可以向第二個節(jié)點或者第三個節(jié)點獲取切片,以此實現(xiàn)重構數(shù)據(jù)。
常見的設計是使用糾刪碼編碼區(qū)塊數(shù)據(jù),降低節(jié)點存儲負擔,在區(qū)塊鏈中,編碼矩陣分為公有和私有兩個類型,公有編碼矩陣只有唯一的編碼矩陣,該編碼矩陣為系統(tǒng)共用,系統(tǒng)運行時生成編碼矩陣,無法更改,私有編碼矩陣根據(jù)區(qū)塊鏈中的節(jié)點對應的賬戶地址生成不同的矩陣因子。在公用編碼矩陣中,網(wǎng)絡是節(jié)點獲取編碼切片的主要載體,依靠網(wǎng)絡節(jié)點向區(qū)塊鏈的其它節(jié)點調(diào)取切片實現(xiàn)重構,在私有編碼矩陣中,節(jié)點被分成普通節(jié)點和超級節(jié)點,由超級節(jié)點的編碼矩陣向普通節(jié)點提供切片。根據(jù)所選擇技術是聯(lián)盟鏈還是共有鏈,是去中心化還是多中心化,可適當選擇對應矩陣。因為在區(qū)塊鏈中所有的數(shù)據(jù)都是二進制的方式來進行存儲,不同區(qū)塊要單獨編碼,獲取編碼矩陣后,將區(qū)塊均勻分割成若干數(shù)據(jù)切片,然后產(chǎn)生切片線性組合,將數(shù)據(jù)切片和編碼矩陣采用矩陣乘法進行計算得到編碼數(shù)據(jù),所有切片都需要進行標識,以此確保可以重構數(shù)據(jù)。
結語:區(qū)塊鏈技術正被廣泛應用于各個領域,正因如此,對于區(qū)塊鏈存在的本地存儲問題就要予以嚴肅看待,從區(qū)塊鏈技術去中心化的特性來看,過多無意義的信息記錄造成了本地存儲中容量的擠占問題,為了解決這一問題,可以通過改變區(qū)塊數(shù)據(jù)儲存結構以及進行數(shù)據(jù)切片等方式減輕節(jié)點服務器本地存儲的負荷,從而優(yōu)化區(qū)塊鏈本地存儲,為交易安全和信息備份提供更好的保護作用。