【区块链】共识算法简介
共识算法简介
区块链三要素:
- 去中心化
- 共识算法
- 智能合约
共识算法作为区块链三大核心技术之一,其重要性不言而喻。今天就来简单介绍共识算法的基本知识。
最简单的解释,共识算法就是要让所有节点达成共识,保证少数服从多数!大多数人认定一件事,这件事就是事实,也就意味着如果你要去改变一个既定事实,那么你必须伙同大多数人陪你一起作假。

共识算法分类
区块链共识算法的分类标准不一,且其种类和数量还在增长,但可以大致根据容错类型、部署方式和一致性程度等加以分类。
- 容错类型:区块链共识算法分为拜占庭容错和非拜占庭容错
- 部署方式:将区块链共识算法分为公有链共识、联盟链共识和私有链共识
- 一致性程度:区块链共识算法分为强一致性共识和弱(最终)一致性共识等
- 选主策略:区块链共识算法分为选举类、证明类、随机类、联盟类和混合类
看到这里有些读者开始疑惑了,什么是选主策略呢?下表列出了常见的选主策略:
| 选主策略 | 具体解释 |
|---|---|
| 选举类共识 | 即矿工节点在每一轮共识过程中通过“投票选举”的方式选出当前轮次的记账节点,首先获得半数以上选票的矿工节点将会获得记账权多见于传统分布式一致性算法,如Paxos和Raft等 |
| 证明类共识 | 也称为“ProofofX”类共识,即矿工节点在每一轮共识过程中必须证明自己具有某种特定的能力,证明方式通常是竞争性地完成某项难以解决但易于验证的任务,在竞争中胜出的矿工节点将获得记账权;如PoW和PoS等共识算法是基于矿工的算力或者权益来完成随机数搜索任务,以此竞争记账权 |
| 联盟类共识 | 即矿工节点基于某种特定方式首先选举出一组代表节点,而后由代表节点以轮流或者选举的方式依次取得记账权,这是一种以“代议制”为特点的共识算法,如DPoS等 |
| 混合类共识 | 即矿工节点采取多种共识算法的混合体来选择记账节点,如PoW+PoS混合共识、DPoS+BFT共识等 |
部分常见的共识算法
常见共识算法表:
| 共识算法 | 用途 |
|---|---|
| Paxos | Google Chubby |
| Raft | ETCD |
| ZAB | Zookeeper |
| PoW | 比特币、莱特币、以太坊的前三个阶段 |
| PoS | EER Coin、NXT、以太坊第4阶段 |
| DPoS | BitShare |
| PBFT | Hyperledger Fabric |
| Hotstuff | Libra(Facebook/Meta) |
常见共识算法图:

PoX类共识算法
PoX类的共识算法主要包括比特币所采用的PoW共识及一些类似项目(如莱特币等)的变种PoW,即为大家所熟知的“挖矿”类算法。
核心思想:实际是所有节点竞争记账权,而对于每一批次的记账(或者说挖出一个区块)都赋予一个“难题” ,要求只有能够解出这个难题的节点挖出的区块才是有效的。
此类算法的代表有:PoW,PoS,DPoS
- 工作量证明PoW(Proof of Work)算法,也被称为最耗电力的共识算法。在该算法中,所有节点通过提供工作量证明来争夺记账权,即最先提供足够的工作量证明的节点将向全网广播自己记的账(即区块),其他所有节点将该区块同步到自己的账本。
- 权益证明PoS(Proof of Stake)算法类似于股份制公司的股东机制,根据持有数字货币的量和时间,分配相应的利息。是由系统权益替代算力来决定区块链记账权的共识算法。即,拥有权益越大的节点则越有可能成为下一个区块的生产者。
- 委托权益证明DPoS(Delegated Proof of Stake)算法将成千上万个PoS节点,通过某种机制(例如持有代币的数量)选举出若干(奇数)个节点,在这几个节点之间进行投票选举(在一些实现中甚至会在这些节点间以令牌环的方式进行轮询,进一步减少投票开销)出每次的检点(出块)节点,而不用在网络中全部节点之间进行选择。

