[GO]go语言实现区块链工作证明(pow)原理
package main import (
"math/big"
"bytes"
"math"
"crypto/sha256"
"fmt"
) const targetBits = type ProofOfWork struct {
block *Block
targetBit *big.Int
} func NewProofOfWork(block *Block) *ProofOfWork {
var IntTarget = big.NewInt()
IntTarget.Lsh(IntTarget, uint( - targetBits))
return &ProofOfWork{block, IntTarget}
} func (pow *ProofOfWork)PrepareRowData(nonce int64) []byte {
block := pow.block
tmp := [][]byte{
IntToByte(block.Version),
block.PreBlockHash,
IntToByte(block.TimeStamp),
block.MerkelRoot,
IntToByte(nonce),
IntToByte(targetBits),
block.Data,
}
data := bytes.Join(tmp, []byte{})//join接收两个参数,第一个二维数组,第二个这里设置为空的连接符
return data
} func (pow *ProofOfWork)Run() (int64, []byte) {
var nonce int64
var hash []byte
var HashInt big.Int
for nonce < math.MaxInt64 {
data := pow.PrepareRowData(nonce)
hash = sha256.Sum256(data)
HashInt.SetBytes(hash[:])
if HashInt.Cmp(pow.targetBit) == - {
fmt.Printf("found hash: %x\n", hash)
break
} else {
nonce++
}
}
return nonce, hash[:]
}
[GO]go语言实现区块链工作证明(pow)原理的更多相关文章
- [GO]用go语言实现区块链工作原理
基本原理这里就不写了,只写一个简单demo的实现 首先得有一个区块用来存储区块头和区块体 type Block struct { Version int64 PreBlockHash []byte H ...
- Go语言开发区块链只需180行代码
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块. ...
- 比原链CTO James | Go语言成为区块链主流开发语言的四点理由
11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...
- 002/区块链核心概念与原理详解(Mooc)
1.课程介绍 (一).区块链前世今生 密码朋克--神秘组织(邮件组) 2.区块链核心概念与原理 (一)比特币是数字货币 为什么叫区块链? 因为比特币系统里面的数据是一个个的区块来存储,并且通过hash ...
- 区块链轻松上手:原理、源码、搭建与应用pdf电子版下载
区块链轻松上手:原理.源码.搭建与应用pdf电子版下载 链接:https://pan.baidu.com/s/1rKF4U9wq612RMIChs0zv8w提取码:hquz <区块链轻松上手:原 ...
- 用Hyperledger Fabric(超级账本)来构建Java语言开发区块链的环境
面向 Java 开发人员的链代码简介 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger Fabric v0.6 来构 ...
- 使用Go语言编写区块链P2P网络(译)(转)
转自:https://mp.weixin.qq.com/s/2daFH9Ej5fVlWmpsN5HZzw 外文链接: https://medium.com/coinmonks/code-a-simpl ...
- cpp 区块链模拟示例(四) 区块链工作量证明
本文主要在之前的区块链原形上添加了工作量证明,并且为后继的交易功能做好准备. 上一个章节我们已经创建了区块链的基本原形,但是区块的哈希计算和加入太过于简单,如果按照这种速度添加区块那么区块链估计一个小 ...
- HyperLedger Fabric 1.4 区块链工作过程(2.3)
区块链的工作过程分交易产生.交易广播.节点计算.获取记账权.记账权广播.接收区块.验证区块和完成记账七个过程. 1) 交易产生:用户向区块链发了一笔交易信息,将产生交易:2) 交易广播:当一笔新交易产 ...
随机推荐
- HTTP Get与Post请求
HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- linux环境下搭建MySQL
linux下搭建mysql的方式很多,网上也详解了很多种搭建方式,有直接yum的.有rpm的..总之,“坑”是层出不穷,有相关文件依赖性.权限.GPG keys等等. 本人也在今天搭建了一下.是出“坑 ...
- Spring的常用下载地址
第一种,简单粗暴直接 1 http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEAS ...
- python 之 Collections模块
官方文档:https://yiyibooks.cn/xx/python_352/library/collections.html 参考: https://blog.csdn.net/songfreem ...
- 【转】C#中Func与Action的理解
原文地址:https://www.cnblogs.com/ultimateWorld/p/5608122.html Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托 ...
- 第六章 声明式服务调用: Spring Cloud Feign
我们在使用 Spring Cloud Ribbon 时, 通常都会利用它对 RestTemplate 的请求拦截来实现对依赖服务的接口调用, 而 RestTemplate 已经实现了对 HTTP 请求 ...
- 四、jenkins+postman+newman环境搭建
前提: 搭建环境之前需要先理清楚各个环境的依赖关系,jenkins只支持windows命令行跟linux shell环境执行构建命令,而postman的测试脚本不能直接在命令行或shell环境执行,p ...
- 腾讯安全反病毒实验室解读“Wannacry”勒索软件
背景 针对昨日英国医院被攻击,随后肆虐中国高校的 WannaCry 勒索事件,腾讯安全反病毒实验室第一时间给出了深度权威的分析.此次勒索事件与以往相比最大的亮点在于,勒索病毒结合了蠕虫的方式进行传播, ...
- C# 项目开发笔记
这里主要记录一些容易错的内容,在项目开发中总结出来的经验和教训. 1 语法 (1)判断float是否为Nan,不能使用 xxx = flaot.Nan去做,要使用float.IsNan去做. (2)u ...
- 在Ubuntu 16.04如何安装Java使用apt-get的
转自:https://www.howtoing.com/how-to-install-java-with-apt-get-on-ubuntu-16-04/ 的Java和JVM(Java的虚拟机)是广泛 ...