区块链实现之pow分析(代码片段)

一只特立独行的猫 一只特立独行的猫     2023-03-30     663

关键词:

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

PoW算法介绍

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

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

PoW算法思路

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

代码与实现思路

伪码思路:
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


实验结果

可以看到,总共生成了三个区块,每个区块的碰撞次数如下。最后输出整个区块链,可以看到,区块的哈希值之间呈现链表结构。

创建区块链之v2实现pow(proofofwork工作量证明)(代码片段)

block.gopackagemainimport("time")//定义块结构typeBlockstructVersionint64PrevBlockHash[]byteHash[]byteTimeStampint64TargetBitsint64Nonceint64MerKelRoot[]byteData[]byte//设定创建块的方法funcNewBlock(datastring,pre 查看详情

golang区块链开发002-初始化区块链与pow挖矿实现

目录:一.初始化区块链1.代码结构2.定义区块结构与方法3.定义区块链结构与方法4.帮助库代码5.测试生成区块与初始化区块链6.测试代码二.POW挖矿实现1.代码结构2.定义pow算法实现3.修改区块的生成方式(从自定义到挖矿)4.测试代码... 查看详情

毕业设计之---基于联盟连的区块链实现(代码片段)

简介本篇文章将向同学们介绍区块链相关知识,以及如何使用Java实现一个基于联盟链的区块链系统,你甚至可以发布属于自己的虚拟货币.阅读该文章你讲搞懂:什么是区块链区块链有哪些分类区块链实现的关键技术区块链的简单实... 查看详情

经典共识pow的原理及实现(代码片段)

...用在防止拒绝服务攻击以及过滤垃圾邮件,现在成为区块链公链中最常见也是最有效的共识算法之一,当下最流行的比特币、以太坊等公链目前均使用PoW共识。​PoW是通过对一个复杂难题的求解,来保证区块链交易打... 查看详情

区块链之工作量证明

区块链之工作量证明在整个区块链中的作用新的区块依赖工作量证明算法(PoW)|ProofOfWork来构造理解PoW的目标是找出一个符合特定条件的数字,这个数字很难计算出来,但容易验证。这就是工作量证明的核心思想。示例代码fromha... 查看详情

[转帖]深度解析区块链pow和pos的区别(代码片段)

深度解析区块链POW和POS的区别ProofofWork还有ProofofStake之前理解程了state...股权的意思还有delegatedproofofStake能够部分解决浪费电力的问题.来源http://blockchain.51cto.com/art/201904/595846.htm 简单而言,PoW和PoS是2种不同的对记账权利的分... 查看详情

区块链教程fabric1.0源代码分析blockfile区块文件存储一(代码片段)

Fabric1.0源代码笔记之blockfile(区块文件存储)1、blockfile概述blockfile,即Fabric区块链区块文件存储,默认目录/var/hyperledger/production/ledgersData/chains,含index和chains两个子目录。其中index为索引目录,采用leveldb实现。而chains为各ledger... 查看详情

区块链简单实现之p2p网络多节点同步(代码片段)

区块链简单实现之p2p网络多节点同步将区块保存为json文件节点不确定性区块里保存节点信息并未向所有节点广播简单模拟广播的代码:实现效果:完整的代码:承接上文:区块链的简单实现,我们已经实现了... 查看详情

搭建你的第一个区块链网络(代码片段)

前一篇文章:搭建你的第一个区块链网络(一)共识与本地化POW共识共识机制也是区块链系统中不可缺少的一部分,在比特币网络中,使用的是POW共识,概念相对比较简单,所以我们在该项目中使用POW共识机制(后期如果可以的话修... 查看详情

搭建你的第一个区块链网络(代码片段)

前一篇文章:搭建你的第一个区块链网络(一)共识与本地化POW共识共识机制也是区块链系统中不可缺少的一部分,在比特币网络中,使用的是POW共识,概念相对比较简单,所以我们在该项目中使用POW共识机制(后期如果可以的话修... 查看详情

zt-----用javascrip写一个区块链(代码片段)

...术。在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的。我将会称之为SavjeeCoin!全文分为三个部分: 实现一个基本的区块链实现POW交易与挖矿奖励 实现一个基本的区块链区块... 查看详情

基于共识算法和区块链模拟实现超级账本(代码片段)

基于共识算法和区块链模拟实现超级账本实验语言:GO实验环境:GoLand2022.1;go1.13.4.widows-amd64.msi;curl-7.83.1实验中使用的开源包:http://github.com/davecgh/go-spew/spew;http://github.com/gorilla/mux;http://github.com/joho... 查看详情

区块链之开发命令行操作模块(代码片段)

...介绍go语言中flag用法简介项目命令行具体实现链接:区块链项目github地址项目目前进度:功能介绍利用命令行操作区块链相较于图形用户界面来说,编写代码简单,同时也可以实现复杂的功能。命令行模块的功能... 查看详情

区块链简单实现之p2p网络多节点同步(代码片段)

区块链简单实现之p2p网络多节点同步将区块保存为json文件节点不确定性区块里保存节点信息并未向所有节点广播简单模拟广播的代码:实现效果:完整的代码:承接上文:区块链的简单实现,我们已经实现了... 查看详情

区块链钱包之创建钱包地址(代码片段)

(一)区块链钱包之生成助记词(二)区块链钱包之创建钱包地址(三)区块链钱包之加密算法简介(四)区块链钱包之创建比特离线交易(BTC交易)(五)区块链钱包之创建以太坊... 查看详情

区块链钱包之加密算法简介(代码片段)

(一)区块链钱包之生成助记词(二)区块链钱包之创建钱包地址(三)区块链钱包之加密算法简介(四)区块链钱包之创建比特离线交易(BTC交易)(五)区块链钱包之创建以太坊... 查看详情

区块链技术与应用实验报告(实验八)(代码片段)

文章目录区块链技术与应用实验报告(实验八)关于作者作者介绍一、实验目的及要求二、实验原理简介三、实验环境四、实验步骤1.运行Goland界面2.实现区块的结构总结区块链技术与应用实验报告(实验八)关于作者作者介绍🍊... 查看详情

从0到1简易区块链开发手册v0.4-实现转账交易的思路分析(代码片段)

六.转账交易创世区块创建完毕之后,按照我们的正常思路,是继续创建新的区块,并加入至区块链中,没错,这确实是学习路线,但是我们首先来了解一个区块是如何生成的,转账交易===>打包交易===>工作量证明===>生成... 查看详情