BFT类共识算法
与PoX类共识算法相比,BFT类共识算法采用了完全不同的思路。它希望所有节点协同工作,通过协商的方式来产生能被所有(诚实)节点认可的区块。
拜占庭容错问题最早由Leslie Lamport等学者于1982年在论文《The ByzantineGenerals Problem》中正式提出,主要描述分布式网络节点通信的容错问题。从20世纪80年代起,提出了很多解决该问题的算法,这类算法被统称为BFT算法。
非拜占庭错误(CFT)与拜占庭错误(BFT):
- CFT(Crash Fault Tolerance):通常用于处理失效节点,即那些停止响应但不会伪造信息的节点。这类错误可以通过如Paxos、Raft等算法来处理,它们往往性能较好,能容忍不超过一半的故障节点。
- BFT(Byzantine Fault Tolerance):用于处理恶意节点,即那些可能发送错误或不一致信息的节点。这类错误更为复杂,因为恶意节点可能会试图破坏系统的一致性。
BFT类代表算法:

其中实用拜占庭(Practical BFT,PBFT)算法是最经典的BFT算法,由Miguel Castro和Barbara Liskov于1999年提出。PBFT算法解决了之前BFT算法容错效率较低的问题,且降低了算法的复杂度,使BFT算法可以实际应用于分布式系统。它能在恶意节点数不超过总结点数1/3的情况下达成共识。
相关文章:
【区块链】共识算法简介
共识算法简介 区块链三要素: 去中心化共识算法智能合约 共识算法作为区块链三大核心技术之一,其重要性不言而喻。今天就来简单介绍共识算法的基本知识。 最简单的解释,共识算法就是要让所有节点达成共识,保证少数服从多数&#x…...
Qt---day2-信号与槽
1、思维导图 2、 拖拽式 源文件 #include "mywidget.h" #include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget) { ui->setupUi(this); //按钮2 this->btn2new QPushButton("按钮2",th…...
Python中设计注册登录代码
import hashlib import json import os import sys # user interface 用户是界面 UI """ 用户登录系统 1.注册 2.登陆 0.退出 """ # 读取users.bin def load(path): return json.load(open(path, "rt")) # 保存user.bin def save(dic…...
AI伦理和安全风险管理终极指南
人工智能(AI)正在迅速改变各个领域的软件开发和部署。驱动这一转变的两个关键群体为人工智能开发者和人工智能集成商。开发人员处于创建基础人工智能技术的最前沿,包括生成式人工智能(GenAI)模型、自然语言处理&#x…...
golang testing使用
testing包服务于自动化测试 基本测试 Table Drvien Test 基于表的测试通过表形式进行测试每种情况的输入和期望输出,从而测试程序的正确性 func TestFib(t *testing.T) {var fibTests []struct {in int // inputexpected int // expected result}{{1, 1}…...
在Excel中使用正则提取单元格内容
在办公自动化的浪潮中,Excel 作为数据处理的利器,一直在不断进化。最近,我注意到了不坑盒子Office插件一个非常实用的功能更新——bk_regex_string 公式。这个功能对于我们这些日常需要处理大量文本和数据的办公人员来说,无疑是一…...
SQL查询语句(二)逻辑运算关键字
上一篇文章中我们提到了条件查询除了一些简单的数学符号之外,还有一些用于条件判断的关键字,如逻辑判断 关键字AND,OR,NOT和范围查找关键字BETWEEN,IN等;下面我们来介绍一些这些关键字的用法以及他们所表达的含义。 目录 逻辑运算关键字 AND…...
矿山机械自动化中的激光雷达技术探索
在矿山机械自动化技术的快速发展中,激光雷达技术作为其关键组成部分,正发挥着越来越重要的作用。本文将深入探讨激光雷达在矿山机械自动化中的应用,以及其所面临的挑战与未来发展趋势。 一、激光雷达在矿山机械自动化中的应用 激光雷达技术…...
MOSFET场效应管栅极驱动电流的计算
MOSFET驱动 MOSFET场效应管是电压驱动器件,输入有电容,因此为可靠驱动MOSFET,栅极需要施加较大的驱动电流。 功率MOSFET开关模型 该模型显示了影响开关性能的最重要的寄生器件。 栅极所需驱动电流计算公式 一个很重要的参数是计算栅极驱…...
Python 爬虫:Spring Boot 反爬虫的成功案例
前言 在当今数字化时代,网络数据成为了信息获取和分析的重要来源之一。然而,随着网络数据的广泛应用,爬虫技术也逐渐成为了互联网行业的热门话题。爬虫技术的应用不仅可以帮助企业获取有价值的信息,还可以用于数据分析、市场研究…...
计算机毕业设计Python+Vue.js天气预测系统 中国气象质量采集与可视化 天气数据分析 天气可视化 天气大数据 天气爬虫 大数据毕业设计
摘要 随着科技技术的不断发展,人民物质生活质量不断提高,我们越来越关注身边的气象、空气等地理环境。对于普通居民我们会选择合适的气象进行出游,提高精神层面的生活质量;对于企业会关注气象变换状况,来定制相关的生产…...
【busybox记录】【shell指令】tr
目录 内容来源: 【GUN】【tr】指令介绍 【busybox】【tr】指令介绍 【linux】【tr】指令介绍 使用示例: 转换字符 - 默认 转换字符 - 不翻译指定字符数组 此指令目前接触少,用得少,把精力放到其他常用指令上 常用组合指令…...
Mac虚拟机软件哪个好用 mac虚拟机parallels desktop有什么用 Mac装虚拟机的利与弊 mac装虚拟机对电脑有损害吗
随着多系统使用需求的升温,虚拟机的使用也变得越来越普遍。虚拟机可以用于创建各种不同的系统,并按照要求设定所需的系统环境。另外,虚拟机在Mac电脑的跨系统使用以及测试软件系统兼容性等领域应用也越来越广泛。 一、Mac系统和虚拟机的区别 …...
Type-C转音频(USB2.0数据传输)+PD充电芯片乐得瑞LDR6500/LDR6023
LDR6500 USB-C DRP 接口 USB PD 通信芯片概述 Type-C转音频(USB2.0数据传输)PD充电芯片乐得瑞LDR6500LDR6500是乐得瑞科技针对USB Type-C标准中的Bridge设备而开发的USB-C DRP(Dual Role Port,双角色端口)接口USB PD(Power Deliv…...
【busybox记录】【shell指令】expand
目录 内容来源: 【GUN】【expand】指令介绍 【busybox】【expand】指令介绍 【linux】【expand】指令介绍 使用示例: 把制表符转化为空格 - 默认输出 把制表符转化为空格 - 修改制表符转空格的个数 把制表符转化为空格 - 修改制表符转空格的个数…...
软件测试—— 接口测试之通讯流程相关概念
通讯流程 1、协议 通讯规则 2、HTTP协议 协议的一种 3、接口规范文档 如何发请求的要求文档,获取什么响应内容的说明文档(相当于菜单)...
AT32 雅特力CAN详细使用说明配置细则
CAN 过滤器使用说明 CAN 过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上"过滤"一下,能通 过的报文是有效报文,收进相关联 FIFO(FIFO0 或 FIFO1),不能通过的…...
【机器学习】集成方法---Boosting之AdaBoost
一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型(也称为“基学习器”或“弱学习器”)的输出结果进行集成,以获得比单一模型更好的泛化性…...
AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践
系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...
鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式
本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式(Operating mode)又叫处理器模式(Processor mode),是 CPU 运行的重要参数,决定着处理器的工作方式,比如如何裁决特权级别和报告异…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
