跳转至

区块链的组成和结构

区块链不是单一的技术,更多的是一种技术。区块链是一个建筑概念,区块链有许多种建造方式,每种变化都会对系统的运行产生不同的影响。在这一章中,我们将介绍区块链技术在所有或大部分当前实现中的应用。

本章结束时,您应该能够描述区块链的各个部分,并在体系结构层面上评估一种区块链技术相对于另一种技术的能力。

以下是我们将涉及的概念:

  • 阻碍
  • 街区之间的链条
  • 哈希和签名
  • 方块图
  • 街区矿工
  • 块验证器
  • 智能合同
  • 区块链速度

阻碍

区块链是一种特定的技术,但是有很多种形式和品种。例如,比特币和以太坊就是工作证明区块链。以太坊有智能合约,许多区块链允许自定义令牌。区块链可以通过他们的共识算法(PoS、PoW 等)来区分——在第 7 章 达成共识中涉及,以及他们的功能集,例如运行智能合约的能力以及这些智能合约在实践中如何操作。所有这些变化都有一个共同的概念:块。区块链的最基本单位是块。思考块的最简单方式是想象一个基本的电子表格。在其中,您可能会看到类似这样的条目:

| 账户 | 改变 | 新余额 | 旧余额 | 操作 | | 账号-9234222 | −$2,000 | $5,000 | $7,000 | 汇款至账户-12345678 | | 账号 12345678 | $2,000 | \(2,000 | 0 | 从账户-9234222 接收资金 | | 账号 3456789 | -\)200 | $50 | $250 | 汇款至账户-68890234 | | 账号 68890234 | $200 | $800 | $600 | 从账户-3456789 接收资金 |

块是网络上的一组交易条目,存储在作为区块链网络参与者的计算机上。每个区块链网络都有一个块时间,或者说每个块代表事务的大致时间量,还有一个块大小:一个块无论如何都可以处理的事务总量。如果一个网络的阻塞时间为两分钟,而在这两分钟内只有四个事务,那么该块将只包含这四个事务。如果一个网络有 10,000,000 个事务,那么可能会有太多事务而无法容纳在块大小中。在这种情况下,事务必须等待剩余空间的开放块。一些区块链用网络费用的概念来处理这个问题。网络费是发送方愿意支付的金额(以区块链的本地令牌为单位),以便将交易包含在一个块中。费用越高,就越有优先权立即被收录到外链上。

街区之间的链条

除了交易分类账之外,每个块通常还包含一些额外的元数据。元数据包括以下内容:

  • 对前一个块的引用
  • 关于网络的元数据
  • 事务的 Merkle 根,用于检查块的有效性

这些基本要素对所有区块链人来说都是一样的。以太坊,比特币,莱特币,以及其他使用这种常见的模式,这种模式是什么使它成为一个链。每个链还倾向于包含特定于该生态系统的其他元数据,这些差异将在以后的章节中讨论。这里有一个来自比特币区块链的例子:

中本聪:http://Bitcoin.org/Bitcoin.pdf,com,https://commons . wikimedia . org/w/index . PHP?curid=245428

如果你在问,什么是 Merkle 根?,这就把我们带到了下一组关键概念:散列和签名。

哈希和签名

假设您有两个 50 页长的文本文件。你想知道它们是相同还是不同。你可以这样做的一个方法是散列它们。哈希(或哈希函数)是一种数学过程,通过它可以将任何输入转换为固定长度的输出。这些函数有很多,最常见的是 SHA-1、SHA-2 和 MD5。例如,下面是一个名为 MD5 的散列函数的输出,输入两页文本:

9a137a78cf0c364e4d94078af1e221be

哈希函数的强大之处在于,当我在末尾添加一个字符并运行相同的函数时会发生什么:

8469c950d50b3394a30df3e0d2d14d74

