主頁 > 區塊鏈 > 區塊鏈共識演算法

區塊鏈共識演算法

2020-11-20 12:35:07 區塊鏈

什么是共識

一個系統想要正常運行,就必須要有一個系統成員都認可的規則來說明如何分工、誰來領導、獎罰機制等問題,
在中心化系統中,所有節點都只需要詢問超級節點就能得到一致的結果,
而區塊鏈是去中心化的資料庫,且區塊鏈實行少數服從多數的機制,所以區塊鏈中的節點只能通過相互通信得知哪些規則(即區塊中的交易)被大多數節點認可,區塊鏈中大多數節點都認可一條交易的程序,就是區塊鏈對這條交易達成共識的程序,

為什么會出現達不成共識的情況

系統中的惡意節點會給不同的節點發送不同的資訊,
比如,系統中有A,B,C三個節點 ,其中C是惡意節點,C給A發送交易“小明給小黃轉5元”,C給B發送交易“小明給小黃轉50元”,A節點會在賬本中記載“小明-5元,小黃+5元”,B節點會在帳本中記載“小明-50元,小黃+50元”,最后,A,B節點會在小黃到底有多少錢這個問題上達不成共識,(這就是著名的拜占庭將軍問題)

未達成共識的體現

區塊鏈分叉,可分為正常的分叉和惡意的分叉攻擊

正常分叉

因為網路的延遲導致的分叉

硬分叉

大部分節點進行了軟體升級(new node),少數節點沒有進行軟體升級(old node),new node發布的區塊在old node處驗證不通過,
硬分叉是永久性分叉【old node的本地區塊鏈中只有old node生成的區塊,new node的本地區塊鏈中由new node發布的區塊所在的鏈成為最長合法鏈】

軟分叉

大部分節點進行了軟體升級(new node),少數節點沒有進行軟體升級(old node),old node發布的區塊在new node處驗證不通過,
軟分叉是暫時性分叉【new node的本地區塊鏈只有new node生成的區塊,old node的本地區塊鏈中會出現分叉(new node發布的區塊和old node發布的區塊),因為new node占大多數,最終new node發布的區塊所在的鏈會成為最長合法鏈】

分叉攻擊

在這里插入圖片描述
在這里插入圖片描述

區塊鏈不可能三角問題

區塊鏈不可能在scalabilitysecuritydecentralization這三個方面同時達到最優,

  • scalability高效可擴展【對標用戶體驗感】
    ----高效:每秒能夠處理的交易數量多(交易吞吐量高),單個交易能在很短的時間內被處理(交易時延短)
    ----可擴展:很多個節點加入系統后,系統仍然能夠提供良好的服務
  • security安全
  • decentralization區塊生成者的去中心化程度
    ----區塊生成者的數量
    ----區塊生成者的地理位置分布
    ----區塊生成者是否是同一利益共同體

突破區塊鏈不可能三角問題的方向

  • 共識演算法
  • 區塊結構
    DAG
  • 系統實作
    側鏈技術、分片技術、多鏈并行……

最基礎的共識演算法

PoW(Proof of Work)

1.所有節點通過挖礦爭奪記賬權,
2.爭到記賬權的節點將交易打包進區塊并廣播區塊,其他節點驗證區塊并將驗證通過的區塊加入本地區塊鏈中,

挖礦的實質

先看位元幣系統中區塊的塊頭結構【PoW在位元幣系統中使用】
位元幣中區塊塊頭結構
挖礦就是節點使用窮舉法暴力尋找nonce的值使得
H(block head)<target
這個不等式成立的程序(target就是難度目標)

分析

PoW犧牲了scalability

優點

PoW是目前使用時間最長、最安全、去中心化程度最好的共識演算法

缺點

1.PoW效率低
2.PoW費電,每個節點都在通過尋找nonce值來爭奪記賬權

實作

隨著礦池和算力優于CPU的ASCI的出現,PoW的去中心化程度和安全性受到阻礙

PoS(Proof of Stake)

1.節點交押金,成為驗證者,系統通過節點提交的押金給節點分配權益,【權益= 押金 * 幣齡】
2.每一輪中,權益最大的驗證者擁有記賬權,其余驗證者驗證區塊并將驗證通過的區塊加入本地區塊鏈中,
3.一輪過后,生成區塊的節點提交的押金的幣齡清零,

PoW中節點通過算力競爭記賬權,PoS節點通過權益爭奪記賬權

分析

PoS犧牲了scalability
decentralization:PoS會導致“富人越富”的現象出現,“區塊生成者是否是同一利益共同體”的去中心化程度低

優點

效率高于PoW【nonce值的計算難度低于PoW】

缺點

1.效率低
2.鼓勵節點離線和囤積貨幣,幣齡僅隨著天數增長,和節點是否在線無關,所以某些節點會先離線囤積幣齡后再上線,
3.nothing-at-stake attack

實作

目前還沒有實作很優秀的純PoS演算法的區塊鏈平臺

PBFT(Practical BFT)

在這里插入圖片描述

分析

PBFT犧牲了decentralization和security
decentralization:PBFT只適用于聯盟鏈和私有鏈,“區塊生成者是否屬于同一利益共同體”和“區塊生成者的地理位置”的去中心化程度低
security:惡意節點m個,系統中總結點n > 3m 時安全
scalability:通信復雜度O(N*N),節點數少時效率高,系統可擴展性差

優點

系統中節點數少時效率高

缺點

不適用于節點數量多、惡意節點多、網路易丟包的情況
可擴展性差

實作

可以實作

改進的共識演算法

