pow算法的简介
pow算法的代表性应用就是比特币系统,pow算法的原义是工作量证明算法,故名思意就是干多少活的证明。其实就是暴力求值,通过暴力循环 找到一个合适的哈希值,
这篇文中由详细的介绍

package mainimport ("crypto/sha256""encoding/hex""encoding/json""fmt""log""math/big""strconv""time"
)// 定义区块链的结构
type Block struct {LastHash  string //上一区块的哈希Hash      string //本区块的哈希值Data      string //数据TimeStamp string //时间戳Height    int    //区块高度Nonce     int64  //随机数DiffNum   uint   //难度值
}// 简单的链式结构
var blockchain []Block// 难度值
var diffNum uint = 17// 挖矿函数即工作量证明算法
// 1.通过增大随机数的值 寻找适合的哈希值
// 2.类比比特币 寻找小于目标难度的哈希值
// 工作量证明算法的本质就是暴力求值 循环比较 直至找到符合要求的哈希值
func mine(data string) Block {// 定义区块if len(blockchain) < 1 {fmt.Println("没有区块头")}// 获取链上的最后一个区块lastBlock := blockchain[len(blockchain)-1]// 定义一个新的区块newBlock := new(Block)newBlock.LastHash = lastBlock.HashnewBlock.TimeStamp = time.Now().String()newBlock.Height = lastBlock.Height + 1newBlock.DiffNum = diffNumnewBlock.Data = datavar nonce int64 = 0newBigInt := big.NewInt(1)newBigInt.Lsh(newBigInt, 256-diffNum) // 相当于1 左移256-diffNum// 暴力计算for {newBlock.Nonce = noncenewBlock.getHash()hashInt := big.Int{}hashBytes, _ := hex.DecodeString(newBlock.Hash)hashInt.SetBytes(hashBytes) //将区块哈希值转大数字// 寻找合适的值// 比较x和y的大小。x<y时返回-1;x>y时返回+1;否则返回0if hashInt.Cmp(newBigInt) == -1 {break} else {nonce++ //递增随机数 直到找到合适的哈希值}}return *newBlock
}//序列化
func (b *Block) serialize() []byte {bytes, err := json.Marshal(b)if err != nil {log.Panic(err)}return bytes
}// 获取本区块的哈希值
func (b *Block) getHash() {result := sha256.Sum256(b.serialize())b.Hash = hex.EncodeToString(result[:])
}
func main() {// 新建一个区块头genesisBlock := &Block{TimeStamp: time.Now().String(),Data:      "创世区块",LastHash:  "0000000000000000000000000000000000000000000000000000000000000000",Height:    1,Nonce:     0,DiffNum:   0,}genesisBlock.getHash()fmt.Println(genesisBlock)//将创世区块添加进区块链blockchain = append(blockchain, *genesisBlock)for i := 0; i < 10; i++ {newBlock := mine("天气不错" + strconv.Itoa(i))blockchain = append(blockchain, newBlock)fmt.Println(newBlock)}
}

