比特币:关于区块链的指南。第10部分

本文是有关比特币和区块链技术更精致的部分的第十篇指南,即使对于那些不是编码专家的人也可以使用。本文继续提供一种旨在逐步进入许多人称为“兔子洞”的指南。

就书目而言,有必要提及安德​​烈亚斯·安东诺普洛斯(Andreas M. Antonopoulos)所著的《精通比特币》一书,它是从中拍摄图像的。

比特币区块链

区块链是一种数据结构,包含交易块的列表(排序和反向链接),这些交易块可以存储为平面文件,也可以存储在简单的数据库中。 Bitcoin Core使用Google的LevelDB数据股票储区块链元数据。每个块都由散列(块头的SHA256)标识。使用块头中的前一个块哈希字段,将每个块链接到前一个(父)块。哈希序列将每个块链接到其父对象,从而创建到第一个创建的块(生成块)的反向链。

尽管每个区块只有一个父节点(之前只有一个区块哈希字段),但它可以暂时有多个孩子,这些孩子在“ fork”期间出生,这是在大约同时开采两个新区块时发生的一种临时情况。先前的区块哈希字段位于区块头ergo内部,会影响当前的区块哈希(如果更改了先前的区块哈希,则当前的区块哈希将相应地更改)。

块的结构

区块是一种“容器”数据结构,聚集了要包含在公共分类账(区块链)中的交易。一个块由一个包含元数据的头组成,其后是一个事务列表(一个完整的块约占头空间的10,000倍)。

块头

块的标题由三组元数据组成:

  • 对上一个块中哈希的引用;
  • 难度,时间戳和随机数(与挖矿相关的值);
  • 默克尔树的根。

标识符:块标题散列和块高度

块的主要指标是加密货币散列,即其指纹,它是通过对块头进行双散列(SHA256)制成的。生成的32字节哈希是块哈希,或更准确地说是块头哈希。这是与有史以来创建的第一个块相对应的那个:

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

请注意,无论是将区块传输到网络还是当其成为区块链的一部分时,区块哈希都不会包含在区块数据结构中。相反,当网络接收到该块时,它由每个节点计算。识别区块的另一种方法是通过其在区块链中的位置,称为区块高度。创建的第一个区块的高度为“ 0”,而在2017年1月1日,它的高度约为446,000。与块哈希不同,高度(不是块的数据结构的一部分)不是唯一的标识符,因为相同的“高度”可以在派生期间识别多个块。

创世块

第一个块或“零块”称为创世块。每个节点都以区块链或至少一个区块开始,然后在客户端进行编码,因此无法更改(这是构建可靠区块链的基础),因此,每个节点都知道创世区块的哈希和结构,当它是创建的等等。

在任何区块浏览器中查找“零区块”的哈希,您会发现一个描述此区块内容的页面,其中包含包含哈希的网址:

https://blockchain.info/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

该块包含一个隐藏的消息。 coinbase交易输入包含文本“ The Times 03 / Jan / 2009 Chancellor濒临银行第二次纾困”。这是要参考Times标题来证明日期的证明,并回顾独立机构的重要性。货币体系。

链接区块链中的区块

完整节点从创世块开始保留区块链的本地副本,一旦被网络接收并经过验证,该块便会在发现块并附着以延长链时不断更新。为了建立链接,节点检查传入的块头中的前一个块哈希。

默克尔树

比特币区块链中的每个区块都使用merkle树或二进制哈希树来包含区块中所有交易的摘要,该数据结构用于有效地总结和验证大型数据集的完整性。 Merkle树是包含加密货币哈希的二叉树。在计算机科学中,术语“树”用于描述分支数据结构,但是这些树通常上下颠倒显示,图的顶部是“根”,底部是“叶”。

默克尔树在比特币中用于汇总一个区块中的所有交易,产生整个交易集合的整体指纹(哈希),从而提供了一种非常有效的过程来验证交易是否包含在区块中。从一对递归哈希节点构建一个merkle树,直到只有一个哈希称为merkle根。比特币merkle树中使用的加密货币哈希算法两次应用SHA256。

当在Merkle树中对N个数据元素进行散列和汇总时,可以通过最大2 * log〜2〜(N)个计算来检查结构中是否包含任何数据元素,从而使其成为非常有效的数据结构。

由于Merkle树是二叉树,因此它需要偶数个“叶”。如果要汇总的事务数量奇数,将复制最后一个事务的哈希值以创建偶数个叶节点,也称为“平衡树”。

构建四个事务树的相同方法可以通用化为构建任何大小的树。在比特币中,通常在一个区块中进行数百至上千笔交易,这些交易的汇总方式完全相同,仅作为单个merkle根生成32字节的数据。

默克尔树和简化付款验证(SPV)

Merkle树被SPV节点广泛使用。 SPV节点不具有所有事务,也不下载完整的块,仅下载块头。为了验证交易是否包含在一个块中而不必下载该块中的所有交易,它们使用身份验证路径或merkle路径。

例如,考虑有一个SPV节点对向其钱包中某个地址的收款感兴趣。 SPV节点将在其对等连接上建立布隆过滤器,以将接收到的事务仅限制为包含感兴趣地址的事务。当对等方看到与bloom筛选器匹配的事务时,它将使用merkleblock消息发送该块。 merkleblock消息包含块头和将相关事务链接到块中merkle根的merkle路径。 SPV节点可以使用此Merkle路径将事务连接到该块,并验证该事务是否包含在块中。 SPV节点还使用区块头将区块连接到区块链的其余部分。交易与区块之间以及区块与区块链之间的这两个链接的组合表明交易记录在区块链中。最终,SPV节点将为块头和Merkle路径接收不到一千字节的数据,这比完整块(大约1兆字节)少一千倍。

测试网

除了“主”区块链(mainnet)外,还有其他用于测试的区块链:当前是testnet,segnet和regtest(并且正在使用simnet)。

帖子比特币:关于区块链的指南。第10部分首先出现在The Cryptonomist上。

资讯来源:由0x资讯编译自CRYPTONOMIST。版权归作者Alessio Salvetti所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