【學習筆記】區塊

1.?關于區塊

區塊

區塊由區塊頭和區塊體兩部分組成。其中區塊的大小被限制在1M以內(為了防止資源浪費和DOS攻擊),區塊頭的大小被固定為80個字節。

但目前隨機比特幣的發展,交易數量持續增加,1M的大小能存儲的交易數量有限,導致大量的交易積壓。因此目前正在考慮擴容方案。


區塊頭

區塊頭中記錄了版本號、上一個區塊的Hash地址、merkle根、區塊創建時間戳、區塊的工作量難度目標以及用于計算目標的參數值。

字段大小描述

version4字節版本號,用于跟蹤軟件/協議的更新

prevBlockHash32字節上一個區塊頭的Hash地址

merkleRoot32字節該區塊中交易的merkle樹根的哈希值(稍后詳細說明)

time4字節該區塊的創建時間戳

difficultyTarget4字節該區塊鏈工作量證明難度目標(稍后講解工作量證明)

nonce4字節用于證明工作量的計算參數

區塊體

區塊體中記錄了該區塊存儲的交易數量以及交易數據。

字段大小描述

numTransactionsBytes1字節交易數量占用的字節數

numTransactions0-8個字節區塊內存儲的交易數量

transactions不確定區塊內存的多個交易數據

為了節約區塊的存儲空間,區塊內的交易數量字段采用了壓縮存儲。在讀取交易數量之前,會先讀取numTransactionsBytes字段值。

如果該值小于253,則用直接將該值作為交易數量

如果該值等于253,則讀取之后的兩個字節作為交易數量

如果該值等于254,則讀取之后的4個字節作為交易數量

否則,讀取之后的8個字節作為交易數量


理解:

1. 區塊中最有價值的是交易信息(區塊體),而區塊頭類似于標簽/評注,包含版本、上個區塊頭哈希值、本區塊默克爾根哈希值、區塊創建時間戳、區塊的工作量難度目標以及用于計算目標的參數值。而交易信息通過隨機散列構建成默克爾哈希值,如下圖


2. ?關于區塊大小容量的問題。1)創立之初,在數據打包的過程中,會導致普通計算機 CPU 超負荷計算,加之當時的比特幣價格很低,長此以往,不利于更多礦工的加入,導致算力中心化。2)防止黑客攻擊,區塊太多,計算時間過長,會給黑客足夠的時間

比特幣的矛盾——安全性、可靠、保證足夠多的節點VS高效,能讓更多人更快速的使用之間的平衡

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容