深入比特币原理(八)——比特币区块链

Aaron 发表于 2018/02/28 09:52:48 2018/02/28
【摘要】 比特币的出现使人们发现了一项具有巨大潜力的前沿技术——区块链,本节将讨论区块链在比特币中的工作原理。

比特币的出现使人们发现了一项具有巨大潜力的前沿技术——区块链,本节将讨论区块链在比特币中的工作原理。

我们先重温一下比特币白皮书中的一张图

1q.png

当时我们说过这张图就是比特币区块链的雏形,比特币的区块一个一个按顺序连接在一起形成一根链条,被形象的称为区块链


区块是如何连接成区块链的?
首先我们看一下区块(Block)的结构

Size

FieldDescription
4 bytesBlock      Size区块大小,单位bytes
80 bytesBlock      Header区块头信息,详见下文
1–9 bytes (VarInt)Transaction      Counter区块中交易的数量
VariableTransactions区块中所有交易记录的数据 

区块的结构其实非常简单,下面我们再打开区块头(Block Header)的结构一看究竟


Size

FieldDescription
4 bytesVersion区块版本号,目前为2
32 bytesPrevious      Block Hash前置区块(父区块)的区块头Hash,Hash算法为double-SHA256
32 bytesMerkle      Root区块中交易Merkle树根
4 bytesTimestamp区块创建UNIX时间戳
4 bytesDifficulty      Target工作量证明算法难度
4 bytesNonce通过变动该计数器来达成工作量证明要求的结果


  • 区块头的结构中包含一个字段Previous Block Hash,该字段包含父区块头Hash值。

  • 由于每一个区块头的Hash值都是唯一的,并且都会被包含在其子区块头中,所以区块的信息会影响其后面所有的区块。

  • 如果某一个区块被改变,区块头的Hash值就会改变,那该区块后面所有的区块都会需要重做,这需要耗费大量的工作量重新计算(工作量证明),从而保证了比特币区块链的稳定性和安全性。

     区块连接示意图:

2q.png

区块的其他说明:

1.标识一个区块

  • 区块头哈希(Block Header Hash):区块头哈希有时也被称为区块哈希,它可以唯一的标识一个区块,该信息可以随时被计算,并存储在子区块的Previous Block Hash中。

  • 区块高度(Block Height):区块高度即区块在区块链中的位置(第几个区块),创世区块高度为0,每个区块对应一个唯一的高度,但同一高度下可能临时存在多个区块(这种分叉的情况我们在后面挖矿章节讨论)。早期区块高度不会存储在区块中,仅由每个节点自己动态维护,在比特币改进方案BIP-34中提出利用软分叉在coinbase的解锁脚本中添加块高度信息,并将块Version变为2,从227,835块之后全部块的Version已经为2,即包含块高度信息。


2.创世区块

  • 区块链的第一个区块被称为创世区块,比特币的创世区块在2009年创建,现在比特币的所有区块都可以反向追溯到创世区块。

  • 创世区块被静态植入比特币核心客户端中,不能被修改,所有比特币节点都将从创世区块开始构建区块链。

  • 创世区块的Hash:000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

  • 中本聪在创世区块中隐藏的植入一段文字:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”(这是英国泰晤士报当天的头条新闻标题,一方面证明区块的创建真实时间,一方面暗讽中心化金融系统)


555.jpg

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。