區(qū)塊鏈的各個(gè)組成部分是什么
比特幣是基于區(qū)塊鏈的,這一點(diǎn)大家都知道。但是這個(gè)區(qū)塊鏈?zhǔn)鞘裁茨??更?zhǔn)確地說,區(qū)塊鏈的各個(gè)組成部分是什么呢?
區(qū)塊鏈?zhǔn)且粋€(gè)數(shù)據(jù)塊。每個(gè)塊可以看作是分類帳中的一個(gè)。單個(gè)塊由幾個(gè)組件組成。大致可以將它們區(qū)分為塊的頭部(塊頭)和塊的身體(塊體)。
塊頭
塊頭為六個(gè)部分:
軟件的版本號(hào)
前一個(gè)塊的哈希值
Merkle樹的根哈希值
世界時(shí)自1970-01-01以來以秒為單位的時(shí)間
當(dāng)前困難的目標(biāo)
特定場(chǎng)合
軟件的版本號(hào)
在大多數(shù)情況下,軟件版本號(hào)并不重要。但是,具有特定版本號(hào)的挖掘程序可以指示它支持哪個(gè)協(xié)議決。
前一個(gè)塊的哈希值
前一個(gè)塊的哈希值,也可以說是塊的鏈。因?yàn)榍耙粋€(gè)塊的哈希值包含在新塊的哈希值中,所以區(qū)塊鏈的塊都是在彼此的基礎(chǔ)上構(gòu)建的。如果沒有這個(gè)組件,每個(gè)塊之間就不會(huì)有連接。
Merkle樹的根哈希值
塊中包含的所有事務(wù)都可以聚合到哈希值中。這就是Merkle樹的根哈希。
自1970-01-01 T00: 00 UTC以來的秒數(shù)
塊本身中的時(shí)間戳。時(shí)間自1970年1月1日起以秒為單位給出。
當(dāng)前困難的目標(biāo)
指示新哈希值必須小到什么程度才能聲明有效性。換句話說,每個(gè)哈希值都有一個(gè)位大小。位的目標(biāo)越低,就越難找到匹配的哈希值。
特定場(chǎng)合
特定場(chǎng)合是由工作量證明增加的變量。通過這種方式,挖掘器猜測(cè)一個(gè)有效的哈希值,一個(gè)比目標(biāo)值小的哈希值。
這六個(gè)組件構(gòu)成了塊頭。區(qū)頭在比特幣中扮演著重要角色,因?yàn)樗鼘⑺袇^(qū)塊連接在一起。你可以把它想象成卡車的駕駛艙。這些是卡車通過網(wǎng)絡(luò)控制時(shí)所帶的重要文件。
塊體
塊體可以想象成卡車的裝載空間。它包含與塊確認(rèn)的所有事務(wù)。
當(dāng)挖掘程序構(gòu)造一個(gè)塊時(shí),它會(huì)驗(yàn)證事務(wù)。也就是說,他主要檢查寄件人是否有足夠的錢。他可以很容易地從區(qū)塊鏈中讀取這些信息。如果發(fā)件人想發(fā)送10個(gè)比特幣,他會(huì)查看過去的數(shù)據(jù)塊,看看發(fā)送者是否已經(jīng)收到10個(gè)比特幣。
塊中的事務(wù)不僅在列表中,而且在所謂的Merkle樹中。
什么是Merkle樹?
Merkle樹的名字來源于數(shù)學(xué)家Ralph Merkle。許多信息可以用一個(gè)哈希值表示。為此,首先會(huì)對(duì)數(shù)據(jù)本身進(jìn)行分發(fā)哈希值。然后哈希直再次被分發(fā)并合并。最后,Merkle樹被合并到一個(gè)哈希值中。最后一個(gè)哈希值也稱為根哈希值,即樹的根。它在一個(gè)相對(duì)較短的字符串中表示其“葉”(單個(gè)事務(wù))和“分支”(葉的哈希值)的所有信息。
只要知道所有的分支和葉節(jié)點(diǎn),創(chuàng)建根哈希就非常簡(jiǎn)單快捷。就像哈希值函數(shù)一樣:它在一個(gè)方向上工作得清晰而迅速,在另一個(gè)方向上是不可能分解的。如果根哈希值已知,但事務(wù)未知,則不可能猜測(cè)事務(wù)。
因此,僅使用根哈希值是不夠的,必須保存塊的其余部分。因此,通過再次哈希值塊中包含的信息,挖掘器可以在任何時(shí)候驗(yàn)證根哈希值。只要哈希值函數(shù)相同,對(duì)于給定的數(shù)據(jù)輸入,礦工們總是會(huì)得到相同的哈希。這非常方便,因?yàn)樗鼈冎荒軝z查它們是否與哈希值處于同一級(jí)別即可。
挖掘:搜索特殊哈希值
在這種背景下,更容易理解工作量證明的挖掘。在挖掘時(shí),塊的塊頭會(huì)被增量地更改以獲得一個(gè)特殊的哈希值。頭由五個(gè)常量和一個(gè)變量組成。常量是軟件的版本號(hào)、前一個(gè)塊的哈希值、Merkle樹的根哈希值、時(shí)間戳和搜索哈希值的目標(biāo)大?。ㄒ宰止?jié)為單位)
變量是nonce。nonce是由1提出的數(shù)字。然后挖掘器對(duì)數(shù)據(jù)進(jìn)行分發(fā)哈希值,并檢查數(shù)據(jù)是否產(chǎn)生了低于搜索目標(biāo)值的哈希值。如果哈希值大于目標(biāo)值,挖掘器將重復(fù)該過程;因此,它將nonce增加1,哈希值會(huì)再次檢查。它重復(fù)這個(gè)過程,直到找到低于目標(biāo)的哈希值,或者從另一個(gè)低于目標(biāo)值的網(wǎng)絡(luò)工作者那里獲得另一個(gè)塊。然后獲取這個(gè)新塊并將其用作下一個(gè)塊的基(使用新哈希值作為“上一個(gè)塊的哈希值”)。
挖掘是一個(gè)超重復(fù)的過程,其目標(biāo)是找到一個(gè)特殊的哈希值。一旦找到哈希值,游戲就重新開始。找到特殊哈希值的概率取決于難度。比特幣平均每十分鐘就會(huì)發(fā)現(xiàn)一個(gè)新的區(qū)塊。這個(gè)難度一直在變化,所以這個(gè)平均值保持不變。
這個(gè)過程的特殊之處在于,只有通過猜測(cè)才能找到特殊的哈希值。這個(gè)速率會(huì)消耗計(jì)算能力和能量。查看特殊哈希值就足以看出它是特殊的,因?yàn)樗?開頭。
下面是一個(gè)來自比特幣區(qū)塊鏈的哈希值例子:
000000000000000000094 bfa4edb1245c347e42452e4418e9fe5a1d24e335b16
哈希值表:區(qū)塊鏈的matryoshka
塊可以簡(jiǎn)化為matryoshka想象的那樣。最小的玩偶是未標(biāo)價(jià)的交易。下一個(gè)信封是這個(gè)事務(wù)的哈希值形式。此后,兩個(gè)哈希值事務(wù)被哈希在一起。所以哈希值會(huì)被合并得越來越多。最后,只剩下一個(gè)哈希值,即根哈希值或最大的matryoshka。