1. 程式人生 > >(一)區塊鏈的共識演算法:整體介紹 及 分叉 的通俗講解

(一)區塊鏈的共識演算法:整體介紹 及 分叉 的通俗講解

作者:林冠巨集 / 指尖下的幽靈

本文不做一般入門的區塊鏈描述講解。著重簡述講解:

  • 區塊鏈的分叉
  • 共識演算法

目錄

前言

由於最近的開發工作是與以太坊公鏈相關的去中心化交易所,專案兩個多月之久,對區塊鏈相關的知識內容瞭解了一些,故擇文以記錄之,但求文字通俗易懂,無紕漏。因自身求學過程中所遇坑無數,業內良文亦少之又少,深感朦朧之懂之不爽。此外,亦堅信區塊鏈技術未來必能大放光芒,因現在多應用於虛擬貨幣,故人談區塊鏈,內心首想皆炒幣相關之內容。

簡單過一下區塊鏈

我們一般意識形態中的 鏈 是鐵鏈,由鐵鑄成,一環扣一環。形象地,區塊鏈的也可以這麼理解,只不過它不是由鐵鑄成,而是由擁有一定資料結構的塊

連線而成,這是一個最簡單的雛形

見下圖

通俗講解共識

所謂共識,通俗來說,就是我們大家對某種事物的理解達成一致的意思。比如說日常的開會討論問題,又比如判斷一個動物是不是貓,我們肉眼看了後覺得像貓,其滿足貓的特徵,那麼我們認為它是貓。共識,是一種規則。

繼續我們的會議例子。參與會議的人,通過開會的方式來達到談論解決問題

對比區塊鏈中,參與挖礦的礦工通過某種共識方式(演算法)來解決讓自己的賬本跟其他節點的賬本保持一致。讓賬本保持一致的深入一層意思就是,讓鏈中區塊資訊保持一致。

為什麼需要共識,不需要可不可以?當然不可以,生活中沒了共識的規則,一切亂套。區塊鏈沒了共識的規則,各個節點各幹各的,失去一致的意義。

這兩個例子的對應的關係如下:

  • 會議的人 = 挖礦的礦工
  • 開會 = 共識方式(演算法)
  • 談論解決問題 = 讓自己的賬本跟其他節點的賬本保持一致

如果你對節點的概念意思不懂,請先理解為礦工,一個節點內部包含很多角色,礦工是其中之一。

共識演算法

目前常見的在區塊鏈中,節點們讓自己的賬本跟其他節點的賬本保持一致共識方式(演算法)有如下幾種:

  • PoW,代表者是比特幣 (BTC)
    • 弊端:
      • 礦池的出現,一定程度上違背了去中心化的初衷,同時也使得51%攻擊成為可能,影響其安全性。
      • 存在巨大的算力浪費,看看礦池消耗大量的電力資源,隨著難度增加,挖出的不夠付電費
  • PoS,代表者是以太坊 (ETH),從PoW過度到PoS
    • 弊端:
      • 破壞者對網路的攻擊成本很低,擁有代幣就能競爭
      • 另外擁有代幣數量大的節點獲得記賬權的概率會更大,會使得網路共識受少數富裕賬戶支配,從而失去公正性
  • DPoS,代表者是柚子(EOS)
    • 弊端:
      • 選舉固定數量的見證人作為記賬候選人有可能不適合於完全去中心化的場景
      • 在網路節點很少的場景,選舉的見證人的代表性也不強.
  • PBFT 拜占庭容錯,聯盟鏈中常用
    • 弊端:
      • 不適合公有鏈,適合聯盟鏈

下面通俗講解下每種共識演算法的概念,注意!是概念,非程式碼層面的詳細實現。

PoW

它的全稱是:Proof of Work 工作量證明。字面意思,就是誰做的活越多,誰話事權越大,一定層面上類似現實生活的多勞多得的概念。該例子會穿插生活事例,其他的幾個講解將不再累贅。

比特幣為例子,比特幣挖礦就是通過計算符合某一個比特幣區塊頭雜湊雜湊值爭奪記賬權。這個過程需要通過大量的計算實現,簡單理解就是你進行的計算量大(工作量大),你就有大概率獲得記賬權,即礦工的挖出的區塊併入主鏈。

  • 區塊頭,區塊鏈中的區塊的頭部。你有一個飯盒,飯盒第一層,形象為動物頭部,稱之為頭部。第一層放著米飯,米飯就是頭部裝載著的東西
  • 雜湊雜湊值,一種通過數學公式計算得出的值
    • 雜湊:數學中的雜湊函式
    • 雜湊值: 通過雜湊函式得出的值
    • 例如加法公式:1 + 2 = 3。那麼雜湊公式:hash(1,2) = 結果
  • 區塊頭雜湊雜湊值,飯盒第一層裝著的是飯。那麼這裡的這個值就是區塊頭裝著的東西
  • 記賬權,話事權,誰挖出的區塊是有效的。

