共识算法初探
共识机制的背景
加密货币都是去中心化的,去中心化的基础就是P2P节点众多,那么如何吸引用户加入网络成为节点,有那些激励机制?同时,开发的重点是让多个节点维护一个数据库,那么如何决定哪个节点写入?何时写入?一旦写入,又怎么保证不被其他的节点更改(不可逆)?回答这些问题的答案,就是共识机制。
容错性:目前的客户-服务商模型一般是中心化的网络形态
而区块链提倡的是无中心形态,网络中的每个节点都是平等的,因此天生具有良好的容错性,如下图:

而为了保证众多非中心节点的数据同步/安全,如何让大部分节点达成一致?
共识机制应运而生
公有链代表算法:
1.PoW
**(Proof of Work):工作量证明机制. 可以理解为按劳分配. **
- 相对公平/公正,但耗能巨大
- 51%算力风险
- 比特币 以太坊 莱特币 狗狗币
2.PoS
(Proof of Stake):股权证明机制。
- 根据币龄(持有代币+持有时间)影响共识
- 一旦权益用来进行签约区块,币龄将清零,避免规模经济影响
- 节能
- 以太坊Next Peercoin Nxt

3.PoB
焚烧证明 - 通过焚烧代币确认领导地位,相当于PoW
4.DPoW
延迟工作量证明 - 类似于PoB,挖矿获得wood,并通过收集woods影响下一次的决策
- 小矿工也有春天
5.DPoS
(Delegated Proof of Stake):授权股权证明机制
- 类似于人民代表大会制度,但区域划分是灵活/动态的
- 节能/快速/高校 出块0.5s
- EOS BitShares Lisk Ark
小结
- POW 工作量证明机制. 类似于按劳分配
- POS 股权证明机制. 持有股票的人, 就有对应的权利, 持有的越多, 权利越大 .
- DPOS 授权股权证明机制. 类似于董事会. 董事会成员数量有限, 由大家选举产生. 被选中的董事会成员可以行使权利.
联盟链代表算法:
6.PBFT:拜占庭容错算法
N >= 3F + 1 N为总计算机数,F为有问题的计算机总数
拜占庭容错能够容纳将近1/3的错误节点误差,IBM创建的Hyperledger就是使用了
该算法作为共识算法(<1.0)
- 其他使用者 Ripple Stella Dispatch

SBFT: Hyperledger(>1.0)采用了SBFT算法:SBFT提出了一个使用收集器(collector)的线
性通信模式。这种模式下不再将消息发给每一个replica,而是发给collector,然后
再由collector广播给所有replicas。减少client端的信息数量,增加可管理节点数
注:Zyzzyva也使用了collector,但是将collector的职责放到了client,而SBFT将collector的职责放到了replica
RBFT:在PBFT的基础上前置了propagate阶段且client需要广播消息而不是只
给“primary”,用以保证好的replica一定能够收到请求。
DBFT: 授权BFT算法
- Neo
7.Paxos:怕诺斯算法 - 分布式一致性算法
Paxos需要一半以上的节点同意即可确认,(非容错型)

(1)Proposer:接收客户的请求,代表客户向Acceptor发起提案。
(2)Acceptor:监听来自Proposer的提案,并决定是否接受和回复。
(3)Learner:提案被接受后,提交并执行提案的内容。


