比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > Polygon > Info

區塊鏈說數據沒被篡改過,是不是在騙你 ?_MPT

Author:

Time:1900/1/1 0:00:00

前文《打破K/V存儲的性能瓶頸》中,我們提到用一個哈希值來反映區塊鏈系統中所有對象的當前狀態集合,并稱之為“世界狀態”。現在大多數區塊鏈底層平臺為了支持與其他鏈集成,或者為了部署在更小的終端,都會提供輕節點的功能,輕節點也就是存儲少量數據的“輕量級節點”,但因為沒有存儲全量數據,無法對其他節點的數據進行正確性的驗證。這里便需要其他節點生成一份數據證明,配合輕節點本地保存的“世界狀態”來進行數據的驗證。

這份數據證明是什么?又是怎么實現的?帶著這份疑問,本文將詳細介紹目前主流的數據證明的實現以及解決方案和優化思路。

介紹數據證明前,我們先要了解傳統的默克爾樹,以及對應的證明生成和驗證的流程。

默克爾樹,因發明人叫Merkle,并且是樹形結構而得名。如下圖,默克爾樹的葉節點存儲數據或者數據的哈希值,任一父節點包含了其子節點總和的哈希值。

默克爾樹最大的作用便是快速校驗部分數據是否在原始數據中。

舉個例子,要想驗證L2在上圖的這棵樹上,只需要節點列表即可,通過L2可以計算出Hash0-1,通過Hash0-1與Hash0-0可以計算出Hash0,再通過Hash0與Hash1,便可以得到一個樹根,再把該樹根與TopHash進行比對即可快速驗證L2是否在樹中。默克爾樹生成數據證明以及驗證數據證明的原理就是如此,生成證明時自底向上,不斷獲取父節點的兄弟節點,打包成數據證明;驗證時通過遍歷證明中的節點列表,不斷進行哈希得到父節點的操作,最后可以得到樹根節點,再把該樹根與原樹根進行比對,達到驗證的目的。

浙江推出基于區塊鏈的冷鏈食品追溯系統:6月22日,記者從省市場監管局獲悉,基于區塊鏈技術開發的浙江省冷鏈食品追溯系統(下稱“浙冷鏈”)正式上線。“浙冷鏈”首批將對進口生食水產品進行賦碼、掃碼,后續實現全省重點冷鏈食品全覆蓋。

該系統以進口食品經營企業和農產品批發市場作為首站,利用“冷鏈食品溯源碼”實現從供應鏈首站到消費環節產品最小包裝的閉環追溯管理,全面掌握冷鏈食品供應鏈流向。(浙江日報)[2020/6/23]

這種基本的默克爾樹廣泛應用在區塊鏈系統中,例如比特幣中輕錢包的SPV便是應用該原理,比特幣中區塊記錄的root便是區塊中交易集合構成的默克爾樹的樹根,使得無需下載完整區塊,只需要區塊頭便可以驗證某條交易的有效性。

默克爾樹雖然滿足了數據證明以及驗證的需求,但是其二叉樹的結構,會使其在存儲龐大的狀態數據時,造成中間節點太多,有存儲壓力大的問題;并且默克爾樹在對數據的增刪改查方面沒有解決方案,我們知道狀態數據在執行合約時需要頻繁的讀寫,因此可以對數據進行查詢修改也是非常重要的,針對以上幾點問題,以太坊提出了默克爾帕特里夏樹。

▲?什么是MPT?

MPT主要結合了默克爾樹和前綴樹的特點,前綴樹顧名思義,是一種利用字符串的公共前綴來進行查詢的樹,如下圖所示,用來查詢有共同前綴的數據不需要進行字符的比對,十分方便,但缺點也十分明顯,如果一個字符串與其他節點沒有公共前綴時,便會帶來很多節點的創建,造成存儲空間的浪費。

