區(qū)塊就是一個(gè)數(shù)據(jù)包,說(shuō)白了就是存數(shù)據(jù)的,存數(shù)據(jù)就有一定的規(guī)矩,這就是區(qū)塊的數(shù)據(jù)結(jié)構(gòu)。那一個(gè)區(qū)塊的數(shù)據(jù)結(jié)構(gòu)是怎樣的呢?他是怎樣保證一個(gè)區(qū)塊一旦鏈接到一條鏈上,就很難被修改和變動(dòng)的呢?
一個(gè)區(qū)塊是由區(qū)塊整體信息,區(qū)塊頭和區(qū)塊身體組成的。
第一,區(qū)塊信息
一個(gè)區(qū)塊中最先的區(qū)塊信息是一個(gè)叫做神奇數(shù)的東西,其實(shí)也沒(méi)啥神奇的,就是那個(gè)字符串,用于把區(qū)塊隔離開(kāi),這是個(gè)什么東西呢?就像是每一張表格的表頭題目,看到這個(gè)東西,大家就知道這是另外的一頁(yè),另外一個(gè)區(qū)塊。
然后是一個(gè)數(shù)據(jù)來(lái)表示整個(gè)區(qū)塊的大小體積,相當(dāng)于你們班有多少人,他會(huì)直接用數(shù)字記錄下來(lái)。比如50個(gè)人。
第二,區(qū)塊頭
區(qū)塊頭的信息首先是說(shuō)明軟件的版本,比如比特幣是哪一版的比特幣軟件?是升級(jí)過(guò)沒(méi)有?有沒(méi)有硬分叉?
然后是上一個(gè)區(qū)塊的哈希值,這個(gè)哈希值是怎么算出來(lái)的呢?是拿上上一個(gè)區(qū)塊的信息用哈希函數(shù)算出來(lái),上上一個(gè)區(qū)塊的哈希值怎么來(lái)的呢?是用上上上一個(gè)區(qū)塊的數(shù)據(jù)算出來(lái)的。所以每一個(gè)區(qū)塊都以前一個(gè)區(qū)塊有基因的聯(lián)系,靠的就是這個(gè)哈希值。理論上講,你可以一直追溯到第一個(gè)中本聰從赫爾辛基挖出來(lái)的區(qū)塊。
然后是默克爾根,就是把所有區(qū)塊身體里面的信息兩兩算哈希值,最后得到一個(gè)最終的哈希,用來(lái)代表所有交易的結(jié)果。注意由于哈希函數(shù)的性質(zhì),只要這里邊兒的任何一筆交易發(fā)生一點(diǎn)點(diǎn)的變化,最后的根哈希值都會(huì)發(fā)生變化。特別方便用于驗(yàn)算的過(guò)程。
然后是時(shí)間戳,這很好理解,就是區(qū)塊所產(chǎn)生的時(shí)間,打上烙印。
然后是難度目標(biāo),這個(gè)之前說(shuō)過(guò),用來(lái)表示產(chǎn)生一個(gè)區(qū)塊需要多大的算力。說(shuō)白了,就是在一串二進(jìn)制數(shù)字前面添多少個(gè)零。零越多,難度越大。
最后是隨機(jī)數(shù),這就是工作量證明中的那個(gè)解。
第三,區(qū)塊身體
區(qū)塊兒身體中放的就是各種各樣的交易了,這個(gè)很好理解。從哪個(gè)地方來(lái),到哪個(gè)地方去,誰(shuí)給誰(shuí)轉(zhuǎn)了錢(qián)。
這些交易,他們最終會(huì)以默克爾樹(shù)的形式存在。可以把它想象成一棵大樹(shù)或者一個(gè)金字塔。然后一個(gè)樹(shù)枝分成兩個(gè),一個(gè)樹(shù)枝再分成兩個(gè)。一直分到最后的樹(shù)葉子上,不再分了,每一個(gè)樹(shù)葉子就是一筆交易的信息。
然后他們從下往上量量往上運(yùn)算,當(dāng)量算出一個(gè)哈希值,再把兩個(gè)哈希值再計(jì)算出一個(gè)哈希值到最后算出一個(gè)根哈希值,用于驗(yàn)算和保存數(shù)據(jù)。
正是由于這樣的數(shù)據(jù)結(jié)構(gòu),才保證了區(qū)塊鏈?zhǔn)且粋€(gè)整體,每個(gè)區(qū)塊每個(gè)區(qū)塊直接有聯(lián)系,它的難度可以調(diào)整,時(shí)間可以被標(biāo)記,最后他的數(shù)據(jù)還會(huì)形成一定的結(jié)構(gòu),得到最終的一個(gè)哈希值,非常的便捷,利于驗(yàn)算,保證了整個(gè)區(qū)塊鏈的穩(wěn)定。