欢迎来到学习使用 JavaScript进行区块链编程。顾名思义,在本书中,您将学习如何使用 JavaScript 编程语言从头开始构建全功能区块链。您构建的区块链将具有类似于生产级区块链的功能,例如比特币或以太坊。
在本书中,您将通过学习构建自己的区块链和了解分布式网络来了解区块链技术的实际运作方式。在本书的结尾,您将拥有一个完整的区块链原型,该原型托管在一个分布式网络上,并且您将获得大量关于区块链如何在引擎盖下实际工作的知识和理解。
我们将在本书中创建的区块链将能够实现以下功能:
- 执行工作证明以保护区块链
- 通过挖掘过程创建新块
- 创建新的、不可变的事务
- 验证整个区块链和每个区块内的所有数据
- 检索地址/事务/块数据
除此之外,区块链还将具有许多其他重要特征。当你进一步阅读这些章节时,你会去探索它们。
要阅读这本书,您只需要一台计算机和一些 JavaScript 编程语言的基本知识。
首先,在本介绍性章节中,让我们尝试了解区块链实际上是什么。这将帮助您熟悉区块链的概念,因为这是本书的先决条件。然后,我们将继续学习如何设置项目以创建我们自己的区块链
那么,让我们开始吧!
在本节中,让我们简要解释一下区块链是什么。简言之,区块链是一个不可变的分布式账本。现在,这些词可能看起来很复杂,但当我们试图将它们分解时,很容易理解它们。让我们从探究账本实际上是什么开始。分类账只是金融账户或交易的集合(或者换句话说,是人们所做交易的记录)。
让我们看看下面的例子来更好地理解分类帐。在这个例子中,Kim 付给 Joe 30 美元,Kevin 付给 Jen 80 美元。分类账只是用来跟踪这些交易的文档。您可以在以下屏幕截图中看到这一点:
现在,区块链不可变意味着什么?这意味着它永远无法改变。因此,当记录事务时,它无法撤消。其他无法更改的因素包括发送的金额或参与交易的人员。一旦交易完成,交易的任何方面都无法更改,因为它是不变的。
在当今世界,我们看到许多应用程序、平台和网络都是集中的。以 Facebook 为例。每个使用 Facebook 的人都必须相信这家公司正在保护他们的数据,而不是滥用数据。与此相比,区块链是不同的。区块链技术不像 Facebook、谷歌或大多数其他实体那样集中化。相反,它是一个分布式网络,这意味着任何给定的区块链网络都不是由单个实体控制的,而是由普通的日常人员运行的。区块链,如比特币,受到全球数千人的支持和托管。因此,我们的所有数据,或在本例中的分类账,不受单个公司或实体的支配。这被证明是区块链技术的一大好处,因为通过分布式,我们不必用数据信任任何一家公司。取而代之的是,我们的数据由数千名独立行动的不同人员组成的整个网络保存。
每个贡献给区块链网络的个人称为节点,每个节点都有完全相同的分类账副本。因此,账本数据在整个网络中托管和同步。
因此,区块链是一个不可变的分布式账本。这意味着它是一个永远无法更改交易的分类账,区块链本身分布在网络上,由数千个独立的人、组或节点运行。
区块链是一项非常强大的技术,它仍处于起步阶段,但其未来非常令人兴奋。区块链技术可以通过多种方式应用于当今世界,以使某些行业更加安全、高效和可信。一些可以借助区块链技术进行转型的行业包括金融服务、医疗保健、信贷、政府、能源行业和其他许多行业。几乎所有行业都可以从更安全、分布式的数据管理形式中受益。你可以观察到区块链技术目前正处于一个非常激动人心的阶段,许多人对它的未来感到激动
既然我们已经知道了区块链是什么,那么让我们开始设置我们的项目环境来构建我们的区块链。
这本书将帮助您通过从头开始构建自己的区块链,从而加深对区块链技术的理解。区块链是一项相当新的技术,虽然一开始学习起来可能会有点困难,但我们将采取一种循序渐进的方法,对其进行分解,以了解它是如何在引擎盖下工作的。当你读完这本书时,你将对区块链技术是如何工作的有一个非常坚实的理解,你也将构建自己的整个区块链。
在本书中,我们将从构建区块链本身开始。此时,我们将构建一个具有以下能力的区块链数据结构:
- 校对工作
- 开采新区块
- 创建事务
- 验证链
- 检索地址数据和其他功能
此后,我们将创建一个 API 或服务器,允许我们从互联网与区块链进行交互。通过我们的 API,我们将能够使用我们构建到区块链数据结构中的所有功能。
此外,您将学习创建一个分布式网络。这意味着我们将有多个服务器作为单独的节点运行和运行。我们还将确保所有节点都能正确地相互交互,并以正确的格式彼此共享数据。此外,您还将了解如何通过确保在整个网络中广播创建的任何新节点或事务来同步整个网络。
然后,我们将继续创建共识算法。该算法将用于确保我们的整个区块链保持同步,并且该算法将用于确保我们网络中的每个节点都具有正确的区块链数据。
最后,我们将创建一个块资源管理器。这将是一个用户界面,允许我们以用户友好的方式探索我们的区块链,还允许我们查询我们的区块链以获得特定的区块交易和地址。
然而,首先,我们需要建立我们的发展环境。
让我们开始构建我们的区块链项目。我们要做的第一件事是打开终端,通过在终端中键入命令来创建区块链目录,如以下屏幕截图所示:
让我们先创建一个名为programs
的文件夹。在这个文件夹中,我们创建一个名为blockchain
的目录。此目录当前为空。在blockchain
目录中,我们将执行所有编程。我们将在这个blockchain
目录中构建我们的整个区块链。
现在我们的blockchain
目录已经准备好了,我们需要做的第一件事就是向其中添加一些文件夹和文件。我们要放入目录的第一个文件夹将被称为dev
,因此我们要确保我们在blockchain
目录中,然后让我们在终端中键入以下命令:
mkdir dev
在这个dev
目录中,我们将进行大部分编码。在这里,我们将构建我们的区块链数据结构,并创建我们的 API,以与我们的区块链进行交互、测试并完成其他类似任务。接下来,在这个dev
文件夹中,我们创建两个文件:blockchain.js
和test.js
。为此,输入以下命令:
cd dev
touch blockchain.js test.js
前面命令行中的touch
术语将帮助我们创建上述文件。blockchain.js
文件是我们输入代码创建区块链的地方,test.js
文件是我们编写代码测试区块链的地方。
接下来,让我们通过在终端中键入以下命令返回到我们的blockchain
目录:
cd ..
在blockchain
目录中,让我们运行以下命令来创建 npm 项目:
npm init
运行上述命令后,您将在终端上获得一些选项。要设置项目,只需通过这些选项按回车。
所以,为了建立项目文件夹结构,我们几乎只需要做这些。现在,如果您转到我们的blockchain
目录,并使用 Sublime 或 Atom 等文本编辑器(或任何您想要的)打开它,您将看到文件结构,如以下屏幕截图所示:
blockchain
目录由我们刚刚创建的dev
文件夹组成。在dev
文件夹中,我们可以观察我们的blockchain.js
和test.js
文件。另外,当我们运行npm init
命令时,它会为我们创建package.json
文件。这个.json
文件将跟踪我们的项目和我们需要的任何依赖项,允许我们运行脚本。我们将在后面的章节中对这个package.json
文件进行更深入的研究,以便在我们阅读本书的过程中您对它更加熟悉。
在我们开始编写区块链之前,值得注意的是,本书的全部源代码可以在 GitHub 上的以下链接中找到:https://github.com/PacktPublishing/Learn-Blockchain-Programming-with-JavaScript 。在此存储库中,您可以找到整个项目的完整代码,你也将能够探索我们将在下一章中构建的所有文件。因此,这可能是一个很好的资源,供您在阅读本书时使用。
为了总结这一介绍性章节,我们首先探讨了区块链实际上是什么,并了解了它是如何运作的。然后我们开始建立我们的项目,创建我们自己的区块链。我们还简要介绍了本书中您将要学习的所有主题
在下一章中,我们将通过学习构造函数、原型对象、块方法、事务方法和许多更重要的概念来构建区块链