web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法
web3相关学习一并收录至该博客:web3学习博客目录大全
前情衔接:web3:区块链常见的几大共识机制及优缺点
目录
- 前言
- 算法公式与原理
- 算法公式
- 运作原理
- 以Peer Coin为例
- 缺陷
- 优点
- 缺点
- 特点
- 分类
- 发展历程
- casper协议
- 1.什么是无成本利益关系问题
- 2.引入casper协议解决无成本利益关系问题
- POS和POW比较
- 代表币种
- 为什么PoS更加安全?
- 参考
前言
PoS 在主流算法一路畅通的“杀了出来”,成为了最具有挑战者。近几年,基于 PoS
共识打造的区块链项目越来越多,如目前市值保持第二的ETH也加入了 PoS。“Staking经济”在 2019
年成为了热门词语,同时也被交易所和钱包大力追捧。
PoS算法是针对PoW算法的缺点的改进。PoS由Quantum Mechanic2011年在bitcointalk首先提出,后经Peercoin和NXT以不同思路实现。PoS不像PoW那样,无论什么人,买了矿机,下载了软件,就可以参与。PoS要求参与者预先放一些token(利益)在区块链上,类似将财产存储在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。用户只有将一些利益放进链里,相当于押金,用户才会更关注,做出的决定才会更理性。同时也可以引入奖惩机制,使节点的运行更可控,同时更好地防止攻击。
算法公式与原理
算法公式
hash(block_header) =<target * coinage币龄的计算:coinage = 币的个数*币的剩余使用时间
其中,coinage表示币龄,这将意味着,币龄越大,越容易得到答案。而其中币龄的计算是通过挖矿者拥有的币乘以每个币的剩下使用时间得到,这也将意味着拥有的币越多,也越容易得到答案。这样,pos解决了pow中浪费资源的问题,同时挖矿者不可能拥有全网51%的币,所以也解决了51%攻击的问题。
运作原理
第一步:投入一定量token,成为候选矿工;
第二步:一定时间内,PoS就会在按照持币多少的顺序选择一个矿工,并给予其生成区块的权利;
第三步:被选中的矿工需要将前面发生的交易进行和工作量证明进行打包放入区块中,随后将区块广播出去,所有接收到区块的节点对区块进行验证;
第四步:如果被挑选的矿工不能顺利产生区块,PoS则会在候选矿工中再挑选一个并给予其生成区块的权力,以此类推,逐个挑选,直到能顺利产生区块;
第五步:PoS通过上述的方法进行运作,并以最长链作为主区块链进行延长。
POS机制是PPC的创新。没有“挖矿”过程,在创世区块内写明了股权分配比例,之后通过转让、交易的方式(通常就是IPO),逐渐分散到用户手里,并通过“利息”的方式新增货币,实现对节点的奖励。
简单来说,就是一个根据用户持有货币的数量和时间(币龄),发放利息的一个制度。现实中最典型的例子就是股票或者是银行存款。如果用户想要获得更多的货币,那么就要打开客户端,让它保持在线,这样就能通过“利息”来获益,同时保证网络的安全。
以Peer Coin为例
Peer Coin是最先采用PoS共识机制的数字货币。在Peer Coin中,引入了币龄和币天的概念。所谓币天,就是你持有货币的时间,币龄=币的数量比天。比如你有100个币,总共持有30天(Peer Coin中未使用至少30天的币可以参与竞争下一区块),那么你的币龄就是10030=3000,你作为币的持有者,参与下一轮竞争,过程如下:
1. 在竞争开始前,你将3000币龄作为筹码下注,并成为记账验证者,
2. PoW机制会随机的选出一个记账者,刚好是你 你开始记账并完成
3. 你的3000币龄被清0
4. 你获得利息=3000 * 5% / 365 = 0.41个币(每被清空365币龄,你将会从区块中获得0.05个币的利息)
随机选出记账者是怎么随机的?
1.一种是挑选下注多(权益大)的进行轮流记账;
2. 还有一种是跟PoW结合,在PoW中,决定旷工能否出块的一个重要因素是出块的难度,PoS将出块难度和权益挂钩,权益越大,难度越小,出块概率越大。
缺陷
从pos的实现原理和实现算法公式上分析,pos很完美的解决了pow的算力以及51%攻击问题,那么,pos是不是真的就很完美了呢?
缺陷一
我们再从pos的实现算法公式去看,币龄的计算公式中,假如一开始挖矿,只有创始区块中有币,也就是说其他矿机是没法参与挖矿的,因为币的个数这个值对他们来说永远是零,这也就是pos机制的缺陷之一:币无法发行的问题。
缺陷二
同样是从pos的实现算法公式可以分析到,币龄其实就是时间,一旦挖矿者囤积一定的币,很久很久之后发起攻击,这样他也将很容易拿到记账权,所以我们得给每个币设计一个时间上限。
缺陷三
设计时间上限后,虽然解决掉了部分挖矿者囤积币的缺陷,从公式中仍然看到还会面临一个问题,也就是币的数量这个因素还是会影响我们拿到记账权,很多挖矿者还会囤积代币,给代币造成流通上的缺陷。目前有些平台引入币龄按时间衰弱的方案来解决这一缺陷(例如RDD)。
缺陷四
接下来让我们来看看pos共识机制还有哪方面的不足,即使上面的各种缺陷都多少有些解决方案,但例如挖矿者挖一段时间后离线,此时,时间将不纳入币龄减弱计算,这样,挖矿者通过离线时间长来囤积挖矿,同样面临灾难。
优点
- 相对节能:不需要拼算力挖矿,则不需要消耗电力和资源;
- 高效:同时缩短了共识达成的时间,转账效率提高了;
- 更去中心化:相对于BTC等PoW类型的区块链产品,PoS机制的区块链产品对计算机硬件基本上没有过高的要求,人人均可“挖矿”(获得利息),不用担心算力集中导致中心化的出现(单用户通过购买获得51%的货币量,成本更高),网络更加安全有保障。
- 避免紧缩:PoW机制的区块链产品,因为用户丢失等各种原因,可能会导致通货紧缩,但是PoS机制的区块链产品按一定的年利率新增货币,可以有效避免紧缩的出现,使货币保持基本稳定。BTC之后,很多新币也采用PoS机制,很多之前采用工作量证明机制的旧币也纷纷修改协议,“硬分叉”升级为PoS机制。
缺点
- 被动形成中心化:因去中心化程度,容易出现强者恒强的情况,会导致富者越富,资源越来越集中的情况。
- 安全隐患:PoS机制实现较为复杂,容易产生安全漏洞。
- 无权益问题(Nothing at Stake):用户在PoS中可以同时在两个分叉上面下注;无论哪一个分叉后面被公认为主链,该用户都可以获得奖励而没有机会成本的损失。这样也在事实上会干扰共识的形成。
- 还是需要挖矿,本质上没有解决商业应用的痛点。
特点
- PoS需要一定量的权益作为出块的竞争资本
- PoS不需要进行大量的“无用”Hash计算
- PoS偏向“权利”集中制,但又做了均衡(出块清0)
- PoS通过股权质押对作恶者进行惩罚
- PoS提供激励机制
分类
先看三个问题
链分叉问题:PoW从经济角度,可以自然做到防止链分叉,但PoS需要精心审计,即nothing at stake问题。PoS可以采用一定的惩罚机制。
远程攻击问题:即如旷工在撤回被定的虚拟资产后,再发起之前发生的例行区块的分叉。
卡特尔形成问题:即区块链的寡头垄断,由于PoS共识算法是谁“富有”,谁就有更大的话语权,这样少数富有旷工之间的“协调”将导致寡头龙蛋的形成。
目前业内PoS共识算法的实现主要分为两类:
简单的的PoS系统
这类PoS很少甚至没有从算法的设计上来解决上述问题,一般是比较早期的PoS尝试。比较典型的例子是Peer Coin(点点币,PPC)、新星币(Nova Coin,NVC)、黑币(Black Coin,BLK)、NextCoin(未来币,NXT)等等。
精心设计的PoS系统
相对来说比较新。基于不同的实现方式,精心设计的PoS系统可以分为两种。一种是基于拜占庭容错的权益证明(BFT based PoS),比如Tendermint,另一种是基于链的权益证明(Chain based PoS),比如ETH Casper和ADA的Ouroboros。
第一类PoS系统安全性不够。第二类PoS系统目前还不够成熟,有一些处于早期运行阶段,有一些还处理讨论和测试阶段。
发展历程
由于pos存在以上四大缺陷,所以pos的发展历程经历了三个版本,即pos1.0、pos2.0以及pos3.0,其中pos2.0在算法公式中使用的是币的数量,这样,上述缺陷二到四就不再是问题,可这样以后却导致了pos共识机制面临了无成本利益的问题(即 nothing at stake),这也将意味着很容易产生分叉。
casper协议
pos的发展历程,提到为了解决其中4个缺陷,引出很多版本,也就是使用了pos2.0,也会无法避免的引发无成本利益导致很容易分叉的问题,而以太坊的共识机制就是使用的pos共识机制,那么我们来看看ETH是如何解决这个问题的?
1.什么是无成本利益关系问题
在解决无成本利益关系这个问题前,我们先来看看什么是无成本利益关系问题,因此,我们可以先模拟下这种场景,如下图所示:
假设我们处在上面的这种情况下,有一条蓝色的主链和一条红色的从主链中分出来的链条,如何禁止一个恶意的矿工在红色区块上挖矿然后推动一次硬分叉(Hard Fork)呢?
在一个工作量证明(POW)系统上,这一风险是可以被减轻的。
假设恶意矿工想在红色链上挖矿。即便她投入了她所有的哈希算力,也不会有任何矿工加入她在新链上挖矿的。每个其他人都将继续在蓝色链上挖矿,因为在最长的链上挖矿收益更为可观,而且不存在其他风险。
记住,工作量证明在资源方面是非常昂贵的。对一个矿工来说,花费许多资源在一个将会被网络拒绝的区块上是没有任何意义的。因此,链分裂在一个工作量证明系统中是被避免了的,因为攻击者将不得不付出大量金钱。
但把这种情形放到到权益证明下的时候,事情看起来就有些不一样了。
如果你是一个验证者,你可以简单地把钱投到红蓝两条链上,完全无需担心间接的不良后果。不管发生什么事,你都总是可以赢,不会失去任何东西,不管你的行为有多恶意。
这就是所谓的“无成本利益关系(Nothing at Stake)”问题,也是以太坊必须解决的问题。他们需要一种协议,可以实行权益证明,同时减少“无成本利益关系”问题。
2.引入casper协议解决无成本利益关系问题
Csaper是以太坊选择实行的PoS协议,既然有人恶意去使得我们的区块链产生分叉,那么我们想方设法去对恶意制造者加以惩罚,这样不就可以解决我们说的无成本利益关系问题了吗?Csaper协议正式奔着这样的做法去实现的,那我们来看看Csaper是如何去做的呢?
- 验证者押下一定比例的他们拥有的以太币作为保证金。
- 然后,他们将开始验证区块。也就是说,当他们发现一个可以他们认为可以被加到链上的区块的时候,他们将以通过押下赌注来验证它。
- 如果该区块被加到链上,然后验证者们将得到一个跟他们的赌注成比例的奖励。
- 但是,如果一个验证者采用一种恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,他们所有的权益都会被砍掉。
正是利用了这样的对赌协议,帮我们对恶意制造者加以了惩罚,使得我们的区块链尽量保障不会产生分叉。
POS和POW比较
POW | POS | |
---|---|---|
特点概括 | 多劳多得 | 持有越多,获得越多 |
门槛 | 只要在硬件支持挖矿算法的条件下安装了相关软件,那么就能进入到挖矿算力的竞争中 | 必须要在区块链网络上投入一定量的token(你投入的token就相当于你入股网络的股份,当然你拥有这些token的在区块链网络上的所有权。这就像入股一个公司一样,在特定的入股条件下给予持股人相应的利息。) |
代表币种
ADA、ONT、ATOM等。
为什么PoS更加安全?
在指定时间内,在POS体系中,即使你拥有了全球51%的算力,也未必能够进行51%攻击,因为,有一部分的货币并不是挖矿产生的,而是由利息产生(利息存放在POS区块中),这要求攻击者还需要持有全球超过51%的货币量。这大大提高了51%攻击的难度。
在PoS机制下,持有币越多,越容易获得记账权,接近于赢家通吃的感觉,但持有的币越多,越接近于一个诚实的节点,因为破坏整个网络带来的损失也越大,即假设富人不会做恶,毕竟做恶的目标是钱,若你富有,自然就没有做恶的动力。
参考
区块链共识机制技术二——POS(权益证明)共识机制
区块链三大算法之一丨股权权益证明算法(PoS)
相关文章:

