区块链学习札记二:“区块”是什么?

区块链学习札记二:“区块”是什么?

 

        区块是区块链的基本结构单元,甚至“区块链”的名称也由此而来,可见其重要性。下面我们就对区块进行分析解剖,看看里面到底都有哪些东西?

 

       在区块链网络中,数据会以文件的形式被永久记录,这些文件称为区块区块是区块链的基本结构单元,由包含元数据的区块头和包含交易数据的区块主体构成。目前比特币区块链系统大约每10分钟会创建一个区块。

      一个区块是一些或所有最新比特币交易的记录集, 且未被其他先前的区块记录。新区块会被加入到记录的最后, 一旦写上, 就再也不能改变或删除。   

区块的主要参数如下表所示:

区块链学习札记二:“区块”是什么?_第1张图片

其中“魔法数”是比特币客户端解析Block数据时的识别码,比特币正式网络的魔法数是0xD9B4BEF9。不同币种的魔法数一般不同,比如莱特币的魔法数是0xDCB7C1FC。(注:前缀0x表示16进制)

区块头的大小为80字节,包括4字节的版本号、32字节(256位)的上一区块哈希值、32字节的Merkle根节点、4字节的时间戳、4字节的难度值和4字节的随机数。

区块头包含三组元数据:

  • 连接前一区块的哈希值数据
  • 挖矿难度、工作量证明、时间戳
  • 校验交易数据的Merkle树根数据

每个区块通过连接上一区块形成一个链式结构,如下图所示:

区块链学习札记二:“区块”是什么?_第2张图片

上图中的“区块1001”就指区块高度。区块高度相当于区块的编号,但由于分叉的可能,区块高度不能确定唯一的区块,即如果存在一个孤块,则这个孤块的区块高度,和主链上的另一个区块高度是相同的,所以不能仅仅用区块高度来识别一个区块。

头哈希值和区块高度都不保存在区块的数据结构中,但可以作为元数据存储在索引库中以便于快速检索。

头哈希值是对区块头经过两次SHA256计算得到的数字指纹,长度32字节。可以唯一地、明确地标识一个区块。一个区块的头哈希不包含在本区块中,但包括在下一个区块中。用这种方式就可以形成一个链状结构。

       比特币的区块设计在block.h文件中,比特币的区块由CBlock类来实现,CBlock的主体字段是CBlockHeader。

      ”区块“CBlockHeader代码结构如下

      

Class CBlockHeader
{
    public:
    //header
    int32_t nVersion;  //版本号
    uint256 hashPrevBlock;  //上一个区块的哈希值
    uint256 hashMerkleRoot; //交易列表的Merkle树根节点哈希值。
    uint32_t nTime;  //当前时间戳
    uint32_t nBits;  //当前挖矿难度,nBits越小,难度越大
    uint32_t nNonce;  //随机数Nonce值
    CBlockHeader()
    {
    SetNUll();
    }
}

  参见:CBlockHeader英文说明

 区块头的主要参数如下表所示:

区块链学习札记二:“区块”是什么?_第3张图片

其中bits是用指数形式表示的256位难度目标值,矿工计算的区块Hash值必须比bits值小。每个块存储一个十六制的目标Hash值的压缩表达式(称之为Bits)。例如Bits值:0x1b0404cb,对应的十六进制的目标Hash值就为如下形式:

区块链学习札记二:“区块”是什么?_第4张图片

时间戳从区块生成的一刻就存在于区块之中。对应每次交易记录的认证。时间戳直接写在区块链中,不可篡改。每个时间戳会将前一个时间戳纳入哈希值中,依次相连,形成完整链条。

区块链学习札记二:“区块”是什么?_第5张图片

区块体包含10分钟内选定的交易记录,第一笔交易(coinbase交易)是用于奖励矿工比特币的特殊交易,由矿工自己添加进区块。

目前区块的大小是1M,即1048576个字节。每个交易信息所占的空间大约是250字节。那么一个区块可以包含的交易总数约为41.94笔。比特币网络中每10分钟即600秒左右出一个块,那么一个区块每秒能处理的交易数量为4193/600,约为7个。由此可见,比特币网络处理交易的效率并不高,有时一笔交易需要等待很久才能被确认。2018年双11的峰值交易量是49.1万笔/秒,是比特币交易效率的7万倍。

区块链学习札记二:“区块”是什么?_第6张图片

既然相差如此悬殊,我们为什么还要使用区块链技术呢?

从前面我们对区块链运行原理的分析可知,区块链的目标就是打造一个去中心化的自运转体系,用以解决中心化机构存在的信任问题。在区块链中,要想改动一个区块数据,必须同时改动该区块后面的所有区块,而将一个区块放入主链中需要消耗非常多的资源,成本非常巨大,随着后面添加的区块越来越多,要想改动某个区块几乎是不可能的。从这个角度来看,区块链是在用效率换信任。在效率和信任不能两全的时候,信任所占的权重更大一些。


备注:学习笔记,日有所得。

           --不间端地思考,实时地批判你的工作!

你可能感兴趣的:(区块链)