共识算法之Pow工作量证明算法go语言实现相关推荐

  1. 区块链共识机制技术一——POW(工作量证明)共识机制

    什么是共识机制 所谓"共识机制",是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认:对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共 ...

  2. 区块链共识机制技术一--POW(工作量证明)共识机制

    什么是共识机制 所谓"共识机制",是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认:对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共 ...

  3. 动手学区块链学习笔记(二):区块链以及工作量证明算法

    引言 紧接上文,在介绍完区块链中的加密解密以及公钥私钥等算法后,本篇开始正式进入区块链概念与一个简单区块链系统的实现过程介绍. 区块链技术介绍 什么是区块链? 区块链,就是一个又一个区块组成的链条.每 ...

  4. 区块链-工作量证明算法

    目录:https://blog.csdn.net/qq_40452317/article/details/89646633 比特币的去中心化共识由所有网络节点的 4 种独立过程相互作用而产生: 每个全 ...

  5. 共识算法-DPoS(股份授权证明)算法

    title: 共识算法-DPoS(股份授权证明)算法 tags: 区块链,共识算法,DPoS DPoS PoW机制和PoS机制虽然都能有效地解决记账行为的一致性共识问题, 但是现有的比特币PoW机制纯 ...

  6. 如何理解PoW工作量证明?

    如何理解PoW工作量证明? 什么是PoW工作量证明 PoW工作量证明是区块链入门型的共识机制,那么如何理解PoW的共识机制呢? 比如,武侠小说中谁破解玲珑棋局就能获取无崖子的百年功力,于是各门各派开始 ...

  7. 多币种钱包开发:什么是工作量证明(POW)?

    2019独角兽企业重金招聘Python工程师标准>>> 任何区块链网络中最重要的组成部分之一是它用于就其分类账的状态达成共识的机制.这些机制被称为一致性算法,今天的加密数字资产使用的 ...

  8. 共识算法-PoS(股权证明)算法

    title: 共识算法-PoS(股权证明)算法 tags: 区块链,共识算法 为什么会出现PoS? 在比特币系统中采用了PoW(工作量证明)算法,PoW其实就是由所有的节点相互竞争,提交一个难于计算但 ...

  9. 链接哈希是什么_熊猫人行情:什么是工作量证明机制(POW)

    熊猫人行情:什么是工作量证明机制(POW)(视频链接) 知乎视频​ ​大家好!这里是熊猫人~ 上班打卡下班打卡,想必大家都并不陌生 总有各种方式证明你确确实实是工作过 (加油,打工人!) 区块链中也有 ...

最新文章

  1. 学籍管理系统 c语言流程图,程序设计基础 ——C语言第10章 综合应用案例——学生学籍管理系统...
  2. nginx功能扩展整理
  3. jquery删除数组中的某个元素下标越界_Java数据结构和算法(二)—数组
  4. java 删除list元素_JAVA中循环删除list中元素的方法总结
  5. 成功解决 ERROR: An error occurred while performing the step: “Building kernel modules“. See  /var/log/nv
  6. 数据库计划中的14个才略
  7. SAP Analytics Cloud导入数据的规模限制
  8. linux开发板显示横向彩虹,给 Linux 终端的输出添加彩虹特效的命令
  9. ${ctx} 的那些事
  10. web端功能测试总结(一)
  11. 谷歌浏览器怎么长截图怎么截_Chrome浏览器如何完美实现滚动截图技巧
  12. 【JavsScript】作用域链
  13. 2018年最新税收分类编码_如何免费在线进行2018年税收
  14. 必刷2022年辽宁最新消防设施操作员模拟题库及答案
  15. MyBatis-18MyBatis代码生成器-Example讲解
  16. 密码编码学初探——传统加密技术
  17. 100以内的平方数记忆法
  18. P5322 [BJOI2019]排兵布阵
  19. OA系统的集成与整合:打破信息孤岛,实现企业信息化融会贯通
  20. Python黑客系列之——控制自己的手机摄像头拍照,并自动发送到邮箱。

热门文章

  1. 卸料装置弹性零件的计算方法_弹性卸料装置的基本零件包括
  2. 【Linux云计算架构:第二阶段-Linux必会的20多种服务】第5章——搭建DNS服务器实现域名解析
  3. **为什么安装CAD时总出现 Command line option syntax error.**
  4. Bootstrap静止在页面底部的导航栏
  5. js获取页面高度以及jquery获取页面滚动距离scrollTop方法
  6. vue表情包渲染,trie算法实现,表情包资源分享
  7. 无线蓝牙运动耳机排行榜,值得分享的六款运动耳机
  8. RFC系列协议--rfc1661--Point-to-Point Protocol(PPP)
  9. LeetCode.383. 赎金信
  10. Linux常用命令 实用命令万字总结