一:1、什么是區(qū)塊鏈论皆?
區(qū)塊鏈?zhǔn)前灰仔畔⒌膮^(qū)塊從后向前有序鏈接起來的數(shù)據(jù)結(jié)構(gòu),也是一本公開的數(shù)據(jù)賬簿。
2点晴、區(qū)塊鏈的結(jié)構(gòu)狀況是什么呢感凤?
在區(qū)塊鏈中,每個區(qū)塊都指向前一個區(qū)塊粒督。區(qū)塊鏈經(jīng)常被視為一個垂直的棧陪竿,第一個區(qū)塊作為棧底的首區(qū)塊,隨后的每個區(qū)塊都被放置在其他區(qū)塊之上屠橄,依次堆疊萨惑。
3、什么是區(qū)塊高度仇矾?在一次堆疊區(qū)塊的區(qū)塊鏈中,區(qū)塊與首區(qū)塊之間的距離解总,就叫區(qū)塊高度贮匕。有時也以“頂部”或“頂端”來表示最新添加的區(qū)塊。
4花枫、區(qū)塊的形態(tài)特征是什么刻盐?
區(qū)塊包含有創(chuàng)世區(qū)塊、父區(qū)塊和子區(qū)塊劳翰。
每個區(qū)塊頭都會被進(jìn)行SHA256加密哈希敦锌,可生成一個哈希值,通過這個哈希值佳簸,可以識別出區(qū)塊鏈中的對應(yīng)區(qū)塊乙墙。同時,每一個區(qū)塊都可以通過其區(qū)塊頭的“父區(qū)塊哈希值”字段引用前一區(qū)塊(父區(qū)塊)生均。
每個區(qū)塊? 鏈接到各自父區(qū)塊的哈希值序列就創(chuàng)建了一條一直可以追溯到第一個區(qū)塊(創(chuàng)世區(qū)塊)的鏈條听想。
每個區(qū)塊只有一個父區(qū)塊,但會暫時擁有多個子區(qū)塊马胧。
5汉买、什么是區(qū)塊鏈分叉?
一個區(qū)塊出現(xiàn)多個子區(qū)塊的情況被稱為區(qū)塊鏈分叉佩脊。
區(qū)塊鏈分叉只是暫時狀態(tài)蛙粘,只有當(dāng)多個不同區(qū)塊幾乎同時被不同的礦工發(fā)現(xiàn)時才會發(fā)生,最終只有一個區(qū)塊會成為區(qū)塊鏈的一部分威彰,其他并生的區(qū)塊會被丟棄出牧,這樣就解決了區(qū)塊鏈分叉問題久橙。
6掏婶、為什么比特幣區(qū)塊鏈具有不可篡改的安全性呢?
由于區(qū)塊頭里面包含“父區(qū)塊哈希值”字段屁桑,所以當(dāng)前區(qū)塊的哈希值因此也受到該字段的影響。
身份標(biāo)示產(chǎn)生變異的父區(qū)塊赵讯,它的子區(qū)塊同時產(chǎn)生變化盈咳,一旦有足夠多代的子區(qū)塊、孫區(qū)塊......繼承了變異的“父區(qū)塊哈希值”边翼,這種瀑布效應(yīng)將保證該區(qū)塊不會被改變鱼响,除非強(qiáng)制重新計(jì)算該區(qū)塊所有后續(xù)的區(qū)塊。正是因?yàn)檫@樣的重新計(jì)算需要耗費(fèi)巨大的計(jì)算量组底,所以一個長區(qū)塊鏈的存在可以讓區(qū)塊鏈的歷史不可改變丈积,這也是比特幣安全性的一個關(guān)鍵特征。
二? 1债鸡、區(qū)塊結(jié)構(gòu)
區(qū)塊是一種被包含在公開賬簿(區(qū)塊鏈)里的聚合了交易信息的容器數(shù)據(jù)結(jié)構(gòu)江滨。
它由一個包含元數(shù)據(jù)的區(qū)塊頭和緊跟其后的構(gòu)成區(qū)塊主體的一長串交易組成。
區(qū)塊頭是80字節(jié)厌均,而平均每個交易至少是250字節(jié)唬滑,而且平均每個區(qū)塊至少包含超過500個交易。
因此棺弊,一個包含所有交易的完整區(qū)塊比區(qū)塊頭的1000倍還要大晶密。
三? 區(qū)塊頭
區(qū)塊頭由三組區(qū)塊元數(shù)據(jù)組成。
首先是一組引用父區(qū)塊哈希值的數(shù)據(jù)模她,這組元數(shù)據(jù)用于將該區(qū)塊與區(qū)塊鏈中前一區(qū)塊相連接稻艰。
第二組元數(shù)據(jù),即難度侈净、時間戳和nonce尊勿,與挖礦競爭相關(guān)
第三組元數(shù)據(jù)是merkle樹根(一種用來有效地總結(jié)區(qū)塊中所有交易的數(shù)據(jù)結(jié)構(gòu))。
四 區(qū)塊標(biāo)識符:區(qū)塊頭哈希值和區(qū)塊高度
區(qū)塊主標(biāo)識符是它的加密哈希值畜侦,一個通過SHA256算法對區(qū)塊頭進(jìn)行二次哈希計(jì)算而得到的數(shù)字指紋运怖。產(chǎn)生的32字節(jié)哈希值被稱為區(qū)塊哈希值,但是更準(zhǔn)確的名稱是:區(qū)塊頭哈希值夏伊。
請注意摇展,區(qū)塊哈希值實(shí)際上并不包含在區(qū)塊的數(shù)據(jù)結(jié)構(gòu)里,相反溺忧,區(qū)塊哈希值是當(dāng)該區(qū)塊從網(wǎng)絡(luò)被接收時由每個節(jié)點(diǎn)計(jì)算出來的咏连。區(qū)塊的哈希值可能會作為區(qū)塊元數(shù)據(jù)的一部分被存儲在一個獨(dú)立的數(shù)據(jù)庫表中,以便于索引和更快地從磁盤檢索區(qū)塊鲁森。
第二種識別區(qū)塊的方式是通過該區(qū)塊在區(qū)塊鏈中的位置祟滴,即“區(qū)塊高度(block height)”。
因此歌溉,區(qū)塊可以通過兩種方式被識別:區(qū)塊哈希值或者區(qū)塊高度垄懂。
一個區(qū)塊的區(qū)塊哈希值總是能唯一地識別出一個特定區(qū)塊骑晶。一個區(qū)塊也總是有特定的區(qū)塊高度。但是草慧,一個特定的區(qū)塊高度并不一定總是能唯一地識別出一個特定區(qū)塊桶蛔。更確切地說,兩個或者更多數(shù)量的區(qū)塊也許會為了區(qū)塊鏈中的一個位置而競爭漫谷。
五? 創(chuàng)世區(qū)塊
區(qū)塊鏈里的第一個區(qū)塊創(chuàng)建于2009年仔雷,被稱為創(chuàng)世區(qū)塊碟婆。它是區(qū)塊鏈里面所有區(qū)塊的共同祖先惕稻,這意味著你從任一區(qū)塊,循鏈向后回溯俺祠,最終都將到達(dá)創(chuàng)世區(qū)塊肘迎。
因?yàn)閯?chuàng)世區(qū)塊被編入到比特幣客戶端軟件里,由于區(qū)塊的“復(fù)制”和“繼承”功能锻煌,每一個節(jié)點(diǎn)都“知道”創(chuàng)世區(qū)塊的哈希值、結(jié)構(gòu)姻蚓、被創(chuàng)建的時間和里面的一個交易宋梧。因此,每個節(jié)點(diǎn)都把該區(qū)塊作為區(qū)塊鏈的首區(qū)塊狰挡,從而構(gòu)建了一個安全的捂龄、可信的區(qū)塊鏈的根。
六? 區(qū)塊的連接
區(qū)塊通過引用父區(qū)塊的區(qū)塊頭哈希值的方式加叁,以鏈條的形式進(jìn)行相連倦沧。
七 Merkle 樹
在比特幣網(wǎng)絡(luò)中,Merkle樹被用來歸納一個區(qū)塊中的所有交易它匕,同時生成整個交易集合的數(shù)字指紋展融,且提供了一種校驗(yàn)區(qū)塊是否存在某交易的高效途徑。
Merkle樹的效率
下面是比特幣區(qū)塊鏈中交易數(shù)量 區(qū)塊的近似大小 路徑大性ゼ怼(哈希數(shù)量) 路徑大懈嫦!(字節(jié))
16筆交易 4KB 4個哈希 128字節(jié)
512筆交易 128KB 9個哈希 288字節(jié)
2048筆交易 512KB 11個哈希 352字節(jié)
65,535筆交易 16MB 16個哈希 512字節(jié)
從數(shù)據(jù)可得燕偶,當(dāng)區(qū)塊大小由16筆交易(4KB)急劇增加至65,535筆交易(16MB)時,為證明交易存在的Merkle路徑長度增長極其緩慢础嫡,僅僅從128字節(jié)到512字節(jié)指么。
有了Merkle樹,一個節(jié)點(diǎn)能夠僅下載區(qū)塊頭(80字節(jié)/區(qū)塊),然后通過從一個滿節(jié)點(diǎn)回溯一條小的Merkle路徑就能認(rèn)證一筆交易的存在伯诬,而不需要存儲或者傳輸大量區(qū)塊鏈中大多數(shù)內(nèi)容晚唇,這些內(nèi)容可能有幾個G的大小。
這種不需要維護(hù)一條完整的區(qū)塊鏈的節(jié)點(diǎn)姑廉,又被稱作簡單支付驗(yàn)證(SPV)節(jié)點(diǎn)萌踱,它不需要下載整個區(qū)塊而通過Merkle路徑去驗(yàn)證交易的存在。
八? Merkle樹和簡單支付驗(yàn)證(SPV)
Merkle樹被SPV節(jié)點(diǎn)廣泛使用号阿。SPV節(jié)點(diǎn)不保存所有交易也不會下載整個區(qū)塊并鸵,僅僅保存區(qū)塊頭。它們使用認(rèn)證路徑或者M(jìn)erkle路徑來驗(yàn)證交易存在于區(qū)塊中扔涧,而不必下載區(qū)塊中所有交易园担。
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? END