區塊鏈開發專題 數字貨幣的資料結構解析

2021-08-03 13:19:57 字數 1427 閱讀 6301

數字貨幣(資料區塊、資料塊、資料塊鏈)作為位元幣的核心概念,對於理解位元幣結構起著至關重要的作用。在《什麼是資料區塊》中,編者從資料區塊分布式交易記錄的角度簡單的介紹了資料區塊的概念。今天,編者從資料區塊的程式結構上來詳細的分析資料區塊裡面到底記錄了什麼資訊。

資料區塊檔案的位置

如果你用的是bitcoin-qt客戶端,那麼資料區塊的資訊就存在你的電腦裡面。每次當你開啟bitcoin-qt,資料區塊都會跟整個p2p網路分布式資料庫同步。根據作業系統的不同,資料區塊目錄blocks一般存放路徑為:

linux:~/.bitcoin/ 

開啟資料區塊檔案

我們開啟blocks資料夾,便可以看到很多名為blk***.dat的檔案,這些檔案中儲存了傳說中的資料區塊記錄。

blk***.dat檔案在終端下面可以用hexdump開啟。

hexdump -n 10000 -c blk00000.dat

資料區塊結構

hexdump程式把資料區塊檔案轉化為十六進製制+ascii表示,編者解釋一下:每乙個資料區塊記錄了六個內容:神奇數、區塊大小、資料區塊頭部資訊、交易計數、交易詳情。在這當中,資料區塊頭部資訊的hash值是下乙個新區塊的hash值的參考目標數,最後一項交易詳情記錄了該區塊中所有的交易記錄(編者會在以後詳細說明交易記錄的結構)。

資料區塊結構如下圖:

資料區塊頭部結構

資料區塊頭部結構中記錄了:版本號、前乙個區塊的記錄、merkle樹的根值、時間戳、目標特徵值、隨機數。

在位元幣礦工挖礦的過程就是產生新的資料區塊的過程(編者以後會詳細說明),這個過程需要對比前乙個資料區塊頭部的hash值和隨機數,如果滿足一定條件則生成新的區塊。merkle樹的根值為該區塊中所有被記錄交易的根節點hash值,中本聰用乙個hash樹來對每一比交易進行數字簽名,以確保每一比交易都不可偽造和沒有重複交易,merkle樹就是hash樹的一種。資料區塊頭部結構如下圖:

交易記錄

交易記錄就像乙個記賬本一樣,記錄了所有位元幣的交易資訊,每乙個位元幣玩家的位元幣收支情況都被永久的嵌入了資料區塊中以供別人查詢,這也就是為什麼每一比位元幣交易都是可以查詢到的。這個這些資料區塊中的交易資料存放在每乙個位元幣玩家的客戶端節點中,所有的這些節點則組成了位元幣那及其堅韌的分布式資料庫系統。任何乙個節點的資料被破壞都不會影響整個資料庫的正常運轉,因為其它的健康節點中都儲存了完整的資料庫。

在本文中,編者將詳細解析資料區塊中交易記錄的結構。

交易記錄結構

完整的交易記錄結構如下**:

位元幣支出和接收交易的結構

在資料塊中,位元幣支出和接收交易是寫在一起的,整個收支記錄包括很多比記錄。每一比記錄都有自己的索引編號以供查詢。

每一比記錄中包括了生成時間、引用交易的雜湊值、交易記錄索引編號、位元幣支出位址、支出位址數量等細節。每一比收支交易記錄都有乙個merkle節點值,這個hash節點值是整個merkle樹的一部分,決定了每乙個位址都不能重複交易和被偽造。

區塊鏈技術入門數字貨幣開發教程

安裝truffle npm install g truffle 依賴環境 nodejs 需要安裝ethereum客戶端,來支援json rpc api呼叫 開發環境,推薦使用ethereumjs testrpc c 安裝命令 npm install g ethereumjs testrpc 新建第乙...

數字貨幣開發專題 數字貨幣開發者指南

但是,為了開發,使用數字貨幣測試網路更為安全和便宜 network testnet 在測試網路中的數字貨幣沒有真實世界的價值。測試網路 對有些限制有所放鬆,如對標準交易的檢測 它能測試一些在主網路中被禁止的函式,如果要使用測試網路testnet,啟動的時候需要新增引數 testnet 或者新增tes...

數字貨幣 區塊鏈術語整理

tx transaction 一筆交易 balance 餘額 utxo unspent transaction output 表示未花費的輸出 以現實的錢包舉例,乙個錢包中有乙個10元 1個5元,1個1元,一共16元。位元幣乙個賬戶的餘額,也是根據這個賬戶utxo計算的。當花12元買東西時,可以把1...