濟寧銀行首筆跨境金融區塊鏈服務平臺查詢、核驗業務成功發放落地:為有效解決轄區中小企業融資難、融資貴問題,更好地服務外貿實體經濟,濟寧銀行深入落實國家外匯管理局山東省分局《關于開展跨境金融區塊鏈服務平臺試點工作的通知》要求,率先加入全國跨境金融區塊鏈服務試點行列,成為了山東省第一批試點銀行。作為全國跨境金融區塊鏈服務試點行,濟寧銀行利用跨境金融區塊鏈服務平臺,登記申請材料、審查融資背景,成功推出了首筆業務,為市中支行客戶發放了510萬元出口商業發票融資。(魯網)[2020/4/18]

基于默克爾樹以及前綴樹的優缺點,MPT提出了四種節點類型:

1)空節點:用來表示空字符串;

2)分支節點:用來表示MPT樹中所有擁有超過1個子節點以上的非葉子節點,最多能容納十六個子節點;

3)葉子節點:表示為的一個鍵值對,其中key是一種十六進制編碼(HP編碼),value是節點具體內容的RLP編碼;

4)擴展節點:同樣表示為的一個鍵值對,不過value是其他節點的hash值,這個hash可以被當做key,用來在數據庫中查詢子節點;

聲音 | 平安銀行鄧俊毅:區塊鏈和物聯網結合使供應鏈金融呈現新活力和熱點:金色財經報道,平安銀行戰略發展中心高級項目總監鄧俊毅在接受采訪時表示,傳統供應鏈金融解決的是核心企業的主體信用傳導問題。目前金融機構可以通過聯合各方參與主體構建聯盟鏈的形式,利用分布式記賬與智能合約技術,為各參與方提供可信協作平臺,支持多層級信用傳遞,實現融資業務場景增信。區塊鏈確保鏈上行為的不可篡改和可授權的共享,但要實現上鏈數據的可信,需要區塊鏈與物聯網、大數據、AI的結合,進行交叉驗證,同時也可支持數據溯源,這將是未來區塊鏈實踐的重要趨勢。供應鏈金融并不是新興的業務,但隨著區塊鏈和物聯網的結合,傳統供應鏈金融模式下的痛點得以紓解,供應鏈金融呈現新的活力和熱點。[2020/1/11]

相比于普通的前綴樹以及默克爾樹,MPT加入了擴展節點,可以將不共享的前綴壓進一個節點,帶來路徑壓縮的特性,降低了樹的高度,減少了空間浪費;分支節點的加入,使得單個節點最多能有十六個分叉,同樣也是降低了樹高;并且通過哈希值進行樹節點間的連接,確保了安全性與可驗證性。

聲音 | 清華鐘宏:區塊鏈國家戰略的目標是建設網絡強國、發展數字經濟及助力經濟社會發展:金色財經報道,清華x-lab青藤鏈盟研究院院長鐘宏在接受采訪時表示,區塊鏈的可以用“區塊鏈國家戰略一二三”來概括:一就是一個基礎,也就是區塊鏈技術和產業發展的根基,即“規范引導安全管理”。二是兩個發展,即區塊鏈技術自主創新發展,區塊鏈應用治理融合發展,區塊鏈技術不僅僅是大家理解的溯源、民生等應用,其最大的應用場景應該是服務國家治理體系和治理能力現代化建設方面。也就是說,區塊鏈是國家治理體系和治理能力現代化的最核心的科技手段和科技武器。三是指三個目標,即建設網絡強國、發展數字經濟、助力經濟社會的發展。[2019/11/21]

對MPT上的數據進行增刪改查,需要通過前綴索引到對應的節點,葉子節點的改動會帶來新的分支節點或者擴展節點的加入,新的節點需要進行哈希計算得出新的哈希值,然后更新父節點的信息,造成索引路徑上節點的哈希值的連鎖的改動,最后生成一個唯一的“世界狀態”。

在MPT上,要想生成數據證明,也需要沿著樹進行前綴的索引,并把索引路徑上的節點打包成證明返回即可。驗證數據證明的時候,需要驗證葉子節點中鍵的正確性,并且對證明中的節點列表進行自底向上的哈希操作,最后比對樹根的值即可。

