Merkle樹類似于二叉樹,但不同之處在于底部的兩個(gè)節(jié)點(diǎn)取得哈希值后形成上面的節(jié)點(diǎn)。只需要記錄根節(jié)點(diǎn)就可以檢測(cè)整棵樹是否被篡改。由根哈希值存在在區(qū)塊頭(header)中,而交易過程則存在區(qū)塊內(nèi)容(body)中。全節(jié)點(diǎn)包含了區(qū)塊頭和區(qū)塊內(nèi)容,而輕節(jié)點(diǎn)(如手機(jī)上的比特幣錢包)只包含區(qū)塊頭。這棵樹可以證明某個(gè)交易是否已經(jīng)被寫入區(qū)塊鏈。
共識(shí)協(xié)議是去中心化貨幣需要考慮的兩個(gè)問題:1. 誰(shuí)能發(fā)行數(shù)字貨幣:通過挖礦進(jìn)行;2. 如何驗(yàn)證交易的合法性:通過區(qū)塊鏈。
雙花攻擊是數(shù)字貨幣面臨的一個(gè)主要挑戰(zhàn)。比特幣中的交易都需要有輸入和輸出,即從哪里得到幣,花到哪里去。在正常情況下,也可能會(huì)出現(xiàn)兩個(gè)分叉,因?yàn)橥瑫r(shí)有兩個(gè)節(jié)點(diǎn)獲得了記賬權(quán),并打包了區(qū)塊,計(jì)算得到了相同的隨機(jī)數(shù)。這種情況下,會(huì)暫時(shí)存在兩個(gè)分叉,直到其中一個(gè)區(qū)塊率先找到了下一個(gè)區(qū)塊,這條鏈就會(huì)成為最長(zhǎng)的合法鏈,另一個(gè)分叉就會(huì)被丟棄。
女巫攻擊是某惡意節(jié)點(diǎn)不斷創(chuàng)建賬戶,當(dāng)賬戶總數(shù)超過總賬戶的一半時(shí),該節(jié)點(diǎn)就可以控制區(qū)塊鏈。
比特幣中的共識(shí)協(xié)議涉及一些節(jié)點(diǎn)是惡意的,而大部分節(jié)點(diǎn)是善良的。一種想法是將一些交易打包到區(qū)塊中作為候選區(qū)塊,然后每個(gè)區(qū)塊進(jìn)行投票,以確定是否寫入?yún)^(qū)塊鏈。然而,這種方法存在問題,因?yàn)橐恍阂夤?jié)點(diǎn)可能會(huì)一直發(fā)布包含惡意交易的區(qū)塊,占用資源,并且有的節(jié)點(diǎn)可能不投票。
另一種想法是不按賬戶數(shù)量進(jìn)行投票,而是按計(jì)算能力進(jìn)行投票。每個(gè)節(jié)點(diǎn)都可以產(chǎn)生合法交易放入?yún)^(qū)塊,這些節(jié)點(diǎn)開始嘗試不同的隨機(jī)數(shù),直到找到H(區(qū)塊頭)≤ 目標(biāo)值,然后該節(jié)點(diǎn)就獲得了記賬權(quán)。
唯一產(chǎn)生比特幣的途徑是通過coinbase交易。這種交易不需要指出幣的來(lái)源,因?yàn)楂@得了記賬權(quán)的節(jié)點(diǎn)會(huì)獲得區(qū)塊獎(jiǎng)勵(lì)。每21萬(wàn)個(gè)比特幣,獎(jiǎng)勵(lì)就會(huì)減半。
比特幣爭(zhēng)奪記賬權(quán)的過程被稱為挖礦,而參與爭(zhēng)奪記賬權(quán)的節(jié)點(diǎn)被稱為礦工。