[比特幣]比特幣中的數據結構


哈希指針(Hash Pointers)

對於一個結構體而言,指向它的指針存儲的是它在內存中的首地址;而指向它的哈希指針,不僅保存這它的首地址,還保存着該結構體內容的哈希值。通過哈希指針,不僅可以找到該結構體,還能查驗該結構內容是否被篡改過。

區塊鏈

比特幣中存儲數據用的是區塊鏈。所謂區塊鏈,可以理解為鏈表。不過與鏈表不同的是,區塊鏈使用哈希指針代替了普通指針。下圖為區塊鏈簡單結構:

block

哈希指針包含在該區塊的區塊頭中,它是對前一個區塊的整體進行哈希運算得到的。

Merkle tree

MerkleTree

如上圖所示,與Binary tree不同,Merkle tree中各節點保存的都是子節點的Hash值。

在Merkle Tree中,每個葉子存儲的都是一筆交易的Hash,父節點存儲的是對子節點取Hash后的值。所以如果有交易內容內容被修改,那么最終都會輻射到Merkle Tree的根節點。

比特幣中的應用

在比特幣網絡中,所有的交易信息都是存儲在區塊中,通過Hash指針組織成區塊鏈;每個區塊都可以分為兩部分:block header和block body。block body中存儲該區塊包含的所有交易,block header中包含有前一個區塊的Hash(只是對前一個區塊的Block header進行Hash,並非對整個區塊進行Hash),本區塊中所有交易組成的Merkle tree的根Hash以及其它信息(包括區塊版本、挖礦難度、時間戳、Nonce)。

在比特幣網絡中,存在兩種類型的節點:

  • 全節點,存儲有整個比特幣網絡中的所有block。
  • 輕節點,只存儲block header。比特幣錢包就是輕節點的一種。輕節點並不參與比特幣網絡的構建,只能算是比特幣網絡的一個應用。

在使用比特幣錢包交易時,需要向收款方證明該交易已經被寫入區塊。此時,可以使用 Merkle Proof來證明該交易已被寫入區塊。

提供Merkle Proof時,錢包會向附近的全節點發出請求,全節點會將Merkle tree中與該交易相關路徑上的節點返回給請求方,之后錢包再將收到的信息發送給收款方進行驗證。如下圖所示,全節點只需將紅框選中的Hash返回給錢包即可,其它節點的Hash因為不參與計算,所以無需返回。

MerkleProof


聲明:本作品采用署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0)進行許可,使用時請注明出處。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM