PoS算法

文章目录

  • 前言
  • 一、PoS——权益证明
  • 二、go语言简单实现


前言

提示:以下是本篇文章正文内容,下面案例可供参考

一、PoS——权益证明

  • PoS 是什么

⚫ PoS(Proof of Stake)译为权益证明,是一种在公链中的共识算法,可作为 PoW 算
法的一种替换
⚫ 基于权益证明的数字货币中,下一个区块的选择是根据不同节点的股份和时间进行
随机选择的

  • PoS 解决的问题

⚫ PoS 的设计理念,来自于对比特币危机的思考,比特币的区块产量每 4 年会减半,
在不久的未来,随着比特币区块包含的产量越来越低,大家挖矿的动力将会不断下
降,矿工人数越来越少,整个比特币网络有可能会逐渐陷入瘫痪
⚫ 其次,若干年后,随着矿工人数的下降,比特币很有可能被一些高算力的人、或团
队、或矿池,进行 51%攻击,导致整个比特币网络崩溃

  • 3.为什么会出现PoS?

​ 在比特币系统中采用了PoW(工作量证明)算法,PoW其实就是由所有的节点相互竞争,提交一个难于计算但是容易验证的计算结果,任何节点都可以验证这个这个结果的正确性,验证通过即算这个节点完成了大量的计算工作。
​ 然而PoW机制存在明显的弊端。 一是算力不公平,矿场的竞争力比单个节点大,还有就是随着硬件的发展,特别是量子计算机的出现,可能几秒就破解了Hash。 二是PoW算法太浪费了,比特币网络每秒可完成数百万亿次SHA256计算, 但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有更多实际或科学价值。

​ 鉴于以上问题,POS股权证明诞生了。

二、go语言简单实现

package mainimport ("crypto/sha256""encoding/hex""fmt""math/rand""strconv""time"
)//实现PoS算法//定义区块
type Block struct {Index     intTimeStamp stringBPM       intHashCode  stringPrevHash  string//区块验证者Validator string
}//创建区块链,数组
var Blockchain []Block//生成新的区块
//address是矿工地址
func GenerateNextBlock(oldBlock Block, BPM int, address string) Block {var newBlock BlocknewBlock.Index = oldBlock.Index + 1newBlock.TimeStamp = time.Now().String()newBlock.PrevHash = oldBlock.HashCodenewBlock.BPM = BPM//挖矿节点地址newBlock.Validator = address//哈希,计算newBlock.HashCode = GenerateHashValue(newBlock)return newBlock
}//计算哈希
func GenerateHashValue(block Block) string {var hashcode = block.PrevHash +block.TimeStamp + block.Validator +strconv.Itoa(block.BPM) + strconv.Itoa(block.Index)//哈希var sha = sha256.New()sha.Write([]byte(hashcode))hashed := sha.Sum(nil)return hex.EncodeToString(hashed)
}//网络上的全节点
type Node struct {//记录有多少个币tokens int//节点地址address string
}//存放几个节点,有几个用户在参与
var n [2] Node//用于记录挖矿地址
var addr [8000] stringfunc main() {//测试//var firstBlock Block//myBlock := GenerateNextBlock(firstBlock,1,"abc")//fmt.Println(myBlock)//创建两个参与者//传入持有的币和节点地址n[0] = Node{tokens: 3000, address: "abc123"}n[1] = Node{tokens: 5000, address: "bcd321"}//以下为PoS共识算法var count = 0//外出循环节点个数for i := 0; i < len(n); i++ {for j := 0; j < n[i].tokens; j++ {addr[count] = n[i].addresscount++}}//设置随机种子rand.Seed(time.Now().Unix())//通过随机值[0,6000)var rd = rand.Intn(6000)println(rd)//随机选矿工var adds = addr[rd]//创建创世区块var firstBlock BlockfirstBlock.BPM = 100firstBlock.PrevHash = "0"firstBlock.TimeStamp = time.Now().String()firstBlock.Validator = "abc123"firstBlock.Index = 1firstBlock.HashCode = GenerateHashValue(firstBlock)//将区块加到区块链Blockchain = append(Blockchain, firstBlock)//第二个区块//让addsvar secondBlock = GenerateNextBlock(firstBlock, 200, adds)Blockchain = append(Blockchain, secondBlock)fmt.Println(Blockchain)
}

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

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