如你所见,输出完全不同。如果您想快速证明某些数据没有被以任何方式更改过,哈希函数可以做到这一点。对于我们的讨论,下面是哈希函数的重要部分:

  • 计算机运行起来非常快。
  • 该功能是单向的。您可以很容易地获得哈希,但是实际上您无法使用哈希来恢复原始数据。
  • 它们可以递归使用。例如,我可以取 hash 的 hash;比如 MD5( 8469c950d50b3394a30df3e0d2d14d74)变成了705b003fc9b09ecbeac0b852dfc65377

哈希的这种递归特性让我们想到了 Merkle 树的概念,它是以申请专利的人命名的。Merkle 树是一种数据结构,如果你把它画在白板上,它就像一棵树。在树的每一步,根节点包含其子节点数据的散列。以下是 Merkle 树的示意图:

由瑞典 David goth Berg 创作的原创插图,已向公众发布

在区块链中,这意味着存在递归散列过程。递归散列是指我们获取散列的散列值。例如,假设我们有以下单词和它们的哈希值。在这里,我们将使用 MD5 算法,因为在 web 上很容易找到 MD5 哈希代码,所以您可以自己尝试:

Salad: c2e055acd7ea39b9762acfa672a74136
Fork: b2fcb4ba898f479790076dbd5daa133f
Spoon: 4b8e23084e0f4d55a47102da363ef90c

为了获得递归或根散列,我们将把这些散列加在一起,如下所示:

c2e055acd7ea39b9762acfa672a74136b2fcb4ba898f479790076dbd5daa133f4b8e23084e0f4d55a47102da363ef90c

然后,我们将获取该值的哈希值,结果如下:

189d3992be73a5eceb9c6f7cc1ec66e1

这个过程可以反复发生。然后,可以使用最终的散列来检查树中的任何值是否已被更改。这种根哈希是一种数据高效且功能强大的方法,可以确保数据的一致性。

每个块包含所有事务的根哈希。由于哈希的单向性质,任何人都可以查看这个根哈希,并将其与块中的数据进行比较,从而知道所有数据是否有效且未更改。这使得任何人都可以快速验证每笔交易是正确的。每个区块链在这种模式上略有不同(使用不同的函数或存储数据略有不同),但基本概念是相同的。

数字签名

既然我们已经讨论了散列,是时候回顾一个相关的概念了:数字签名。数字签名使用散列的属性,不仅证明数据没有改变,而且提供谁创建了它的保证。数字签名摆脱了散列的概念,但也增加了一个新概念:数字密钥

什么是数字键?

所有常见的数字签名方法都使用所谓的公钥加密。在公钥加密中,有两个密钥:一个公钥和一个私钥。要创建签名,首先要生成原始数据的散列,然后用私钥加密该散列。加密的散列和其他信息(如用于成为签名一部分的加密方法)一起被附加到原始数据中。

这就是公钥发挥作用的地方。公钥和私钥之间的数学联系允许公钥解密哈希,然后可以使用哈希来检查数据。因此,现在可以检查两件事情:谁签署了数据,以及签署的数据没有被更改。以下是相同内容的图示:

由 Engelbert Niehaus 使用 SVG 配色方案,由用户 Bananenfalter 使用 SVG 颜色的插图,由 Bananenfalter 使用 Inkscape 编辑,CC BY-SA 3.0,https://en.wikiversity.org/w/index.php?curid=226250

这种加密形式对区块链技术至关重要。通过散列和数字签名,区块链能够记录关于动作(令牌的移动)的信息以及证明谁发起了这些动作(通过数字签名)。

让我们创建一个这样的例子。杰里米和纳迪亚希望安全地互相发送信息。每个都发布一个公钥。Jeremy 的将如下所示(使用 1,024 位的 RSA 算法):

-----BEGIN PUBLIC KEY-----
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgH+CYOAgKsHTrMlsaZ32Gpdfo4pw
JRfHu5d+KoOgbmYb0C2y1PiHNGEyXgd0a8iO1KWvzwRUMkPJr7DbVBnfl1YfucNp
OjAsUWT1pq+OVQ599zecpnUpyaLyg/aW9ibjWAGiRDVXemj0UgMUVNHmi+OEuHVQ
ccy5eYVGzz5RYaovAgMBAAE=
-----END PUBLIC KEY-----

