您的位置:网站首页 > 挖矿(POW/IDO/POS/减半) > 正 文 比特币

开源Bitcoin P2P电子货币系统背后的技术(五)

【作者:hy】 来源:转载 日期:2011-4-9 3:29:25 人气: 标签:开源Bitcoin 【打印】

挖矿与块(Blocks)

接下来讲的是什么是挖矿,以及交易单在P2P网络上的存放,其实这个过程也是挖矿的过程。

所有的交易单是以Block的形式在Bitcoin P2P网络上存放的。每一个Block包含了最近所有的有效交易单。Block中最为重要数据为:

  • 最近交易单集合
  • Nonce随机数
  • 前一个块的散列值

在造币的Node总在侦听网络,接收信息,然后各自将接收到的新交易打包到一个新block(CBlock Class in main.h)。在块交易单集合中的第一个交易单总是“造币单”:给创建该块的人以新的货币,节点只需要校验货币金额是否合法即可:形成一个合法的新块得到的回报是初始金额为50BTC,每产生210,000块的时候这个金额减半(大约每隔4年会发生一次)。产生合法的新块是不容易的,需要通过无数次的计算尝试得到,另外如果大家都在计算同一个新块,那么还存在竞争关系,这个时候只有最困难(Difficulty)的那个块(指整个块链的困难度值加起来最大的)才会被网络认可。另外如果块中的某笔交易size大于该块中交易单的平均size,那么该笔交易单会被收取一笔小的交易费用。

块的数据结构

块的数据结构可以分为块头(block header)和块体(block body)

块头(Block Header)

块头的数据是用于校验块、产生块ID(256位散列值),这个块ID也是决定块是否合法的数字。计算块ID的公式如下:

1
BlockID = SHA256(SHA256(Block_Header))

块头(Block Header)的内容如下:

  • ver: 版本号(4字节)
  • prev_block: 前一个块的256位散列值
  • mrkl_root: 所有交易单的256位散列
  • time: 时间戳(4字节)
  • Bits: 一个紧凑格式的4字节的数字,它表示一个256位的当前目标(Target)数值,这也表示困难度(Difficulty),最后产生块的ID值必须不大于目标值才能被接受(如果有多人同时产生同一个块,那么最困难的将被接受)。这个数值会每隔2016个block(网络大约每小时创建6个块,创建2016块大约2周)调整一次,当产生前一个2016块的时间大于2周的时候,难度值将会被调低,当小于两周的时候难度值将被调高(关于Target和Difficulty详见后述)。
  • nonce: 32位随机数。节点在产生Block的时候,会增量尝试改变nonce的值,直到产生的块的散列值符合bits的要求.

计算目标(Target)和困难度(Difficulty)

计算目标(Target)

计算目标(Target)是一个256位的数值,块的散列值ID必须小于或等于该目标数值,放可被接受。块头中的BITS是一个用紧凑的4字节格式表示的目标(Target)数值,它表示一个256位的当前目标数值

当前网络的目标值为:Current target

困难度(Difficulty)

困难度(Difficulty)表示该块ID的计算难度,值越大表示越困难,1表示最容易。

因此困难度的计算公式为:1 困难度(Target) / 当前目标

我们可以在这里查看当前网络的困难度:Current difficulty(BitCoin的 getDifficulty 接口输出)。也可以通过这个网站查看困难度值的变化情况图:Graphs

块体(Block Body)

Block Body 实际上就是交易单的集合。

你可以在这个网站上看到当前网络所有的交易单(Blocks):  https://blockexplorer.com/

 

返回顶部】【关闭窗口 风险提示:本站分享转载的信息均来自互联网,且仅供阅读参考,不作为具体投资的依据,据此入市,风险自担。本站所有内容涉及到的“货币”字眼需谨慎研判,我们维护各国法币的合法地位,同时数字资产具有货币的某些属性,目前是不能替代任何国家的法定货币的,请谨慎理解投资并严格遵守各国法律法规!详见本站[免责声明]。】
【读完这篇文章后,可否发表您的感受?】
0
0
0
0
0
0
0
0
本文网址:
安全联盟站长平台 互联网举办平台 公共信息安全网监 中国网安 赛门铁克安全响应中心