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比较

POWPOS
特点概括多劳多得持有越多,获得越多
门槛只要在硬件支持挖矿算法的条件下安装了相关软件,那么就能进入到挖矿算力的竞争中必须要在区块链网络上投入一定量的token(你投入的token就相当于你入股网络的股份,当然你拥有这些token的在区块链网络上的所有权。这就像入股一个公司一样,在特定的入股条件下给予持股人相应的利息。)

代表币种

ADA、ONT、ATOM等。


为什么PoS更加安全?

在指定时间内,在POS体系中,即使你拥有了全球51%的算力,也未必能够进行51%攻击,因为,有一部分的货币并不是挖矿产生的,而是由利息产生(利息存放在POS区块中),这要求攻击者还需要持有全球超过51%的货币量。这大大提高了51%攻击的难度。
在PoS机制下,持有币越多,越容易获得记账权,接近于赢家通吃的感觉,但持有的币越多,越接近于一个诚实的节点,因为破坏整个网络带来的损失也越大,即假设富人不会做恶,毕竟做恶的目标是钱,若你富有,自然就没有做恶的动力。


参考

区块链共识机制技术二——POS(权益证明)共识机制

区块链三大算法之一丨股权权益证明算法(PoS)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 动态操作定时任务(启动、停止、修改执行周期)增强版

前段时间编写了一篇博客SpringBoot 动态操作定时任务&#xff08;启动、停止、修改执行周期&#xff0c;该篇博客还是帮助了很多同学。 但是该篇博客中的方法有些不足的地方&#xff1a; 只能通过前端控制器controller手动注册任务。【具体的应该是我们提前配置好我们的任务&am…

selenium(4)-------自动化测试脚本(python)

webdriverAPI 一)定位元素的方式&#xff0c;必问 1.1)id来定位元素&#xff0c;前提是元素必须具有id属性&#xff0c;因为有的元素是没有id的 1.2)name&#xff0c;元素必须有name&#xff0c;并且必须全局唯一 1.3)tagname&#xff0c;元素是一定有的&#xff0c;但是必须全…

HTTP 缓存的工作原理

缓存是解决http1.1当中的性能问题主要手段。缓存可能存在于客户端浏览器上&#xff0c;也可以存在服务器上面&#xff0c;当使用过期缓存可能给用户展示的是错误的信息而导致一些bug。 HTTP 缓存&#xff1a;为当前请求复用前请求的响应 • 目标&#xff1a;减少时延&#xff1…

Python+Yolov8目标识别特征检测

Yolov8目标识别特征检测如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<Yolov8目标识别特征检测>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐…

3分钟看完-丄-Python自动化测试【项目实战解析】经验分享

目录&#xff1a;导读 引言 自动化测试 背景 测试团队 测试体系发展 测试平台 自动化测试现状 现状一&#xff1a; 现状二&#xff1a; 现状三&#xff1a; 现状四&#xff1a; 现状五&#xff1a; 现状六&#xff1a; 失败的背景 失败的经历 失败总结 引言 内…

Java多线程系列--synchronized的原理

原文网址&#xff1a;Java多线程系列--synchronized的原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java的synchronized的原理。 反编译出字节码 Test.java public class Test {private static Object LOCK new Object();public static int main(String[] args) {synchro…

动态矢量瓦片缓存库方案

目录 前言 二、实现步骤 1.将数据写入postgis数据库 2.将矢量瓦片数据写入缓存库 3.瓦片接口实现 4.瓦片局部更新接口实现 总结 前言 矢量瓦片作为webgis目前最优秀的数据格式&#xff0c;其主要特点就是解决了大批量数据在前端渲染时出现加载缓慢、卡顿的问题&#xff0…

LeetCode 112. 路径总和

LeetCode 112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶…

Python笔记 -- 文件和异常

文章目录1、文件1.1、with关键字1.2、逐行读取1.3、写入模式1.4、多行写入2、异常2.1、try-except-else2.2、pass1、文件 1.1、with关键字 with关键字用于自动管理资源 使用with可以让python在合适的时候释放资源 python会将文本解读为字符串 # -*- encoding:utf-8 -*- # 如…