使用该密钥,他将私有另一个密钥,如下所示:

-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgH+CYOAgKsHTrMlsaZ32Gpdfo4pwJRfHu5d+KoOgbmYb0C2y1PiH
NGEyXgd0a8iO1KWvzwRUMkPJr7DbVBnfl1YfucNpOjAsUWT1pq+OVQ599zecpnUp
yaLyg/aW9ibjWAGiRDVXemj0UgMUVNHmi+OEuHVQccy5eYVGzz5RYaovAgMBAAEC
gYBR4AQYpk8OOr9+bxC6j2avwIegwzXuOSBpvGfMMV3yTvW0AlriYt7tcowSOV1k
YOKGqYdCflXwVTdtVsh//KSNiFtsLih2FRC+Uj1fEu2zpGzErhFCN2sv1t+2wjlk
TRY78prPNa+3K2Ld3NJse3gmhodYqRkxFFxlCmOxTzc4wQJBAOQ0PtsKCZwxRsyx
GAtULHWFIhV9o0k/DjLw5rreA8H3lb3tYZ5ErYuhS0HlI+7mrPUqzYaltG6QpJQY
YlMgktECQQCPClB1xxoIvccmWGoEvqG07kZ4OBZcBmgCzF6ULQY4JkU4k7LCxG4q
+wAeWteaP+/3HgS9RDQlHGITAmqhW6z/AkBaB16QzYnzC+GxmWAx//g2ONq0fcdw
eybf4/gy2qnC2SlDL6ZmaRPKVUy6Z2rgsjKj2koRB8iCIiA7qM8Jmn0xAkBzi9Vr
DqaNISBabVlW89cUnNX4Dvag59vlRsmv0J8RhHiuN0FT6/FCbvetjZxUUgm6CVmy
ugGVaNQgnvcb2T5pAkEAsSvEW6yq6KaV9NxXn4Ge4b9lQoGlR6xNrvGfoxto79vL
7nR29ZB4yVFo/kMVstU3uQDB0Pnj2fOUmI3MeoHgJg==
-----END RSA PRIVATE KEY-----

与此同时,Nadia 也会这样做,从而产生以下两个密钥:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHWwgTfI5Tic41YjUZqTmiKt+R
s5OMKIEdHPTyM8FZNaOBWIosFQbYk266V+R7k9odTnwCfi370GOt0k5MdTQilb9h
bK/lYiavIltgBd+1Em7xm7UihwO4th5APcg2vG4sppK41b1a9/I5E6P/jpQ320vF
BMuEtcnBoWawWcbXJwIDAQAB
-----END PUBLIC KEY-----

这是她的私人钥匙:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDHWwgTfI5Tic41YjUZqTmiKt+Rs5OMKIEdHPTyM8FZNaOBWIos
FQbYk266V+R7k9odTnwCfi370GOt0k5MdTQilb9hbK/lYiavIltgBd+1Em7xm7Ui
hwO4th5APcg2vG4sppK41b1a9/I5E6P/jpQ320vFBMuEtcnBoWawWcbXJwIDAQAB
AoGBAKz9FCv8qHBbI2H1f0huLQHInEoNftpfh3Jg3ziQqpWj0ub5kqSf9lnWzX3L
qQuHB/zoTvnGzlY1xVlfJex4w6w49Muq2Ggdq23CnSoor8ovgmdUhtikfC6HnXwy
PG6rtoUYRBV3j8vRlSo5PtSRD+H4lt2YGhQoXQemwlw+r5pRAkEA+unxBOj7/sec
3Z998qLWw2wV4p9L/wCCfq5neFndjRfVHfDtVrYKOfVuTO1a8gOal2Tz/QI6YMpJ
exo9OEbleQJBAMtlimh4S95mxGHPVwWvCtmxaFR4RxUpAcYtX3R+ko1kbZ+4Q3Jd
TYD5JGaVBGDodBCRAJALwBv1J/o/BYIhmZ8CQBdtVlKWCkk8i/npVVIdQB4Y7mYt
Z2QUwRpg4EpNYbE1w3E7OH27G3NT5guKsc4c5gcyptE9rwOwf3Hd/k9N10kCQQCV
YsCjNidS81utEuGxVPy9IqWj1KswiWu6KD0BjK0KmAZD1swCxTBVV6c6iJwsqM4G
FNm68kZowkhYbc0X5KG1AkBp3Rqc46WBbpE5lj7nzhagYz5Cb/SbNLSp5AFh3W5c
sjsmYQXfVtw9YuU6dupFU4ysGgLBpvkf0iU4xtGOFvQJ
-----END RSA PRIVATE KEY-----

