新聞資訊  快訊  焦點  財經  政策  社會
互 聯 網   電商  金融  數據  計算  技巧
生活百科  科技  職場  健康  法律  汽車
手機百科  知識  軟件  修理  測評  微信
軟件技術  應用  系統  圖像  視頻  經驗
硬件技術  知識  技術  測評  選購  維修
網絡技術  硬件  軟件  設置  安全  技術
程序開發  語言  移動  數據  開源  百科
安全防護  資訊  黑客  木馬  病毒  移動
站長技術  搜索  SEO  推廣  媒體  移動
財經百科  股票  知識  理財  財務  金融
教育考試  育兒  小學  高考  考研  留學
您當前的位置:首頁 > 互聯網百科 > 區塊鏈

區塊鏈如何運用merkle tree驗證交易真實性

時間:2019-11-12 10:59:20  來源:  作者:

大部分材料都會提到區塊中保存了merkle根,并且利用它作交易真實性驗證。但是具體如何作這個真實性驗證,沒有一篇文章可以通俗的講出來。本文假設你已經知道區塊鏈中merkle tree的原理,現在想搞明白具體怎么來實現交易真實性驗證。

Merkle Tree

這個小節簡述一下merkle的原理,具體詳解會另外寫文章,你關注我的文章即可。簡單說,merkle tree就是一個hash二叉樹,父節點是兩個子節點的double sha256的結果,葉子節點就是交易的content的double sha256結果。

區塊鏈如何運用merkle tree驗證交易真實性

 

blockchain merkle tree

上圖中最下面那一層就是交易數據,每一個交易都可以計算出一個hash,從而層層向上,得到merkle root。但是由于blockchain里面都merkle運算要求葉子節點是偶數,所以,當一個區塊內包含當交易數量為奇數時,把最后一個交易復制一份,湊成偶數。

最后就是把merkle root保存在區塊頭中,交易數據被保存在區塊體中,其實中間當那些hash并沒有被保存,它們只是運算過程數據。

SPV

為什么要搞這么復雜?直接把所有交易數據保存起來了,要驗證交易是否存在還不簡單嗎?之所以要這么干,是因為比特幣發明之初,中本聰想到有一種輕錢包的設計,這就是SPV(簡化支付驗證,Simplified Payment Verification)。

輕錢包并不保存完整的區塊鏈,而是只保存每一個區塊的區塊頭。區塊體保存了完整的交易信息,而交易信息需要的存儲量大部分都是交易頭的千倍以上。所以,如果只保存交易頭,就可以極大的減少本地客戶端存儲的區塊鏈信息。

但是,不能因此讓區塊鏈無法工作啊。如果這個時候輕錢包要對某一個交易進行驗證,而本地又沒有這個交易的信息,那怎么驗證呢?這時,區塊頭里面的merkle root就要起作用了。

驗證路徑

在講述輕錢包的驗證過程之前,我們需要知道如何在merkle tree里面做驗證。我們已知merkle tree里面父節點和子節點的運算關系,因此,當我們要證明一個葉子節點存在于這棵樹時,只需要得到從該葉子節點到根的運算過程里面需要的那些hash即可,并不需要所有葉子節點參與計算。

區塊鏈如何運用merkle tree驗證交易真實性

 

merkle驗證路徑

你可能覺得有點奇怪,為什么不直接把所有的葉子節點告訴它就行了,你用所有葉子節點能算出root hash就驗證通過了。但事實就是這樣,因為每一個父節點hash一定是由兩個子節點hash運算得到,所以,我們只需要挑選出所有參與運算的節點,就可以證明這個葉子節點存在于樹中。這樣可以減少hash運算的次數。而這些被挑選出來的節點,以及它們之間的層級關系,就是驗證路徑,即上圖中merkle root那個盒子下面的所有盒子。

如何證明交易的真實性?

比特幣網絡中的交易,只有已經被記錄到區塊鏈,并且已經得到6個確認的,才被認為是真實的,只有基于這些真實交易發起的新交易(輸入與輸出的概念),才是合法的。

