区块链V2版本实现之一
V1版本问题:
随机数的难度值是随便写的
区块的哈希值是无规则的
V2版本思路:
1.POW(工作量证明)
A. block
B. 目标值
2.创建POW的函数
NewProofOfWork(参数)
3.不断计算hash的函数
Run()
4.一个校验函数
IsValid()
部分代码(proofofwork.go文件中POW定义):
1 package main 2 3 import "math/big" 4 5 type ProofOfWork struct { 6 block *Block 7 8 //big.Int类型来存储哈希值,它内置一些方法,例如: 9 //Cmp:比较方法 10 //SetBytes:把bytes转成big.int类型 11 //SetString:把string转成big.int类型 12 //难度值 13 target *big.Int //系统提供的,是固定的 14 } 15 16 func NewProofOfWork(block *Block) *ProofOfWork { 17 pow := ProofOfWork{ 18 block: block, 19 } 20 21 //写难度值,难度值应该是推导出来的,但是我们为了简化,把难度值先写成固定的,一切完成之后,再去推导 22 //0000100000000000000000000000000000000000000000000000000000000000 23 24 //16制格式的字符串 25 targetStr := "0000100000000000000000000000000000000000000000000000000000000000" 26 var bigIntTmp big.Int 27 bigIntTmp.SetString(targetStr,16) 28 29 pow.target = &bigIntTmp 30 31 return &pow 32 }