聲音 | 順豐:通過對區塊鏈等技術的綜合運用,助力智慧物流升級:據光明網消息,在8月26日的順豐速運大閘蟹行業解決方案推介會上,順豐代表正式對外公布了2019年高郵湖大閘蟹行業解決方案,從物流、倉儲、包裝、商流等方面給廣大蟹農和蟹商展示了順豐的科技成果和保障框架,介紹了順豐科技為主的信息網,通過大數據、區塊鏈、人工智能、機器學習、智能設備等綜合運用,讓機器解放雙手、讓人工智能助力決策、助力智慧物流升級。[2019/8/29]

▲?性能瓶頸

上文提到以太坊是以節點的哈希值作為數據庫存儲節點的鍵,這些節點的存儲與區塊號或交易并沒有任何綁定關系,并且散落在整個狀態空間中的,那么隨著交易量的增大,狀態變遷帶來的新節點也會增多,數據存儲壓力會越來越大。

由于以太坊底層采取的是leveldb存儲,對于每個鍵值的讀取最壞情況下需要一次磁盤IO,那么在執行合約的時候,將會有大量的時間耗費在狀態的讀取中,久而久之系統整體的性能會越來越差。

當下主流數據庫一般分為兩種:以LSM樹為主的數據庫例如leveldb、rocksdb;還有以B+樹為主的數據庫例如mysql。相同條件下B+樹的讀要比LSM樹更有效率,在聯盟鏈場景下,我們知道大部分應用場景都是讀多寫少,那么針對聯盟鏈,能不能基于B+樹來提出一種既能實現數據證明,又可以兼顧到讀寫性能的方法呢?答案是肯定的,我們提出了一種默克爾B+樹的結構,結合了B+樹以及默克爾樹的特點,降低了查詢所需的磁盤IO以及存儲的數據量,在保持高性能的同時,還能提供數據證明、數據可驗證的功能。

▲?什么是默克爾B+樹?

B+樹是一種n叉的平衡查找樹,所有鍵值對都會按鍵值的大小順序存放在最后一層葉子節點中,父節點會記錄其連接的子節點的最小鍵值,方便索引。

默克爾B+樹以B+樹為基礎,包含了兩種節點:處于最后一層的數據節點、索引節點,該樹具有以下的特點:

1)每個節點會有一個ID;

2)索引節點的子節點列表中存放了子節點的最小鍵以及哈希值;

3)數據節點的子節點列表存放的是狀態數據鍵值對;

4)每個節點的哈希值由它的子節點列表總和的哈希值得出;

如上圖,將狀態數據以鍵值對的形式存入數據節點,每個節點最后會以頁的形式存放到磁盤中,為了更適應磁盤的讀寫策略,規定每個頁大小為4K,這樣就可以通過計算出頁ID*頁大小的偏移量從磁盤讀取某個節點。

同樣我們規定每個節點最多容納4K的數據,如果某個數據節點插入太多鍵值對,導致其超過了4K的閾值,將會產生分裂,變為多個不超過閾值的新數據節點,并把對應的新節點信息插入到原父節點的子節點列表中,再遞歸檢查父節點即索引節點是否超過閾值,如果超過將會重復分裂過程。

這里我們會提供一個最大頁ID以及空閑ID列表來管理頁ID,當新建了一個節點時,會先去空閑ID列表查詢一下是否存在滿足條件的ID,有則取出來分配給新節點,否則會把最大頁ID分配給新節點,并遞增最大頁ID。有分配自然就會有回收,當節點A分裂為節點B和節點C時,節點A的頁ID就會被回收,納入到空閑ID列表中。當發現某個節點變為空節點時,也會被回收頁ID。

由于默克爾B+樹在每個節點都存儲了哈希值,每次對狀態數據的增刪改查,都會造成底層數據節點的變動,進而影響從數據節點到根節點路徑上的節點哈希值,最后生成出唯一的“世界狀態”。

在生成數據證明時,同樣是沿著樹根,通過鍵的比對向下索引,并把索引路徑上的節點打包成證明返回即可。驗證數據證明的時候,可以在數據證明中的節點路徑進行同樣的索引操作,驗證索引路徑的一致性,并且進行節點哈希值的正確性校驗,最后比對樹根的值即可。

