一:1、什么是区块链?
区块链是包含交易信息的区块从后向前有序链接起来的数据结构,也是一本公开的数据账簿。
2、区块链的结构状况是什么呢?
在区块链中,每个区块都指向前一个区块。区块链经常被视为一个垂直的栈,第一个区块作为栈底的首区块,随后的每个区块都被放置在其他区块之上,依次堆叠。
3、什么是区块高度?在一次堆叠区块的区块链中,区块与首区块之间的距离,就叫区块高度。有时也以“顶部”或“顶端”来表示最新添加的区块。
4、区块的形态特征是什么?
区块包含有创世区块、父区块和子区块。
每个区块头都会被进行SHA256加密哈希,可生成一个哈希值,通过这个哈希值,可以识别出区块链中的对应区块。同时,每一个区块都可以通过其区块头的“父区块哈希值”字段引用前一区块(父区块)。
每个区块 链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块)的链条。
每个区块只有一个父区块,但会暂时拥有多个子区块。
5、什么是区块链分叉?
一个区块出现多个子区块的情况被称为区块链分叉。
区块链分叉只是暂时状态,只有当多个不同区块几乎同时被不同的矿工发现时才会发生,最终只有一个区块会成为区块链的一部分,其他并生的区块会被丢弃,这样就解决了区块链分叉问题。
6、为什么比特币区块链具有不可篡改的安全性呢?
由于区块头里面包含“父区块哈希值”字段,所以当前区块的哈希值因此也受到该字段的影响。
身份标示产生变异的父区块,它的子区块同时产生变化,一旦有足够多代的子区块、孙区块......继承了变异的“父区块哈希值”,这种瀑布效应将保证该区块不会被改变,除非强制重新计算该区块所有后续的区块。正是因为这样的重新计算需要耗费巨大的计算量,所以一个长区块链的存在可以让区块链的历史不可改变,这也是比特币安全性的一个关键特征。
二 1、区块结构
区块是一种被包含在公开账簿(区块链)里的聚合了交易信息的容器数据结构。
它由一个包含元数据的区块头和紧跟其后的构成区块主体的一长串交易组成。
区块头是80字节,而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易。
因此,一个包含所有交易的完整区块比区块头的1000倍还要大。
三 区块头
区块头由三组区块元数据组成。
首先是一组引用父区块哈希值的数据,这组元数据用于将该区块与区块链中前一区块相连接。
第二组元数据,即难度、时间戳和nonce,与挖矿竞争相关
第三组元数据是merkle树根(一种用来有效地总结区块中所有交易的数据结构)。
四 区块标识符:区块头哈希值和区块高度
区块主标识符是它的加密哈希值,一个通过SHA256算法对区块头进行二次哈希计算而得到的数字指纹。产生的32字节哈希值被称为区块哈希值,但是更准确的名称是:区块头哈希值。
请注意,区块哈希值实际上并不包含在区块的数据结构里,相反,区块哈希值是当该区块从网络被接收时由每个节点计算出来的。区块的哈希值可能会作为区块元数据的一部分被存储在一个独立的数据库表中,以便于索引和更快地从磁盘检索区块。
第二种识别区块的方式是通过该区块在区块链中的位置,即“区块高度(block height)”。
因此,区块可以通过两种方式被识别:区块哈希值或者区块高度。
一个区块的区块哈希值总是能唯一地识别出一个特定区块。一个区块也总是有特定的区块高度。但是,一个特定的区块高度并不一定总是能唯一地识别出一个特定区块。更确切地说,两个或者更多数量的区块也许会为了区块链中的一个位置而竞争。
五 创世区块
区块链里的第一个区块创建于2009年,被称为创世区块。它是区块链里面所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。
因为创世区块被编入到比特币客户端软件里,由于区块的“复制”和“继承”功能,每一个节点都“知道”创世区块的哈希值、结构、被创建的时间和里面的一个交易。因此,每个节点都把该区块作为区块链的首区块,从而构建了一个安全的、可信的区块链的根。
六 区块的连接
区块通过引用父区块的区块头哈希值的方式,以链条的形式进行相连。
七 Merkle 树
在比特币网络中,Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径。
Merkle树的效率
下面是比特币区块链中交易数量 区块的近似大小 路径大小(哈希数量) 路径大小(字节)
16笔交易 4KB 4个哈希 128字节
512笔交易 128KB 9个哈希 288字节
2048笔交易 512KB 11个哈希 352字节
65,535笔交易 16MB 16个哈希 512字节
从数据可得,当区块大小由16笔交易(4KB)急剧增加至65,535笔交易(16MB)时,为证明交易存在的Merkle路径长度增长极其缓慢,仅仅从128字节到512字节。
有了Merkle树,一个节点能够仅下载区块头(80字节/区块),然后通过从一个满节点回溯一条小的Merkle路径就能认证一笔交易的存在,而不需要存储或者传输大量区块链中大多数内容,这些内容可能有几个G的大小。
这种不需要维护一条完整的区块链的节点,又被称作简单支付验证(SPV)节点,它不需要下载整个区块而通过Merkle路径去验证交易的存在。
八 Merkle树和简单支付验证(SPV)
Merkle树被SPV节点广泛使用。SPV节点不保存所有交易也不会下载整个区块,仅仅保存区块头。它们使用认证路径或者Merkle路径来验证交易存在于区块中,而不必下载区块中所有交易。
END