区块链共识机制之POW算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Technology Analysis

技术分析

DCW

81

数字通信世界

2019.03

1 工作量证明的原理

POW 是区块链主流共识算法:工作量证明POW 、权益POS 、

股份授权证明DPOS 中一种,是由算力决定区块的记账权归属那个节点所有,那个节点先算出哈希函数的下一个随机数数值,得到收益,即俗称的“挖矿”。

例如以下的区块链中一个区块的基本结构:Summary

Number Of Transactions 2Output Total 10BTC Estimated Transaction V olume 0BTC Transaction Fees 0BTC

Height 780890(Main Chain )

Timestamp 2018-12-28 09:10:20Received By 2018-12-28 09:

10:20Relayed By AntPool Difficulty 9,890,231,384,872.65……

Nonce 3670855786Block Reward 10BTC

以上区块信息中“Nonce ”就是这个随机数,各个节点通过算力计算出下一个区块的Nonce ,即拥有该区块记账打包的权利,并获得Block Reward 。

2 工作量证明函数

POW 采用SHA256对区块头做双重运算,而SHA256是单向函数,所以结果很难计算出来。节点在挖矿过程中,当随机生成的Hash 值小于难度值则挖矿成功,例如以下节点挖矿的函数:

func (pow *ProofOfWork )Run ()([]byte ,int64){ nonce :=0

var hashInt big.Int var hash[32]byte for {

dataBytes :=pow.prepareData (nonce ) hash=sha256.Sum256(dataBytes )

fmt.Printf (“\r%x :

”,hash ) hashInt.SetBytes (hash[:

]) if pow.diff.Cmp (&hashInt )==1 { break }

nonce=nonce+1 }

return hash[:],int64(nonce )

在以上函数中,当hashInt 小于Block 里面的target ,则跳出

循环,输出计算得出的nonce 数值,

即挖矿成功,得到挖矿的收益。3 工作量证明过程

3.1 创始区块

区块作为区块链存储结构中的数据元素,收尾相接促成单向

链式存储结构,第一个元素为创始区块,包块共识机制的设置,出块时间,矿工收益等初始参数设置。例如以下为一个区块的创始区块:

{

 “config ”

:{ “chainId ”:

666, “homesteadBlock ”:1, “eip150Block ”:

2, “eip150Hash ”:”0x0000000000000000000000000000000000000000000000000000000000000000”,

“eip155Block ”:3, “eip158Block ”:

3, “byzantiumBlock ”:

4, “ethash ”

:{} },

 “nonce ”

:”0x0”, “timestamp ”:”0x5b4ee860”

, “extraData ”:”0x0000000000000000000000000000000000000000000000000000000000000000”,

 “gasLimit ”:”0x989680”, “difficulty ”:”0x80000”

, “mixHash ”

:”0x0000000000000000000000000000000000000000000000000000000000000000”,

 “coinbase ”:”0x0000000000000000000000000000000000000000”,

 “alloc ”:

{ “e8f0b72b5fd9fe7a926a346fe209acd1268b3533”:

{ “balance ”:”2500000000000000000000000000” }},

“number ”:”0x0”,“gasUsed ”:”0x0”

,“parentHash ”:”0x0000000000000000000000000000000000000000000000000000000000000000”

}

3.2 生成铸币交易

……

CMutableTransaction coinbaseTx ;

 coinbaseTx.vin.resize (1)

; coinbaseTx.vin[0].prevout.SetNull ()

; coinbaseTx.vout.resize (1)

;……注释:coinbaseTx 新建一铸币交易对象。3.3 调整Nonce 数值

采用SHA256对区块头做双重运算,当节点计算出的随机数小于小于设置的难度值时,则挖矿成功。

区块链共识机制之POW 算法

程 瑶1,高丽芬1,胡全贵2

(1.中国矿业大学(北京),北京 100000;2.北京国网信通埃森哲信息技术有限公司,北京 100000)

doi :10.3969/J.ISSN.1672-7274.2019.03.061

中图分类号:

TP311.13 文献标示码:A 文章编码:1672-7274(2019)03-0081-01

相关文档
最新文档