web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法
web3相关学习一并收录至该博客:web3学习博客目录大全 前情衔接:web3:区块链常见的几大共识机制及优缺点 目录前言算法公式与原理算法公式运作原理以Peer Coin为例缺陷优点缺点特点分类发展历程casper协议1.什么是无成本利益关系问题2.引入casper协议解决…...
Linux fork()系统调用流程解析
1. fork()函数介绍(百度百科) fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork&…...

自定义软件帮助文档(qt assistant实现)
网上搜了一下,软件的帮助文档,三个都可以:https://github.com/zealdocs/zeal,https://zealdocs.org/,看看这个博客说的 https://blog.csdn.net/libaineu2004/article/details/125028913,这个也是开源的&…...
ESP32设备驱动-GPIO外部中断
GPIO外部中断 文章目录 GPIO外部中断1、GPIO中断介绍2、GPIO中断使用步骤3、软件准备4、硬件准备5、代码实现在前面的文章 ESP32设备驱动-GPIO数字输入与输出中介绍如何对GPIO进行控制操作。本文将在该基础上使用GPIO中断进一步优化按键输入。即演示如何使用GPIO中断。 1、GPI…...

【安全】nginx反向代理+负载均衡上传webshel
Nginx负载均衡下上传webshell 什么是反向代理? 正向代理就是代替客户端进行各种服务的访问以及获取;那么反向代理自然就是代替服务器进行事务处理,就是此时的代理服务器负责将用户的各项请求做一个汇总、分类,将其分发到不同的服务…...
华为OD机试 - 单词接龙(Python)| 真题,思路,知识点
单词接龙 题目 单词接龙的规则是: 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词; 如果长度也相等,则取字典序最小的单词; 已经参与接龙的单词不能重复使用; 现给定一组全部由小写字母组成的单词数组, 并指…...