我們詢問一個交易是否真實,往往基于以下前提:

  • 我們在問一個交易是否已被記錄到區塊鏈中
  • 而且這個交易所在的區塊鏈是最長的哪一條,沒有在分叉鏈上
  • 當每個節點接收到一條交易廣播時,我們要查詢作為一筆新交易的輸入的真實性
  • 礦工對交易進行打包之前,對所有的輸入進行真實性驗證(在礦工接收到交易信息時就已經驗證過了,打包的時候驗證2000條交易信息不可能)

那么對于SPV輕錢包而言,怎么知道一個交易是否真實的呢?SPV拿到一個交易信息之后(比如接收到一筆錢),并不能確認這個交易是否合法,因此要對這個交易的輸入進行驗證。但是它只拿到了單個交易的信息,而沒有本地的完整區塊鏈數據,因此,SPV要拿著這個交易的信息向網絡發起查詢請求,這個請求被稱為merkle block message。當其他有完整區塊鏈數據的客戶端收到這個請求之后,利用傳過來的交易信息在自己的區塊鏈數據庫中進行查詢,并把驗證路徑返回給請求源,SPV拿到驗證路徑之后,再做一次merkle校驗,確認無誤之后,就認為這個交易是可信的。

現在的問題是:

  • 怎么從區塊鏈里面查一個交易?
  • 怎么獲取merkle驗證路徑?
  • 怎么確保網絡上這個返回的驗證路徑不是偽造的?

從區塊鏈查交易

區塊鏈的數據結構是離散的,比特幣里面一個區塊被保存在一個文件里面,要得到一個交易的驗證路徑,必須得到這個交易所在的區塊鏈。這是一個復制的查詢過程,可能需要把所有的區塊都遍歷一遍才能找到。因此,blockchain.info這樣的網站孕育而生,幫助你通過一個信息查這個信息在區塊鏈上的所有相關記錄。但是對于客戶端而言,可沒那么容易,它不能信任blockchain.info這個網站,只能信任自己本地存儲的區塊鏈。所以,只能用比較合理的算法,去優化交易查詢。

一種設計是,把每一個區塊的數據結構修改為關系型數據庫,通過關系型數據庫,可以用sql語句快速查詢。但是,要遍歷查詢所有區塊鏈,是比較浪費的。還有一種想法是,利用交易的時間戳來快速定位區塊位置,在臨近的幾個區塊中快速找到它。

如何獲取merkle驗證路徑?

實際上,merkle的驗證路徑生成的前提是已經存在一棵完整的merkle樹。市面上有很多merkle樹的實現包,有的包直接給出來getProof的方法來獲取某個葉子節點的驗證路徑。

在客戶端收到merkle block message之后,要執行下面的步驟:

  1. 通過上述方法找到包含該交易的區塊
  2. 檢查該區塊是否是整個網絡中最長鏈條里面的
  3. 取出所有交易生成merkle tree,利用getProof方法得到該交易的驗證路徑
  4. 將該驗證路徑發送回請求源

SPV得到響應之后,要做如下驗證:

  1. 同步區塊鏈,確保是整個網絡中最長的一條
  2. 先拿到merkle root去區塊鏈中查找,確保該merkle root hash是在鏈條中
  3. 利用拿到的驗證路徑,再進行一次merkle校驗,確保驗證路徑全部合法

為什么SPV還要再做一次merkle校驗呢?主要是為了確保響應方發送的驗證路徑的有效性。

確保驗證路徑的真實性

上面提到了SPV還要做一次merkle校驗,這也是“不信任”的表現之一。我們并不確保響應我們的節點不會作弊或欺詐,因此,我們要自己進行校驗。但是,有沒有可能雖然校驗過程順利,但是實際上校驗路徑是偽造的呢?

我們來做一個假設:1)merkle root為真;2)交易為假;3)路徑中的hash可真可假。這個假設是否成立?

我們知道,不同字符串碰撞到同一個sha256的概率極小,那么double sha256的概率就是它的平方,而merkle root是經過一層一層計算上來的,如果一個區塊只有一個(或2個)交易,那么就是double^(2+1) sha256,而如果是4個交易,就有double^(4 + 2 + 1) sha256,更何況一個區塊有那么多交易,要經過merkle運算得到一個相同的hash,幾乎是不可能的,因此,在merkle驗證中用一個偽造的交易hash來得到一個已知來merkle root是不可能的。