▲?優化思路

根據上文來看,默克爾B+樹確實可以實現較高的讀寫效率以及可驗證性,但是還有很大的優化空間,基于此,我們打算從優化磁盤讀的角度提出優化思路。

對于節點限制在4K大小這點,可以有效提高節點分叉數,降低樹高,進而降低磁盤IO次數,但是仍然需要log(n)次的磁盤IO,為了最大化降低IO次數,我們把索引節點與數據節點分開存儲為索引文件和數據文件。索引節點中可以認為只存放了鍵,因此索引文件遠遠小于數據文件,把索引文件通過mmap的形式維護在內存中,這樣對底層的數據的讀取只需要數據文件的一次磁盤IO即可,大大提升了讀效率,在聯盟鏈讀多寫少的場景下具有較大的優勢。

本文是存儲系列推文的延續,主要闡述了區塊鏈中數據證明的實現。

首先介紹了對狀態數據做數據證明的背景需求,并以以太坊為例,詳細介紹其狀態數據存儲結構MPT,闡述了在MPT上數據證明以及驗證的實現,并進一步分析了以太坊的性能瓶頸。

針對聯盟鏈讀多寫少的場景,本文提出了一種以默克爾B+樹為基礎的解決方案,解釋了在默克爾B+樹上的數據證明以及驗證的實現,并且為了進一步提高性能,提供了優化思路,通過索引與數據分離的方式來完善可用性。

作者簡介

鄭柏川趣鏈科技基礎平臺部區塊鏈存儲研究小組

參考文獻

?https://github.com/ethereum/go-ethereum

https://en.wikipedia.org/wiki/Merkle_tree

Tags:區塊鏈MPTHASHASH區塊鏈域名開發jmpt幣合約地址HashNet BitEcoDASHG價格

Polygon
當區塊鏈與參數保險的碰撞會擦出怎樣的火花?_區塊鏈

原文標題|《區塊鏈應用:參數保險》 原文作者|AnhLe 編譯出品|白澤研究院 參數保險的市場規模潛力巨大,因為疫情的快速傳播幾乎傷害了世界上所有國家.

1900/1/1 0:00:00
超級賬本執行董事Brian Valendorf:50余家中國機構以贊助會員身份加入超級賬本_HYPER

巴比特訊,9月27日,由中關村區塊鏈產業聯盟主辦,北京泰爾英福科技承辦的“ICT中國·2021高層論壇之區塊鏈創新應用發展論壇”在北京召開,超級賬本執行董事BrianValendorf分享稱.

1900/1/1 0:00:00
NFT市場銷售額在上周市場大跌后開始改善_SEA

據Bitcoin.com9月20日消息,NFT的銷售額在9月10日從8月中旬的歷史高點暴跌了86%。該報告指出,銷量最大的NFT市場Opensea的7天銷售額下滑了52.47%.

1900/1/1 0:00:00
以太坊智能合約ABI、事件和日志_ESS

原標題:《以太坊智能合約ABI、事件和日志》作者:北京大學胡悅陽,本文僅代表作者觀點原文鏈接:https://mp.weixin.qq.com/s/QKz8r1MpntGuw_xM9gh9_w.

1900/1/1 0:00:00
CryptoFed DAO向美國SEC提交S-1文件,用于代幣分發_CRYP

9月18日,據TheBlock報道,根據提交給美國SEC的S-1文件,懷俄明州的一個去中心化自治組織(DAO)——CryptoFed,正在尋求向美國證券交易委員會(SEC)注冊為一家上市公司.

1900/1/1 0:00:00
推特高管發布視頻展示正在開發中的NFT功能,具體發布時間未知_SKI

據TheBlock消息,9月30日,推特消費者營銷主管JustinTaylor發布了一段視頻,向想要設置NFT個人資料圖片的用戶展示了一項正在開發的工具,目前尚未發布.

1900/1/1 0:00:00
ads