美文网首页区块链研究室区块链大学金马带你定投区块链
比特币的“区块”中藏有什么秘密:区块链区块结构解析

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

作者: 贝壳儿说 | 来源:发表于2018-03-08 16:45 被阅读298次
    区块链里有什么?(哈哈 ,博主是一个不折不扣的农药粉)

    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

    敬请期待


    欢迎关注微信公众号:【简亿区块链】,新鲜出炉的文章会同时发布!

    微信公众号二维码

    相关文章

      网友评论

      • 开发者头条_程序员必装的App:感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/ldyrb2 欢迎点赞支持!
      • _南星_:请教个问题,一个区块是在什么时候开始被节点打包的?
        岳丽_8bde:@简亿区块链 “然后,凡是发起广播的节点 都算是初步创造了新区块,在经过未来6个新区块的交易确认之后,只会剩下一个区块是有效的了(只有一个区块会被连续6次有效确认)”
        这个是指每挖出6个矿,只会有一个最后是有效的吗?其他的5个是全部废掉吗?
        贝壳儿说:@简亿区块链 错别字修正,挖坑=挖矿 哈哈
        贝壳儿说:谢评论!
        1)先回复你的问题,我的理解是:节点只要还在线运行(没有退出区块链网络),就一直7*24的在做着创造“新区块”这件事;
        2)修正一个概念吧,确切说你问的是“一个区块是在什么时候开始被节点生成的”,然后生成的每一个区块 都会打包从上个区块到本区块初步生成之间的 所有比特币交易。
        3)详细解释:
        我们拿“比特币”举例子,凡是运行比特币客户端的节点(不管是CPU ,还是GPU 甚至是现在流行的矿机 或者 矿池组)都是比特币Main网络里的一个有效节点,都具有哈希计算的能力,任何一个节点都是无时不刻的做着重复的哈希计算,这么做的目标呢?是计算出一个符合 特定规则(以连续0开头的十六进制,连续的0越多越有效)的哈希值。当某个(有可能某些)节点都算到了一个有效的哈希值,那么,该节点就会对全网络中的所有节点发起广播“第XX号 区块找到啦!发现者是某某某”。然后,凡是发起广播的节点 都算是初步创造了新区块,在经过未来6个新区块的交易确认之后,只会剩下一个区块是有效的了(只有一个区块会被连续6次有效确认);
        4)关于区块生成,交易打包(我们俗称的“挖矿“),将在本系列专栏,下一篇《什么是“挖坑”?挖坑原理解析与非对称加密算法SHA256》中详细介绍,预计发布日期,最迟2018年3月19日,敬请期待:relaxed:
      • 贝壳儿说:欢迎转发评论,如有不当之处,欢迎指正~:relaxed:

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

      本文链接:https://www.haomeiwen.com/subject/mrmyfftx.html