关键点:
1. 每个节点均会记录最大的编号并比较;如编号小于目前节点的最大编号,拒绝,反之,处理
2. 提案者在非成功的状态下,会提交新的提案
3. 提案者接收到多条不同消息时,以编号大的为准
4. 接收者接收到多条不同消息时,拒绝编号小的请求,接受编号大的请求
8.RAFT:分布式一致性算法
非容错型,通过选举Leader的方式进行决策,其余的为follower。
是Paxos的另一种选择,与 Paxos 相比,Raft 有着基本相同运行效率,但是更容易理解,也更容易被用在系统开发上。
RAFT运行中最重要的两个活动:
1. 选主 Leader Election - 只要有超过一半的节点投支持票了,Candidate 才会被选举为 Leader
特殊情况1:主掉线后,剩余的将自发选主 - 如原主回来,原主会降级为follower
特殊情况2:并发情况存在多个candidate的场景上,会持续发起vote,优先原则
2. 复制日志 Log Replication -
日志存在commit - uncommit状态,
如出现多个leader的数据不一致的情况,以commit为准重新选主,保证数据的一致性
相关文章:
共识算法初探
共识机制的背景 加密货币都是去中心化的,去中心化的基础就是P2P节点众多,那么如何吸引用户加入网络成为节点,有那些激励机制?同时,开发的重点是让多个节点维护一个数据库,那么如何决定哪个节点写入&#x…...
Oracle查询表字段名并拼接
在数据库使用中,我们常常需要,获取一张表的全部字段,那该如何查询呢? 查询表字段名 SELECT column_name FROM all_tab_columns WHERE table_name table_name; 只需将引号中的table_name,替换为自己的表名࿰…...
8 张图 | 剖析 Eureka 的首次同步注册表
注册表对于注册中心尤为重要,所有的功能都是围绕这个注册表展开。比如服务 A 要想访问服务 B,就得知道服务 B 的 IP 地址和端口号吧。如下图所示,传统的方式就是服务 A 知道了服务 B 的地址后,发送 HTTP 请求到对应的 API 地址上。…...
github ssh配置
1、生成公钥 用下面的命令生成公钥 ssh-keygen -t rsa -b 4096 -C 邮箱 生成的公钥默认在文件夹 ~/.ssh/ 下的 id_rsa.pub 2、在github配置本地的公钥 先复制本地公钥文件中的内容 cat ~/.ssh/id_rsa.pub 打开github的settings > SSH and GPG keys > new SSH key …...
c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图
单片机一般采用中断方式接受数据,这样便于及时处理 #include "reg51.h" #include "myheader.h" #define uchar unsigned char int szc[10]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int bufferc[6]{0}; int sza[6]{0x01,0x02,0x0…...
腾讯面试题算法还原【游戏安全】
本题的参考链接:https://share.weiyun.com/5Xg2b7v 其实拿到这个题我就感觉在哪里看过,后来想想是在旺仔那里看到的,以下是旺仔写的分析过程可以参考一下https://bbs.kanxue.com/thread-276536.htm 但是这个题要比旺仔拿到的那个要增加些许…...
vue + less 实现动态主题换肤功能
文章目录 前言一、前提条件1. 初始化vue项目2. 安装插件 二、新建文件夹主题theme1.style.less文件2.model.js文件3.theme.js文件theme文件夹最终效果 三、修改vue.config.js文件四、页面上的具体使用1. index.vue 页面2. index.vue 页面注意点说明3. index.vue 效果 五、在js中…...
matlab使用教程(15)—图论基础
1.有向图和无向图 1.1什么是图? 图是表示各种关系的节点和边的集合: • 节点 是与对象对应的顶点。 • 边 是对象之间的连接。 • 图的边有时会有权重 ,表示节点之间的每个连接的强度(或一些其他属性)。 这些定…...
【量化课程】02_4.数理统计的基本概念
2.4_数理统计的基本概念 数理统计思维导图 更多详细内容见notebook 1.基本概念 总体:研究对象的全体,它是一个随机变量,用 X X X表示。 个体:组成总体的每个基本元素。 简单随机样本:来自总体 X X X的 n n n个相互…...
【计算机视觉|生成对抗】改进的生成对抗网络(GANs)训练技术
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Improved Techniques for Training GANs 链接:[1606.03498v1] Improved Techniques for Training GANs (arxiv.org) 摘要 本文介绍了一系列应用于生成对抗网络(G…...
SQLyog中导入CSV文件入库到MySQL中
1.在数据库中新建一个表,设置列名(与待导入文件一致),字段可以多出几个都可以 2.右键表名,导入- - >导入使用本地加载的CSV数据 选择使用加载本地CVS数据 3.指定好转义字符,将终止设置为,号(英文状态下…...
Spring Security6 最新版配置该怎么写,该如何实现动态权限管理
Spring Security 在最近几个版本中配置的写法都有一些变化,很多常见的方法都废弃了,并且将在未来的 Spring Security7 中移除,因此又补充了一些新的内容,重新发一下,供各位使用 Spring Security 的小伙伴们参考。 接下…...
CommandLineRunner 和 ApplicationRunner 用于Spring Boot 应用启动后执行特定逻辑
CommandLineRunner 和 ApplicationRunner 都是 Spring Boot 中用于在应用启动后执行特定逻辑的接口。它们的主要区别在于传递的参数类型和执行顺序。下面我将为您详细解释它们的用途、使用案例以及执行顺序。 CommandLineRunner CommandLineRunner 是一个接口,它有…...
一、Dubbo 简介与架构
一、Dubbo 简介与架构 1.1 应用架构演进过程 单体应用:JEE、MVC分布式应用:SOA、微服务化 1.2 Dubbo 简介一种分布式 RPC 框架,对专业知识(序列化/反序列化、网络、多线程、设计模式、性能优化等)进行了更高层的抽象和…...
软考:中级软件设计师:文件管理,索引文件结构,树型文件结构,位示图,数据传输方式,微内核
软考:中级软件设计师: 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 (1…...
实践-CNN卷积层
实践-CNN卷积层 1 卷积层构造2 整体流程3 BatchNormalization效果4 参数对比5 测试效果 1 卷积层构造 2 整体流程 根据网络结构来写就可以了。 池化 拉平 训练一个网络需要2-3天的时间。用经典网络来,一些细节没有必要去扣。 损失函数: fit模型&…...
【设计模式】MVC 模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。Viewÿ…...
看康师傅金桔柠檬X国漫IP跨界出圈,打开IP合作新思路
Z世代年轻群体已经成为消费主力,其喜好和消费观念也呈现出全新态势。抓住年轻人的心,就是抓住了品牌未来的战场。 那么到底什么样的营销动作才能真正撬动年轻人? 对于互联网时代成长起来的Z世代年轻人来说,人气二次元IP无疑是能最…...
ElementUI的MessageBox的按钮置灰且不可点击
// this.$confirmthis.$alert(这是一段内容, 标题名称, {confirmButtonText: 确定,confirmButtonCLass: confirmButton,beforeClose: (action,instance,done) > {if (action confirm) {return false} else {done()}});}.confirmButton {background: #ccc !important;cursor…...
pc端与flutter通信失效, Method not found
报错情况描述:pc端与flutter通信,ios端能实现通信,安卓端通信报错 报错通信代码: //app消息通知window.callbackName function (res) {window?.jsBridge && window.jsBridge?.postMessage(JSON.stringify(res), "…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...