所以說。在很多個節點都在挖礦的情況下,大家都有可能挖出一個區塊,隨之廣播到其他節點中去,那麼每個節點中會根據誰先挖出為準,確認該區塊,併入鏈中。

對比現實生活,數學競賽中,引數者 相當於礦工,一道題目,誰先做出就公佈計算過程和答案,不由裁判判斷,由參賽者一起驗證,沒問題後,宣佈該題目結束,解題者等相關資訊被記錄到冊子/資料庫/網路。之後繼續下一道題。

回到比特幣挖礦中:

  • 這道難題就是 計算出正確的雜湊雜湊值
    • 計算雜湊雜湊值 隨著難度係數增大,會越來越困難
    • 計算需要耗費大量的電力資源,工作量大
  • 一旦計算出了,就告訴其他節點
  • 節點收到通知後,停下手上的計算工作
  • 節點開始驗證資訊
    • 資訊有效,當前的塊被挖出,各節點開始重新挖下一個
    • 資訊無效,各節點繼續自己的手上的計算工作
  • 成功挖出有效區塊的節點獲得獎勵,比特幣獎勵

同時解出問題的情況怎麼辦?---① 答案見下一章節 區塊鏈分叉

區塊鏈分叉

注意私有節點不在討論範圍內,所有節點基於公有節點。分叉的情況有:

  • 硬分叉
    • 一旦出現,最後的結果是一分為二
    • 術語的說法:舊節點無法認可新節點產生的區塊,為硬分叉
  • 軟分叉
    • 一旦出現,最後的結果是能掰正的
    • 術語的說法:舊節點能夠認可新節點產生的區塊,為軟分叉

現在先回答上一章節留下的問題 --- ①,
① 的情況是軟分叉的一種,當有兩個或多個節點同時挖出了同區塊號碼的一個區塊,然後它們同時廣播資訊出去,假設一個是A,而另一個是B,那麼距離 A 比較近的節點,還沒等到收到其他訊息就先收到了 A 的資訊,並開始確認 A 所挖出的這個區塊的資訊,隨後加入A挖出的這個區塊到自己所在的公鏈中去。同理 距離 B 比較近的節點,也會先處理 B 挖出的區塊資訊並新增入自己所在的公鏈中。

上面文字對應於下圖。距離 A 最近的是 節點1,距離 B 最近的是 節點5

至此,出現了鏈的分叉。這是一種使用了同樣共識演算法,共識規則下導致的分叉,

出現了這種情況,礦工是比較好自我糾正的。由於解題能力和礦工的數量成正比,因此兩條鏈的增長速度也是不一樣的,在一段時間之後,總有一條鏈的長度要超過另一條。當礦工發現全網有一條更長的鏈時,他就會拋棄他當前的鏈,把新的更長的鏈全部複製回來,在這條鏈的基礎上繼續挖礦。所有礦工都這樣操作,這條鏈就成為了主鏈,分叉出來的鏈便會被拋棄掉。

硬分叉的出現

如果區塊鏈軟體的共識規則被改變,並且這種規則改變無法向前相容,舊節點無法認可新節點產生的區塊,且舊節點偏偏就是不升級,那麼該分叉將導致鏈一分為二。

分叉點後的鏈,往後互不影響,節點在站好派別後,也不會再互相廣播區塊資訊。新節點舊節點會開始在不同的區塊鏈上執行(挖礦交易驗證等)

舉個簡單的例子,如果節點版本1.0 所接收的區塊結構欄位是10個,1年後釋出節點2.0版本,2.0 相容 1.0,但是 1.0 的不能接受 2.0 版本中多出的欄位。

硬分叉的過程:

  • 開發者釋出新的節點程式碼,新的改變了區塊鏈的共識規則且不被舊的相容,於是節點程式出現了分叉(software fork)
  • 區塊鏈網路中部分節點開始執行新的節點程式碼,在新規則下產生的交易與區塊將被舊節點拒絕,舊節點開始短暫的斷開與這些傳送被自己拒絕的交易與區塊新節點的連線,於是整個區塊鏈網路出現了分叉(network fork)
  • 新節點的礦工開始基於新規則挖礦,舊的依然用舊的規則,不同的的礦工算力出現了分叉(mining fork)
  • 最終,整個區塊鏈出現了分叉(chain fork)。

一個例項:

