什麼是塊?
我知道比特幣有一個區塊鏈,它是我最好的代表一個區塊列表。我知道這個區塊有很多交易。但是對於什麼是塊以及在塊被解決之前塊如何成為交易的功能以及在塊被解決之前塊如何具有任意數量的交易和鎖在裡面。
我也迷失在“解決”一個塊的過程中。我知道它需要電腦加密交易。如果一個塊是多個交易,則意味著您必須解決所有交易才能獲得該塊。
比特幣 SE 上有很多關於區塊的問題,但值得注意的是,我找不到任何明確說明區塊是什麼的問題。
一個塊有兩個東西:一個塊頭和一個交易列表。
堵塞:
- 塊頭
+ 版本號(4 字節整數) + 前一個塊 ID(32 字節雜湊) + Merkle Root(32 字節雜湊) + 時間(4 字節整數) + 難度(4字節整數) + 隨機數(4 字節整數)
- 交易清單
+ List 中的交易數量 + TX1 + TX2 + … + TxN
在區塊的區塊頭部分:
- 版本號是幫助更新網路如何處理塊的參數。
- 對前一個塊的雜湊值的引用使這組塊成為“塊鏈”。
- merkle 根是雜湊,可用於證明交易在區塊中,而無需提供區塊的所有詳細資訊(這有點複雜,請參閱此處了解更多資訊)。
- 時間欄位用於向網路顯示塊被解決的時間,並幫助計算難度參數。
- 難度(或
nBits
在程式碼中稱為)是解決該塊的難度的簡寫。本質上,它對目標值進行編碼,並且塊的雜湊值(當被視為 256 位整數時)必須低於該目標值才能被視為已解決。- nonce(使用一次的數字)只是一個整數,礦工可以反復更改以對 header 進行雜湊處理,並每次得到不同的結果,希望得到一個低於前一個參數編碼的難度值的雜湊值。
交易列表相當簡單,它只是交易的數量,然後是交易本身連接在一起。
以創世區塊為例。原始字節是:
0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000
當我們分解它時,我們可以看到其中的內容:
01000000 // 版本 00000000000000000000000000000000000000000000000000000000000000000 // 雜湊上一個塊 3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a //默克爾根 29ab5f49 // 時間 ffff001d // 難度 1dac2b7c // 隨機數 01 // 交易數量 TX1: 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000
當你對創世塊的塊頭進行雜湊處理時,你會得到:
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
看看它是如何從所有這些零開始的?這是因為進行了多次嘗試(每次都更改隨機數),直到礦工幸運地找到了一個隨機數,使塊頭雜湊值足夠低(將雜湊視為十六進制編碼的整數,其中最重要的位在左邊,最低位在右邊)。