区块链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 }

 

posted @ 2020-12-02 22:26  北漂的尘埃  阅读(94)  评论(0编辑  收藏  举报