区块链的三种共识机制——PoW、PoS和DPoS原理

区块链的核心是去中心化网络的信任机制,而共识机制是实现这一目标的关键。共识机制可分为两个阶段:(1)提出共识内容(2)对内容达成共识(遵循最长链原则)。三种主流的共识机制主要有工作量证明PoW(Proof of Work),权益证明PoS(Proof of Stake),委托权益证明机制DPoS(Delegate Proof of Work),除了了解其基本内容,还需要学习其技术实现。

一、工作量证明(PoW)

PoW这个概念是1993年提出的,最早的用途不是用来实现加密货币的,而是用来防止垃圾邮件的。人们开始在使用电子邮件的时候会收到垃圾邮件的骚扰,如果发送垃圾邮件没有成本,那么发送一百万封电子邮件是很轻松的。所以人们想到了如果让每一封邮件发送时都有一个微小的成本,那么鉴于成本,垃圾邮件就会被很大程度遏制了。而PoW就是为了服务这个目的而产生的。基本过程就是邮件接收方先广播一道题出去,邮件发送方在发邮件时必须附带上这道题的答案,这样邮件才会被接受,否则就会被认为是垃圾邮件。

同理我们引入PoW机制下的哈希函数,实际上就是如何用哈希函数给计算机出题,由于计算机的解题速度很快,因此出的题目对于计算机“有挑战性”,我们知道哈希函数最大的特点是如果输入的数据哪怕有微小的区别,输出的结果也会完全不同,这点保证了无法通过输出结果去反向运算输入,也没有办法缩小输入的可能性范围,另一方面,如果输入相同则运算得到的输出哈希一定相同。这一点保证了任何人都可以在一瞬间内验证最终的哈希值是否正确。

比特币系统的一个众所周知的特点,就是很多矿工参与挖矿,但是每十分钟网络上产生的比特币却不是所有矿工均分的,而是谁先抢到记账权,就把所有的比特币奖励给谁。记账权的抢夺就是计算能力的比拼。比特币的PoW机制,宏观上就是要达成的就是判定哪个矿工的运算能力最强。这道题用到了哈希函数,但是系统要的答题结果也就是所谓的PoW,不是哈希函数的输出,而是输入。

为什么会这样设置呢?因为从输入计算哈希输出,是一个非常直白的过程,计算机很擅长这样的工作,不能明显地体现出矿工之间计算能力的差异,而且系统必须要给全网广播一个超级大的数,这样才能比拼计算能力,涉及到网速等延迟问题,也不是很公平。所以比特币系统的做法是反过来,给全网广播一个哈希值,让大家消耗自身算力尝试不同的随机数(nonce)找到它的输入。因为前面提到的哈希函数独特的特点,矿工们要想找到输入,只能每次选一个数不断尝试瞎蒙,运算它的输出和系统广播的哈希值对比,如果不符合,换下一个数继续,这显然是一个概率问题,在相同的时间内谁能尝试的次数多,大概率他会首先拿到正确的输入,这就是PoW的基本原理了。

当然在实际中,比特币系统是每十分钟记账一次,也就是需要所有矿工每十分钟比一次,但是在十分钟内想计算出一个精确哈希值的输入是根本不可能的。所以系统每次给定的是一个哈希值范围。具体规则就是,只要保证运算出的哈希值小于某个特定的数值,就认为提交的PoW是正确的,也就是说矿工们要尽力找到哈希值前几位0越多越好(哈希值越小)对应的输入。多年来矿工们的算力也有了很大提高,但是为什么比特币系统还是能保证算出PoW的时间大致保证在十分钟左右呢?答案就是系统可以通过调整0的个数来改变出题难度,虽然矿工们算力提高了,但是题也变得更难,所以需要花费的解题时间就会保持相对稳定。最快得到结果的矿工会把把自己的结果发送到全网(提交新创建的区块),其他矿工都会验证结果是否符合有效,如果有效,则每个节点都在自己的区块链数据副本中添加这个有效区块,开始新处理新的交易数据,努力创建新区块。如果无效,则会被丢弃,矿工们继续做手头工作。

PoW共识的优点就是安全性高,随着有效区块的不断积累,恶意节点需要极高的算力(超过总体的51%)来完成双花攻击,成本高昂。也存在着消耗算力和电力大的缺点。

二、权益证明(PoS)

在PoW中通过消耗大量的算力来争夺记账权,但是在每一轮共识中,只有一个节点得到了记账权,其他节点的相当于是“陪跑”,算了被浪费了。而权益证明PoS于2013年首次提出被应用到了PeerCoin系统中,可以解决资源浪费的问题。

PoS 通过持有代币的数量和时间(即“权益”)决定记账权,​​权益越高,被选中验证交易的概率越大。