[ 系统安全篇 ] window 命令禁用用户及解禁方法
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

Https 协议超强讲解(二)
浏览器是如何确保 CA 证书的合法性? 1. 证书包含什么信息? 颁发机构信息 公钥 公司信息 域名 有效期 指纹 …… 2. 证书的合法性依据是什么? 首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书&am…...

C语言的程序环境和预处理详解
目录 一、程序的翻译环境和执行环境 二、编译和链接详解 2、1 翻译环境 2、2 编译过程详解 2、3 执行环境 三、预处理详解 3、1 预定义符号 3、2 #define 3、2、1 #define定义的符号 3、2、2 #define 定义宏 3、2、3 #define 替换规则 3、3 宏和函数的对比 3、4 条件编译 3、5…...

3.JUC【Java面试第三季】
3.JUC【Java面试第三季】前言推荐3.JUC06_闲聊AQS面试1.题目说明07_可重入锁理论2.可重入锁说明“可重入锁”这四个字分开来解释可重入锁的种类08_可重入锁的代码验证-上09_可重入锁的代码验证-下3.LockSupport10_LockSupport是什么LockSupport是什么11_waitNotify限制线程等待…...

Linux防火墙(7)
实验目的 通过该实验了解Linux防火墙iptables实现原理,掌握iptables基本使用方法,能够利用iptables对操作系统进行加固。预备知识基本原理 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,具有完成…...
2.11整理(2)(主要关于teacher forcing)
teacher forcing 训练迭代过程早期的RNN预测能力非常弱,几乎不能给出好的生成结果。如果某一个unit产生了垃圾结果,必然会影响后面一片unit的学习。RNN存在着两种训练模式(mode): free-running mode:就是常见的那种训练网络的方式: 上一个sta…...