Linux操作系统基础的常用命令

1&#xff0c;Linux简介Linux是一种自由和开放源码的操作系统&#xff0c;存在着许多不同的Linux版本&#xff0c;但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中&#xff0c;比如手机、平板电脑、路由器、台式计算机。1.1Linux介绍Linux出现于1991年&#xff0c…

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中&#xff0c;有时需要达到多种填充效果&#xff0c;而CAD中大量的二维填充图案&#xff0c;便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…

Java for循环嵌套for循环,你需要懂的代码性能优化技巧

前言 本篇分析的技巧点其实是比较常见的&#xff0c;但是最近的几次的代码评审还是发现有不少兄弟没注意到。 所以还是想拿出来说下。 正文 是个什么场景呢&#xff1f; 就是 for循环 里面还有 for循环&#xff0c; 然后做一些数据匹配、处理 这种场景。 我们结合实例代码来…

SpringBoot+WebSocket实时监控异常

# 写在前面此异常非彼异常&#xff0c;标题所说的异常是业务上的异常。最近做了一个需求&#xff0c;消防的设备巡检&#xff0c;如果巡检发现异常&#xff0c;通过手机端提交&#xff0c;后台的实时监控页面实时获取到该设备的信息及位置&#xff0c;然后安排员工去处理。因为…

Java实现调用第三方相关接口(附详细思路)

目录1.0.简单版2.0.升级版2-1.call.timeout()怎么传入新的超时值2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思&#xff0c;具体含义3.0.进阶版3-1.java.net.SocketTimeoutException: 超时如何解决4.0.终极版1.0.简单版 以下是一个使用 Java 实际请求“第三方”的简单示例代…

一眼看破五花八门的链表结构

文章目录&#x1f4d5;一&#xff1a;五花八门的链表结构&#x1f4d6;链表与数组的简单对比&#x1f4d6;单链表&#x1f4d6;循环链表&#x1f4d6;双向链表&#x1f4d5;二&#xff1a;链表VS数组性能大比拼&#x1f47f;最后说一句&#x1f431;‍&#x1f409;作者简介&am…

数据挖掘(2.1)--数据预处理

一、基础知识 1.数据的基本概念 1.1基础知识 数据是数据对象(Data Objects)及其属性(Attributes)的集合。 数据对象(一条记录、一个实体、一个案例、一个样本等)是对一个事物或者物理对象的描述。 数据对象的属性则是这个对象的性质或特征&#xff0c;例如一个人的肤色、眼球…

GPT-4 性能炸天:10 秒做出一个网站,在考试中击败 90% 人类

一、GPT-4&#xff0c;吊打ChatGPT&#xff01; 一觉醒来&#xff0c;万众期待的 GPT-4&#xff0c;它来了&#xff01; OpenAI老板Sam Altman直接开门见山地介绍道&#xff1a;这是我们迄今为止功能最强大的模型&#xff01; 二、GPT-4&#xff0c;新功能一览 究竟有多强&am…

Python人脸识别

#头文件&#xff1a;import cv2 as cvimport numpy as npimport osfrom PIL import Imageimport xlsxwriterimport psutilimport time#人脸录入def get_image_name(name):name_map {f.split(.)[1]:int(f.split(.)[0]) for f in os.listdir("./picture")}if not name…

Java的jar包打包成exe应用

将springboot项目使用maven打出的jar包&#xff0c;打成windows平台下exe应用程序包&#xff08;自带jre环境&#xff09;。 工具&#xff1a;1、exe4j 2、Inno Setup 工具放到网盘&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1ZHX8P7u-7GBxaC6uaIC8Ag 提取码&#x…

SpringBoot-核心技术篇

技术掌握导图 六个大标题↓ 配置文件web开发数据访问单元测试指标指控原理解析 配置文件 1.文件类型 1.1、properties 同以前的properties用法 1.2、yaml 1.2.1、简介 YAML是 “YAML Aint Markup Language”&#xff08;YAML不是一种标记语言&#xff09;的递归缩写。在…