具体的技术实现是每个节点在每一轮共识中只需要计算一次Hash,当拥有的权益越多,满足Hash目标的机会越大,获得记账权的机会越大。可以说,PoS是一个资源节省的共识协议。PeerCoin定义的权益除了与代币数量有关,引入了币龄(Coin Age),100个代币持有两天,币龄为200,因此持有的代币数量越多,时间越长,获得记账权的机会越大。

PoS的优点是​​节能高效​​:无需大量计算,能耗降低99%以上;缺点就是存在​​“富人更富”问题​​:代币越多,收益越高,可能导致财富集中;
​​改进方案​​:以太坊2.0引入​​Casper协议​​,结合质押惩罚机制;Cardano采用分层PoS提升可扩展性。这里提到的一些前沿的技术先挖个坑,后面再补充。

三、委托权益证明机制(DPoS)

DPoS是由PoS演化而来的,持币用户通过抵押代币获得选票,以投票的方式选出若干的节点作为区块生产者,代表持币用户履行产生区块的义务。用户投票最多的若干节点成为出块节点,以EOX为代表是21个节点。在每一轮共识中,轮流选出一个出块节点产生区块,并广播给其他的出块节点进行验证。若节点在规定时间内无完成出块,或产生无效区块,就会被取消资格,取而代之的事重新投票选取新的出块节点。

 

值得一提的是,EOS初期的DPoS的共识方法才采用的是最长链共识,意味着与PoW一样区块没有绝对的最终性,交易的不可逆需要等待多个区块确认。在18年时,EOS使用拜占庭共识代替最长链共识,名为BFT-DPoS。 

优点是高吞吐量​​:区块生成速度快(EOS可达3000+ TPS);​​低延迟​​:适合高频交易场景

缺点是​​中心化争议​​:超级节点数量少,权力集中;贿选风险​​:代币大户可能操控选举。

四、三种共识对比

  1. ​公有链场景​​:注重去中心化与安全性时,PoW或PoS更合适;
  2. ​联盟链/高频应用​​:追求效率时,DPoS或PBFT更优;
  3. ​新兴方向​​:混合机制(如Hedera Hashgraph)或分片技术(如Zilliqa)正在探索更高性能的解决方案。

 

 

 

 

 

 

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89009.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 和 Vue的自定义Hooks是如何实现的,如何创建自定义钩子

目的:将公共逻辑提取出来,类似于 mixin,解决了mixin的设计缺陷。 React 和 Vue 自定义 Hooks 实现对比 React 自定义 Hooks React 的自定义 Hooks 是 JavaScript 函数,它们以 use 开头,可以调用其他 Hooks。 基本规则 …

构建高效事件驱动架构:AWS S3与SQS集成实践指南

引言 在现代云架构中,事件驱动的设计模式越来越受到开发者的青睐。AWS S3与SQS的集成为我们提供了一个强大的事件处理机制,能够在文件上传、删除或修改时自动触发后续的业务逻辑。本文将详细介绍如何配置S3事件通知到SQS队列,并分享实际项目中的最佳实践。 架构概述 S3事…

C++ -- STL-- List

////// 欢迎来到 aramae 的博客,愿 Bug 远离,好运常伴! ////// 博主的Gitee地址:阿拉美 (aramae) - Gitee.com 时代不会辜负长期主义者,愿每一个努力的人都能达到理想的彼岸。1. list的介绍及使用 2. list的深度剖…

rt-thread 线程间同步方法详解

rt-thread 线程间同步方法详解一、什么是线程间同步线程同步的必要性线程同步的挑战二、同步方式1、信号量信号量工作机制信号量的管理方式信号量的创建与删除信号量的获取与释放信号量的典型应用场景信号量的注意事项2、互斥量互斥量工作机制互斥量的特性互斥量的操作接口互斥…

Spring Boot + Vue2 实现腾讯云 COS 文件上传:从零搭建分片上传系统

目录 一、项目目标 二、腾讯云 COS 基本配置 1. 创建存储桶 2. 获取 API 密钥 3. 设置跨域规则(CORS) 三、后端(Spring Boot)实现 1. 依赖配置 2. 配置腾讯云 COS(application.yml) 3. 初始化 COS…

使用 Java 获取 PDF 页面信息(页数、尺寸、旋转角度、方向、标签与边框)

目录 引言 一、安装和引入PDF处理库 二、获取 PDF 页数 三、获取页面尺寸(宽高) 四、获取页面旋转角度 五、判断页面方向(横向 / 纵向) 六、获取页面标签 七、获取页面边框信息 八、总结 引言 了解 PDF 页面属性是我们在…

基于 AI 的大前端安全态势感知与应急响应体系建设

