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