亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        區(qū)塊鏈存儲(chǔ)可擴(kuò)展性研究進(jìn)展*

        2021-05-18 11:28:24孫知信
        軟件學(xué)報(bào) 2021年1期
        關(guān)鍵詞:可擴(kuò)展性分片賬本

        孫知信,張 鑫,相 峰,陳 露

        1(南京郵電大學(xué) 國(guó)家郵政局郵政行業(yè)技術(shù)研發(fā)中心(物聯(lián)網(wǎng)技術(shù)),江蘇 南京 210003)

        2(寬帶無(wú)線通信與傳感網(wǎng)技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室(南京郵電大學(xué)),江蘇 南京 210003)

        3(物流信息互通共享技術(shù)及應(yīng)用國(guó)家工程實(shí)驗(yàn)室(圓通速遞股份有限公司),上海 201705)

        區(qū)塊鏈技術(shù)起源于2008 年,由一名叫中本聰(Satoshi Nakamoto)的日本人在《比特幣:一個(gè)點(diǎn)對(duì)點(diǎn)電子現(xiàn)金系統(tǒng)》[1]中首次提出比特幣的概念.比特幣等數(shù)字加密貨幣的核心技術(shù)便是區(qū)塊鏈技術(shù).2015 年之前,大家更關(guān)注的是比特幣的“幣”而不是底層的區(qū)塊鏈技術(shù).2015 年,以太坊(Ethereum)[2]的出現(xiàn)以及之后的日漸成熟,使得區(qū)塊鏈這一概念為更多人所了解和研究,并且朝著更加光明和廣泛的應(yīng)用場(chǎng)景不斷發(fā)展.

        區(qū)塊鏈技術(shù)的不斷發(fā)展,給信息共享[3]、版權(quán)保護(hù)[4]、供應(yīng)鏈[5]、物聯(lián)網(wǎng)[6,7]、醫(yī)療[8]、社交[9]以及文件存儲(chǔ)[10]等領(lǐng)域提供了更多的可能.但是與傳統(tǒng)貨幣相似,區(qū)塊鏈技術(shù)同樣存在三元悖論,即去中心化、安全性和可擴(kuò)展性,三者只能得其二.當(dāng)追求安全性和去中心化時(shí),則無(wú)法顧及可擴(kuò)展性;當(dāng)追求安全性和可擴(kuò)展性時(shí),則無(wú)法實(shí)現(xiàn)去中心化;當(dāng)追求去中心化和可擴(kuò)展性時(shí),則需要犧牲安全性.比特幣和以太坊都是優(yōu)先追求去中心化和安全性,而犧牲可擴(kuò)展性.比特幣的吞吐量為每秒處理7 次交易,以太坊則是每秒10~20 次.可擴(kuò)展性已成為區(qū)塊鏈應(yīng)用落地的最大瓶頸.區(qū)塊鏈可擴(kuò)展性可分為性能可擴(kuò)展性和功能可擴(kuò)展性,其中,性能可擴(kuò)展性包含吞吐量擴(kuò)展、存儲(chǔ)擴(kuò)展以及網(wǎng)絡(luò)擴(kuò)展:吞吐量擴(kuò)展與每個(gè)區(qū)塊中的交易數(shù)及產(chǎn)生兩個(gè)區(qū)塊的時(shí)間間隔有關(guān);存儲(chǔ)擴(kuò)展與區(qū)塊鏈生成的數(shù)據(jù)有關(guān);網(wǎng)絡(luò)擴(kuò)展與區(qū)塊鏈網(wǎng)絡(luò)中的數(shù)據(jù)傳輸有關(guān)[11].

        當(dāng)前,區(qū)塊鏈的應(yīng)用領(lǐng)域[12]可分為:(1)加密數(shù)字貨幣領(lǐng)域,如比特幣、以太幣等;(2)數(shù)據(jù)記錄及管理領(lǐng)域,如數(shù)據(jù)存儲(chǔ)[13]、數(shù)據(jù)鑒證[14]等;(3)信息安全領(lǐng)域,如認(rèn)證技術(shù)[15]、訪問(wèn)控制[16]等;(4)其他領(lǐng)域,如共享經(jīng)濟(jì)[17]、智能交通[18]和能源網(wǎng)絡(luò)[19]等等.區(qū)塊鏈在不同場(chǎng)景下的應(yīng)用,都因高冗余存儲(chǔ)(每個(gè)節(jié)點(diǎn)存儲(chǔ)一份完整的數(shù)據(jù))增強(qiáng)了數(shù)據(jù)的公開(kāi)性、透明性,提高了系統(tǒng)的可用性;但另一方面,每個(gè)節(jié)點(diǎn)都需要同步最新的賬本,這會(huì)給區(qū)塊鏈帶來(lái)性能問(wèn)題和巨大的存儲(chǔ)壓力.在加密數(shù)字貨幣比特幣中,節(jié)點(diǎn)需要對(duì)全球賬本進(jìn)行同步,才能通過(guò)檢索本地副本以驗(yàn)證交易的發(fā)起者是否擁有足夠的“幣”發(fā)起這筆交易.如圖1 所示,截至2019 年第2 季度末,比特幣大小約為221.29GB.潛在的用戶如果沒(méi)有足夠的存儲(chǔ)空間,那么它將無(wú)法加入到區(qū)塊鏈網(wǎng)絡(luò)中作為全節(jié)點(diǎn)來(lái)驗(yàn)證新交易.當(dāng)區(qū)塊鏈試圖解決物聯(lián)網(wǎng)領(lǐng)域的問(wèn)題時(shí),會(huì)遇到物聯(lián)網(wǎng)設(shè)備作為區(qū)塊鏈節(jié)點(diǎn)時(shí)節(jié)點(diǎn)數(shù)量增速快、自身體量小以及計(jì)算、存儲(chǔ)等能力不足[20]的問(wèn)題.從應(yīng)用開(kāi)發(fā)的角度看,基于區(qū)塊鏈的應(yīng)用開(kāi)發(fā)需要滿足可擴(kuò)展性要求和一致性要求[21].區(qū)塊鏈的一致性是指存儲(chǔ)在區(qū)塊鏈不同節(jié)點(diǎn)中的數(shù)據(jù)副本的取值必須一致,它通過(guò)共識(shí)算法、數(shù)據(jù)的可靠傳輸、高冗余存儲(chǔ)和加密技術(shù)來(lái)實(shí)現(xiàn)[22].由于高冗余存儲(chǔ)會(huì)增加節(jié)點(diǎn)的存儲(chǔ)壓力,導(dǎo)致存儲(chǔ)可擴(kuò)展性問(wèn)題.因此,如果需要高一致性,那么就會(huì)降低存儲(chǔ)可擴(kuò)展性.綜上,從區(qū)塊鏈的應(yīng)用領(lǐng)域和區(qū)塊鏈的應(yīng)用開(kāi)發(fā)角度來(lái)看,區(qū)塊鏈的存儲(chǔ)可擴(kuò)展性問(wèn)題已成為制約區(qū)塊鏈應(yīng)用落地的一大問(wèn)題[23].

        Fig.1 Bitcoin blockchain size from 2010 to 2019 in MBytes圖1 從2010 年~2019 年比特幣區(qū)塊鏈的大小(以MBytes 為單位)

        潘晨等學(xué)者[24]從性能擴(kuò)展和功能擴(kuò)展兩個(gè)角度,詳細(xì)介紹了當(dāng)前3 類主流提升區(qū)塊鏈吞吐量的技術(shù)和4類擴(kuò)展區(qū)塊鏈功能的技術(shù).Xie 等學(xué)者[11]給出了目前區(qū)塊鏈吞吐量、存儲(chǔ)以及網(wǎng)絡(luò)這3 方面所面臨的挑戰(zhàn),并介紹了一些解決辦法.Zhang 團(tuán)隊(duì)[25]提出了一種低開(kāi)銷的區(qū)塊鏈存儲(chǔ)架構(gòu),架構(gòu)包含3 種機(jī)制,分別是將原始數(shù)據(jù)轉(zhuǎn)換為關(guān)鍵詞的語(yǔ)義信息模板機(jī)制、將區(qū)塊鏈賬本劃分為多個(gè)切片的滯后數(shù)據(jù)切片機(jī)制以及將低價(jià)值數(shù)據(jù)存儲(chǔ)到中央數(shù)據(jù)庫(kù)的歷史數(shù)據(jù)歸檔機(jī)制.Wang 團(tuán)隊(duì)[26]建立了關(guān)于空間占用率和平均搜索時(shí)間之間的數(shù)學(xué)模式,并設(shè)計(jì)了一個(gè)數(shù)據(jù)分配策略,以實(shí)現(xiàn)在區(qū)塊鏈網(wǎng)絡(luò)中節(jié)約存儲(chǔ)空間.現(xiàn)有文獻(xiàn)一類是應(yīng)對(duì)區(qū)塊鏈存儲(chǔ)可擴(kuò)展性問(wèn)題,提出了相應(yīng)的解決方案;另一類則是對(duì)區(qū)塊鏈可擴(kuò)展性的綜述,雖然歸納得較為完整,但更偏重性能、網(wǎng)絡(luò)、吞吐量等方面的可擴(kuò)展性.兩者都沒(méi)有對(duì)區(qū)塊鏈的存儲(chǔ)可擴(kuò)展性問(wèn)題進(jìn)行詳細(xì)、系統(tǒng)的分析,沒(méi)有體現(xiàn)出在解決存儲(chǔ)可擴(kuò)展性問(wèn)題時(shí),數(shù)據(jù)存儲(chǔ)方式、節(jié)點(diǎn)間的相互關(guān)系等角度的差異分析.本文首先介紹區(qū)塊鏈所面臨的存儲(chǔ)可擴(kuò)展性問(wèn)題和區(qū)塊鏈的存儲(chǔ)模型,然后系統(tǒng)性地對(duì)鏈上存儲(chǔ)(on-chain storage)和鏈下[27]存儲(chǔ)(offchain storage)的基本原理、現(xiàn)存問(wèn)題進(jìn)行了分析(如圖2 所示),并對(duì)未來(lái)的發(fā)展加以展望,希望能給當(dāng)前及未來(lái)的相關(guān)研究工作提供一定的參考與幫助.

        Fig.2 Solutions to improve the storage scalability of blockchain圖2 提高區(qū)塊鏈存儲(chǔ)可擴(kuò)展性方法分類

        本文第1 節(jié)概述區(qū)塊鏈技術(shù)和區(qū)塊鏈的存儲(chǔ)模型.第2 節(jié)和第3 節(jié)分別綜述目前提升區(qū)塊鏈存儲(chǔ)可擴(kuò)展性的兩大類解決方案——鏈下存儲(chǔ)和鏈上存儲(chǔ).第4 節(jié)指出當(dāng)前解決方案所面臨的問(wèn)題,并給出未來(lái)可能的研究方向.

        1 區(qū)塊鏈概述和存儲(chǔ)模型

        1.1 區(qū)塊鏈概述

        區(qū)塊鏈?zhǔn)且环N結(jié)合分布式共識(shí)、加密、時(shí)間戳以及經(jīng)濟(jì)激勵(lì)等方法,在一個(gè)完全無(wú)信任的環(huán)境下,實(shí)現(xiàn)去中心化的點(diǎn)對(duì)點(diǎn)交易、協(xié)調(diào)與協(xié)作的技術(shù)[7].區(qū)塊鏈技術(shù)有許多優(yōu)點(diǎn),例如去中心化、安全性、匿名性、透明性以及自動(dòng)化等.去中心化的特性解決了在傳統(tǒng)中心化場(chǎng)景下成本高昂、效率低下、安全性不可靠等問(wèn)題[28].區(qū)塊鏈將前一塊的hash 值添加至后一區(qū)塊的區(qū)塊頭中,從而實(shí)現(xiàn)鏈?zhǔn)浇Y(jié)構(gòu).當(dāng)經(jīng)過(guò)6 個(gè)區(qū)塊確認(rèn)后,這筆交易幾乎沒(méi)有被破解的可能性.通過(guò)使用匿名地址并將現(xiàn)實(shí)世界地址或標(biāo)識(shí)隱藏,區(qū)塊鏈實(shí)現(xiàn)了匿名的特性.在中本聰設(shè)計(jì)的區(qū)塊鏈中,任何人都可以查詢區(qū)塊鏈?zhǔn)澜缰械拿恳还P交易信息,從而實(shí)現(xiàn)了透明性.區(qū)塊鏈技術(shù)可以提供靈活的編程特性,支持用戶創(chuàng)建可在區(qū)塊鏈上自動(dòng)運(yùn)行的高級(jí)程序,包括智能合約、加密貨幣及去中心化應(yīng)用(DApp).通過(guò)共識(shí)算法[29],區(qū)塊鏈中的節(jié)點(diǎn)們確保了數(shù)據(jù)的一致性.

        區(qū)塊鏈根據(jù)其應(yīng)用場(chǎng)景或開(kāi)放程度[30]可分為 3 種:公有鏈(public blockchain)、聯(lián)盟鏈(consortium blockchian)和私有鏈(private blockchain).三者的差異主要體現(xiàn)在網(wǎng)絡(luò)結(jié)構(gòu)(是否完全去中心化)、共識(shí)機(jī)制、激勵(lì)機(jī)制等方面.根據(jù)不同場(chǎng)景下的信任構(gòu)建方式[31],區(qū)塊鏈可分為“非許可鏈(permissionless blockchain)”和“許可鏈(permissioned blockchain)”.非許可鏈又稱為公有鏈,是一種完全開(kāi)放的區(qū)塊鏈,彼此間不需要信任;許可鏈可分為聯(lián)盟鏈和私有鏈,彼此間需要通過(guò)一定的方式建立信任關(guān)系,具有非完全去中心化的特點(diǎn).

        1.2 區(qū)塊鏈存儲(chǔ)模型

        在區(qū)塊鏈系統(tǒng)中,節(jié)點(diǎn)作為完全節(jié)點(diǎn)存儲(chǔ)完整的區(qū)塊鏈數(shù)據(jù),能夠有效地保證區(qū)塊鏈的數(shù)據(jù)安全[32],即,通過(guò)高冗余存儲(chǔ)機(jī)制保證區(qū)塊鏈的數(shù)據(jù)安全.但是,對(duì)于具有高冗余存儲(chǔ)特點(diǎn)的任何類型的區(qū)塊鏈,現(xiàn)在或未來(lái)都將有可能遇到存儲(chǔ)可擴(kuò)展性問(wèn)題.本節(jié)將通過(guò)結(jié)合典型的采用高冗余存儲(chǔ)機(jī)制的比特幣模型來(lái)介紹區(qū)塊鏈存儲(chǔ)的基本模型和關(guān)鍵技術(shù),區(qū)塊鏈的存儲(chǔ)模型如圖3 所示.區(qū)塊鏈存儲(chǔ)模型可抽象為兩層,分別是數(shù)據(jù)層和網(wǎng)絡(luò)共識(shí)層[33].區(qū)塊鏈網(wǎng)絡(luò)本質(zhì)上是一個(gè)P2P 網(wǎng)絡(luò)[34],節(jié)點(diǎn)地位相同.區(qū)塊在礦工節(jié)點(diǎn)計(jì)算出正確的nonce值后,由礦工節(jié)點(diǎn)廣播至整個(gè)區(qū)塊鏈網(wǎng)絡(luò),其余節(jié)點(diǎn)收到區(qū)塊后驗(yàn)證,通過(guò)后將新區(qū)塊鏈接至自己存儲(chǔ)的區(qū)塊鏈之后.

        Fig.3 Storage model of blockchain圖3 區(qū)塊鏈存儲(chǔ)模型

        (1)數(shù)據(jù)層

        一個(gè)完整的區(qū)塊由區(qū)塊頭和區(qū)塊體構(gòu)成.區(qū)塊頭中包含版本號(hào)、前一區(qū)塊的哈希值;當(dāng)前區(qū)塊的難度、當(dāng)前區(qū)塊經(jīng)過(guò)PoW 解出的隨機(jī)值Nonce;當(dāng)前區(qū)塊的時(shí)間戳以及當(dāng)前區(qū)塊所有交易的Merkle 根.區(qū)塊體中包含當(dāng)前區(qū)塊內(nèi)的交易數(shù)量以及所有經(jīng)過(guò)驗(yàn)證后的交易.區(qū)塊結(jié)構(gòu)如圖4 所示.

        Fig.4 Structure of blocks圖4 區(qū)塊結(jié)構(gòu)

        鏈?zhǔn)浇Y(jié)構(gòu)是區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)的核心.當(dāng)新區(qū)塊被生成后,礦工將其添加至區(qū)塊鏈的尾端.區(qū)塊間依次鏈節(jié),從而形成完整的區(qū)塊鏈數(shù)據(jù).當(dāng)需要訪問(wèn)任意數(shù)據(jù)時(shí),都可以通過(guò)鏈?zhǔn)浇Y(jié)構(gòu)依次向前溯源.Merkle 根是連接區(qū)塊頭和區(qū)塊體的重要組件.Merkle 根可以快速歸納和檢查區(qū)塊中交易的存在性和區(qū)塊的完整性.首先,將區(qū)塊中所有交易進(jìn)行分組哈希;然后,將計(jì)算出的哈希值插入到Merkle 樹(shù)中;接著,對(duì)這些哈希值再次分組哈希.如此遞歸,直至最后生成Merkle 根并保存至區(qū)塊頭中.時(shí)間戳表明當(dāng)前區(qū)塊的生成時(shí)間,因此,區(qū)塊鏈中的所有區(qū)塊依照時(shí)間順序排列.時(shí)間戳可作為區(qū)塊存在的證明,提高了區(qū)塊鏈的不可偽造性和不可篡改性,進(jìn)而有利于區(qū)塊鏈應(yīng)用到公證、存證等領(lǐng)域.哈希函數(shù)具有單向性、易計(jì)算性以及抗碰撞性等良好的性質(zhì).此外,數(shù)據(jù)經(jīng)過(guò)哈希函數(shù)計(jì)算后產(chǎn)生定長(zhǎng)的哈希值.這些特性使得哈希函數(shù)非常適合應(yīng)用至區(qū)塊鏈中.加密技術(shù),特別是非對(duì)稱加密,用于保護(hù)區(qū)塊鏈數(shù)據(jù)的安全性.

        (2)網(wǎng)絡(luò)共識(shí)層

        網(wǎng)絡(luò)共識(shí)層包括區(qū)塊鏈網(wǎng)絡(luò)的組成方式、消息傳播機(jī)制、數(shù)據(jù)驗(yàn)證機(jī)制和共識(shí)機(jī)制.比特幣等公有鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)具有分布式以及可自由進(jìn)出等特點(diǎn),因此采用P2P 網(wǎng)絡(luò)構(gòu)成區(qū)塊鏈網(wǎng)絡(luò).P2P 網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)地位相等,每個(gè)節(jié)點(diǎn)的功能完全一樣,并且不存在任何中心化的機(jī)構(gòu)管理網(wǎng)絡(luò).消息傳播機(jī)制是指當(dāng)新區(qū)塊被生成后,將被生成它的礦工廣播至區(qū)塊鏈網(wǎng)絡(luò)中的其他節(jié)點(diǎn)處驗(yàn)證.數(shù)據(jù)驗(yàn)證是指任意節(jié)點(diǎn)任意時(shí)刻都監(jiān)聽(tīng)區(qū)塊鏈網(wǎng)絡(luò)中廣播的交易和新區(qū)塊.節(jié)點(diǎn)在接收到其他節(jié)點(diǎn)廣播來(lái)的交易后,驗(yàn)證其有效性:若交易有效,則將其加入用以存儲(chǔ)尚未添加至區(qū)塊的有效交易的交易池中;若交易無(wú)效,則將其刪除.共識(shí)機(jī)制是存儲(chǔ)模型中網(wǎng)絡(luò)共識(shí)層的核心,它可以使得區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)高效地達(dá)成共識(shí)并保持區(qū)塊鏈的一致性.在比特幣網(wǎng)絡(luò)中,節(jié)點(diǎn)們通過(guò)比拼算力,以解決一個(gè)計(jì)算困難但驗(yàn)證簡(jiǎn)單的數(shù)學(xué)問(wèn)題,最先解答出該問(wèn)題的節(jié)點(diǎn)擁有記賬權(quán),并可獲得一定的經(jīng)濟(jì)獎(jiǎng)勵(lì).

        2 鏈下存儲(chǔ)

        鏈下存儲(chǔ)是一種將區(qū)塊體中數(shù)據(jù)內(nèi)容從原區(qū)塊體轉(zhuǎn)移到鏈下存儲(chǔ)系統(tǒng),區(qū)塊體中僅存儲(chǔ)指向這些數(shù)據(jù)的“指針”和其他非數(shù)據(jù)信息,以解決區(qū)塊鏈存儲(chǔ)可擴(kuò)展性問(wèn)題的方法.當(dāng)需要存儲(chǔ)完整數(shù)據(jù)時(shí),將原始數(shù)據(jù)保存至非區(qū)塊鏈系統(tǒng)中,同時(shí),按照一定規(guī)則生成該數(shù)據(jù)的唯一標(biāo)識(shí),并返回給區(qū)塊鏈系統(tǒng);當(dāng)需要訪問(wèn)完整數(shù)據(jù)時(shí),通過(guò)數(shù)據(jù)的唯一標(biāo)識(shí)在非區(qū)塊鏈存儲(chǔ)系統(tǒng)中尋找原始數(shù)據(jù),如圖5 所示.

        Fig.5 Off-chain storage圖5 鏈下存儲(chǔ)

        定義區(qū)塊為B,區(qū)塊頭為H,區(qū)塊體為Body,區(qū)塊體中的數(shù)據(jù)為D,P為指向鏈下存儲(chǔ)系統(tǒng)的“指針”,鏈下存儲(chǔ)系統(tǒng)為OffChainSS,則有:

        ? 基于DHT 的鏈下存儲(chǔ)

        分布式哈希表(distributed hash table,簡(jiǎn)稱DHT)是一種分布式存儲(chǔ)方法[35].DHT 在不需要中心服務(wù)器的情況下,每個(gè)節(jié)點(diǎn)負(fù)責(zé)一個(gè)小范圍內(nèi)的路由,同時(shí)存儲(chǔ)一小部分?jǐn)?shù)據(jù),從而實(shí)現(xiàn)DHT 網(wǎng)絡(luò)的尋址和存儲(chǔ).Zyskind 等學(xué)者[36]改變了傳統(tǒng)區(qū)塊鏈網(wǎng)絡(luò)(例如比特幣)存儲(chǔ)所有交易的存儲(chǔ)模式,將數(shù)據(jù)與數(shù)據(jù)引用進(jìn)行分離式存儲(chǔ),設(shè)計(jì)了一種使用DHT 的鏈下存儲(chǔ)模式,其中,DHT 由Kademlia[37]實(shí)現(xiàn),如圖6 所示.原始數(shù)據(jù)的引用(即原始數(shù)據(jù)經(jīng)SHA-256 計(jì)算后的散列值)保存在區(qū)塊鏈中,而原始數(shù)據(jù)則保存在鏈下的DHT 中,如圖6 所示.DHT 由與區(qū)塊鏈網(wǎng)絡(luò)無(wú)關(guān)的節(jié)點(diǎn)維護(hù),這些節(jié)點(diǎn)履行經(jīng)區(qū)塊鏈網(wǎng)絡(luò)批準(zhǔn)的讀寫操作.數(shù)據(jù)在DHT 網(wǎng)絡(luò)中的節(jié)點(diǎn)位置足夠隨機(jī),并且保持一定的重復(fù)率,從而確保了高效的可用率.

        據(jù)美國(guó)高德納公司之前的估計(jì),到2020 年,世界上有約200 億個(gè)設(shè)備互聯(lián)到物聯(lián)網(wǎng)中.這些設(shè)備數(shù)量巨大,給數(shù)據(jù)的安全存儲(chǔ)帶來(lái)了挑戰(zhàn).為了有效地存儲(chǔ)大規(guī)模的物聯(lián)網(wǎng)數(shù)據(jù),Li 等學(xué)者[38]提出了一種適用于大規(guī)模物聯(lián)網(wǎng)數(shù)據(jù)的存儲(chǔ)與保護(hù)方案,如圖7 所示.該方案利用邊緣計(jì)算技術(shù)克服了物聯(lián)網(wǎng)設(shè)備計(jì)算能力不足的問(wèn)題,并且將數(shù)據(jù)轉(zhuǎn)發(fā)到鏈下的DHT 存儲(chǔ)系統(tǒng)中.當(dāng)實(shí)體需要訪問(wèn)數(shù)據(jù)時(shí),在區(qū)塊鏈中廣播已添加由無(wú)證書密碼體制[39]生成的公鑰的數(shù)據(jù)請(qǐng)求,并由區(qū)塊鏈的礦工節(jié)點(diǎn)負(fù)責(zé)對(duì)實(shí)體的認(rèn)證工作.

        Fig.6 Overview of the decentralized platform圖6 平臺(tái)結(jié)構(gòu)示意圖

        Fig.7 Structure of data storage scheme with blockchain圖7 基于區(qū)塊鏈和邊緣計(jì)算的物聯(lián)網(wǎng)數(shù)據(jù)的存儲(chǔ)方案

        ? 基于IPFS 的鏈下存儲(chǔ)

        星際文件系統(tǒng)(inter planetary file system,簡(jiǎn)稱IFPS)是一種旨在將所有計(jì)算設(shè)備與相同文件系統(tǒng)連接起來(lái)的點(diǎn)對(duì)點(diǎn)分布式文件系統(tǒng)[40].IPFS 是內(nèi)容尋址的,即內(nèi)容本身決定了內(nèi)容的位置[41].文件存儲(chǔ)到IPFS 后,將會(huì)得到一個(gè)IPFS hash.IPFS hash 既可以作為訪問(wèn)文件的索引,又可以檢驗(yàn)文件內(nèi)容是否被篡改.基于IPFS 的這一特性,IPFS 作為區(qū)塊鏈的存儲(chǔ)方案(即區(qū)塊中只保存IPFS hash)是目前鏈下存儲(chǔ)中使用較多的一種方案.

        Zheng 等學(xué)者[42]設(shè)計(jì)了一種基于IPFS 的區(qū)塊鏈存儲(chǔ)模型,礦工檢查待驗(yàn)證的交易是否有效:如果有效,則將其存入IPFS 中,并將IPFS 返回的哈希加入至交易池.當(dāng)新區(qū)塊產(chǎn)生后,其他節(jié)點(diǎn)驗(yàn)證新區(qū)塊:如果新區(qū)塊中的交易哈希與本地交易池中的交易哈希相同,則代表這些節(jié)點(diǎn)同樣驗(yàn)證過(guò)這筆交易;如果本地交易池中沒(méi)有,則通過(guò)哈希從IPFS 中下載并確認(rèn).Ali 等學(xué)者[43]針對(duì)物聯(lián)網(wǎng)數(shù)據(jù)隱私問(wèn)題提出了一種基于區(qū)塊鏈和IPFS 的“模塊化聯(lián)盟架構(gòu)”,既解決了傳統(tǒng)區(qū)塊鏈網(wǎng)絡(luò)無(wú)法存儲(chǔ)海量數(shù)據(jù)的缺點(diǎn),又消除了IoT 數(shù)據(jù)的中心化管理模式.Desema[44]是一個(gè)基于Ethereum 和IPFS 的分布式服務(wù)市場(chǎng)系統(tǒng).在Desema 中,服務(wù)的元數(shù)據(jù)和大型數(shù)據(jù)都存儲(chǔ)在IPFS中,而區(qū)塊鏈中僅存儲(chǔ)這些數(shù)據(jù)的散列值.Xu 團(tuán)隊(duì)[45]提出了一種基于Ethereum 和IPFS 的社交媒體應(yīng)用,其中,Ethereum 用于保存用戶數(shù)據(jù),IPFS 用于保存大型文件數(shù)據(jù).這既保證了用戶數(shù)據(jù)的完整性和真實(shí)性,又解決了文件存儲(chǔ)的冗余.以太坊創(chuàng)建智能合約時(shí),需要將智能合約代碼保存至以太坊中.這意味著老舊的或者不再使用的智能合約都保存在以太坊中,從而極大地增加了創(chuàng)建智能合約時(shí)的存儲(chǔ)消耗.Norvill 等學(xué)者[46]在創(chuàng)建智能合約時(shí),把智能合約源碼存儲(chǔ)到IPFS 中,從而顯著地減少了這類存儲(chǔ)消耗.

        ? 基于DHT 和IPFS 的鏈下存儲(chǔ)

        PingER(ping end-to-end reporting)是一個(gè)由SLAC 國(guó)家加速器實(shí)驗(yàn)室美國(guó)開(kāi)發(fā)和管理的全球端到端互聯(lián)網(wǎng)性能測(cè)量框架[47].PingER 由遍布全球20 個(gè)國(guó)家的50 個(gè)MA(monitoring agent)組成.每個(gè)MA 每天將ping 統(tǒng)計(jì)信息存儲(chǔ)到本地MA 上,然后SLAC 再將每個(gè)MA 的數(shù)據(jù)歸檔至中心服務(wù)器.為了防止未來(lái)SLAC 支持的消失,文獻(xiàn)[48]提出了一種基于區(qū)塊鏈和DHT 的去中心化的數(shù)據(jù)存儲(chǔ)和訪問(wèn)框架.MA 的身份由客戶端轉(zhuǎn)變?yōu)楣?jié)點(diǎn),因此,MA 的作用不再僅限于收集數(shù)據(jù),而是成為數(shù)據(jù)存儲(chǔ)、處理的節(jié)點(diǎn).區(qū)塊鏈中存儲(chǔ)數(shù)據(jù)文件的元數(shù)據(jù)信息以管理身份和訪問(wèn)控制,數(shù)據(jù)文件的引用存儲(chǔ)在鏈下的DHT 中,而數(shù)據(jù)文件本身則存儲(chǔ)在IPFS 中,如圖8 所示.

        Fig.8 Off-chain storage pattern using DHT and IPFS圖8 DHT 與IPFS 共同作為鏈下存儲(chǔ)

        ? 基于云的鏈下存儲(chǔ)

        Ali[49]提出了一種方法,通過(guò)把實(shí)際數(shù)據(jù)存儲(chǔ)到云端,數(shù)據(jù)的散列值保存在區(qū)塊鏈中,從而解決區(qū)塊鏈的存儲(chǔ)擴(kuò)展性問(wèn)題.Chameleon[50]是一個(gè)動(dòng)態(tài)適應(yīng)、可擴(kuò)展的私有鏈架構(gòu).Chameleon 架構(gòu)由控制和認(rèn)證層、云存儲(chǔ)層、共識(shí)和處理層以及訪問(wèn)層組成.與文獻(xiàn)[49]不同,Chameleon 不是將所有的數(shù)據(jù)都存儲(chǔ)在云上,而是將數(shù)據(jù)的散列值存儲(chǔ)在區(qū)塊鏈中.而Chameleon 認(rèn)為:在一些場(chǎng)景下,數(shù)據(jù)與之前的數(shù)據(jù)幾乎是沒(méi)有關(guān)聯(lián)的.因此,它將最近一段時(shí)期(一天或者一周)的數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈中,以前的數(shù)據(jù)存儲(chǔ)到云上.存儲(chǔ)在云上的以前的數(shù)據(jù)中,最新的一個(gè)區(qū)塊的散列值將被保存至區(qū)塊鏈中,從而實(shí)現(xiàn)數(shù)據(jù)的一致性(見(jiàn)表1).

        Table 1 Comparison of off-chain storage patterns表1 鏈下存儲(chǔ)對(duì)比

        在鏈下存儲(chǔ)方式中,區(qū)塊頭或重要數(shù)據(jù)依然保存至區(qū)塊鏈賬本中,原始區(qū)塊體以及其他數(shù)據(jù)由鏈下存儲(chǔ)系統(tǒng)負(fù)責(zé)存儲(chǔ).新區(qū)塊體中可存儲(chǔ)訪問(wèn)鏈下存儲(chǔ)系統(tǒng)的訪問(wèn)記錄等信息,而指向鏈下存儲(chǔ)系統(tǒng)的“指針”信息可存儲(chǔ)于新區(qū)塊體中,也可存儲(chǔ)于區(qū)塊頭中.由比特幣區(qū)塊的結(jié)構(gòu)可知:一個(gè)區(qū)塊所占的大小約為1M,而一個(gè)區(qū)塊的區(qū)塊頭的大小為80byte[1].因此,從存儲(chǔ)效率的角度看,鏈下存儲(chǔ)可以大幅度地減輕區(qū)塊存儲(chǔ)的壓力.

        從所使用的技術(shù)角度來(lái)看,現(xiàn)階段鏈下存儲(chǔ)方式主要可分為基于DHT 的鏈下存儲(chǔ)、基于IPFS 的鏈下存儲(chǔ)以及基于云的鏈下存儲(chǔ).基于DHT 或IPFS 的鏈下存儲(chǔ)與傳統(tǒng)分布式存儲(chǔ)相似,同樣需要考慮存儲(chǔ)冗余的問(wèn)題,以提高位于鏈下的數(shù)據(jù)的安全性.但與比特幣網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)保存完整賬本的方式不同,這兩種改進(jìn)的鏈下存儲(chǔ)緩解了區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)的存儲(chǔ)壓力,將一部分?jǐn)?shù)據(jù)存儲(chǔ)的工作量轉(zhuǎn)移到一個(gè)與區(qū)塊鏈網(wǎng)絡(luò)并行的分布式存儲(chǔ)系統(tǒng)中.該系統(tǒng)節(jié)點(diǎn)既可以由區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn),也可以由不在區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)組成.若鏈下的分布式系統(tǒng)全部由區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)組成,這樣僅僅減輕了那些在區(qū)塊鏈網(wǎng)絡(luò)中但不在鏈下分布式存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)的存儲(chǔ)壓力.因此,通常的做法是鏈下分布式存儲(chǔ)節(jié)點(diǎn)由兩部分構(gòu)成:一部分是區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn),另一部分是非區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn).這種做法緩解了大部分區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)的存儲(chǔ)壓力,由一些具有足夠存儲(chǔ)能力的節(jié)點(diǎn)同時(shí)負(fù)責(zé)鏈下的分布式存儲(chǔ)系統(tǒng).然而,這種做法也并不是完美的:一方面,在需要考慮如何挑選具有足夠存儲(chǔ)能力節(jié)點(diǎn)的同時(shí)維護(hù)鏈下存儲(chǔ)系統(tǒng),但又要保證這些節(jié)點(diǎn)不是惡意節(jié)點(diǎn)而控制區(qū)塊鏈的數(shù)據(jù)真實(shí)性;另一方面,需要考慮如何確定鏈下分布式存儲(chǔ)系統(tǒng)中的區(qū)塊鏈節(jié)點(diǎn)和非區(qū)塊鏈節(jié)點(diǎn)之間的比例,以確保存儲(chǔ)系統(tǒng)的安全.基于云的鏈下存儲(chǔ)將存儲(chǔ)壓力轉(zhuǎn)移到云,區(qū)塊鏈的去中心化屬性將被減弱.基于云的鏈下存儲(chǔ)方案與前兩者的不同在于,區(qū)塊鏈節(jié)點(diǎn)無(wú)法參與到云存儲(chǔ)中.云存儲(chǔ)服務(wù)往往都由大型的服務(wù)商提供,依賴于中心化機(jī)構(gòu)的服務(wù).此時(shí),區(qū)塊鏈僅能驗(yàn)證數(shù)據(jù)是否被篡改,而不能保證數(shù)據(jù)的真實(shí)性.另一方面,從經(jīng)濟(jì)角度來(lái)看,云存儲(chǔ)所產(chǎn)生的成本由誰(shuí)承擔(dān),以及如何控制減輕區(qū)塊鏈節(jié)點(diǎn)存儲(chǔ)壓力所帶來(lái)的收益大于云存儲(chǔ)所需要的額外經(jīng)濟(jì)成本,都是需要慎重考慮的.鏈下存儲(chǔ)可以顯著減輕區(qū)塊鏈節(jié)點(diǎn)的存儲(chǔ)壓力,但需要考慮新的安全問(wèn)題.

        3 鏈上存儲(chǔ)

        鏈上存儲(chǔ),不需要每個(gè)節(jié)點(diǎn)都存儲(chǔ)完整的區(qū)塊鏈賬本,也不依賴于額外的鏈下存儲(chǔ)系統(tǒng),只需要每個(gè)節(jié)點(diǎn)根據(jù)預(yù)先約定的規(guī)則存儲(chǔ)對(duì)應(yīng)的部分賬本即可.鏈上存儲(chǔ)與前一節(jié)所述鏈下存儲(chǔ)的不同在于:數(shù)據(jù)仍然存儲(chǔ)在區(qū)塊鏈上,而不是非區(qū)塊鏈存儲(chǔ)系統(tǒng)中.根據(jù)預(yù)先約定的規(guī)則中節(jié)點(diǎn)間的相互關(guān)系,鏈上存儲(chǔ)可分為協(xié)作式存儲(chǔ)模式和輕節(jié)點(diǎn)模式.定義區(qū)塊體中的數(shù)據(jù)為D,Bodyi-1為第i至第j個(gè)節(jié)點(diǎn)同一區(qū)塊的區(qū)塊體,其中,j≥i,為原數(shù)據(jù)根據(jù)鏈上存儲(chǔ)規(guī)則確定的存儲(chǔ)內(nèi)容,≤.D那么,鏈上存儲(chǔ)可表達(dá)為

        3.1 協(xié)作式存儲(chǔ)

        與比特幣的經(jīng)典存儲(chǔ)模式相比,鏈上協(xié)作式存儲(chǔ)模式不再需要每個(gè)節(jié)點(diǎn)都保存一份完整的區(qū)塊鏈數(shù)據(jù)備份.節(jié)點(diǎn)協(xié)作是指若干個(gè)不同的節(jié)點(diǎn)進(jìn)行合作,從而使這些節(jié)點(diǎn)具有與“全節(jié)點(diǎn)”一樣的功能.協(xié)作式存儲(chǔ)根據(jù)使用技術(shù)的不同,合作的方式也有很多種形式,可分為基于編碼的協(xié)作式存儲(chǔ)、基于集群的協(xié)作式存儲(chǔ)和基于分片的協(xié)作式存儲(chǔ).

        ? 基于編碼的協(xié)作式存儲(chǔ)

        Dai 等學(xué)者[51]提出了一種基于網(wǎng)絡(luò)編碼的分布式存儲(chǔ)框架(network coding-based distributed storage,簡(jiǎn)稱NC-DS).網(wǎng)絡(luò)編碼是一種將編碼和路由信息交換的技術(shù),可以對(duì)接收的多個(gè)數(shù)據(jù)包進(jìn)行編碼信息融合,從而提高單次傳輸?shù)男畔⒘?進(jìn)而提升網(wǎng)絡(luò)整體性能[52].NC-DS 有兩種實(shí)現(xiàn):一種是碼率確定的NC-DRDS,另一種是碼率非確定的NC-RLDS.

        (1)NC-DRDS 機(jī)制取代同時(shí)輸出數(shù)據(jù)包的形式,采用順序輸出的形式輸出編碼后的包.將大小為x的區(qū)塊(或多個(gè)區(qū)塊)切分成k個(gè)包,對(duì)其進(jìn)行Reed-Solomn 編碼,得到n個(gè)編碼包,存放至n個(gè)節(jié)點(diǎn)中(即一個(gè)節(jié)點(diǎn)保存至一個(gè)包).倘若仍有節(jié)點(diǎn)未保存,則繼續(xù)將k個(gè)數(shù)據(jù)包編碼成2n個(gè)編碼包,存放至2n個(gè)節(jié)點(diǎn)中.重復(fù)上述操作,直至區(qū)塊鏈網(wǎng)絡(luò)中所有節(jié)點(diǎn)均保存了一個(gè)編碼包,如圖9 所示.任意k個(gè)編碼包都可恢復(fù)原始數(shù)據(jù)包;

        (2)而NC-RLDS 機(jī)制則采用了一種二進(jìn)制域隨機(jī)偏移編碼,將數(shù)據(jù)包右移隨機(jī)位的比特然后按位的方式組合,同樣以NC-DRDS 的方式分發(fā)至區(qū)塊鏈網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn).

        Fig.9 NC-DRDS圖9 NC-DRDS 示意圖

        Perard 等學(xué)者[53]基于糾刪碼(erasure code)提出了一種降低節(jié)點(diǎn)存儲(chǔ)負(fù)擔(dān)的LS(low storage)節(jié)點(diǎn).區(qū)塊首先被切分成k個(gè)片段,再使用偽隨機(jī)數(shù)生成器生成的系數(shù)對(duì)原始片段進(jìn)行線性組合,生成編碼片段并發(fā)送至節(jié)點(diǎn).當(dāng)節(jié)點(diǎn)需要恢復(fù)區(qū)塊時(shí),只需從其他節(jié)點(diǎn)下載超過(guò)k個(gè)編碼片段.對(duì)這些編碼片段進(jìn)行逆線性變換,便可恢復(fù)出原始區(qū)塊.當(dāng)有新節(jié)點(diǎn)加入?yún)^(qū)塊鏈網(wǎng)絡(luò)中時(shí),首先從全節(jié)點(diǎn)或者其他LS 節(jié)點(diǎn)處下載完整區(qū)塊鏈,然后對(duì)每個(gè)區(qū)塊進(jìn)行驗(yàn)證,并生成編碼片段.新節(jié)點(diǎn)將完整的區(qū)塊刪除,同時(shí)保留區(qū)塊的哈希和編碼片段.因此,LS 節(jié)點(diǎn)在不需要存儲(chǔ)完整區(qū)塊鏈的情況下,仍然可以驗(yàn)證完整區(qū)塊鏈.

        ? 基于集群的協(xié)作式存儲(chǔ)

        文獻(xiàn)[54]中提出了一種基于DHT 集群的存儲(chǔ)負(fù)載均衡方案,DHT 由Chord 協(xié)議[55]實(shí)現(xiàn).在該方案中,區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)劃分成若干個(gè)DHT 集群,一個(gè)DHT 集群中的若干個(gè)節(jié)點(diǎn)共同維護(hù)一份完整的區(qū)塊鏈數(shù)據(jù).區(qū)塊鏈中的節(jié)點(diǎn)通常需要保存兩部分內(nèi)容,分別是區(qū)塊數(shù)據(jù)和區(qū)塊鏈狀態(tài).在該方案中,DHT 集群中的一個(gè)節(jié)點(diǎn)只需保存完整區(qū)塊鏈副本中區(qū)塊數(shù)據(jù)的一部分,而區(qū)塊鏈狀態(tài)部分則需要區(qū)塊鏈網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)都存儲(chǔ).新區(qū)塊產(chǎn)生后,根據(jù)區(qū)塊的散列值映射到Chord 環(huán)的對(duì)應(yīng)位置.根據(jù)哈希函數(shù)的特性來(lái)確定DHT 集群內(nèi)每個(gè)節(jié)點(diǎn)存儲(chǔ)多少個(gè)區(qū)塊會(huì)滿足均勻分布的要求.在DHT 集群內(nèi),如果需要重復(fù)存儲(chǔ)R次,則在Chord 環(huán)中的節(jié)點(diǎn)后面的R個(gè)節(jié)點(diǎn)同樣存儲(chǔ)1 次.如果一個(gè)區(qū)塊在DHT 集群內(nèi)的所有節(jié)點(diǎn)都重復(fù)存儲(chǔ),那么此時(shí)DHT 集群的節(jié)點(diǎn)就像全節(jié)點(diǎn)一樣.

        Kaneko 等學(xué)者[56]設(shè)計(jì)了一種基于DHT 集群的負(fù)載平衡方法,其中,DHT 由Kademlia[37]實(shí)現(xiàn).在這一方法中,區(qū)塊鏈中的節(jié)點(diǎn)分為兩類:第1 類在純P2P 網(wǎng)絡(luò)中挖礦,稱為挖礦節(jié)點(diǎn);另一類在DHT 網(wǎng)絡(luò)中驗(yàn)證新交易和新區(qū)塊以及保存區(qū)塊鏈數(shù)據(jù),成為數(shù)據(jù)節(jié)點(diǎn).當(dāng)數(shù)據(jù)節(jié)點(diǎn)產(chǎn)生了一個(gè)新交易,則首先廣播至該節(jié)點(diǎn)所在的DHT集群中;然后,集群中的其他節(jié)點(diǎn)將該交易廣播至其他集群中.所有數(shù)據(jù)節(jié)點(diǎn)對(duì)交易進(jìn)行驗(yàn)證,如果交易有效,將其廣播至P2P 網(wǎng)絡(luò)中,挖礦節(jié)點(diǎn)收集交易,并重復(fù)該過(guò)程直至挖出新區(qū)塊.根據(jù)新區(qū)塊的哈希得到該區(qū)塊的ID,與節(jié)點(diǎn)ID 進(jìn)行XOR 運(yùn)算,得到與區(qū)塊ID 距離最近的節(jié)點(diǎn)所屬的DHT 集群.挖礦節(jié)點(diǎn)將新生成的區(qū)塊廣播至該集群,集群的節(jié)點(diǎn)對(duì)區(qū)塊進(jìn)行驗(yàn)證,并添加至區(qū)塊鏈中.

        文獻(xiàn)[57]引入了“共識(shí)單元”這一概念,共識(shí)單元是指一起工作并維護(hù)至少一份完整區(qū)塊鏈的一組節(jié)點(diǎn).根據(jù)前一個(gè)單位時(shí)間內(nèi)的區(qū)塊訪問(wèn)頻率,將需要訪問(wèn)的區(qū)塊優(yōu)先存儲(chǔ)到共識(shí)單元內(nèi)的節(jié)點(diǎn),并考慮一定的冗余.再將所有在前一個(gè)單位時(shí)間內(nèi)未被訪問(wèn)的區(qū)塊分配至相應(yīng)的節(jié)點(diǎn).至此,共識(shí)單元內(nèi)的存儲(chǔ)空間已全部被使用.當(dāng)共識(shí)單元內(nèi)有新區(qū)塊需要存儲(chǔ)時(shí),需要占用一部分舊區(qū)塊的空間.根據(jù)最優(yōu)原則,將新區(qū)塊存儲(chǔ)到某個(gè)節(jié)點(diǎn)上有備份存儲(chǔ)的某個(gè)或某些區(qū)塊占用的空間.當(dāng)有新節(jié)點(diǎn)加入共識(shí)單元時(shí),分配一定的區(qū)塊給新節(jié)點(diǎn),從而降低共識(shí)單元內(nèi)的查詢消耗.當(dāng)共識(shí)單元內(nèi)有節(jié)點(diǎn)離開(kāi)時(shí),若該節(jié)點(diǎn)存儲(chǔ)的區(qū)塊也存儲(chǔ)在其他節(jié)點(diǎn)處,那么只需通知查詢者更新查詢目的地;若該節(jié)點(diǎn)存儲(chǔ)的區(qū)塊在其他節(jié)點(diǎn)處沒(méi)有備份,則只需將這些新區(qū)塊作為需要存儲(chǔ)的新節(jié)點(diǎn)對(duì)待即可.

        ? 基于分片的協(xié)作式存儲(chǔ)

        分片技術(shù)最早被應(yīng)用于分布式數(shù)據(jù)庫(kù)領(lǐng)域,數(shù)據(jù)庫(kù)被分割成多個(gè)部分并存儲(chǔ)到不同的服務(wù)器中.在區(qū)塊鏈領(lǐng)域中,分片是指節(jié)點(diǎn)被分成若干個(gè)更小的單元并行地處理交易或維護(hù)不相交的區(qū)塊鏈賬本,前者稱為交易分片,后者稱為狀態(tài)分片.Elastico[58]是第一個(gè)基于分片的公有鏈共識(shí)協(xié)議,Elastico 的思想是交易分片,因此,區(qū)塊鏈即使分片后,每個(gè)節(jié)點(diǎn)仍然需要存儲(chǔ)完整的賬本.

        OmniLedger[59]意識(shí)到了Elastico 存在的問(wèn)題,并做出了改進(jìn).OmniLedger 由身份鏈和多個(gè)分片組成,通過(guò)RandHound 協(xié)議,將節(jié)點(diǎn)自動(dòng)地分配到不同的分片.為了減輕節(jié)點(diǎn)的存儲(chǔ)消耗,OmniLedger 引入了狀態(tài)塊的概念.當(dāng)一個(gè)共識(shí)時(shí)代結(jié)束時(shí),分片的領(lǐng)導(dǎo)者將UTxO 存儲(chǔ)在有序的Merkle 樹(shù)中,并將Merkle 的根哈希存入狀態(tài)塊的頭部.狀態(tài)塊經(jīng)過(guò)驗(yàn)證后,將作為下一個(gè)共識(shí)時(shí)代的創(chuàng)世塊.但是,OmniLedger 采用的是分片定期改組策略,所以存在大量的數(shù)據(jù)遷移消耗.

        SSChain[60]將區(qū)塊鏈網(wǎng)絡(luò)劃分為根鏈網(wǎng)絡(luò)和分片網(wǎng)絡(luò).市場(chǎng)激勵(lì)機(jī)制會(huì)動(dòng)態(tài)地調(diào)整根鏈網(wǎng)絡(luò)和區(qū)塊鏈網(wǎng)絡(luò)中的哈希算力,使得哈希算力均勻地分布在不同分片中.節(jié)點(diǎn)可以自主選擇加入收益較高的分片.一個(gè)節(jié)點(diǎn)可以同時(shí)屬于根鏈網(wǎng)絡(luò)和分片網(wǎng)絡(luò).根鏈網(wǎng)絡(luò)負(fù)責(zé)驗(yàn)證一段時(shí)間內(nèi)的分片區(qū)塊并生成根區(qū)塊,同時(shí)保存完整的分片區(qū)塊和根區(qū)塊.SSchain 采用市場(chǎng)激勵(lì)機(jī)制,因而不需要定期改組分片網(wǎng)絡(luò),避免了數(shù)據(jù)遷移.為了減輕分片內(nèi)的存儲(chǔ)負(fù)擔(dān),SSChain 將前一時(shí)期內(nèi)的UTxO 保存至有序Merkle 樹(shù)中,然后將Merkle 樹(shù)的根哈希保存至檢查點(diǎn)的頭部中,檢查點(diǎn)前的區(qū)塊便無(wú)需再存儲(chǔ).

        不同于前兩種動(dòng)態(tài)劃分分片的方式,Yoo等學(xué)者[61]提出了一種基于域的靜態(tài)分片區(qū)塊鏈模型.該模型將區(qū)塊鏈網(wǎng)絡(luò)分為區(qū)域分片和全局分片,如圖10 所示.區(qū)域分片內(nèi)存在由PoW 決定的委員會(huì),并動(dòng)態(tài)調(diào)整.委員會(huì)內(nèi)的節(jié)點(diǎn)通過(guò)PBFT 驗(yàn)證交易并生成區(qū)塊.全局分片的委員會(huì)同樣由PoW 決定,委員會(huì)通過(guò)PBFT 驗(yàn)證交易.交易通過(guò)驗(yàn)證后被傳輸?shù)较嚓P(guān)的區(qū)域分片中.區(qū)域分片內(nèi)的節(jié)點(diǎn)負(fù)責(zé)生成區(qū)塊并保存至區(qū)域區(qū)塊鏈中.

        Fig.10 Collaborative storage pattern based on sharding圖10 基于分片的協(xié)作式存儲(chǔ)示意圖

        為了方便比較和總結(jié)3 類協(xié)作式存儲(chǔ)的區(qū)別,下面對(duì)一些概念進(jìn)行定義.

        定義1(區(qū)域).區(qū)塊鏈網(wǎng)絡(luò)可由若干個(gè)區(qū)域組成,區(qū)域之間可以相互交叉.集群、分片等都可視為一個(gè)區(qū)域.

        定義2(靜態(tài)區(qū)域劃分).對(duì)于節(jié)點(diǎn)ni,根據(jù)節(jié)點(diǎn)分配機(jī)制,當(dāng)t=t1時(shí),ni被分配到區(qū)域Aj1;當(dāng)t=t2時(shí),ni被分配到區(qū)域Aj2.若?t2≠t1,都有Aj1=Aj2,則稱區(qū)域劃分是靜態(tài)的;反之,則稱為動(dòng)態(tài).

        定義3(區(qū)域定期改組).區(qū)域定期改組是指節(jié)點(diǎn)ni一旦被分配到區(qū)域Aj1內(nèi),任意時(shí)間后都不會(huì)被系統(tǒng)重新分配到區(qū)域Aj2,其中,Aj1≠Aj2.

        定義4.區(qū)域賬本是指僅記錄該區(qū)域內(nèi)交易的區(qū)塊鏈賬本,記為BCarea.

        定義5.對(duì)于區(qū)塊Bk,,則稱為區(qū)塊Bk的子集,稱為區(qū)塊子集的線性組合;對(duì)于區(qū)塊Bk,稱為區(qū)塊的集合.

        定義6.當(dāng)新節(jié)點(diǎn)加入?yún)^(qū)域時(shí),區(qū)域內(nèi)的原節(jié)點(diǎn)若需要調(diào)整已存儲(chǔ)的數(shù)據(jù),則稱該模型具有自動(dòng)調(diào)整性.

        定義7(區(qū)塊的原子性).若區(qū)塊完整地存儲(chǔ)在一個(gè)節(jié)點(diǎn)中,則稱該存儲(chǔ)方式保留了區(qū)塊的原子性;反之,若一個(gè)區(qū)塊經(jīng)過(guò)切分存儲(chǔ)在不同的節(jié)點(diǎn)中,則稱該存儲(chǔ)方式破壞了區(qū)塊的原子性.

        集群是指一組共同工作的節(jié)點(diǎn),而分片則指將賬本切分成粒度更小的部分.本文中,集群是從節(jié)點(diǎn)的角度切分區(qū)塊鏈,分片是從賬本的角度切分區(qū)塊鏈.因此,本文將集群和分片均看作是區(qū)域.基于編碼的協(xié)作式存儲(chǔ)模式?jīng)]有顯式的區(qū)域劃分,但可以將源于同一個(gè)數(shù)據(jù)包的若干個(gè)子包所在的節(jié)點(diǎn)看作是一個(gè)區(qū)域,滿足定義1.如果下一個(gè)數(shù)據(jù)包劃分成若干個(gè)子包后,這些子包所處的節(jié)點(diǎn)集與前一數(shù)據(jù)包時(shí)不同,則可看作為區(qū)域定期改組,周期為產(chǎn)生一個(gè)新區(qū)塊的時(shí)間.

        表2 從區(qū)域劃分思想、劃分形式、定期改組、區(qū)域存儲(chǔ)內(nèi)容、區(qū)塊原子性、區(qū)域自動(dòng)調(diào)整性、是否有節(jié)點(diǎn)存儲(chǔ)完整賬本以及節(jié)點(diǎn)存儲(chǔ)大小的角度,詳細(xì)地對(duì)比了8 種不同的協(xié)作式存儲(chǔ).動(dòng)態(tài)劃分區(qū)域有利于防止惡意節(jié)點(diǎn)控制某一區(qū)域,從而影響整個(gè)區(qū)塊鏈的網(wǎng)絡(luò)性能.定期改組區(qū)域能夠提高一定的安全性,但與此同時(shí),也會(huì)存在大量的數(shù)據(jù)遷移工作.對(duì)于文獻(xiàn)[54]和文獻(xiàn)[57]中的方案,當(dāng)有新節(jié)點(diǎn)加入?yún)^(qū)域后,模型會(huì)自動(dòng)地調(diào)整曾經(jīng)存儲(chǔ)在原節(jié)點(diǎn)上的數(shù)據(jù),重新分配到新節(jié)點(diǎn)上.這種自動(dòng)的調(diào)整方式會(huì)占用區(qū)域內(nèi)的通信帶寬,增加通信成本.從存儲(chǔ)效率的角度看,對(duì)于基于編碼的協(xié)作式存儲(chǔ),編碼時(shí)切分的數(shù)據(jù)子包個(gè)數(shù)越多,節(jié)點(diǎn)所需的存儲(chǔ)空間越小.對(duì)于基于動(dòng)態(tài)分片的協(xié)作式存儲(chǔ),區(qū)塊鏈分片數(shù)越多,節(jié)點(diǎn)所需存儲(chǔ)空間越少.這兩種方式所需的存儲(chǔ)空間和比特幣存儲(chǔ)模型所需存儲(chǔ)空間呈線性關(guān)系.對(duì)于基于集群的協(xié)作式存儲(chǔ),節(jié)點(diǎn)所需存儲(chǔ)空間與集群內(nèi)節(jié)點(diǎn)數(shù)量相關(guān),集群內(nèi)節(jié)點(diǎn)數(shù)量越多,每個(gè)節(jié)點(diǎn)所需存儲(chǔ)空間越小.對(duì)于基于靜態(tài)分片的協(xié)作式存儲(chǔ),當(dāng)進(jìn)行初始化劃分時(shí),若某一分片規(guī)模明顯大于其他分片,則日后同樣也將面臨存儲(chǔ)膨脹的問(wèn)題.

        Table 2 Comparison of collaborative storage patterns表2 協(xié)作式存儲(chǔ)比較

        3.2 輕節(jié)點(diǎn)

        3.2.1 SPV 輕節(jié)點(diǎn)

        在比特幣網(wǎng)絡(luò)中,大部分用戶是普通用戶(沒(méi)有礦機(jī)并且只消費(fèi)比特幣的用戶).如果這些用戶運(yùn)行一個(gè)完整的比特幣客戶端,那么需要準(zhǔn)備大約200G 的空余硬盤.對(duì)于比特幣手機(jī)錢包來(lái)說(shuō),存儲(chǔ)完整的比特幣賬本是不現(xiàn)實(shí)的,因此便有了適用于運(yùn)行在小型設(shè)備的輕量型節(jié)點(diǎn).

        全節(jié)點(diǎn)是一種存儲(chǔ)完整賬本、需要同步所有區(qū)塊鏈數(shù)據(jù)、能夠獨(dú)立校驗(yàn)區(qū)塊鏈上的所有交易并實(shí)時(shí)更新區(qū)塊鏈的節(jié)點(diǎn).輕節(jié)點(diǎn)是一種不需要存儲(chǔ)完整賬本,每當(dāng)有新區(qū)塊出現(xiàn)時(shí),只需要下載區(qū)塊頭的節(jié)點(diǎn)類型.SPV 協(xié)議(simple payment verification protocol)[1]是最早的輕節(jié)點(diǎn)協(xié)議,該協(xié)議指出:不運(yùn)行全節(jié)點(diǎn)也可驗(yàn)證支付,用戶只需要保存所有的區(qū)塊頭即可,如圖11 所示.SPV 輕節(jié)點(diǎn)只需從區(qū)塊鏈網(wǎng)絡(luò)中下載所有區(qū)塊的區(qū)塊頭.SPV 輕節(jié)點(diǎn)由于自身并不存儲(chǔ)區(qū)塊鏈中區(qū)塊的區(qū)塊體,因此不能獨(dú)立驗(yàn)證交易,需依賴于全節(jié)點(diǎn).當(dāng)需要驗(yàn)證支付時(shí),向區(qū)塊鏈網(wǎng)絡(luò)發(fā)出請(qǐng)求,進(jìn)而查找用于支付的那筆交易所在的區(qū)塊,再根據(jù)Merkle 根哈希驗(yàn)證這筆交易是否有效.

        Fig.11 SPV scheme of light node圖11 SPV 輕節(jié)點(diǎn)協(xié)議

        第3.2 節(jié)所述的輕節(jié)點(diǎn)模式與第3.1 節(jié)所述的協(xié)作式存儲(chǔ)模式的區(qū)別與聯(lián)系可見(jiàn)表3.

        Table 3 Difference and relation between light node mode and collaborative storage mode表3 輕節(jié)點(diǎn)模式與協(xié)作式存儲(chǔ)模式的區(qū)別

        3.2.2 改進(jìn)型輕節(jié)點(diǎn)

        SPV 輕節(jié)點(diǎn)需要存儲(chǔ)每個(gè)區(qū)塊的區(qū)塊頭,意味著節(jié)點(diǎn)的本地存儲(chǔ)上限仍與區(qū)塊鏈中區(qū)塊的數(shù)量成正比例關(guān)系;另一方面,輕節(jié)點(diǎn)需要信賴全節(jié)點(diǎn)驗(yàn)證支付或交易,減弱了區(qū)塊鏈無(wú)需信賴第三方的特質(zhì).因此,很多學(xué)者從不同的角度對(duì)傳統(tǒng)的輕節(jié)點(diǎn)作了改進(jìn).

        Xu 等學(xué)者[62]提出了一種公有鏈客戶端協(xié)議,稱為EPBC.這種客戶端適用于物聯(lián)網(wǎng)設(shè)備或手機(jī)等存儲(chǔ)資源有限的設(shè)備.與SPV 協(xié)議不同,它不用存儲(chǔ)所有區(qū)塊的區(qū)塊頭,而只需存儲(chǔ)一個(gè)大小定長(zhǎng)的數(shù)據(jù),并且與區(qū)塊鏈賬本的大小無(wú)關(guān).EPBC 在每個(gè)區(qū)塊的區(qū)塊頭中添加了一個(gè)對(duì)當(dāng)前區(qū)塊鏈的總結(jié)S,但無(wú)需參與挖礦的過(guò)程.S的生成過(guò)程與RSA 類似,需要選取兩個(gè)質(zhì)數(shù)p和q,生成N.在創(chuàng)世區(qū)塊的區(qū)塊頭中,添加N和一個(gè)隨機(jī)數(shù)g.當(dāng)輕節(jié)點(diǎn)需要驗(yàn)證時(shí),全節(jié)點(diǎn)生成一個(gè)元組返回給輕節(jié)點(diǎn).輕節(jié)點(diǎn)只需驗(yàn)證和一個(gè)關(guān)于Sn的等式即可.當(dāng)加入?yún)^(qū)塊鏈時(shí),輕節(jié)點(diǎn)從區(qū)塊鏈網(wǎng)絡(luò)中選取u個(gè)節(jié)點(diǎn),并獲取S(u).輕節(jié)點(diǎn)隨機(jī)選取一些區(qū)塊,并與這些節(jié)點(diǎn)交互以驗(yàn)證S(u)的有效性.最后選取由最多節(jié)點(diǎn)返回的S(u)作為區(qū)塊鏈總結(jié).

        文獻(xiàn)[63]提出了一種存儲(chǔ)壓縮協(xié)議SCC(storage compression consensus).SCC 是一種基于PBFT 的改進(jìn)協(xié)議.當(dāng)物聯(lián)網(wǎng)節(jié)點(diǎn)申請(qǐng)加入?yún)^(qū)塊鏈時(shí),首先要通知自己的存儲(chǔ)容量和存儲(chǔ)上限系數(shù),以便其他節(jié)點(diǎn)驗(yàn)證其存儲(chǔ)能力.存儲(chǔ)能力最小的節(jié)點(diǎn)可作為一輪SCC 中的領(lǐng)導(dǎo)者,因其執(zhí)行壓縮的過(guò)程表明,它忠誠(chéng)地維護(hù)和緊跟區(qū)塊鏈系統(tǒng).在SCC 中,每輪除了需要處理正常生成的最新區(qū)塊外,還需要通過(guò)Merkle 樹(shù)的方法生成一個(gè)由區(qū)塊鏈中所有區(qū)塊組成的壓縮塊.壓縮塊中存儲(chǔ)最新區(qū)塊的hash,最新區(qū)塊中存儲(chǔ)壓縮塊的hash,如圖12 所示.當(dāng)這兩個(gè)區(qū)塊通過(guò)驗(yàn)證后,每個(gè)節(jié)點(diǎn)根據(jù)其自身情況進(jìn)行存儲(chǔ).存儲(chǔ)資源受限的輕節(jié)點(diǎn)存儲(chǔ)最新區(qū)塊和壓縮塊,并將之前的區(qū)塊全部移除.每輪共識(shí)結(jié)束后,執(zhí)行相同的過(guò)程.

        Fig.12 Compression block and next block圖12 壓縮塊和最新區(qū)塊

        傳統(tǒng)輕節(jié)點(diǎn)依賴于區(qū)塊鏈網(wǎng)絡(luò)中的全節(jié)點(diǎn),同時(shí),這也是輕節(jié)點(diǎn)的局限之一.Frey 團(tuán)隊(duì)[64]提出了一種模型,這種模型中的輕節(jié)點(diǎn)在驗(yàn)證交易時(shí)無(wú)需依賴于全節(jié)點(diǎn).模型將節(jié)點(diǎn)分為5 類角色,分別是挖礦節(jié)點(diǎn)、全節(jié)點(diǎn)、安全輕節(jié)點(diǎn)、傳統(tǒng)輕節(jié)點(diǎn)和DHT 節(jié)點(diǎn).一個(gè)物理節(jié)點(diǎn)可以同時(shí)是多種角色.為了實(shí)現(xiàn)安全輕節(jié)點(diǎn)不存儲(chǔ)完整賬本的目的,區(qū)塊結(jié)構(gòu)進(jìn)行了改進(jìn).在區(qū)塊頭中額外添加兩個(gè)值,HUTxO和Hindex,如圖13 所示.根據(jù)輸出地址的前k位,將UTxO 集分割成2k個(gè)分片,對(duì)它們進(jìn)行哈希運(yùn)算,然后再對(duì)這些哈希值進(jìn)行一次哈希,得到HUTxO.對(duì)由所有區(qū)塊的hash 構(gòu)成的數(shù)組進(jìn)行哈希運(yùn)算得到Hindex.區(qū)塊鏈中的節(jié)點(diǎn)以及與區(qū)塊鏈無(wú)關(guān)的節(jié)點(diǎn)共同組成DHT.DHT保存UTxO集的分片和最近h個(gè)完整區(qū)塊.在安全輕節(jié)點(diǎn)加入?yún)^(qū)塊鏈網(wǎng)絡(luò)時(shí),只需下載最近6個(gè)區(qū)塊、UTxO分片哈希列表和區(qū)塊哈希列表.當(dāng)安全輕節(jié)點(diǎn)驗(yàn)證一筆新交易時(shí),首先從DHT 中找到對(duì)應(yīng)的UTxO 分片.若該UTxO 分片hash 與先前下載的hash 相同,則該交易是有效的.這種方式將原先依賴于全節(jié)點(diǎn)的數(shù)據(jù)轉(zhuǎn)移至若干節(jié)點(diǎn)共同維護(hù)的DHT 中.對(duì)于存儲(chǔ)資源充足的全節(jié)點(diǎn),存儲(chǔ)負(fù)擔(dān)僅增加了一點(diǎn)點(diǎn);但對(duì)于對(duì)于存儲(chǔ)資源受限的輕節(jié)點(diǎn)來(lái)說(shuō),減輕了存儲(chǔ)負(fù)擔(dān)并不再依賴于全節(jié)點(diǎn).

        Fig.13 Block index hash and the UTxO hash are added to the block header圖13 添加HUTxO 和Hindex 的區(qū)塊結(jié)構(gòu)

        Palai 團(tuán)隊(duì)[65]提出一種稱為區(qū)塊總結(jié)的方法,該方法既可以獲得比SPV 更多的權(quán)限,又不需要像全節(jié)點(diǎn)那樣保存完整賬本.區(qū)塊總結(jié)方法將l個(gè)原始區(qū)塊總結(jié)成一個(gè)新區(qū)塊,稱為總結(jié)區(qū)塊.總結(jié)區(qū)塊中交易的輸入與其所包含的原始?jí)K中的交易輸入一樣,輸入同理.如果一筆交易的輸出是另外一筆交易的輸出,那么將根據(jù)凈效果合并這些交易.總結(jié)區(qū)塊也會(huì)包括原始區(qū)塊的哈希.直接總結(jié)區(qū)塊同樣會(huì)造成區(qū)塊鏈賬本大小問(wèn)題.Palai 使用遞歸的方式對(duì)區(qū)塊序列進(jìn)行總結(jié),即對(duì)總結(jié)區(qū)塊進(jìn)行總結(jié).該方法引入了總結(jié)深度的概念,原始區(qū)塊的總結(jié)深度為0,原始區(qū)塊直接總結(jié)區(qū)塊的總結(jié)深度為1,以此類推.一個(gè)區(qū)塊長(zhǎng)度為n的區(qū)塊鏈經(jīng)過(guò)區(qū)塊遞歸總結(jié)后,將變成先是o個(gè)原始區(qū)塊,再是m個(gè)總結(jié)深度為1 的總結(jié)區(qū)塊,之后再是m個(gè)總結(jié)深度為2 的總結(jié)區(qū)塊,以此類推.經(jīng)過(guò)區(qū)塊總結(jié)后的區(qū)塊鏈如圖14 所示.Nadiya[66]在Palai 團(tuán)隊(duì)研究的基礎(chǔ)上,使用Deflate 壓縮算法對(duì)總結(jié)區(qū)塊進(jìn)行數(shù)據(jù)壓縮,進(jìn)一步減小了區(qū)塊鏈所占用的存儲(chǔ)空間.

        Fig.14 Block summarization圖14 區(qū)塊總結(jié)示意圖

        表4 從輕節(jié)點(diǎn)是否依賴全節(jié)點(diǎn)以及輕節(jié)點(diǎn)存儲(chǔ)內(nèi)容的角度,對(duì)比了6 種典型的輕節(jié)點(diǎn)協(xié)議或模型.根據(jù)是否依賴全節(jié)點(diǎn),可將輕節(jié)點(diǎn)協(xié)議或模型分為兩種:一種是依賴于全節(jié)點(diǎn),另一種是不依賴于全節(jié)點(diǎn).與比特幣原始存儲(chǔ)模型不同的是,SVP 輕節(jié)點(diǎn)只需要存儲(chǔ)區(qū)塊鏈賬本中的區(qū)塊頭,因此,當(dāng)需要區(qū)塊體時(shí),向全節(jié)點(diǎn)請(qǐng)求.同樣地,EPBC 輕節(jié)點(diǎn)僅存儲(chǔ)大小定長(zhǎng)的區(qū)塊總結(jié)值,當(dāng)需要完整區(qū)塊時(shí),即請(qǐng)求全節(jié)點(diǎn),并通過(guò)區(qū)塊總結(jié)值判斷全節(jié)點(diǎn)返回的區(qū)塊是否有效.SCC 通過(guò)對(duì)最新區(qū)塊前的區(qū)塊鏈按照Merkle 樹(shù)的方式進(jìn)行壓縮,以與完整的區(qū)塊鏈賬本保持一致性.當(dāng)全節(jié)點(diǎn)不再有空余空間存儲(chǔ)完整區(qū)塊鏈賬本時(shí),可以簡(jiǎn)單地去除舊區(qū)塊,僅存儲(chǔ)壓縮區(qū)塊和最新區(qū)塊.另一類不依賴于全節(jié)點(diǎn)的輕節(jié)點(diǎn)模型,對(duì)區(qū)塊進(jìn)行總結(jié)或者壓縮,使這些原始區(qū)塊合并或組合成一個(gè)新區(qū)塊,新區(qū)塊遠(yuǎn)小于原始區(qū)塊集合的大小.對(duì)于使用UTxO 模型而不是余額模型的區(qū)塊鏈來(lái)講,一筆交易的輸出有可能是另一筆交易的輸入,凈變化是沒(méi)有區(qū)別的.所謂總結(jié)是指,將原始區(qū)塊集合中交易集進(jìn)行合并.但這種方式具有局限性,只適合區(qū)塊體中僅保存金額、數(shù)字變化的場(chǎng)景.對(duì)于存證、溯源等區(qū)塊體中存儲(chǔ)非數(shù)字型數(shù)據(jù)的領(lǐng)域,區(qū)塊總結(jié)的方式是無(wú)法使用的.

        Table 4 Comparison of light node patterns表4 輕節(jié)點(diǎn)對(duì)比

        4 總結(jié)與展望

        本文從區(qū)塊鏈賬本存儲(chǔ)位置的角度,綜述了鏈下存儲(chǔ)和鏈上存儲(chǔ)兩種用于提高存儲(chǔ)可擴(kuò)展性方法的研究進(jìn)展.本節(jié)將指出兩大類方法目前所面臨的挑戰(zhàn),并為未來(lái)的研究工作提供一些可能的方向.

        4.1 當(dāng)前解決方案所面臨的挑戰(zhàn)

        (1)應(yīng)用場(chǎng)景

        區(qū)塊鏈可分為公有鏈和非公有鏈,后者包括聯(lián)盟鏈和私有鏈.公有鏈?zhǔn)峭耆ブ行幕?任何節(jié)點(diǎn)都可以隨時(shí)加入或退出區(qū)塊鏈網(wǎng)絡(luò).聯(lián)盟鏈?zhǔn)且环N部分去中心化的區(qū)塊鏈,它由聯(lián)盟或企業(yè)構(gòu)成組織負(fù)責(zé)維護(hù).而私有鏈則是一種中心化的區(qū)塊鏈,適合特定的中心化機(jī)構(gòu)控制.

        在鏈下存儲(chǔ)的模式中,數(shù)據(jù)轉(zhuǎn)移至第三方可信賴的存儲(chǔ)系統(tǒng),或由公有鏈節(jié)點(diǎn)負(fù)責(zé)維護(hù)鏈下存儲(chǔ)系統(tǒng)存儲(chǔ).后者易出現(xiàn)提供額外存儲(chǔ)空間的超級(jí)節(jié)點(diǎn),兩者都會(huì)破壞公有鏈的去中心化特質(zhì).在非公有鏈場(chǎng)景下,節(jié)點(diǎn)的寫入受中心化的機(jī)構(gòu)或聯(lián)盟控制,并且數(shù)據(jù)規(guī)模較小.此時(shí),鏈下的存儲(chǔ)系統(tǒng)可由負(fù)責(zé)非公有鏈的中心化機(jī)構(gòu)或聯(lián)盟以及非公有鏈的節(jié)點(diǎn)來(lái)維護(hù).

        鏈上存儲(chǔ)更適合節(jié)點(diǎn)眾多的公有鏈、聯(lián)盟鏈場(chǎng)景.在協(xié)作式存儲(chǔ)模式中,節(jié)點(diǎn)間的關(guān)系不是單向依賴的,而是相互依賴、相互合作.輕節(jié)點(diǎn)模式適合存儲(chǔ)容量小的智能設(shè)備,如手機(jī)、PC 以及傳感器等.許多學(xué)者也提出了不依賴于全節(jié)點(diǎn)的輕節(jié)點(diǎn)方案,一定程度上提高了輕節(jié)點(diǎn)的獨(dú)立性和安全性,但輕節(jié)點(diǎn)仍無(wú)法實(shí)現(xiàn)全節(jié)點(diǎn)的所有功能.利用區(qū)塊總結(jié)方式的輕節(jié)點(diǎn)可以節(jié)省大量空間,但同時(shí)在應(yīng)用場(chǎng)景上也存在一定的局限性,這些輕節(jié)點(diǎn)僅適合于區(qū)塊體存儲(chǔ)貨幣轉(zhuǎn)移的場(chǎng)景,而無(wú)法應(yīng)用到存證、溯源等領(lǐng)域.

        (2)安全性

        區(qū)塊鏈迄今為止面臨的最大挑戰(zhàn)便是安全問(wèn)題,即便是完全去中心化的比特幣,對(duì)于鏈下存儲(chǔ)模式,如何確保鏈下的存儲(chǔ)系統(tǒng)安全、可靠也仍是一個(gè)難點(diǎn).一種解決方案是維護(hù)鏈下存儲(chǔ)系統(tǒng)的都是區(qū)塊鏈節(jié)點(diǎn),另一種方案是維護(hù)鏈下存儲(chǔ)系統(tǒng)的節(jié)點(diǎn)一部分是區(qū)塊鏈節(jié)點(diǎn)一部分是非區(qū)塊鏈節(jié)點(diǎn).前者增加了區(qū)塊鏈節(jié)點(diǎn)的負(fù)擔(dān),后者犧牲了公有鏈的去中心化特性.區(qū)塊鏈與鏈下存儲(chǔ)系統(tǒng)之間的通信安全同樣需要考慮.

        對(duì)于協(xié)作式存儲(chǔ),如何確保區(qū)域中即使存在惡意節(jié)點(diǎn),但不會(huì)影響區(qū)域內(nèi)節(jié)點(diǎn)的協(xié)作或區(qū)域間的協(xié)作,是設(shè)計(jì)協(xié)作式存儲(chǔ)方案首先需要考慮的問(wèn)題.協(xié)作式存儲(chǔ)需要考慮一定的數(shù)據(jù)冗余以確保數(shù)據(jù)的安全.而輕節(jié)點(diǎn)與全節(jié)點(diǎn)的關(guān)系是輕節(jié)點(diǎn)安全性的根本,負(fù)責(zé)與輕節(jié)點(diǎn)通信的全節(jié)點(diǎn)如果是惡意節(jié)點(diǎn),那么至少在一個(gè)時(shí)期內(nèi),該輕節(jié)點(diǎn)都被惡意節(jié)點(diǎn)所欺騙.因此,輕節(jié)點(diǎn)應(yīng)該要么依賴盡可能多的全節(jié)點(diǎn),要么應(yīng)該依賴區(qū)塊鏈整體網(wǎng)絡(luò).

        無(wú)論是鏈下存儲(chǔ)還是鏈上存儲(chǔ),原先完整的區(qū)塊鏈賬本都會(huì)被拆分.那么當(dāng)節(jié)點(diǎn)需要完整賬本時(shí),從鏈下存儲(chǔ)系統(tǒng)或其他節(jié)點(diǎn)處獲取自身不存儲(chǔ)的賬本部分后,賬本將會(huì)被整合.整合后的賬本與區(qū)塊鏈網(wǎng)絡(luò)中所存儲(chǔ)的賬本必須保持完全一致.因此,必須考慮一定的冗余策略和補(bǔ)救策略以保證區(qū)塊鏈的一致性在鏈下存儲(chǔ)和鏈上存儲(chǔ)不受影響.

        (3)效率

        在鏈下存儲(chǔ)方式中,區(qū)塊鏈僅需存儲(chǔ)區(qū)塊頭和一些重要數(shù)據(jù),而區(qū)塊體或一些普通數(shù)據(jù)則存儲(chǔ)在鏈下存儲(chǔ)系統(tǒng)中.區(qū)塊鏈存儲(chǔ)負(fù)擔(dān)明顯減輕.在許多協(xié)作式存儲(chǔ)中,節(jié)點(diǎn)所需的存儲(chǔ)空間往往與區(qū)域內(nèi)節(jié)點(diǎn)數(shù)量無(wú)關(guān),因此與比特幣存儲(chǔ)模型所需空間近似呈線性關(guān)系.當(dāng)區(qū)塊不斷地增加至區(qū)塊鏈的尾端時(shí),這些協(xié)作式存儲(chǔ)方案慢慢地同樣會(huì)遇到存儲(chǔ)瓶頸.輕節(jié)點(diǎn)通常存儲(chǔ)區(qū)塊頭或經(jīng)過(guò)總結(jié)后的區(qū)塊鏈賬本.研究者需要考慮如何使得改進(jìn)后的存儲(chǔ)模型所需空間日后不會(huì)面臨同樣的存儲(chǔ)問(wèn)題.

        鏈下存儲(chǔ)和鏈上存儲(chǔ)都在一定程度上增加了通信成本,即以時(shí)間換取空間.在鏈下存儲(chǔ)模式中,節(jié)點(diǎn)需要花費(fèi)額外的通信成本從鏈下的存儲(chǔ)系統(tǒng)獲取區(qū)塊鏈數(shù)據(jù).對(duì)于鏈上存儲(chǔ)模式,當(dāng)節(jié)點(diǎn)需要完整的區(qū)塊鏈賬本時(shí),則要向區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)或區(qū)域內(nèi)的節(jié)點(diǎn)請(qǐng)求自己沒(méi)有存儲(chǔ)的賬本部分.因此,研究者們需要考慮區(qū)域的劃分與時(shí)間成本和存儲(chǔ)成本之間的關(guān)系.對(duì)于輕節(jié)點(diǎn)而言,當(dāng)需要完整數(shù)據(jù)時(shí),無(wú)法從本地找到對(duì)應(yīng)區(qū)塊,而需要請(qǐng)求區(qū)塊鏈網(wǎng)絡(luò)中的全節(jié)點(diǎn)或整個(gè)區(qū)塊鏈網(wǎng)絡(luò).在解決存儲(chǔ)擴(kuò)展性問(wèn)題的同時(shí),需要考慮與通信成本之間的關(guān)系,從而做到在可承受范圍內(nèi),增加一定的通信成本以獲得較小的存儲(chǔ)壓力.

        4.2 未來(lái)研究方向

        第4.1 節(jié)提到了區(qū)塊鏈存儲(chǔ)可擴(kuò)展性技術(shù)主要面臨的一些問(wèn)題,在這些問(wèn)題的基礎(chǔ)上,本文給出了幾個(gè)未來(lái)的研究方向.

        (1)研究可節(jié)省存儲(chǔ)空間的共識(shí)機(jī)制

        目前,大部分提高區(qū)塊鏈存儲(chǔ)可擴(kuò)展性的解決方案都是對(duì)經(jīng)過(guò)共識(shí)后產(chǎn)生的新區(qū)塊進(jìn)行處理,以達(dá)到減輕節(jié)點(diǎn)存儲(chǔ)壓力的目的.這些解決方案是從區(qū)塊鏈基礎(chǔ)架構(gòu)模型的網(wǎng)絡(luò)層進(jìn)行改進(jìn),不涉及改變區(qū)塊鏈的共識(shí)機(jī)制.未來(lái)可從區(qū)塊鏈基礎(chǔ)架構(gòu)模型的共識(shí)層入手,研究可節(jié)省存儲(chǔ)空間的共識(shí)機(jī)制;區(qū)塊鏈節(jié)點(diǎn)在達(dá)成共識(shí)的過(guò)程中同時(shí)考慮如何協(xié)作存儲(chǔ)區(qū)塊數(shù)據(jù),以解決區(qū)塊鏈存儲(chǔ)日益膨脹的問(wèn)題.此外,在公有鏈場(chǎng)景中,存在經(jīng)濟(jì)激勵(lì)手段鼓勵(lì)節(jié)點(diǎn)參與共識(shí).因此在可節(jié)省存儲(chǔ)空間的共識(shí)機(jī)制中,需要在共識(shí)機(jī)制中添加合理的經(jīng)濟(jì)激勵(lì)措施,獎(jiǎng)勵(lì)付出更多存儲(chǔ)資源的節(jié)點(diǎn).

        (2)研究與初始節(jié)點(diǎn)數(shù)量相關(guān)聯(lián)的動(dòng)態(tài)區(qū)域劃分方法

        鏈上協(xié)作式存儲(chǔ)模式通過(guò)將區(qū)塊鏈網(wǎng)絡(luò)劃分成若干個(gè)區(qū)域,區(qū)域內(nèi)的節(jié)點(diǎn)協(xié)作地維護(hù)區(qū)塊鏈賬本.目前的鏈上協(xié)作式存儲(chǔ)模式中的區(qū)域劃分方法可分為動(dòng)態(tài)和靜態(tài)兩種方式.然而無(wú)論是動(dòng)態(tài)劃分還是靜態(tài)劃分,均與初始時(shí)節(jié)點(diǎn)數(shù)量無(wú)關(guān).這就導(dǎo)致在區(qū)域劃分前,區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)即使存在數(shù)量的差異,劃分方法仍然相同,進(jìn)而可能導(dǎo)致區(qū)域節(jié)點(diǎn)間的通信成本增加.未來(lái)可從區(qū)塊鏈節(jié)點(diǎn)數(shù)量與通信成本和存儲(chǔ)成本之間的關(guān)系來(lái)加以思考,建立相應(yīng)的數(shù)學(xué)模型,實(shí)現(xiàn)訪問(wèn)本地和區(qū)域內(nèi)其他節(jié)點(diǎn)的區(qū)塊鏈數(shù)據(jù)所花費(fèi)的時(shí)間之和最優(yōu),進(jìn)而實(shí)現(xiàn)通信成本和存儲(chǔ)成本的最優(yōu)化.

        (3)研究存儲(chǔ)定長(zhǎng)數(shù)據(jù)的輕節(jié)點(diǎn)模式

        隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,未來(lái)物聯(lián)網(wǎng)與區(qū)塊鏈的整合非常重要.鏈上協(xié)作式存儲(chǔ)模式會(huì)增加物聯(lián)網(wǎng)節(jié)點(diǎn)間的相互依賴,因此,輕節(jié)點(diǎn)模式更適合物聯(lián)網(wǎng)中的輕量級(jí)設(shè)備.按照當(dāng)前主流的輕節(jié)點(diǎn)協(xié)議,這些輕節(jié)點(diǎn)所存儲(chǔ)的數(shù)據(jù)大小與完整區(qū)塊鏈賬本大小之間大致呈線性關(guān)系.以這種存儲(chǔ)方式,輕節(jié)點(diǎn)未來(lái)依然會(huì)遇到存儲(chǔ)瓶頸.因此,研究存儲(chǔ)定長(zhǎng)數(shù)據(jù)的輕節(jié)點(diǎn)模型是一個(gè)值得研究的方向.

        (4)研究不同存儲(chǔ)模式下的安全機(jī)制

        目前提高區(qū)塊鏈可擴(kuò)展性的兩類解決方案——鏈下存儲(chǔ)和鏈上存儲(chǔ),仍存在著一定的安全性問(wèn)題,包括鏈下存儲(chǔ)系統(tǒng)與區(qū)塊鏈間的交互安全問(wèn)題、鏈上協(xié)作式中區(qū)域內(nèi)的惡意節(jié)點(diǎn)問(wèn)題、輕節(jié)點(diǎn)與全節(jié)點(diǎn)間的信任問(wèn)題以及區(qū)塊拆分后重構(gòu)時(shí)的安全問(wèn)題等.屬性加密、同態(tài)加密以及零知識(shí)證明等技術(shù)為提高鏈下存儲(chǔ)和鏈上存儲(chǔ)的安全性提供了方向.未來(lái)可研究基于屬性加密、同態(tài)加密或零知識(shí)證明等技術(shù)的安全機(jī)制,進(jìn)而提高鏈下存儲(chǔ)及鏈上存儲(chǔ)模式的整體安全性.

        5 結(jié)束語(yǔ)

        區(qū)塊鏈存儲(chǔ)的可擴(kuò)展性已成為制約區(qū)塊鏈應(yīng)用落地的一大問(wèn)題.巨大的存儲(chǔ)壓力,一方面使得已有的節(jié)點(diǎn)可能無(wú)法繼續(xù)參與區(qū)塊鏈;另一方面,使得存儲(chǔ)能力差的輕型設(shè)備無(wú)法加入?yún)^(qū)塊鏈網(wǎng)絡(luò).因此,研究提高區(qū)塊鏈存儲(chǔ)可擴(kuò)展性的技術(shù)具有非常重要的意義.本文首先介紹了區(qū)塊鏈所面臨的存儲(chǔ)可擴(kuò)展性問(wèn)題以及區(qū)塊鏈的存儲(chǔ)模型,其次分析了兩大類提高存儲(chǔ)可擴(kuò)展性技術(shù)的研究進(jìn)展,最后對(duì)提高存儲(chǔ)可擴(kuò)展性技術(shù)所面臨的問(wèn)題和研究方向給出了我們的思考和總結(jié).

        猜你喜歡
        可擴(kuò)展性分片賬本
        一圖讀懂“上海賬本”
        上下分片與詞的時(shí)空佈局
        詞學(xué)(2022年1期)2022-10-27 08:06:12
        分片光滑邊值問(wèn)題的再生核方法
        CDN存量MP4視頻播放優(yōu)化方法
        數(shù)說(shuō):重慶70年“賬本”展示
        基于模糊二分查找的幀分片算法設(shè)計(jì)與實(shí)現(xiàn)
        丟失的紅色賬本
        丟失的紅色賬本
        恩智浦推出全新i.MX 8X 處理器,為工業(yè)應(yīng)用帶來(lái)更高的安全性、可靠性和可擴(kuò)展性
        汽車零部件(2017年3期)2017-07-12 17:03:58
        電力監(jiān)控軟件的可擴(kuò)展性設(shè)計(jì)
        亚洲a人片在线观看网址| 日本一二三区视频在线| 亚洲精品无码国产| 亚洲欧洲高潮| 亚洲国产精品日韩专区av| 真正免费一级毛片在线播放| 2021最新久久久视精品爱| 女同av一区二区三区| 特黄aaaaaaaaa毛片免费视频| 人妻无码久久一区二区三区免费| 国产95在线 | 欧美| 国产视频在线一区二区三区四区| 日韩一区二区三区人妻中文字幕| 成午夜福利人试看120秒| 国产精一品亚洲二区在线播放 | 精品亚洲一区二区三区四区五区| 欧美内射深喉中文字幕| 热久久网站| 亚洲国产中文字幕九色| 美女露出奶头扒开内裤的视频| 一本丁香综合久久久久不卡网站| 3344永久在线观看视频| 国产精品欧美视频另类专区| 一区二区三区视频亚洲| 国产成人av一区二区三区| 国产激情电影综合在线看| 精品国产乱码一区二区三区在线| 日本一二三区在线不卡| 私人vps一夜爽毛片免费| 无码专区久久综合久中文字幕| 久久HEZYO色综合| 亚洲乱码中文字幕综合久久| 国产精品第一国产精品| 五月丁香六月综合激情在线观看| 国产成人av一区二区三| 亚洲av成人无码一二三在线观看| 少妇被猛男粗大的猛进出| 中文字幕亚洲精品第1页| 国产成人av区一区二区三| 免费a级毛片无码a∨中文字幕下载| 国产精品99久久精品爆乳|