币圈与区块链

【学习笔记】区块

2018-10-23  本文已影响0人  吴轩霆

1. 关于区块

区块

区块由区块头和区块体两部分组成。其中区块的大小被限制在1M以内(为了防止资源浪费和DOS攻击),区块头的大小被固定为80个字节。

但目前随机比特币的发展,交易数量持续增加,1M的大小能存储的交易数量有限,导致大量的交易积压。因此目前正在考虑扩容方案。


区块头

区块头中记录了版本号、上一个区块的Hash地址、merkle根、区块创建时间戳、区块的工作量难度目标以及用于计算目标的参数值。

字段大小描述

version4字节版本号,用于跟踪软件/协议的更新

prevBlockHash32字节上一个区块头的Hash地址

merkleRoot32字节该区块中交易的merkle树根的哈希值(稍后详细说明)

time4字节该区块的创建时间戳

difficultyTarget4字节该区块链工作量证明难度目标(稍后讲解工作量证明)

nonce4字节用于证明工作量的计算参数

区块体

区块体中记录了该区块存储的交易数量以及交易数据。

字段大小描述

numTransactionsBytes1字节交易数量占用的字节数

numTransactions0-8个字节区块内存储的交易数量

transactions不确定区块内存的多个交易数据

为了节约区块的存储空间,区块内的交易数量字段采用了压缩存储。在读取交易数量之前,会先读取numTransactionsBytes字段值。

如果该值小于253,则用直接将该值作为交易数量

如果该值等于253,则读取之后的两个字节作为交易数量

如果该值等于254,则读取之后的4个字节作为交易数量

否则,读取之后的8个字节作为交易数量

理解:

1. 区块中最有价值的是交易信息(区块体),而区块头类似于标签/评注,包含版本、上个区块头哈希值、本区块默克尔根哈希值、区块创建时间戳、区块的工作量难度目标以及用于计算目标的参数值。而交易信息通过随机散列构建成默克尔哈希值,如下图

2.  关于区块大小容量的问题。1)创立之初,在数据打包的过程中,会导致普通计算机 CPU 超负荷计算,加之当时的比特币价格很低,长此以往,不利于更多矿工的加入,导致算力中心化。2)防止黑客攻击,区块太多,计算时间过长,会给黑客足够的时间

比特币的矛盾——安全性、可靠、保证足够多的节点VS高效,能让更多人更快速的使用之间的平衡

上一篇下一篇

猜你喜欢

热点阅读