我將我了解到的共識演算法根據改進的方向分為兩部分:

  • 降低挖礦難度(target) + 隨機選擇出塊節點
  • 部分節點代替全部節點達成共識

降低挖礦難度(target) + 隨機選擇出塊節點

PoA(Proof of Activity)

1.節點競爭生成區塊塊頭【區塊塊頭僅包括version、time、preHash、target、nonce,沒有和交易相關的MerkleRoot】
2.最先生成區塊塊頭的節點廣播塊頭,其他節點接收塊頭,使用一系列計算匯出N名幸運股權節點
3.前N-1名幸運股權節點將自己的簽名發給第N名幸運股權節點,第N名幸運股權節點打包交易和N名幸運股權節點的簽名,廣播區塊(N個簽名缺一不可)
4.所有節點驗證區塊

分析

犧牲了scalability
PoW+PoS的改進演算法

優點

1.效率高于PoW和PoS
2.解決了PoS的鼓勵節點離線問題(幸運股權節點是隨機選的)

缺點

1.效率低
2.費電,所有節點競爭生成塊頭

實作

可以實作

Ouroboros

通過可驗證隨機函式VRF(Verifiable Random Function)選擇出塊節點

分析

Ouroboros是第一個具有嚴格安全證明的共識演算法
PoS改進演算法
犧牲了scalability

優點

安全
分叉概率極低

缺點

效率低

實作

可實作


部分節點代替全部節點達成共識

DPoS

1.節點交押金進入系統,系統分配權益
2.節點通過投票選出一個委員會,委員會中的節點成為見證人(票的權重和投票節點的權益相關)
3.見證人輪流發布區塊,見證人一起驗證區塊

分析

犧牲了decentalization和security
decentralization:不是所有節點都參與共識程序
seciruty:攻擊者可以通過攻擊見證人來趕走好的見證人
PoS改進演算法

優點

效率高

缺點

較其他演算法不安全:

  • 好的見證人容易遭受諸如DDoS攻擊等攻擊,從而被取消見證人身份
  • 比賽造假:惡意節點為了成為見證人討好誠實節點騙取票數

實作

可以實作

Algorand

1.通過可驗證隨機函式VRF選擇委員會(委員會中的節點分為leader和verifier)
2.委員會中的leader發布區塊
3.委員會中的verifier通過BA*演算法驗證區塊(第一階段GC演算法對候選區塊達成共識,第二階段BBA演算法對是否寫候選區塊達成共識)

分析

犧牲了scalability和decentralization
PoS+BFT改進演算法

優點

分叉概率極低
效率優于PoS

缺點

效率較低

實作

可實作

dBFT

1.節點交押金進入系統,系統分配權益
2.根據權益選擇一部分節點組成委員會
3.委員會中的節點使用BFT演算法達成共識

分析

犧牲了decentralization

優點

效率高
一般不分叉

缺點

中心化程度高
不適用于網路易丟包的情況

實作

可實作

共識演算法應對各種攻擊

sybli attack女巫攻擊

定義:一個節點模擬多個身份進行攻擊
例子:一臺計算機利用多個ip地址刷贊
PoW:獲得記賬權的概率僅取決于算力,和身份數量無關【不會遭受該攻擊】
PoS:獲得記賬權的概率僅取決于權益(押金量,幣齡),和身份數量無關【不會遭受該攻擊】
PBFT:投票時“一身份一票”【可能遭受該攻擊
PoA:同PoW和PoS【不會遭受該攻擊】
Ouroboros:系統決定產生區塊的節點【不會遭受該攻擊】
DPoS:同PoS【不會遭受該攻擊】
Algorand:同PoS【不會遭受該攻擊】
dBFT:成為委員會的概率取決于節點權益【不會遭受該攻擊】

nothing-at-stake attack無權益攻擊

定義:在遇到分叉時,礦工同時在多條分叉鏈上挖礦
PoW: 在多條鏈上挖礦會分散算力,使得節點挖礦成功的概率降低,所以節點在遇到分叉時會選擇一條鏈并在該鏈上挖礦【不會遭受該攻擊】
PoS: 節點將權益分配在多條鏈上就可以在多條鏈上同時挖礦【可能遭受該攻擊
PBFT: 強一致性,一般不會分叉【不會遭受該攻擊】
PoA: 同PoS【可能遭受該攻擊
Ouroboros: 系統決定產生區塊的節點【不會遭受該攻擊】
DPoS: 參與共識階段的節點少,一般不會分叉【不會遭受該攻擊】
Algorand: 一般不分叉【不會遭受該攻擊】
dBFT: 一般不分叉【不會遭受該攻擊】

long range attack長程攻擊

定義:惡意節點發布一條從創世區塊開始的鏈取代當前的最長合法鏈

long range attack理論上可實作,實際中還未碰見

PoW: 需要很大的算力才能實作【不會遭受該攻擊】
PoS: 需要很大的權益才能實作【可能遭受該攻擊
PBFT: 強一致性,一般不會分叉【不會遭受該攻擊】
PoA: 出塊者隨機選擇【不會遭受該攻擊】
Ouroboros: 系統決定產生區塊的節點【不會遭受該攻擊】
DPoS: 參與共識階段的節點少,一般不會分叉【不會遭受該攻擊】
Algorand: 一般不分叉【不會遭受該攻擊】
dBFT: 一般不分叉【不會遭受該攻擊】

各共識演算法總體比較

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/225407.html

標籤:區塊鏈

上一篇:以太坊原始碼系列之miner決議決議(2)

下一篇:簡單的區塊鏈代碼入門(python演示原理和solidity 的truffle發布)實驗

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more