交易的存儲形式-Merkle樹
? ? ? ?節(jié)點初步判斷有效的交易但是未上鏈的未被確認的交易在節(jié)點本地是以一個樹狀結構進行存儲的,就是我們在區(qū)塊鏈中常衬∧ⅲ看到的Merkle樹結構筹燕,Merkle樹是一種二叉樹數(shù)據(jù)結構,一個父節(jié)點有兩個子節(jié)點衅鹿,交易是以下圖的形式形成的Merkle樹撒踪,以這種方式可以通過hash快速的檢索到區(qū)塊中的某個交易。而Merkle樹的樹根值是所有交易的哈希值大渤。
區(qū)塊數(shù)據(jù)結構
? ? ? ?為了更好的介紹制妄,挖礦,交易打包等概念我們先來了解一下區(qū)塊的數(shù)據(jù)結構泵三。一個區(qū)塊有以下幾部分構成:
區(qū)塊高度(Height):可以理解為每個區(qū)塊的ID耕捞,通過這個值可以直接的看出,目前的區(qū)塊個數(shù)烫幕。創(chuàng)世區(qū)塊的高度就是0俺抽。
父哈希(Prev Block):上一個高度區(qū)塊的哈希值。
頭哈希(Block):每個區(qū)塊都有一個唯一的哈希值较曼,由上一個區(qū)塊的頭哈希磷斧,數(shù)據(jù)塊哈希和隨機數(shù)生成。
Merkle樹的根值(Merkle Root):區(qū)塊中每一筆交易對應一個哈希,呈樹裝結構弛饭,生成的最終值(根)冕末,代表了改區(qū)塊中的交易。
時間(Time):區(qū)塊生成的時間
難度:指的是挖出當前區(qū)塊的難度孩哑,是根據(jù)一定計算公式算出的一串自然數(shù)栓霜。這個難度系數(shù)根據(jù)中本聰?shù)囊?guī)定翠桦,每兩周會自動調(diào)整一次横蜒,以保證每個新區(qū)塊的產(chǎn)生時間在10分鐘左右。
Nonce:隨機數(shù)销凑,最終算出符合要求哈希的隨機數(shù)丛晌。
區(qū)塊體:以樹狀結構存儲了區(qū)塊中的交易。
挖礦是什么意思
? ? ? ?在了解了區(qū)塊的數(shù)據(jù)結構后斗幼,我們來看下我們常說的挖礦指的是什么澎蛛。
? ? ? ?挖礦說的直白些就是在現(xiàn)有的區(qū)塊鏈最新區(qū)塊的基礎上,生成一個符合條件的區(qū)塊蜕窿,并將其鏈入?yún)^(qū)塊鏈谋逻,并得到區(qū)塊獎勵的過程。
如何找到新的區(qū)塊
? ? ? ?尋找一個新區(qū)塊的過程有些像一個暴力破解的過程桐经,其實就是要對我們的區(qū)塊頭進行哈希運算毁兆,使得最后算出的哈希值小于難度系數(shù)字段。區(qū)塊頭中的各個指標基本上都是固定的阴挣,除了隨機數(shù)气堕,所以挖礦的過程就是不斷改變隨機數(shù)最終得到符合要求的哈希值。
? ? ? ?當?shù)V工在埋頭挖礦的同時畔咧,還在進行全網(wǎng)監(jiān)聽茎芭,一是監(jiān)聽新產(chǎn)生的交易,而是監(jiān)聽是否有人已經(jīng)挖到了新的區(qū)塊誓沸。
? ? ? ?若監(jiān)聽到了一筆交易梅桩,則對交易進行驗證,驗證通過的交易會被放在本地的交易池中拜隧,并廣播給相鄰節(jié)點宿百,同時更新Merkle樹的根值繼續(xù)進行挖礦。當有一個節(jié)點計算出了正確的隨機數(shù)虹蓄,則將本地的交易打包放入?yún)^(qū)塊中犀呼,交易的第一筆我們稱作CoinBase,指的是獎勵給礦工挖出新的區(qū)塊的交易薇组,該筆交易沒有輸入外臂,只有輸出。打包完成后將區(qū)塊進行廣播律胀,其他節(jié)點收到區(qū)塊后需要校驗該區(qū)塊是否有效宋光,有效后更新本地的區(qū)塊鏈貌矿,并將區(qū)塊中已經(jīng)有的交易在本地的交易池中刪去,礦工需要確保本地交易池中的區(qū)塊都是未經(jīng)確認的罪佳,然后將區(qū)塊廣播給臨近節(jié)點逛漫。新區(qū)塊上的交易獲得了初次確認,當有下一個區(qū)塊連接到這個區(qū)塊時赘艳,交易會得到進一步的確認酌毡,在連續(xù)得到6個區(qū)塊的確認后,我們認為這筆交易則是不可逆轉的蕾管。
區(qū)塊鏈分叉又是什么
? ? ? ?雖然區(qū)塊鏈通過密碼學的手段提升了挖礦的難度枷踏,縮小了同時產(chǎn)生兩個區(qū)塊的可能性,但是由于網(wǎng)絡延遲等因素的限制掰曾,還是有可能出現(xiàn)兩個節(jié)點都找出了一個符合要求的隨機數(shù)旭蠕,產(chǎn)生了兩個區(qū)塊,這種時候旷坦,區(qū)塊鏈一般會保留兩個區(qū)塊掏熬,讓各位礦工繼續(xù)在兩個鏈上挖礦,直到有一個鏈條重新成為最長的鏈條秒梅。
一些常見的問題
1旗芬、交易打包的順序與權重。
? ? ? ?在交易打包進入?yún)^(qū)塊的時候礦工本地一定已經(jīng)有了全網(wǎng)很多交易番电,那么到底如何確認優(yōu)先打包哪些區(qū)塊呢岗屏,一般影響權重的因素有以下三個
交易時間
交易UTXO大小
交易手續(xù)費
? ? ? ?一般交易時間越早,UTXO越大漱办,手續(xù)費越高的交易越會被優(yōu)先打包这刷。
? ? ? ?按道理來說,由于Merkle根也是挖礦的一部分娩井,所以在新區(qū)塊產(chǎn)生前暇屋,具體哪些交易會被打包進去已經(jīng)是確定了的,但是很多礦工為了更快的計算出隨機數(shù)也會采用更換打包交易從而改變Merkle根值得方式洞辣「琅伲總的來說,記賬節(jié)點對哪些交易能夠被記錄在賬本上有很大的自主權扬霜。
2定鸟、為什么被6個區(qū)塊確認后就會認定這筆交易是不可逆的
? ? ? ?其實中本聰在他的論文中也論述過這一點,總的來說著瓶,若一個人想更改這個交易必須追蹤到這筆交易產(chǎn)生的區(qū)塊去更改联予,那么一般被6個區(qū)塊確認后,“追趕”的計算量即將是天文數(shù)字,所有從經(jīng)濟學的角度來說沸久,盡管有這樣的算力這么做也是不劃算的季眷。