《精通比特币》第七章-区块链

比特币核心客户端使用Google的LevelDB数据库存储区块链元数据。

在100个区块以后,区块链已经足够稳定,这时coinbase交易(包含新挖出的比特币的交易)可以被支付。几千个区块(一个月后)的区块链成为历史,永不改变。

(这一段我理解为,新构造一个链,大于100个块,已经不容易被篡改,可以正常使用了,中本聪一开始自己挖矿,是不是也考虑到这一点。为什么是100个?如何计算得出?)

一、构成

区块由head+body构成。body又由输入输出构成。head由三组区块元数据组成。

1.父区块哈希值

2.难度,时间戳,nonce。与挖矿竞争有关

3.merkle

这种分类很好,容易理解和记忆。

二、区块标志

区块主标识符是它的加密哈希,通过对区块头两次SHA256得到的数字指纹。区块哈希值实际上并不包含在区块的数据结构里。哈希值是当该区块从网络被接收时由每个节点计算出来的。可能会作为区块元数据的一部分被存储在一个独立的数据库表中,便于检索。

另一种识别方式是区块高度block height。

三、区块的连接

比如我是一个节点,保存了区块链从创世区块起的一个本地副本。比如我有2773414个区块在本地副本中,我也知道2773414块的哈希值,当我从网络上接收到一个新的区块,这个区块会有很多描述,其中包括父区块哈希值,一对比,正好相当,新区快加入区块链中。

四、Merkle树

双哈希二叉树,是一种数据结构。用途是:快速递归和校验大规模数据完整性。

不需要维护一条完整的区块链的节点,又被称为SPV节点,仅保存区块头,而通过Merkle路径去验证交易的存在。

当我想知道自己有没有收到比特币的时候,我会在与其他节点的通信链接上建立Bloom过滤器,限制只接收含有目标比特币地址的交易。当某个交易符合我的过滤器条件,他将以Merkle区块消息的形式发送该区块(包括区块头和一条路径)。

(SPV具体如何实现?)

你可能感兴趣的:(《精通比特币》第七章-区块链)