亿级高并发电商项目-- 实战篇 --万达商城项目 三(通用模块、商品服务模块、后台API模块、IDEA忽略文件显示等开发工作
专栏:高并发项目 👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框…...

IDEA下java程序的调试(简易实例图示版)
在线排版不太好看,介意的读者可下载word下来看:https://download.csdn.net/download/xijinno1/87441301IDEA下java程序的简单调试-System.out.println首先本次进行调试的一个程序是实现从1累加到100的功能,是在IDEA下进行编写的。如图所示&am…...

动态规划算法
1.应用场景-背包问题 背包问题:有一个背包,容量为 4 磅 , 现有如下物品 要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复 2.动态规划算法介绍 动态规划(Dynamic Programming)算法的核心思想是&…...

nacos的单机模式和集群模式
文章目录 目录 文章目录 前言 一、nacos数据库配置 二、单机模式 三、集群模式 四、使用nginx集群模式的负载均衡 总结 前言 一、nacos数据库配置 在数据库中创建nacos_config 编码格式utf8-mb4的数据库 把上面的数据库文件导入数据库 在 配置文件中添加如下 spring.datasour…...

Spring Boot 整合定时任务完成 从0 到1
Java 定时任务学习 定时任务概述 > 定时任务的应用场景非常广泛, 如果说 我们想要在某时某地去尝试的做某件事 就需要用到定时任务来通知我们 ,大家可以看下面例子 如果需要明天 早起,哪我们一般会去定一个闹钟去通知我们, 而在编程中 有许许多多的…...
Dialogue Transformers
Abstract 本文介绍了一种基于 Transformer 架构的 对话策略,其中自注意力机制被应用于对话轮次(dialogue turns)的序列上。近期的一些工作使用层次化的循环神经网络(hierarchical recurrent neural networks)在对话上下文中对多个话语(utterances)进行编码,但是我们认…...

【遇见青山】项目难点:缓存击穿问题解决方案
【遇见青山】项目难点:缓存击穿问题解决方案1.缓存击穿互斥锁🔒方案逻辑过期方案2.基于互斥锁方案的具体实现3.基于逻辑过期方案的具体实现1.缓存击穿 缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效…...
2023Flag具体实施计划(短期)
重新看了flag ,要做的事情太多,太杂,上周一周时间都在纠结和琢磨,该怎么下手。如何达成小目标。特别是沟通,汇报,演讲能力, 以及整体体系化的思维能力的训练。如何做到多思考,而不是瞎搞。这边重…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
前端工具库lodash与lodash-es区别详解
lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...
02-性能方案设计
需求分析与测试设计 根据具体的性能测试需求,确定测试类型,以及压测的模块(web/mysql/redis/系统整体)前期要与相关人员充分沟通,初步确定压测方案及具体的性能指标QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组&…...