主页 > imtoken中文版app > 比特币的“区块”究竟藏着什么秘密:区块链区块结构解析
比特币的“区块”究竟藏着什么秘密:区块链区块结构解析
【简易区块链@jianshu】栏目地址:欢迎收看!
(~哈哈,博主是不折不扣的农药粉~)
1、什么是“区块链”?
在描述“区块”的组成和结构之前,我们先简单概括一下什么是“区块链”?
1)“区块链”一词来源于【中本聪】11月1日2:10发表的论文《比特币:一种点对点电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System) , 2008 电子现金系统);
2)一句话简单概括:“区块链是一种基于分布式共识机制(Consensus Progress)、去中心化(Decentralized)、采用加密技术的‘账本’数据库”;
---通俗地说,区块链的本质是一个分布式存储系统,一个分布式数据库,没有管理员(也可以理解为每个人都是管理员),所有节点存储全量的数据信息。
3)区块链的组成:区块链底层技术&P2P通信协议&共识机制&加密技术&时间戳服务器;
4)“区块+链+时间戳”是区块链最大的创新点。
PS 1:“区块链”知识介绍请谷歌关键字“区块链”,会有很多详细介绍,本系列文章不会花精力介绍。
PS 2:关于共识机制相关的话题,我会在《如何解决“拜占庭将军”问题:共识机制的作用》中详细讲解。
2、“区块链”有哪些分类?
目前存在三种类型的“区块链”:
1)公共区块链:
特点:所有个人或组织都可以发送交易,交易可以通过区块链进行有效确认; 任何人都可以参与共识过程、认证和记账;
2)联合(行业/组织)区块链(consoritum Blockchain)
特点:在一个群体中,预选节点按照一定的策略(如普通DPOS)指定,只有预选节点参与共识过程和记账。 所有节点(包括预选节点)都可以发送交易;
3)私有区块链(Private Blockchain)
特点:简单采用区块链技术,但区块链的记账权、共识认证权、数据写入权限为私人(或企业组织)所有;
---具体解释请参考《区块链:重塑经济与世界》
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. 比特币区块结构分析
如图所示,是比特币的区块结构:
《比特币》区块结构:下面将分析图中各个字段的含义
5.1 “区块头”结构分析
1)版本号Version:4个字节大小,每个区块的版本号,标记当前区块生成的比特币核心系统的版本; 目前主链(main)Block上有两个版本号,分别为1和2; (2版本升级了coinbase,增加了区块高度参数);
2) Timestamp Timestamps:4字节大小,核心字段,从1970-01-01T00:00 UTC开始的秒数;
3)难度系数difficulty:大小为4字节,存储格式为难度系数的HASH值。 该字段标记当前区块被“挖出”的难度(哈希碰撞难度);
4)随机数Nonce:4字节大小,当前区块工作量证明的参数(一串0开头的数字),存储格式为Hash值。 哈希计算的目标值,值随机变化。 当“矿机”节点通过Hash计算出随机数的值时,就是“挖矿”的初始结果(后续六个区块的认证后,才是真正的结果,即最终状态);
5) 前序区块头的哈希地址(hashPrevBlock):32字节大小,为当前区块的前一个区块的区块头的哈希值。
6) Merkle Root Hash Address (hashMerkleRoot):当前区块中打包的所有交易都以Merkle树的形式记录,该字段记录交易树的根哈希值。 当每笔交易进入区块并打包时,该字段需要重新计算并更新一次;
PS:区块头中的信息与“挖矿”的关系,以及如何保证比特币的产出速度相对均匀,将在下一篇文章中详细讲解,敬请期待。
5.2 “块体”结构分析
1)Magic number:4字节不变常量,是比特币客户端解析Block数据时的识别码; (至于为什么选择这些数字,中本聪决定,就像为什么比特币总量定义为2100万一样);
比特币主网的幻数是0xD9B4BEF9,testNet网络的识别码是0xDAB5BFFA。 不同货币的幻数一般不同。 例如莱特币的主网幻数为0xDCB7C1FC。
2)块大小:4字节
3)Transition Count:1~9字节,本区块包含的打包交易数;
原则上,它是前一个区块创建到本区块创建之间产生的所有比特币交易的集合。
4)交易明细大小不一
交易明细包含所有交易的详细信息,一一记录,采用的数据结构是哈希树(默克尔树); 详细记录了比特币的交易记录和相关细节。
其中,在比特币收支明细中,记录了比特币收支地址、比特币收支数量、merkle节点的价值、数字签名比特币系统架构,所以收支明细是最重要的交易记录的一部分。
PS:“交易”的官方定义是什么?
“一笔交易代表了一次比特币价值的转移,每笔交易都必须广播到全网所有节点并获得认可,然后才能将这笔交易打包到下一个区块中。每笔交易的输入是一笔交易的输出之前的交易(coinbase交易除外)。任何交易的详细信息都是不加密存储的,这意味着每当一笔交易要打包成一个区块时,都可以随时随地查询和查看交易详情。”
---译自《比特币维基#交易》