PoW算法

文章目录

  • 前言
  • 一、PoW——工作量证明
  • 二、go语言简单案例


前言

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

一、PoW——工作量证明

⚫ Proof-of-Work 简称 PoW,即为工作量证明
⚫ 通过计算一个数值,使得拼揍上交易数据后内容的值满足规定的上限,在节点成功
找到满足的 Hash 值之后,会马上对全网进行广播打包区块,网络的节点收到广播
打包区块,会立刻对其进行验证
⚫ 网络中只有最快解密的区块,才会添加的账本中,其他的节点进行复制,这样就保
证了整个账本的唯一性
⚫ 假如节点有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的
区块,这个区块就无法记录到总账本中,作弊的节点耗费的成本就白费了,因此在
巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保
了整个系统的安全

二、go语言简单案例

package mainimport ("time""strconv""crypto/sha256""encoding/hex""fmt""strings"
)//通过代码,实现PoW挖矿//定义区块
type Block struct {//上一个区块的哈希PreHash string//当前区块的哈希HashCode string//时间戳TimeStamp string//难度系数Diff int//交易信息Data string//区块高度Index int//随机值Nonce int
}//第一个区块:创世区块
func GenerateFirstBlock(data string) Block {//创建第一个Blockvar firstblock Blockfirstblock.PreHash = "0"firstblock.TimeStamp = time.Now().String()//暂设为4firstblock.Diff = 4//交易信息firstblock.Data = datafirstblock.Index = 1firstblock.Nonce = 0//通过sha256得到自己的哈希firstblock.HashCode = GenerationHashValue(firstblock)return firstblock
}//生成区块的哈希值
func GenerationHashValue(block Block) string {//按照比特币的写法,将区块的所有属性拼接后做哈希运算//int转为字符串var hashdata = strconv.Itoa(block.Index) + strconv.Itoa(block.Nonce) +strconv.Itoa(block.Diff) + block.TimeStamp//算哈希var sha = sha256.New()sha.Write([]byte(hashdata))hashed := sha.Sum(nil)return hex.EncodeToString(hashed)
}func main() {//测试创建创世区块var firstBlock = GenerateFirstBlock("创世区块")fmt.Println(firstBlock)fmt.Println(firstBlock.Data)//需要生成下一个区块GenerateNextBlock("第二区块", firstBlock)
}//产生新的区块
func GenerateNextBlock(data string, oldBolock Block) Block {//产生一个新的区块var newBlock BlocknewBlock.TimeStamp = time.Now().String()//难度系数newBlock.Diff = 5//高度newBlock.Index = 2newBlock.Data = datanewBlock.PreHash = oldBolock.HashCodenewBlock.Nonce = 0//创建pow()算法的方法//计算前导0为4个的哈希值newBlock.HashCode = pow(newBlock.Diff, &newBlock)return newBlock
}//pow算法
func pow(diff int, block *Block) string {//实现不停地去挖矿for {//认为是挖了一次矿了hash := GenerationHashValue(*block)//挖矿过程的哈希打印fmt.Println(hash)//判断哈希值前导0是否为diff个0//strings.Repeat:判断hash是否有diff个0,写1,就判断为有多少个1if strings.HasPrefix(hash, strings.Repeat("0", diff)) {//挖矿成功fmt.Println("挖矿成功")return hash} else {//没挖到//随机值自增block.Nonce++}}
}

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

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

相关文章

systemctl 命令完全指南

From:https://linux.cn/article-5926-1.html systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service 使某服务不自…

boundcolumn 根据值进行判断_Excel使用函数进行条件判断的方法步骤

Excel中的函数具体该如何进行判断数据的条件是否达到要求呢?下面是学习关于excel使用函数进行条件判断的教程,希望阅读过后对你有所启发! excel使用函数进行条件判断的教程 函数条件判断步骤1:如何计算成绩是否合格 函数条件判断步骤2:选中要…

城市大脑不仅是AI系统,更是结合人类智慧的混合智能巨系统

作者:刘锋 《互联网进化论》作者从2015年开始,智慧城市的类脑化进程不断加速,包括城市大脑,城市云脑,城市神经系统,智慧城市脑,交通大脑等概念不断涌现,人工智能成为当前科技热点的今…

转载:ListBox的SelectedValue和SelectedItem的区别

转载:ListBox的SelectedValue和SelectedItem的区别 原文:http://www.beacosta.com/blog/?p9What is the difference between SelectedValue and SelectedItem? When they are used by themselves, these two properties are very similar. The need fo…

区块链简单实现

前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、区块链简单实现 package Blockimport ("crypto/sha256""encoding/hex""fmt""strconv""strings""time" )type Block struct{Pre…

charts漏斗图表_用echarts写的转换率图表(漏斗图 + 象形柱图)

平时用图表可能都是常规的折线图,柱状图,饼图这些基本的。下面的是一个漏斗图 象形柱图写出来的图表。完成后的图表,关键是右半边漏斗图很简单,只讲下象形柱图里的几个关键点(因为这里的用法有点特别,不是文档里的常规…

Java并发编程实战~协程

Golang 是一门号称从语言层面支持并发的编程语言,支持并发是 Golang 一个非常重要的特性。在上一篇文章《44 | 协程:更轻量级的线程》中我们介绍过,Golang 支持协程,协程可以类比 Java 中的线程,解决并发问题的难点就在…

SQL的经典语句(太全了)

关键字: sql语句 查询表内容 SELECT 表名case when a.colorder1 then d.name else end, 表说明case when a.colorder1 then isnull(f.value,) else end, 字段序号a.colorder, 字段名a.name, 标识case when COLUMNPROPERTY( a.id,a.name,IsIdentity)1 then √else end, 主键…

上帝的指纹——分形与混沌

来源:王东明科学网博客云朵不是球形的,山峦不是锥形的,海岸线不是圆形的,树皮不是光滑的,闪电也不是一条直线。——分形几何学之父Benoit Mandelbrot话说在一个世纪以前,数学领域相继出现了一些数学鬼怪&am…

PoS算法

文章目录前言一、PoS——权益证明二、go语言简单实现前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、PoS——权益证明 PoS 是什么 ⚫ PoS(Proof of Stake)译为权益证明,是一种在公链中的共识算法&#xf…

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

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

scrapy 教程

------------------------------------------------------------------------------------------ scrapy 中文文档 和 scrapy 英文文档参照看。因为中文文档比较老,英文文档是最新的。 scrapy 英文文档: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