相关文章

mysql 内存 256m_解决mySQL占用内存超大问题

为了装mysql环境测试&#xff0c;装上后发现启动后mysql占用了很大的虚拟内存&#xff0c;达8百多兆。网上搜索了一下&#xff0c;得到高人指点my.ini。再也没见再详细的了..只好打开my.ini逐行的啃&#xff0c;虽然英文差了点&#xff0c;不过多少M还是看得明的^-^更改后如下&…

scrapy 教程

------------------------------------------------------------------------------------------ scrapy 中文文档 和 scrapy 英文文档参照看。因为中文文档比较老&#xff0c;英文文档是最新的。 scrapy 英文文档&#xff1a;https://doc.scrapy.org/en/latest scrapy 中文文档…

Java加密与解密的艺术~DigestInputStream

import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.security.DigestInputStream; import java.security.MessageDigest;/*** TODO 在此写上类的相关说明.<br>* author gqltt<br>* version 1.0.0 2021年11月29日<b…

智慧停车产业链市场全透析

来源&#xff1a;慧天地最近&#xff0c;Goodwin调查发现&#xff0c;在城市地区&#xff0c;接近30%的交通拥堵源自于司机寻找停车位。据称&#xff0c;到2020年&#xff0c;将会有20亿的汽车在公路上跑着&#xff0c;这就意味着&#xff0c;届时汽车的数量将比目前多了7.7亿辆…

语音合成与识别技术在C#中的应用 (转 )

语音合成与识别技术在C#中的应用 (转 &#xff09; 我们要想实现中文发音或中文语音识别&#xff0c;必需先安装微软的Speech Application SDK&#xff08;SASDK&#xff09;&#xff0c;它的最新版本是 SAPI 5.1 他能够识别中、日、英三种语言&#xff0c;你可以在这里下载&am…

left join 和join区别_sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇

Object中的wait、notify、notifyAll&#xff0c;可以用于线程间的通信&#xff0c;核心原理为借助于监视器的入口集与等待集逻辑通过这三个方法完成线程在指定锁&#xff08;监视器&#xff09;上的等待与唤醒&#xff0c;这三个方法是以锁&#xff08;监视器&#xff09;为中心…

DPoS算法

文章目录前言一、DPoS——股份授权证明二、go语言简单实现前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、DPoS——股份授权证明 DPoS 基本原理 ⚫ PoS 机制的加密货币&#xff0c;每个节点都可以操作区块&#xff0c;并按照个人的持股比例获…

深度干货!值得精读的2018自动驾驶行业发展报告

来源&#xff1a; 机器人大讲堂摘要随着科技革命的深入推进&#xff0c;人类社会进入万物互联、万物智能的智能化新时代。自动驾驶技术在人工智能和汽车行业的飞速发展下逐渐成为业界焦点。自动驾驶技术是汽车产业与高性能计算芯片、人工智能、物联网等新一代信息技术深度融合的…

TCP 连接状态

TCP十一种状态 全部11种状态 1. 客户端独有的&#xff1a;&#xff08;1&#xff09;SYN_SENT &#xff08;2&#xff09;FIN_WAIT1 &#xff08;3&#xff09;FIN_WAIT2 &#xff08;4&#xff09;CLOSING &#xff08;5&#xff09;TIME_WAIT 。 2. 服务器独有的&#xff1a…

网络基础:ACL访问控制例表

暂无&#xff0c;到时更新 转载于:https://www.cnblogs.com/Ewin/archive/2008/11/02/1325061.html

Java加密与解密的艺术~MD算法实现

MD系列算法的实现是通过MessageDigest类来完成的&#xff0c;如果需要以流的处理方式完成消息摘要&#xff0c;则需要使用DigestInputStream和DigestOutputStream。 MD4 package org.zlex.chapter06_1_2;import java.security.MessageDigest; import java.security.Security;i…

ubuntu mysql5.7配置_ubuntu系统mysql5.7忘记/设置root的坑

关于修改root的密码有很多笔记了&#xff0c;但是在mysql5.7下面无效&#xff0c;后来找到同样是5.7的笔记&#xff0c;才真正修改好。现在记录下来。第一步&#xff0c;修改mysql配置文件让Mysql跳过认证我的mysql是通过apt install mysql-server 安装的配置文件目录/etc/mysq…

密码学知识

文章目录密码学一、对称加密体系二、模式三、非对称加密体系四、数据完整性五、数字签名六、国密算法七、SSL协议八、CA密码学 提示&#xff1a;本文包括常见的对称加密和非对称加密算法&#xff0c;hash&#xff0c;数字签名 提示&#xff1a;以下是本篇文章正文内容&#xf…

开发人员 NET

一、.NET框架 开发人员应该熟悉.NET FrameWork体系结构和基本原理&#xff0c;熟悉CLR&#xff08;公共语言运行时&#xff09;和MSIL(中间语言)&#xff0c;熟悉.NET框架中的委托、线程、序列化、集合、垃圾回收机制、反射等内容。 二、面向对象软件开发 开发人员应该熟悉面…

德勒报告:2018年全球生命科学发展趋势

来源&#xff1a;新浪医药、战略前沿技术健康生命科学&#xff08;Health life sciences&#xff09;是指应用生物学和技术来促进健康护理&#xff0c;包括制药、医疗技术、基因组学、诊断学、数字医疗等等。这一板块产品种类繁多&#xff0c;包括药品、医疗技术、诊断和数字工…

计算机的端口、端口漏洞

一、摘要 计算机 "端口" 是英文 port &#xff0c;可以认为是计算机与外界通讯交流的出口。 其中硬件领域的 端口 又称 接口&#xff0c;如&#xff1a;USB端口、串行端口等。软件领域的 端口 一般指网络中面向连接服务和无连接服务的通信协议端口&#xff0c;是一种…

Java加密与解密的艺术~SHA算法简介

SHA&#xff08;Secure Hash Algorithm&#xff0c;安全散列算法&#xff09;算法是在MD4算法的基础上演进而来的&#xff0c;通过SHA算法同样能够获得一个固定长度的摘要信息。与MD系列算法不同的是&#xff1a;若输入的消息不同则与其对应的摘要信息的差异概率很高。 这些算法…

golong mysql orm_golang orm对比

各主流的golang orm介绍当前较为主流/活跃的orm有gorm、xorm、gorose等xorm支持的数据库有&#xff1a;mysql、mymysql、postgres、tidb、sqlite、mssql、oracle事务性支持链式apihas, err : engine.Where("name ?", name).Desc("id").Get(&user)err…

Uber致人死亡或为自动驾驶肇事责任 没有判例可循

图&#xff1a;Uber自动驾驶测试车辆引发致人死亡交通事故凤凰网科技讯 据《福布斯》网站北京时间3月20日报道&#xff0c;美国当地时间本周日傍晚&#xff0c;一辆由Uber运营的自动驾驶汽车在亚利桑那州坦佩(Tempe)撞倒了一名女性并致其死亡。Uber周一表示&#xff0c;公司暂停…

28个Unix/Linux的命令行神器

From: http://os.51cto.com/art/201207/347414.htm 下面收集的Unix/Linux下的28个命令行下的工具&#xff0c;有一些是大家熟悉的&#xff0c;有一些是非常有用的&#xff0c;有一些是不为人知的。这些工具都非常不错&#xff0c;希望每个人都知道。本篇文章还在Hacker News上被…