区块链实现之POW分析

这篇具有很好参考价值的文章主要介绍了区块链实现之POW分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本代码的全部实现已在github上面同步开源,项目地址:
link

PoW算法介绍

工作量证明(Proof Of Work,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行认证来证明完成了相应的工作量,则是一种非常高效的方式。比如现实生活中的毕业证、驾驶证等等,也是通过检验结果的方式(通过相关的考试)所取得的证明。

工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。

PoW算法思路

通过不断对结点的数据进行哈希计算,通过比较目标哈希与当前哈希值的对比,实现共识算法。
pow 区块链,blockChain,区块链,哈希算法,算法

代码与实现思路

伪码思路:
1.建立ProofOfWork类,带有两个属性{目标哈希,目标区块}
2.通过ProofOfWork类进行计算目标区块的哈希,并与目标哈希进行比较。
3.若判定目标区块的哈希值小于目标哈希值,则完成工作量证明,进行广播,并上链。
ProofOfWork的结构:

// 工作量证明的结构
type ProofOfWork struct {
	//需要共识验证的区块
	Block *Block
	//目标难度的哈希,大数存储
	target *big.Int
}

进行哈希值的比较:

func (pow *ProofOfWork) run() ([]byte, int64) {
	//碰撞次数
	var nonce = int64(0)
	//用于比较的大数hash
	var hashInt big.Int
	//目标hash值
	var hash [32]byte
	//无限循环,生成符合条件的哈希
	for {
		//生成准备数据
		dataByte := pow.prepareData(int64(nonce))
		hash = sha256.Sum256(dataByte)
		//将byte数据转换为大数
		hashInt.SetBytes(hash[:])
		if pow.target.Cmp(&hashInt) == 1 {
			//找到了符合条件的hash
			break
		}
		nonce++
	}
	fmt.Printf("打印碰撞次数%v\n", nonce)
	return hash[:], nonce
}

拼接区块数据,便于计算哈希值:

// 生成准备数据,对ProofOfWork数据拼接形成哈希值并返回
func (pow *ProofOfWork) prepareData(nonce int64) []byte {
	var data []byte
	timeStampBytes := IntToHex(pow.Block.TimeStamp)
	heightBytes := IntToHex(pow.Block.Height)
	//将多个[]byte数组转换为一个[]byte数组
	data = bytes.Join([][]byte{
		timeStampBytes,
		heightBytes,
		pow.Block.PrevBlockHash,
		pow.Block.Data,
		IntToHex(nonce),
		IntToHex(targetBit),
	}, []byte{})
	return data
}

实验结果

可以看到,总共生成了三个区块,每个区块的碰撞次数如下。最后输出整个区块链,可以看到,区块的哈希值之间呈现链表结构。
pow 区块链,blockChain,区块链,哈希算法,算法文章来源地址https://www.toymoban.com/news/detail-761898.html

到了这里,关于区块链实现之POW分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 区块链共识机制 (Consensus)(PoW,PoS,PAXOS,RAFT,PBFT)

    所谓“共识机制”,是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。再通俗一点来讲,如果中国一名微博大V、美国一名虚拟币玩家、一名非洲留学生和一

    2024年02月03日
    浏览(34)
  • PoW 、PoS , DPoS 算法

    PoW 、PoS , DPoS 算法 在区块链领域,多采用 PoW 工作量证明算法、PoS 权益证明算法,以及 DPoS 代理权 益证明算法,以上三种是业界主流的共识算法,这些算法与经典分布式一致性算法不同的是 融入了经济学博弈的概念。 PoW:通常是指在给定的约束下,求解一个特定难度的数

    2024年02月02日
    浏览(39)
  • 区块链必知基础知识、POS、POW、DPOS、公有链、私有链、联盟链

    从不同的技术⻆度来剖析,我们可以这样来看待区块链,它是: 分布式数据库(本质) 每个⽤户都可以通过合法⼿段进⾏读写,不存储于某⼀辆个特定的服务器或安全节点上,⽽是分布式地存放于⽹络上所 有的完整节点上,每个节点保留⼀个备份。 ⽹络底层协议(抽象)

    2024年02月02日
    浏览(50)
  • 算法leetcode|50. Pow(x, n)(rust重拳出击)

    实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即, x n )。 解释: 2 -2 = 1/2 2 = 1/4 = 0.25 -100.0 x 100.0 -2 31 = n = 2 31 -1 n 是一个整数 -10 4 = x n = 10 4 面对这道算法题目,二当家的再次陷入了沉思。 直接想到的就是模拟, x 循环 n - 1 次乘以 x ,时间可以抹平一切,但是会非常慢。 还

    2024年02月05日
    浏览(43)
  • 基于Python实现一个PoW的仿真程序

    资源下载地址:https://download.csdn.net/download/sheziqiong/86831335 资源下载地址:https://download.csdn.net/download/sheziqiong/86831335 利用 Python 实现一个 PoW 的仿真程序,模拟一定数量的节点生成区块链的状态。 设置参数包括:节点数量和每个轮次出块的成功率,测量区块链的增长速度。 设

    2024年02月08日
    浏览(39)
  • c++中的pow函数

    目录 简介: 实例: 可能出现的错误: 负指数问题:pow 函数可以计算负指数,但它不处理负数的复数结果。如果计算负指数并且结果应该是复数,您需要使用复数库或手动处理。 2 溢出问题: 3头文件不包含: 简介: 在C++中, pow 函数用于计算一个数的指数幂(就是几次方

    2024年02月07日
    浏览(51)
  • LeetCode——Pow(x, n)

    50. Pow(x, n) - 力扣(Leetcode) 实现 pow(x, n) ,即计算  x  的整数  n  次幂函数(即, x ⁿ )。 示例 1: 示例 2: 示例 3: 提示: -100.0 x 100.0 -2 ³ ¹ = n = 2 ³ ¹-1 n  是一个整数 要么  x  不为零,要么  n 0  。 -10 ⁴  = x ⁿ  = 10 ⁴ 题目要求我们实现 pow(x, n) 函数,即求解

    2024年02月09日
    浏览(31)
  • 求数值的整数次方(模拟pow函数)

    实现函数 double Power(double base, int exponent),求base的exponent次方。 注意: 1.保证base和exponent不同时为0。 2.不得使用库函数,同时不需要考虑大数问题 3.有特殊判题,不用考虑小数点后面0的位数。 具体实现: 本方法中利用不断扩大原本的base,实现在O(logn)的时间复杂度。其中判

    2024年02月11日
    浏览(44)
  • LeetCode ! 50. Pow(x, n)

    参考资料:左程云算法课 , 《程序员代码面试指南》 思路: 以求 1 0 75 10^{75} 1 0 75 为例, 75 = 64 + 8 + 2 + 1 = ( 1001011 ) 2 75 = 64+8+2+1=(1001011)_2 75 = 64 + 8 + 2 + 1 = ( 1001011 ) 2 ​ so, 1 0 75 = 1 0 64 × 1 ⋅ 1 0 32 × 0 ⋅ 1 0 16 × 0 ⋅ 1 0 8 × 1 ⋅ 1 0 4 × 0 ⋅ 1 0 2 × 1 ⋅ 1 0 1 × 1 = 1 0 ( 1001011 ) 2

    2024年02月08日
    浏览(34)
  • eth入门之工作量证明 (POW)

    文档:工作量证明 (PoW) | ethereum.org 以太坊目前使用的共识协议被称为工作量证明 (PoW)。 这允许以太坊网络的节点就以太坊区块链上记录的所有信息的状态达成共识,并防止经济攻击。 接下来一年,工作量证明将被逐步淘汰,这有利于权益证明 (PoS) 的发展。 向权益证明 (Po

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包