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指正~
【简亿区块链时间】本期到此结束!
下期预告
主题:《“挖矿”的原理?“区块头”中的信息如何控制“挖矿”的节奏?》
预计发布时间:2018年3月16日 08:00
敬请期待
欢迎关注微信公众号:【简亿区块链】,新鲜出炉的文章会同时发布!
微信公众号二维码
网友评论
这个是指每挖出6个矿,只会有一个最后是有效的吗?其他的5个是全部废掉吗?
1)先回复你的问题,我的理解是:节点只要还在线运行(没有退出区块链网络),就一直7*24的在做着创造“新区块”这件事;
2)修正一个概念吧,确切说你问的是“一个区块是在什么时候开始被节点生成的”,然后生成的每一个区块 都会打包从上个区块到本区块初步生成之间的 所有比特币交易。
3)详细解释:
我们拿“比特币”举例子,凡是运行比特币客户端的节点(不管是CPU ,还是GPU 甚至是现在流行的矿机 或者 矿池组)都是比特币Main网络里的一个有效节点,都具有哈希计算的能力,任何一个节点都是无时不刻的做着重复的哈希计算,这么做的目标呢?是计算出一个符合 特定规则(以连续0开头的十六进制,连续的0越多越有效)的哈希值。当某个(有可能某些)节点都算到了一个有效的哈希值,那么,该节点就会对全网络中的所有节点发起广播“第XX号 区块找到啦!发现者是某某某”。然后,凡是发起广播的节点 都算是初步创造了新区块,在经过未来6个新区块的交易确认之后,只会剩下一个区块是有效的了(只有一个区块会被连续6次有效确认);
4)关于区块生成,交易打包(我们俗称的“挖矿“),将在本系列专栏,下一篇《什么是“挖坑”?挖坑原理解析与非对称加密算法SHA256》中详细介绍,预计发布日期,最迟2018年3月19日,敬请期待