大前端应用(Web、APP、小程序)作为用户交互的入口,面临日益复杂的安全威胁:从传统的 XSS 攻击、CSRF 伪造,到新型的供应链投毒、AI 驱动的自动化爬虫,再到针对业务逻辑的欺诈攻击(如薅羊毛、账号…

Java 与 MySQL 性能优化:MySQL全文检索查询优化实践

文章目录一、引言二、InnoDB引擎下的全文检索功能详解2.1 全文索引的基本概念与原理2.2 全文索引的创建与管理2.3 全文检索的三种查询模式2.4 中文全文检索的挑战与解决方案三、CMS 场景下的全文检索性能瓶颈分析3.1 索引构建与维护开销3.2 查询性能瓶颈3.3 锁机制与并发性能问…

应用软件格式渗透 利用word去渗透(MS10-087)

用到的靶机为:WinXP漏洞原理:一、漏洞触发机制与核心组件 漏洞根源:RTF文件解析逻辑缺陷 触发组件:Microsoft Word的RTF(Rich Text Format)解析引擎,具体涉及 mso.dll 模块中的 路径规范化函数&…

解密AWS VPC路由表:显式关联与隐式关联,谁决定了网络出口?

大家好,今天我们来聊一个在 AWS 云计算世界里既基础又关键的话题:VPC 路由表。 很多刚接触 AWS 的朋友,在配置网络时可能会遇到这样的困惑:为什么我的 EC2 实例无法访问互联网?为什么某些子网的网络策略和其他子网不一…

LeetCode题解---<203.移除链表元素>

文章目录题目代码及注释关键点题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,…

【JavaScript高级】构造函数、原型链与数据处理

目录构造函数和原型构造函数实例成员和静态成员构造函数的问题构造函数原型 prototype对象原型 \_\_proto\_\_constructor 构造函数构造函数、实例、原型对象三者之间的关系原型链JavaScript 的成员查找机制(规则)原型对象的this指向扩展内置对象继承cal…

项目进度与预算脱节,如何进行同步管理

项目进度与预算脱节会导致资源浪费、成本超支和项目延期。进行同步管理的方法包括:建立统一的项目进度预算管理体系、实施实时监控与反馈机制、采用项目管理工具辅助同步管理。尤其是实施实时监控与反馈机制,通过持续监测进度与预算的匹配情况&#xff0…

TCP半关闭

理解TCP半关闭:像水管一样的网络连接控制 从全关闭到半关闭:为什么需要这种机制? 想象你和朋友正在通电话讨论一个重要项目: 全关闭:就像突然挂断电话,双方都无法再说话半关闭:你说"我说完…

衡石科技技术手册--仪表盘过滤控件详解

过滤控件说明 过滤控件 的定义 过滤控件用于在仪表盘中过滤图表数据,分为仪表盘内过滤控件和全局过滤控件。 过滤控件结构说明 字段类型描述uidSTRING过滤控件唯一识别 idappIdLONG过滤控件所属的应用 iddataAppIdLONG字段来源是数据包时的数据包 iddashboar…

ASP.NET Core中数据绑定原理实现详解

在ASP.NET Core 中,数据绑定是将 HTTP 请求中的数据(如表单、查询字符串、请求体等)映射到控制器动作方法参数或模型对象的过程。以下将从原理、核心组件、执行流程及关键机制等方面详细解析其实现逻辑。 一、数据绑定的核心原理与组件 1. 数…

牛客:HJ24 合唱队[华为机考][最长递增子集][动态规划]

学习要点 求最长递增字列求最长递减子列 题目链接 合唱队_牛客题霸_牛客网 题目描述 解法&#xff1a;动归求最长递增子列 #include <iostream> #include <vector> using namespace std;int main() {int n;while (cin >> n) {// 输入的数组int tmp;vect…

C语言的相关基础概念和常用基本数据类型

1.相关概念变量与常量的定义常量&#xff1a;在程序运行中其值不能改变的量。变量&#xff1a;在程序运行中其值可以改变的量。存储器的区分 RAMROM中文名易失存储器不易失存储器特点掉电丢失数据&#xff0c;但存取快掉电不丢失数据&#xff0c;但存取幔标识符标识符只能…

Spring boot整合dubbo+zookeeper

Spring boot整合dubbozookeeper 下文将简述springboot整合dubbozookeeper实现apiproviderconsumer模式&#xff0c;Api用于定于interface,provider和consumer依赖Api,provider实现api接口&#xff0c;consumer调用provider。 spring boot版本&#xff1a;3.5.3 jdk版本&#xf…

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found

简介&#xff1a;在复现 VLM-R1 项目并尝试将其中的 GRPO 算法应用到自己的任务时&#xff0c;按照官方文档配置好环境后&#xff0c;运行过程中遇到了一个非常离谱的错误&#xff1a; ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found 这个问题极…