共识算法POW原理及实现

共识算法POW原理及实现

2023年7月27日发(作者:)

共识算法POW原理及实现POW简介Proof of Work,⼯作证明。POW共识算法主要是通过计算难度值来决定谁来出块。POW的⼯作量是指⽅程式求解,谁先解出来,谁就有权利出块。⽅程式是通过前⼀个区块的哈希值和随机值nonce来计算下⼀个区块的哈希值,谁先找到nonce,谁就能最先计算出下⼀个区块的哈希值,这种⽅式之所以被称为计算难度值是因为⽅程式没有固定解法,只能不断的尝试,这种解⽅程式的⽅式称为哈希碰撞,是概率事件,碰撞的次数越多,⽅程式求解的难度就会越⼤。⽐特币就是采⽤POW共识算法算法具体实现原理这⾥涉及到两个重要的概念,⼀个是难度系数,⼀个是nonce,nonce可以理解为⼀个随机数,就是挖矿中要找到⼀个符合条件的nonce值。这⾥假设难度系数是4(⽐特币初始难度系数就是4),将⼀个区块中的数据加上nonce值打包,nonce值从0开始⼀直递增,将这打包的数据计算hash值,hash满⾜最前⾯有4个0,就是挖矿成功。难度系数为多少,hash最前⾯就需要满⾜多少个0。代码简单实现其原理package mainimport ( "strconv" "time" "crypto/sha256" "strings" "encoding/hex" "fmt")//pow 挖矿算法//定义难度系数const difiiculty = 4type Block struct { Index int // 区块⾼度 TimeStamp int64 Data string //交易记录 Hash string Prehash string Nonce int Difficulty int //难度系数}//创建区块链var BlockChain []Block//创世区块func GenesisBlock() *Block { var geneBlock = Block{0, ().Unix(), "", "", "", 0, difiiculty} = ToString(BlockHash(geneBlock)) return &geneBlock}func BlockHash(block Block) []byte { re := () + (int(amp)) + + h + () + (ulty) h := () ([]byte(re)) hashed := (nil) return hashed}func isBlockValid(block Block) bool { prefix := ("0", ulty) return fix(, prefix)}//创建新区块 pow挖矿func CreateNewBlock(lastBlock *Block, data string) *Block { var newBlock Block = + 1 amp = ().Unix() = data h = ulty = difiiculty = 0 //开挖-当前区块的hash值的前⾯的0的个数与难度系数值相同 for { //计算hash cuhash := ToString(BlockHash(newBlock)) n("挖矿中",cuhash) = cuhash if isBlockValid(newBlock) { //校验区块 if VerflyBlock(newBlock, *lastBlock) { n("挖矿成功") return &newBlock } }

++ }}//校验新的区块是否合法func VerflyBlock(newblock Block, lastBlock Block) bool { if +1 != { return false } if h != { return false } return true}func main() { var genBlock = GenesisBlock()

newBlock := CreateNewBlock(genBlock,"新区块") n(newBlock)}输出挖矿中 ac6665903c0cd2f000e17483fbcf6e3e8fa365de2b55663e7c94167f816d1489挖矿中 a46e18c7938ccb2d0554232f94c6e8db933fae509adafd4091f5f0b51951e6ae挖矿中 3738b5eb5f8f956974fc767058a6d7c94da0fc406e86df2d508b9b87fc109171挖矿中 0000694b1acaec754175f0a49a1aa190e122b58e9f58125bd18ceec898f8d811挖矿成功&{1 1530267247 新区块 0000694b1acaec754175f0a49a1aa190e122b58e9f58125bd18ceec898f8d811 a8df431924b17633bdfaa7a41c2608cd99f65

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690463260a352955.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信