0.1. 理解区块链¶
0.1.1. 关于本教程¶
为什么需要区块链教程?互联网上难道没有关于区块链的很多资料吗?确实有。但从我们的经验来看,其中大部分资料在解释区块链的各个部分或将这些部分组合起来时都做得不够好。尽管目前有很多关于区块链的热门新闻文章,但通常你会从这些文章中了解到的知识并不比刚开始时多。
区块链书籍呢?有没有好的?是的,绝对有。特别是,我们可以推荐你阅读:Arvind Narayanan、Joseph Bonneau、Edward Felten、Andrew Miller 和 Steven Goldfeder, 比特币和加密货币技术 ,普林斯顿大学出版社,2016 年。你可能可以在网上找到免费的副本。虽然它更侧重于区块链技术的加密货币方面,但它确实涵盖了所有基础知识,并且相对全面。
但是,有理由让我们觉得这个教程是对区块链文献中非常有价值的补充。首先,我们希望提供一个相当全面的区块链基础知识介绍,但不是一本书那么长。我们的目标是让你有足够的信息,让你能够了解典型的区块链研究论文在深入细节时在说什么。这样,你就有了足够的背景来填补任何流行媒体或商业文章中关于区块链的不可避免的空白。第二个原因是我们独特的能力,能够提供互动式视觉内容。作为 OpenDSA 项目的一部分,我们能够使用各种小部件和幻灯片来呈现我们的内容,帮助你亲身体验,或者更直观地看到算法是如何工作的。
0.1.2. 区块链概念概述¶
本节简要介绍了区块链的基本概念。(这非常简单!)在后续章节中,我们将深入探讨区块链所依赖的加密技术背景,随后讨论许多区块链应用中常用的基本数据结构。然后,我们将详细介绍分布式区块链如何可靠地更新,使用所谓的共识算法。我们将详细研究区块链最著名的应用:加密货币。我们将展示原始加密货币(比特币)的工作原理以及它与其他一些知名加密货币之间的区别。然后,我们将讨论智能合约的概念及其用途。最后,我们将讨论所有这些概念如何被用于区块链的其他应用。
区块链最重要的是知道 这都不难 。 (除了加密部分可能有些例外。但你可以将所有与加密相关的硬核部分视为黑箱子。你只需要理解区块链应用中基本加密服务提供的内容,不必关心加密内部工作细节。) 许多人对区块链感到困惑的主要原因是,你需要将大约半打个位子的不熟悉(但容易理解)的东西组合在一起才能得到一个应用。
区块链中最基本的概念是哈希值,它是所有区块链应用的基础。如果你曾经研究过哈希表的运作方式,或者了解过密码系统的工作原理,那么你就知道哈希值是什么了。广义地说,哈希值是一种将某种输入(在这种情况下是字符串和数字)转换为固定长度输出的函数。在哈希表存储系统中,这个输出将是一个哈希表的插槽。但哈希值还有许多其他用途。哈希值是由一些确定性算法创建的,因此如果你再次向哈希函数输入相同的信息,就会得到相同的结果。理想情况下(出于我们即将看到的理由),我们希望它几乎不可能恢复原始信息,或者即使我们只知道哈希值,也无法知道原始信息。
许多不同的散列算法在商业中使用,如 SHA-1、SHA-2、SHA-3、SHA-256、SHA-512 等。我们将重点关注 SHA-256。安全散列算法 256,或 SHA-256,声誉上是保护数字信息最安全的途径之一。无论您提供什么输入,SHA-256 都会始终生成一个 256 位量(可以视为 64 个十六进制数字)无论您提供什么输入。以数字形式来看,256 位量比地球上的沙粒排列组合更多!在以下小部件中,您可以输入任何内容并看到其 SHA-256 哈希值。您应该尝试一下,以获得这种操作的感觉。随着您输入内容,相应的 SHA-256 哈希值将自动生成。
在整个教程中,我们将使用 SHA-256 哈希方法来生成哈希值。但是,在可视化中显示 64 个十六进制字符既不方便。因此,我们将只显示前 16 个字符,如下所示。尝试将您最后一次在上面的控件中输入的内容(显示完整哈希转换的)复制粘贴到下面的方框中。
接下来,让我们考虑一个简单的“块”示例。在下面的图表中,我们展示了一个块,其中包含一些数字,以及一些数据。这些数据可能是有结构的,例如交易列表。但在这个例子中,它们只是文本。关键在于,将一个“块”进行哈希处理,仅仅意味着取各个字段(这里是块号和数据),并将其组合成一个单一的字符串,然后通过 SHA-256 进行哈希处理。你可以通过将框中的数字和文本复制回上面的哈希工具中,并查看是否得到相同的结果来验证这一点。(你可以通过这个过程来验证这一点。)
区块链不过是链式链表中的一个区块链,每个区块都包含其前一个区块的哈希值。当我们将指针与指向数据的哈希值结合起来时,我们得到一个哈希指针(惊喜!)!在下面的图中,区块从左到右排列,最古老的区块位于左侧,最新的区块位于右侧。当向右侧添加新区块时,它们会将其直接左侧区块的哈希值包含在内,形成一个链。如果在任何区块中更改数据,您会看到我们也在改变其哈希值,因此我们也在改变其右侧所有区块的最终哈希值。请尝试在下面的数据字段中添加数据。然后更改一些数据字段,观察哪些哈希值也会发生变化。为了明确说明:图中“较早”的区块位于左侧,并且被“较晚”的区块(即其直接右侧的区块)所指向。最左边的区块被称为“第一个”区块,我们以“零”为“前”哈希值。
以下是区块链的“安全性”方式:我们无法在链上早期区块的数据发生变化而不导致后续区块值不一致。如果您持有链上第一个区块的哈希值,那么没有任何区块的内容都无法在您知情的情况下被更改,因为这样做会导致您的哈希值不再与区块的更改内容匹配。更改右边的最后一个区块的数据显然会更改该区块的哈希值(如果您持有之前更改前的哈希值,您将知道它已被更改)。但同时也更改链上任何其他区块都会最终更改右边的最后一个区块的哈希值(通过从数据更改开始向右移动的哈希值变化的级联更改)。您应该在小部件中尝试一下,以确保您理解了这一点。
这解释了关于实际区块链的所有知识,尽管还有很多关于区块链如何用于实际应用的知识。在本文剩余部分,我们将涵盖:
加密服务与区块链应用相关,包括用户身份验证。
区块链实现中使用的数据结构(默克尔树)。
更多关于采矿的详细信息。
区块链如何被分配给用户(称为“分布式账本”),以便没有任何用户成为全能的“所有者”。
如何通过使用“一致性算法”(consensus algorithm)的方式,使分布式账本对所有用户保持一致(done)。
比特币和其他加密货币是如何工作的。
智能合约的概念。
一些其他区块链应用。