有了这些钥匙,杰里米决定给娜迪亚发一条信息。他使用她的密钥对以下消息进行加密:我爱比特币,这产生了以下数据:

EltHy0s1W1mZi4+Ypccur94pDRHw6GHYnwC+cDgQwa9xB3EggNGHfWBM8mCIOUV3iT1uIzD5dHJwSqLFQOPaHJCSp2/WTSXmWLohm5EAyMOwKv7M4gP3D/914dOBdpZyrsc6+aD/hVqRZfOQq6/6ctP5/3gX7GHrgqbrq/L7FFc=

没人能看懂这个,除了娜蒂娅。使用相同的算法,她输入该数据和她的私钥,并得到以下消息:

I love Bitcoin.

我们将在第四章密码学和区块链背后的机制中讨论这个话题。

示例块数据

在这一节中,我们将研究在区块链使用的数据结构。我们将主要关注以太坊、比特币和区块链比特币,以了解关键的共性和差异。

以太坊块示例

以下是来自以太坊块示例的数据,来自块 5223669:

如果你还记得,在这一章的开始,我们说过区块链有三个共同点:对前一个块的引用,块中事务的散列,以及特定于网络的元数据。在以太坊网络的这个区块中,这三者都存在。对先前块的引用包含在块高度和父散列值中。事务的散列是散列条目,元数据是其他的一切,这将是网络特定的。

比特币块

这是一个比特币区块的快照:

比特币和以太坊都是权力链;现在让我们来看看一个利益相关的生态系统:Bitshares。

以下是来自 Bitshares 块的一些数据:

尽管体系结构完全不同,但基本原理仍然存在:对前一个块、Merkle 根和网络元数据的引用。在 Bitshares 中,还可以看到有见证签名。作为 PoS 区块链,Bitshares 有验证器(它们被称为见证)。在这里,我们看到了负责计算这个块的计算机的见证和签名。

全球状态

区块链技术的关键属性之一是它可以作为一个受信任的全球国家。在许多应用中,可信的全球状态很重要,但也很困难,比如金融技术和物流。

例如,几年前,我在网上订购了一些摄影器材。几天后,我回到家,惊讶地发现我的设备已经到了。我非常感激放在外面的昂贵设备没有被偷。直到第二天,我才收到卖家发来的邮件,提醒我包裹已经寄出。

这是全球状况的清晰分类。事实是相机已经装在一辆卡车上了,但是我和托运人都没有妥善保存这些信息。如果摄影器材是从我的门廊被偷的,那就很难发现发生了什么。

如果卖家、物流公司和我都在区块链上读写数据,这是不可能的。当物流公司登记货物时,对象的状态会发生变化,只要下一个区块最终确定,卖方和我都会知道。

块时间和块大小

如前所述,每个区块链都有一个阻塞时间和一个阻塞 k 大小。每个网络可能有非常不同的值和处理阻塞时间的方式。例如,比特币的封锁时间是 10 分钟,而以太坊的封锁时间是 20 秒。在 Stellar 中,阻塞时间约为 4 秒。这些阻塞时间由运行网络的代码决定。对于比特币、莱特币、以太坊等网络来说,阻断时间其实是一个平均值。因为这些是战俘网络,一旦矿工解决了采矿难题,区块就完成了,这允许他们认证区块。在这些网络中,难题的难度被自动调整,使得平均达到期望的阻塞时间。