如果還想更進一步校驗,可以在區塊頭中存儲區塊打包的交易的數量,這樣就可以知道從交易hash到merkle root需要經過幾層的運算。這也是一個檢驗點。

小結

merkle tree被廣泛運用于區塊鏈中,但并不是只有區塊鏈使用它來進行校驗。比如一些p2p下載,如迅雷,就需要把文件分割為小塊文件,每塊都有一個hash,每塊從不同的網絡節點下載,最后組成一個完整的文件,但是也需要進行hash驗證,它也可以使用merkle來進行驗證。merkle tree也不一定是二叉樹,可以是任意樹結構。而在以太坊中,merkle驗證還不夠用,增加了Patricia Tree驗證,合起來稱為“Merkle Patricia Tree”。



Tags:區塊鏈   點擊:()  評論:()
聲明:本站部分內容來自互聯網,內容觀點僅代表作者本人,如有任何版權侵犯請與我們聯系,我們將立即刪除。
▌相關評論
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
▌相關推薦
?如何判斷一個區塊鏈項目是能夠落地、能夠長久的好項目?那需要從它能夠解決什么問題?有什么核心競爭優勢以及市場需求有多大等方面來著手分析!“三個維度”甄別區塊鏈應用場...【詳細內容】
2019-12-18   區塊鏈  點擊:(0)  評論:(0)  加入收藏
在很多區塊鏈密碼學的相關文章中,我們經常會看到“密碼極客”、“密碼朋克”這樣的字眼,究竟是什么意思呢?今天,我們就來了解一下這兩個小知識。 密碼極客是什么?“極客”一詞,...【詳細內容】
2019-12-17   區塊鏈  點擊:(1)  評論:(0)  加入收藏
根據全球區塊鏈商業委員會和Janus Henderson Investors于周三發布的一項調查,基金管理行業的大多數高級管理人員對區塊鏈技術的了解程度一般。在來自50個買方組織的76%的專業...【詳細內容】
2019-12-09   區塊鏈  點擊:(7)  評論:(0)  加入收藏
首張區塊鏈增值稅專票-京東數科智臻鏈2018 年,京東聯合中國太平洋保險落地了“區塊鏈增值稅專用發票電子化項目”。這張中國第一張區塊鏈電子化增值稅專用發票,是國內增值稅...【詳細內容】
2019-12-05   區塊鏈  點擊:(8)  評論:(0)  加入收藏
要從架構和管理決策來看正如同我們在“區塊鏈技術是什么(什么是區塊鏈技術?)”一文中所述,區塊鏈與傳統數據庫,從架構開始就是不同的,或者說其技術如何部署便是不同的。萬維網(萬維...【詳細內容】
2019-11-24   區塊鏈  點擊:(13)  評論:(0)  加入收藏
像比特幣、以太坊這樣的區塊鏈中包含了大量的數據,可以幫助 我們洞察區塊鏈生態系統中用戶、企業和礦工的行為模式等重要信息。 BlockSci是一個C++開發的高性能的區塊鏈數據...【詳細內容】
2019-11-26   區塊鏈  點擊:(19)  評論:(0)  加入收藏
科技日報記者 劉園園 實習記者 代小佩10月下旬以來,區塊鏈成為眾人矚目的焦點,引發大量關注與討論。科技日報記者采訪了解到,區塊鏈已開始在我國金融、食品、公益等多個垂直行...【詳細內容】
2019-11-19   區塊鏈  點擊:(15)  評論:(0)  加入收藏
摘 要 共識算法是區塊鏈技術的核心要素, 也是近年來分布式系統研究的熱點. 本文系統性地梳理和討論了區塊鏈發展過程中的 32 種重要共識算法, 介紹了傳統分布式一致性算法...【詳細內容】
2019-11-14   區塊鏈  點擊:(19)  評論:(0)  加入收藏
最近區塊鏈火了,那么很多人一頭霧水,隨處可聽的 挖礦,哈希值到底是什么呢?今天做個分享挖礦:這里的挖礦不是用鋤頭下井挖礦,之前我們了解了區塊鏈,他是一個分布式,去中心化的賬本,每...【詳細內容】
2019-11-11   區塊鏈  點擊:(20)  評論:(0)  加入收藏
大部分材料都會提到區塊中保存了merkle根,并且利用它作交易真實性驗證。但是具體如何作這個真實性驗證,沒有一篇文章可以通俗的講出來。本文假設你已經知道區塊鏈中merkle tre...【詳細內容】
2019-11-12   區塊鏈  點擊:(21)  評論:(0)  加入收藏
存儲并不是個新詞,隨著互聯網技術的快速發展,企業級存儲、云存儲等已成為人們工作生活的標配。與此同時,伴隨區塊鏈技術的發展與成熟,區塊鏈存儲的優勢和特點開始受到多方關注...【詳細內容】
2019-11-14   區塊鏈  點擊:(23)  評論:(0)  加入收藏
如果你從事編程,或者對區塊鏈感興趣,那么哈希這個詞肯定經常聽到,那么哈希到底是什么,今天就簡單聊一聊。首先我有一個算法,有一個輸入和一個輸出,換句話說當你輸入一個數據,我返回...【詳細內容】
2019-11-06   區塊鏈  點擊:(29)  評論:(0)  加入收藏
視覺中國隨著中央層面明確了區塊鏈技術的集成應用在新技術革新和產業變革中的重要作用,我國區塊鏈行業的發展已迎來難得的歷史機遇。與此同時,區塊鏈行業正在部分重構金融法律...【詳細內容】
2019-10-31   區塊鏈  點擊:(22)  評論:(0)  加入收藏
最近,區塊鏈的概念是火爆了,就在最近,騰訊公司與中國信通院發表白皮書,將主導中國區塊鏈發票。可以預見的是,在未來一段時間,區塊鏈還會繼續火爆下去,如果掌握了區塊鏈的技術,不敢說...【詳細內容】
2019-11-01   區塊鏈  點擊:(17)  評論:(0)  加入收藏
區塊鏈本質論區塊鏈被大家關注事件好事情,但非常不希望看到各種區塊鏈項目盲目上馬,造成各種社會資源的浪費。區塊鏈技術本身尚在發展階段,還有很多核心技術問題有待突破,對區塊...【詳細內容】
2019-11-01   區塊鏈  點擊:(74)  評論:(0)  加入收藏
摘要:區塊鏈可以實現無中心、高可信的賬本管理,成功支撐了比特幣等金融領域應用發展。區塊鏈的本質是在不完全可信環境中的可信數據管理,它具有去中心化、防篡改、強一致和完整性等特性。同時,區塊鏈也存在著數據管理功能...【詳細內容】
2019-10-31   區塊鏈  點擊:(21)  評論:(0)  加入收藏
10月25日,中央政治局對區塊鏈進行了集體學習,要將區塊鏈作為核心技術自主創新的重要突破口,將區塊鏈與人工智能、量子信息、移動通信、物聯網一道列為新一代信息技術代表。之后...【詳細內容】
2019-10-29   區塊鏈  點擊:(24)  評論:(0)  加入收藏
區塊鏈真可謂“忽如一夜春風來”,關于區塊鏈很多投研君的粉絲還不是很了解,這里就簡單說說。什么是區塊鏈?本質是去中心化的數據庫。區塊鏈是一種按照時間順序將數據區塊以順序...【詳細內容】
2019-10-28   區塊鏈  點擊:(59)  評論:(0)  加入收藏
所謂區塊鏈,就是字面意思,由區塊組成的一個鏈條。在計算機領域,鏈表是最為基本的數據結構之一。區塊鏈就是對鏈表數據結構的擴展和應用。每一個區塊中都維護著自己的數據結構,...【詳細內容】
2019-10-28   區塊鏈  點擊:(53)  評論:(0)  加入收藏
我們現代人已經基本上無法離開網絡了,大家每天拿著手機在看。其實大家需要的不是手機而是為了上網,如果這個手機不能上網,他就不會用手機。隨著這個網絡世界迅速發展,就產生了一...【詳細內容】
2019-10-28   區塊鏈  點擊:(25)  評論:(0)  加入收藏
最新更新
欄目熱門
欄目頭條
31选7开奖11185