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高效,能讓更多人更快速的使用之間的平衡