块大小是每个块中可以存储的最大信息量。对于比特币来说,这相当于 1 MB 数据的交易量。对于以太坊来说,极限实际上是用 GAS 来衡量的,GAS 是一种既衡量处理能力(因为以太坊有智能合约)又衡量存储的特殊单位。与比特币不同,每个区块的气体/存储限制不是固定的,而是由矿工动态调整。

需要注意的是,在被网络最终确定之前,数据块只包含可能的信息。例如,可能发生 1000 个事务,但是如果只有 500 个事务进入下一个块,那么只有这 500 个事务是真实的。剩余的事务将继续等待被包括到未来的块中。

区块链矿工

区块链矿工和区块链验证者(见即将到来的章节)都与共识有关,这将在 之三 7 达成共识中深入探讨。一般来说,区块链矿工与区块链联系在一起。战俘链通过让作为矿工的计算机竞争来完成认证链中某个区块所需的工作。目前,仅有的主要区块链是比特币、莱特币和以太币。大多数其他系统使用PoSconsensus 的变体,我们将在下一个区块链验证器部分讨论。我们将在第【18】章章“采矿”中详细介绍采矿是如何工作的。****

****# 区块链验证器

区块链验证器被 PoS 系统使用。PoS 系统的工作原理是要求希望加入网络的计算机拥有股份——大量的令牌——来协助区块链。与 PoW 算法不同,计算机不能加入网络并期望在共识中有任何发言权。相反,他们必须通过象征性所有权买入。根据网络的不同,验证器的命名约定可能会有所不同。Tendermint 有验证器,Steemit 和 Bitshares 有见证器,Cardano 有涉众,等等。验证器是一台具有正股份(令牌数)的计算机,它被允许加入网络并这样做。每个链都有自己的规则,这些规则将在第 之三 7 达成共识中更深入地讨论。

智能合同

当一些区块链能够响应于链的变化而执行动作和行为时,它们被称为具有智能契约。这些将在第 14 章、智能合约第 17 章分散应用中深入讨论。

区块链速度

对区块链系统的一个持续关注是性能。公共区块链是全球系统,其系统资源由全球所有用户同时共享。拥有如此庞大的用户群,资源限制是一个真正的问题,并且已经造成了真正的问题。例如,一款名为 CryptoKitties 的流行游戏在以太坊上推出,导致网络拥塞。由于 CryptoKitties 的负载淹没了网络,其他应用程序变得几乎无法使用。

如何计算区块链吞吐量

计算自动区块链吞吐量的快速而简单的方法如下:

对于比特币,交易吞吐量约为7tx/秒。这是因为相对较小的块和非常长的块时间。以太坊的阻塞时间很短,但阻塞非常小,最终大约为14tx/秒。Stellar、Bitshares、Waves 等区块链的速度可以达到超过,1000 tx/秒

与传统网络的比较

VISA 是全球首屈一指的支付处理网络。该公司的一个博客透露,VISA 每秒可以处理超过 40,000 笔交易。这是峰值容量,除了圣诞节之类的时候,它通常不会接近峰值容量。然而,应该清楚的是,区块链要想在处理全球支付业务方面与 VISA 竞争,还有很长的路要走。然而,较新的网络,如 EOS 和 COSMOS,正在尝试创新的多线程设计和分段区块链区。

摘要

现在你应该了解区块链的基本组成部分。块是组合在一起的交易组,是区块链的基本单位。矿工是在战俘区块链上创造新街区的计算机。验证机,也称为证人或其他名称,是在 PoS 区块链上创建区块的计算机。数字签名由公钥和私钥组成,并使用数学来证明数据的作者。

哈希的关键思想是使用一个数学函数,将任意数据映射到一个简单的处理值。对数据的任何更改都会使最终值大不相同

  • 从散列中构造原始数据基本上是不可能的,但是从原始数据中创建散列是很容易的
  • 您可以使用这些属性来证明数据没有被更改

在下一章,我们将学习这些系统是什么,以及区块链是如何把它们都算进去的。我们将学习如何区分两种制度,以及为什么这些概念对区块链如此重要。****


我们一直在努力

apachecn/AiLearning

【布客】中文翻译组