2017年8月1號,Bitcoin Cash(BCH)區塊鏈成功在區塊高度478559與主鏈分離。這一新的加密貨幣預設區塊大小為8MB,並且可以實現區塊容量的動態調整。
由於舊節點只認可小於1MB的區塊,所以執行BCH客戶端節點產生的區塊無法向前相容,將被舊節點拒絕,最後執行不同客戶端的礦工將會長期執行在兩條不同的區塊鏈上(BTC和BCH)

軟分叉的出現

  • 不同的節點短時間差內挖出了同區塊號的區塊,也就是上面的例子
  • 因共識規則被改變,舊節點能夠識別新節點產生的區塊,舊的塊不能被新的接受
    • 新節點全網算力大於50%
    • 新節點全網算力小於等於50%

第二種的軟分叉是不一定能由節點自我糾正的。萬全的解決方案必須依賴人力升級節點到同版本。

  1. 新節點全網算力大於50%,因為新節點算力大於50%,所以不論舊節點升級不升級,最長的鏈也一定會是全部由新節點生成的區塊組成的鏈。而且,這條最長鏈最終都會是雙方都認為合法的一條,原因參考上面談到的最長鏈複製,因滿足下面幾點所以能被複制。

    • 舊的能接收新的,在分叉點之後的區塊參雜著
      • 舊節點的區塊
      • 新節點的區塊
    • 新的不能接收舊的,但是最終及其之後總比舊的長
  2. 新節點全網算力小於等於50%,最終不能通過短的複製長的達到統一,結果是:分叉。原因如下。

    • 舊節點最終會比新節點的鏈要長
    • 新的總是不能接受舊的,不會去複製一條含有自己不能接受的塊的鏈

寫到這,發現內容鋪開後比我想象中的要多。

故目前暫時分成兩章節,剩下的共識演算法的介紹留到第二章

參考

相關推薦

區塊共識演算法整體介紹 分叉通俗講解

作者:林冠巨集 / 指尖下的幽靈 本文不做一般入門的區塊鏈描述講解。著重簡述講解: 區塊鏈的分叉 共識演算法 目錄 前言 由於最近的開發工作是與以太坊公鏈相關的去中心化交易所,專案兩個多月之久,對區塊鏈相關的知識內容瞭解了一些,故擇文以記錄之,但求文字通俗易懂,無紕漏。因自身求學過程中

區塊快速入門——區塊簡介

更多 目前 驗證 action 依賴 無法解析 得到 分析 管理 區塊鏈快速入門(一)——區塊鏈簡介 一、區塊鏈簡介 1、分布式記帳技術簡介 2009年1月,基於區塊鏈結構的比特幣網絡悄然問世,其融合了現代密碼學和分布式網絡技術等重要成果。在比特幣出現後的數年裏,在純分布式

區塊共識演算法實用拜占庭容錯機制PBFT

詳情參見個人部落格:  共識機制是區塊鏈的核心組成部分,以POW、POS以及DPOS等為代表的共識機制執行需要以代幣為基礎,即需要發行各自的貨幣體系來構成各自網路執行的激勵機制,而在於節點已經有一定的互信基礎且不需要靠代幣來支撐整個網路的區塊鏈,傳統的共識演算法如PBFT、P

你也可以手繪二維碼糾錯碼字演算法數論基礎伽羅瓦域GF2^8

摘要:本文講解二維碼糾錯碼字生成使用到的數學數論基礎知識,伽羅瓦域(Galois Field)GF(2^8),這是手繪二維碼填格子理論基礎,不想深究可以直接跳過。同時數論基礎也是Hash演算法,RSA演算法等密碼學的入門基礎。 二維碼生成演算法最為核心的就是編碼規則和糾錯碼字的生成。本篇專門講解糾錯涉及到的伽

區塊共識演算法知多少?POW、POS、DPOS、PBFT區塊共識演算法

文章出處:http://www.tanjiaoyi.com/article-23783-1.html 來源: 拓樸區塊鏈 區塊鏈 共識演算法

區塊共識演算法: PBFT拜占庭容錯、Paxos、Raft 簡述

文章出處:https://blog.csdn.net/jerry81333/article/details/74303194 共識演算法 區塊鏈中最重要的便是共識演算法,比特幣使用的是POW(Proof of Work,工作量證明),以太幣使用的是POS(P

區塊共識演算法 PBFT拜占庭容錯、PAXOS、RAFT簡述

