區塊頭用於標識區塊鏈中的特定區塊。它也被反复哈希以創建挖礦和交易所需要獲得獎勵的工作證明。
我們知道,一個區塊鏈由一系列區塊組成,這些區塊用於存儲與網絡上發生的交易相關的信息。
這些塊中的每一個都包含一個唯一的標頭,並且每個塊都用其標頭的哈希值來標識。
它們是為了什麼?
比特幣區塊的頭部包含區塊的重要信息,這些信息最終包含在該加密貨幣的網絡中發生的交易。
它們分為6 個字段,提供塊的詳細摘要。
農村尺寸信息版本4字節小端上一個區塊哈希32 字節大端默克爾樹根32 字節大端時間戳4字節小端位4字節小端隨機數4字節小端
除了頭部之外,區塊還有普通交易和幣基類型,它們是區塊的獨立部分。
每個標頭都是唯一的並且在加密貨幣學上是安全的,這賦予了它不可變性的屬性,即它們難以修改。
塊頭被序列化,總長度為80 字節。從那裡,執行散列,這是用於比特幣挖礦的稱為工作量證明(PoW) 的共識算法的一部分。
在此過程中,標頭成為礦工必須遵守的共識規則的一部分,作為共識機制的一部分。
礦工是參與該協議的完整節點,其中的區塊經過驗證,作為回報,他們以BTC 的形式獲得獎勵。
為此,他們必須通過名為SHA-256 的哈希函數傳遞標頭,從而獲得哈希,並將其與隨機數(我們將在後面看到)進行比較以解析塊。
標題的組成部分
標題分為6 個字段,每個字段都有我們現在將看到的特定目標。
1. 版本號
這是一個4 字節的字段,提供塊中使用的版本號。
有不同的版本是比特幣發展歷史的一部分:
版本1:它於2009 年1 月與創世塊一起推出。它是比特幣區塊鏈中生成的第一個塊。版本2:它於2012 年9 月作為用戶激活軟分叉(UASF) 在Bitcoin Core 0.7.0 中引入。如BIP34 中所述,有效的第2 版區塊需要一個參數,其中包含coinbase 交易中的區塊高度。 BIP34 還描述了拒絕某些塊的規則。比特幣核心0.7.0 及更高版本在2013 年3 月開始拒絕在coinbase 中沒有塊高度的塊的版本2,從高度為224.412 的塊開始。三週後,他們還開始拒絕新版本1 塊的高度227.930。版本3:它於2015 年2 月作為UASF 在比特幣核心0.10.0 中引入。當分叉在2015 年7 月被完全採用時,它要求對新區塊中的ECDSA 簽名進行嚴格的DER 編碼,如BIP66 中所述。自比特幣核心0.8.0(2012 年2 月)以來,不使用嚴格DER 編碼的交易不是標準的。版本4:在BIP65 中指定並於2015 年11 月作為UASF 在比特幣核心0.11.2 中引入,並於同年12 月開始活躍。這些塊現在支持引入它的比特幣增強提案中描述的新OP_CHECKLOCKTIMEVERIFY 操作碼。
版本是指塊必須遵循哪一組規則才能有效。這些規則是隨每個新版本更新的協議的一部分。
如果一個區塊的編號與其他區塊不同,那麼它就不能繼續成為鏈的一部分。在這種情況下,它將在不同的情況下工作並導致硬分叉。
2. 上一個區塊的哈希
前一個區塊的哈希值是一個32 字節的字段,它在新區塊的頭部準確包含該信息。
這是一個指向它所連接的區塊的指針,這是區塊鏈的一個非常重要的特徵,它從中派生出它的名字(區塊鏈)。
不需要修改前面的塊,就不能修改信息。因此,如果我們有300,000 個塊並且我們嘗試更改哈希,則必須在Avalanche效應中更改之前的塊之一。
這需要大量的計算能力,這將使其很難實現。正是這一特性使塊安全且防篡改。
這樣做是可能的,但這會導致區塊鏈完全改變。為了實現這一點,需要51% 的攻擊。
塊的標題使用SHA-256 去中心化算法和一個函數(如果你有興趣的話),看起來像這樣:
SHA256(SHA256())SHA256(SHA256(Prev_Block_Header))
這提供了在不更改塊頭的情況下不能修改任何塊。
這是避免交易被逆轉的基本部分,因為所有塊的哈希都需要更改。這將消耗大量電力和計算資源來再次進行所有計算。
即便如此,在現實世界中,礦工可以通過分叉鏈來擊退其中一種攻擊。但是最好有一個共識工具來保持區塊的有效性,而不必求助於最後的手段。
3. Merkle 樹的根
Merkle 樹的根字段也是32 字節,包含帶有交易的Merkle 樹的哈希值。它使用與前一個塊相同的哈希函數。
Merkle 根是從包含在塊中的所有交易的哈希中獲得的。這是為了確保在不修改整個標頭的情況下不會修改任何事務。
一種避免更改為區塊提供安全性的信息的措施,也是公共、去中心化和無信任系統的重要特徵。
Merkle 樹的根由交易的所有TXID(交易ID)組成; 堵塞。它們按共識規則要求的順序排列:
coinbase 交易的ID 放在最前面。塊中的任何輸入都可以花費一個輸出,如果它是一個有效的花費也會出現在這個塊中。它必須是對應於輸出的TXID,位於對應於輸入的TXID 之前的某個時間。這遵循UTXO(未花費交易輸出)規則,即交易輸入必須是之前的交易輸出。
變長輸入轉換為256 位定長結果。 Merkle 的根始終可以追溯到樹狀數據結構,是一種快速高效的數據驗證方式。
4. 時間戳
時間戳是一個4 字節的字段,其中包含以Unix 時間度量的塊日期和時間。基本上是從1970 年1 月到區塊創建所經過的秒數。
當礦工開始尋找它的哈希時,它被放置在標題內。
它必須大於前11 個區塊的平均時間。但是,完整節點也不會接受標題比其時鐘時間早2 小時的塊。
Unix 時間不是UTC 的實際表示。它忽略閏秒,每天總共包含86,400 秒(60 秒/分鐘x 60 分鐘/小時x 24 小時)。
根據比特幣協議,區塊的傳播時間必須平均為10 分鐘,因此時間戳必須在允許的時間範圍內。
然而,可變性是由於下面將討論的困難。
5. 難度/位數
難度或目標哈希也是一個4 字節的字段,也稱為位。目標的硬編碼版本是一個範圍,其中塊的哈希值必須等於或小於。
位指定包含前導零的目標值或閾值。這是難度目標的基礎,其中標題哈希必須具有相同數量或更多的前導零。
難度目標在比特幣網絡上每2,016 個區塊調整一次。這些信息對礦工尤其重要。
難度的計算得益於比特幣協議,它根據網絡上的哈希率總量決定了找到哈希的難度。
當礦工較多時,控制BTC供應的難度增加。如果很容易找到新塊,那麼它們將在10 分鐘內生成。這將導致可以存在的總比特幣被非常快地開採。
另一方面,當新區塊的發現週期大於10 分鐘時,則難度太高,需要降低難度以恢復到平均10 分鐘。
6. 隨機數
最後我們來到了nonce,一個4 字節的字段,這是一個礦工修改的數字,以便頭部哈希產生不同的結果,從而達到目標哈希。
nonce 作為一個幻數,因為首先發現它的人將成為區塊的驗證者。獲得的獎勵在coinbase 交易中創建,並提供給解決問題的礦工。
找出哪個是隨機數是參與驗證區塊的共識機制的礦工的主要活動。
標題示例
下面是一個比特幣區塊頭的例子:
位:以數值編碼的挖礦難度。 mrkl_root:是區塊內所有交易的哈希值。以十六進制值表示,這就是為什麼有64 個字符。 nonce:礦工發現的使散列落在必要閾值內的數字。 pre_block:價格塊頭的哈希值。這就是鏈接鏈中所有區塊的原因。時間:指示礦工何時開始挖礦區塊。該格式與Unix 不同,但基於它。 view:遵循協議版本共識規則的區塊版本號。
概括
區塊頭標識區塊鏈上的區塊。它們通過哈希函數來創建挖礦所需的工作量證明。版本號有助於跟踪協議更改。
資訊來源:由0x資訊編譯自CRIPTOTARIO。版權歸作者Criptotario所有,未經許可,不得轉載