比特币的“区块”中藏有什么秘密:区块链区块结构解析

简书 2018-03-19

1.“区块链”是什么?

在描述“区块”的组成结构之前,先几句话概括下“区块链”是什么?

1)“区块链”一词来源于,2008年11月1日 2点10分【中本聪】发表的论文《Bitcoin: A Peer-to-Peer Electronic Cash System》(比特币:一种点对点的电子现金系统);

2)一句话简单概括:“区块链是一个基于分布式共识机制的(Consensus Progress)、去中心化(Decentralized)的、采用加密技术的‘账本’数据库”;

---通俗点讲,区块链本质就是一个分布式存储系统,一个没有管理员(也可以理解为人人都是管理员)的,所有节点均保存全量数据信息的一个分布式数据库。

3)区块链的构成:区块链底层技术 &P2P通信协议 & 共识机制 &加密技术 & 时间戳服务器;

4)“区块+链+时间戳”是区块链最大的创新点。

PS 1:关于“区块链”的扫盲入门,请自行Google一下关键字“区块链”,会有很多详尽的介绍,本系列文章就不花精力做介绍了。

PS 2:关于共识机制相关主题,将会在《如何解决“拜占庭将军”问题:共识机制的作用》中做详细的讲解。

2.“区块链”的分类有哪些?

目前“区块链”共分为三类:

1)公有链(Public BlockChain):

特点:所有的个体或者组织都可以发送交易,并且交易能够获得区块链的有效确认;任何人都可以参与共识过程,参与认证,参与记账;

2)联合(行业/组织)区块链(consoritum BlockChain)

特点:某个群体内,根据某种策略(比如常见的DPOS)指定出预选节点,只有预选节点参与共识过程,参与记账。所有节点(包括预选节点)均可发送交易;

3)私有区块链(Private BlockChain)

特点:单纯的只是采用了区块链的技术,但是记账权,共识认证权,区块链的数据写入权限归私人(或者某企业组织)单独所有;

---具体含义解释,请参见《BlockChain : Resharp the Economy And the World》

3.“区块”是什么?

3.1 如果把“区块链”比作和谐号高铁,那么每一节车厢就是一个个“区块”;

如果站在每节“车厢”的角度看待“区块”,那么,每节车厢又分为:

1)区块头(记录着车厢号,座位数,厕所状态的记录区域“显示屏”);特点是固定大小80B,比如 不管单节车厢多少个座位,显示屏是固定大小的;

2)区块体(实际的座位等设施);可变大小的(不同车厢的车座数可能不一致),取决于本区块被打包时候,总的交易数有多少,一般是2000笔以内;

3.2?火车头就是“创世区块”;创世区块就是区块链的第一个区块,也就是区块链的头;

PS:创世区块由中本聪在2009年1月3日创造,并留下一句永不可修改的话:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks。” (泰晤士报当天的头版文章标题。)

火车中的车厢:“区块链”中的“区块”

4.“区块”里可以存什么?

1)说到“区块”里可以存什么?先说一下,比特币与区块链的关系吧?

一句话概括:区块链是分布式存储方案,比特币莱特币等虚拟货币只是 承载在 区块链上的一个应用之一罢了,既不是父与子的关系,又不是强关联的;

2)“区块”的结构是什么?

见3中描述,分为区块头(固定格式信息)+区块体(业务数据);

3)“区块体”里可以存什么东西?

任何你想存的数据都可以(比如创世区块,中本聪存入了当天的头条新闻标题),究竟想存什么信息,取决于:基于这个区块链的上层应用是什么?比如采用关系型数据库做存储方案,数据库里存啥完全取决于业务应用。

5.比特币Block Structure解析

如图,为比特币的区块结构:

“比特币”区块结构

下面将针对图中的每一个字段进行含义解析

5.1 “区块头”结构解析

1)版本号Version:大小4字节,每一个区块的版本号,标记着当前区块是在什么版本的bitcoin core系统版本下产生的;目前主链(main)上有两种版本号的区块,分别为1和2;(版本2中,coinbase做了升级,加入了区块高度参数);

2)时间戳Timestamps:大小4字节,核心字段,自1970-01-01T00:00 UTC之后开始的秒数;

3)难度系数difficulty:大小4字节,存储格式为 难度系数的HASH值,该字段标记着当前区块被“挖”出来的难度(哈希碰撞出来的难度);

4)随机数Nonce:大小4字节,当前区块工作量证明(Proof of Work)的参数(是以一坨0开头的数),存储格式为Hash值。hash计算的目标值,改值随机。当“矿机”节点经过Hash计算出的值为该随机数时,即为“挖矿”初步成果(经过后续六个区块的认证之后,才是真正的成果,终态);

5)前序区块头Hash地址(hashPrevBlock):大小32字节,为当前区块前一个区块的区块头的Hash值。

6)默克尔树根Hash地址(hashMerkleRoot):当前区块打包的所有交易是以默克尔树的方式记录的,该字段记录该交易树的树根hash值。当每一笔交易进入来区块被打包的时候,该字段需要重新计算更新一次;

PS :关于区块头中各信息与“挖矿”的关系以及如何保证比特币产出速度相对均匀,将在接下来的文章中详细讲解,敬请期待。

5.2 “区块体”结构解析

1)魔法数 :4字节不变常量,是比特币客户端解析Block数据时的识别码;(至于为什么选择这几个数,中本聪大神定的,就好比为何定义比特币总量为2100万个一样);

比特币Main网络的魔法数是0xD9B4BEF9,testNet网络的识别码是0xDAB5BFFA。不同的币种的魔法数一般不同,比如莱特币的Main网络魔法数是0xDCB7C1FC。

2)区块大小:4字节

3)交易数量 (Transition Count) :1~9字节,本区块包含的打包交易笔数;

原则上是上一个区块创建之后,到本区块创建完成之间,产生的所有的比特币交易的集合。

4)交易详情大小不定

交易详情里包含着所有笔交易的详情信息,以一条一条记录的方式记载,采用的数据结构是哈希树(默克尔树);详细记载了比特币的交易记录和相关细节。

其中在比特币收支详情里面,记录了比特币收支地址比特币收支的数量merkle节点值 数字签名等情况,因此收支详情是交易记录中最重要的部分。

PS : "交易"的官方定义是什么?

“一笔交易代表着一次比特币价值的转出,每一笔交易都要向全网中的所有节点广播,并被认可,然后该笔交易才能被打包到下一个区块中。每一笔交易的输入都是前序某个交易的输出(coinbase交易除外)。任何交易的详情是不加密存储的,这也就意味着,每当交易要被打包到区块中的时候,随时随地查询浏览交易的详情信息是可能的。”

---转译自《Bitcoin Wiki # Transaction》

以上就是区块链的区块结构解析~

以上内容,如有不当之处,欢迎Diss指正~


via:简书



最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多