區(qū)塊鏈技術筆記第二彈(BTC)
共識機制之POW算法實現(xiàn)
PoW的目標是找出一個符合特定條件的數(shù)字龙致,這個數(shù)字很難計算出來,但容易驗證顷链。
以太坊Pow算法可以表示為如下公式:
RAND(h, n) <= M / d
其中RAND()表示一個概念函數(shù)目代,代表一系列的復雜運算。其中h和n為輸入,即區(qū)塊Header的哈希榛了、以及Header中的Nonce在讶。M表示一個極大的數(shù),此處使用2^256-1霜大。d构哺,為區(qū)塊難度,即Header中的Difficulty战坤。
因此在h和n確定的情況下曙强,d越大,挖礦難度越大(關聯(lián)開頭由多少個0位結尾途茫,位數(shù)越多難度越大)碟嘴,即為Difficulty本義。即不斷變更Nonce囊卜,使RAND(h, n)滿足RAND(h, n) <= M / d娜扇,即完成Pow。
我們先從一個簡單的demo入手進行學習栅组。
規(guī)定難度為00開頭雀瓢,隨機數(shù)設為P,當P遇PRE_DATA合并的數(shù)值Hash256后滿足難度笑窜,即完成解致燥。偽代碼如下:
def pow(DATA_HASH):? {
?proof=0
Now_proof=f'{DATA_HASH},{proof}'.encode()
NP_Hash=hashlib.sha256(Now_proof).hexdigest()
while NP_Hash[:2]=="00" ? is? False:
{
??????? proof+=1
??????? Now_proof=f'{DATA_HASH
??????? {proof}'.encode()NP_Hash=hashlib.sha256(Now_proof).hexdigest()????????
}
return? proof
}
當難度固定好后,采用不斷碰撞的方式來解出值排截,有了工作量機制作為驗證,再配以“節(jié)點定義”辐益、“發(fā)送交易”断傲、“挖礦”、“分布式統(tǒng)一”即可完成景點BTC的雛形結構
在BTC還有其他很多對于整個網(wǎng)絡的調(diào)節(jié)智政,具體詳見官方文檔认罩。如果有時間我會在后續(xù)文章簡要為大家剖析。
共識機制之挖礦原理(如何記賬)
所有的計算和存貯是需要消耗計算機資源的续捂,既然要付出成本垦垂,那節(jié)點為什么還要參與記賬呢?在中本聰(比特幣之父)的設計里牙瓢,完成記賬的節(jié)點可以獲得系統(tǒng)給與的一定數(shù)量的比特幣獎勵劫拗,這個獎勵的過程也就是比特幣的發(fā)行過程,因此大家形象的把記賬稱為“挖礦”矾克。
由于記賬是有獎勵的页慷,每次記賬都可以給自己憑空增加一定數(shù)量的個比特幣(當前是12.5比特幣,博文寫作時每個比特幣是4萬人民幣以上,大家可以算算多少錢)酒繁,因此就出現(xiàn)大家爭相記賬滓彰,大家一起記賬就會引起問題:出現(xiàn)記賬不一致的問題,比特幣系統(tǒng)引入工作量證明來解決這個問題州袒,規(guī)則如下:
一段時間內(nèi)(10分鐘左右揭绑,具體時間會與密碼學難題難度相互影響)只有一人可以記賬成功。通過解決密碼學難題(即工作量證明)競爭獲得唯一記賬權郎哭,其他節(jié)點復制記賬結果他匪,不過在進行工作量證明之前,記賬節(jié)點會做進行如下準備工作:
1. 收集廣播中還沒有被記錄賬本的原始交易信息
2. 檢查每個交易信息中付款地址有沒有足夠的余額
3. 驗證交易是否有正確的簽名
4. 把驗證通過的交易信息進行打包記錄
5.添加一個獎勵交易:給自己的地址增加12.5比特幣(白皮書規(guī)定彰居,一定區(qū)塊后改變)
如果節(jié)點爭奪記賬權成功的話诚纸,就可以得到12.5比特幣的獎勵。
驗證
在節(jié)點成功找到滿足的Hash值之后陈惰,會馬上對全網(wǎng)進行廣播打包區(qū)塊畦徘,網(wǎng)絡的節(jié)點收到廣播打包區(qū)塊,會立刻對其進行驗證抬闯。
如果驗證通過井辆,則表明已經(jīng)有節(jié)點成功解迷,自己就不再競爭當前區(qū)塊打包溶握,而是選擇接受這個區(qū)塊杯缺,記錄到自己的賬本中,然后進行下一個區(qū)塊的競爭猜謎睡榆。
網(wǎng)絡中只有最快解謎的區(qū)塊萍肆,才會添加的賬本中,其他的節(jié)點進行復制胀屿,這樣就保證了整個賬本的唯一性塘揣。
假如節(jié)點有任何的作弊行為,都會導致網(wǎng)絡的節(jié)點驗證不通過宿崭,直接丟棄其打包的區(qū)塊亲铡,這個區(qū)塊就無法記錄到總賬本中,作弊的節(jié)點耗費的成本就白費了葡兑,因此在巨大的挖礦成本下奖蔓,也使得礦工自覺自愿的遵守比特幣系統(tǒng)的共識協(xié)議,也就確保了整個系統(tǒng)的安全讹堤。