共識演算法 區塊鏈中最重要的便是共識演算法,比特幣使用的是POS(Proof of Work,工作量證明),以太幣使用的是POS(Proof of Stake,股權證明)使得算理便的不怎麼重要了,而今POS的變體DPOS(Delegated Proof of Stake,股

[區塊]共識演算法POW,POS,DPOS,PBFT介紹和心得

POW:Proof of Work,工作證明。 比特幣在Block的生成過程中使用了POW機制,一個符合要求的Block Hash由N個前導零構成,零的個數取決於網路的難度值。要得到合理的Block Hash需要經過大量嘗試計算,計算時間取決於機器的雜湊運算速

區塊共識演算法之POW1

    Bytom 在 POW 共識機制中引入了 Tensority 演算法,是區塊鏈挖礦和人工 智慧的橋樑。Tensority 演算法包含的矩陣乘法是人工智慧中最通用的演算法,幾乎 所有人工智慧裝置都能友好地相容這種演算法。同時,Tensority 演算法選取的資料 型別是 int8,是一種在插電型 AI

區塊共識演算法之BFT4

DBFT的演算法中,參與記賬的是超級節點,普通節點可以看到共識過程,並 同步賬本資訊,但不參與記賬。總共 n 個超級節點分為一個議長和 n-1 個議員, 議長會輪流當選。每次記賬時,先有議長髮起區塊提案(擬記賬的區塊內容), 一旦有至少(2n+1)/3 個記賬節點(議長加議員)同意了這個提案,那麼這個 提案就

數據結構

存儲 鏈表操作 author void 復雜 pac 部分 地址 插入 一、鏈表   鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。   鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個

【微服務從入門到精通】微服務的藍綠發布灰度發布

采樣 前端 入門 後端 blog 文件 風險 性能 切換 藍綠部署 基本上,藍綠部署是一種以可預測的方式發布應用的技術,目的是減少發布過程中服務停止的時間。 簡單來說,你需要準備兩個相同的環境(基礎架構),在藍色環境運行當前生產環境中的應用,也就是舊版本應用,如圖中 A

區塊學習6區塊

有序 打包成 info 運算 區塊鏈 ash 互連 包含 hash 寫了幾篇區塊鏈的學習筆記,今天來寫寫比特幣中的區塊鏈。比特幣中區塊鏈是由包含交易信息的區塊從後向前有序鏈接起來的數據結構。每個區塊從後向前有序地鏈接在這個鏈條裏,每個區塊都指向前一個區塊。 區塊結構 區塊是

區塊快速入門——區塊技術的演化

學術 出了 計算機系 blog 供應鏈 img 相關信息 擴容 actions 區塊鏈快速入門(五)——區塊鏈技術的演化 一、區塊鏈技術的發展 比特幣區塊鏈面向轉賬場景,支持簡單的腳本計算。如果引入更多復雜的計算邏輯,將能支持更多應用場景,即智能合約(Smart Contr

區塊快速入門——區塊密碼學與安全相關技術

ocs 國家 發出 .com 少包 signature payment 有效期 保護 區塊鏈快速入門(六)——區塊鏈密碼學與安全相關技術 一、區塊鏈密碼安全技術簡介 區塊鏈和分布式賬本中大量使用了密碼學和安全技術的最新成果,特別是身份認證和隱私保護相關技術。區塊鏈使用了包括

分散式事務 解決資料一致性事務原則與實現事務、sql事務

事務: 定義:       是以一種可靠、一致的方式,訪問和操作資料庫中資料的程式單元。 原則:      *a、 原子性   * b、一致性  * c、隔離性 &nbs

Java設計模式之建立型模式工廠模式簡單工廠模式+工廠方法模式

在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說,許多型別物件的建立需要一系列的步驟:你可能需要計算或取得物件的初始位置;選擇生成哪個子物件例項;或在你生成你需要的物件

推薦系統基於協同過濾演算法開發離線推薦

什麼是離線推薦 所謂的離線推薦其實就是根據使用者產生的行為日誌,後臺設定一個離線統計演算法和離線推薦演算法的任務來對這些行為日誌進行週期性的統計,統計過後的結果資料為前臺或者實時分析提供資料的支撐。離線推薦要求實時性不高。 離線推薦演算法之協同過濾 協同過濾其實就是藉助大量已

分片技術sharding——區塊擴容問題的良方

任何一個曾經開發過DApp的程式設計師都必須考慮到當前公共區塊鏈的侷限性,其中區塊鏈侷限性的最重要和最明顯的問題就是有限的吞吐量,比如,每秒處理的交易量過少。為了執行一個能夠處理實際吞吐量需求的DApp,區塊鏈就必須具有可擴充套件性。 進行區塊鏈擴容的一個答案就是分片技

資料結構與演算法--- 資料結構與演算法概念

一、資料結構 資料結構是計算機儲存、組織資料的方式。(資料結構是指資料與資料之間的關係。) 資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。