这是我如何构建私有区块链网络的一篇文章,你也可以。没有什么比自己构建区块链更能帮助理解区块链了。以下是我们将在这篇文章中完成的内容:
下图我们以前可能见过,但基本上以太坊区块链网络只是很多EVM(以太坊虚拟机)或连接到每个其他节点的“节点”来创建网格。每个节点都运行整个区块链的副本,并竞争挖掘下一个区块或验证交易。无论何时添加新块,区块链都会更新并传播到整个网络,以使每个节点同步。
要成为以太坊网络中的节点,你的计算机必须下载并更新整个以太坊区块链的副本。为了实现这一点,以太坊提供了你可以下载的工具,连接到以太坊网络,然后与之交互。这些工具是:
Geth:“…如果你有网络开发的经验并且有兴趣为dapps建立前端,你应该试试Geth。”
Eth:“…如果你想通过并行运行两个不同的实现来增加安全性或者认真对待GPU挖掘,那么C++写的“Eth”客户端就适合你。”
Pyethapp:“…如果你是一个Python开发人员想要构建去中心化的应用程序或者对以太坊感兴趣的研究或学术目的,这是一个伟大的客户端。”
这些工具中的每一个最终都将为我们提供对控制台的访问:一个JavaScript环境,其中包含我们以后需要的所有主要功能,因此无论你选择使用哪种工具来设置区块链,我们都应该最终付诸控制台。
我只是选择了Geth,因为我对Web开发有一些了解。本文的其余部分假设我们正在使用Geth与以太坊网络进行交互。
Geth是一个命令行界面(CLI)工具,它与以太坊网络通信,并充当你的计算机,其硬件和其余以太坊节点或网络计算机之间的链接。
如果某个块被另一个节点挖掘,你的Geth程序将提取它,然后将新信息传递到你的GPU或CPU上以更新区块链。有了Geth,你可以:
我的以太(以太是为以太坊网络提供gas的加密货币)。
在地址之间转移资金。
创建智能合约并向他们发送交易。
探索块历史等等。
好的,让我们安装Geth
这是如何在Mac上安装Geth的说明。我只是使用Homebrew,这使得安装Geth(真的很简单)非常简单。如果你有一台Mac但没有Homebrew,你应该先安装它。
Windows和Linux用户:
这里是适用于Windows和Linux的最新稳定二进制文件供下载。这是你下载后要做的事情。
一旦安装了Geth,你就可以在技术上连接到主要或公共以太坊区块链网络并运行完整的以太坊节点。但是我们现在还不想这样做,因为如果你正在阅读这篇文章,你很可能没有以太(以太坊的加密货币)——如果没有以太,你就无法在主区块链上做太多事情。
如果你没有以太开始怎么办?
我也没有,但以太坊可以让你创建自己的“私人”区块链网络,类似于主网络的开发/暂存版本。从功能的角度来看,此专用网络与主要的以太坊链完全相同,除了此网络上部署的任何交易和智能合约只能由连接到此专用网络的节点访问。这就是我们要做的——我们将创建一个私有区块链。
创建一个私有的以太坊区块链
Geth使你能够设置“私有”或“testnet”以太坊区块链。这是学习在互联网上听到和阅读的区块链概念的最佳方式。你可以构建智能合约,使交易成为去中心化分布式应用程序——无需真正的以太。你实际上可以创建自己的以太(只能在你的私有网络上使用的假以太),为你的帐户预分配以太,然后使用它来进行交易,转移或部署智能合约。
区块链和创世纪块
正如你现在可能知道的那样,区块链只不过是一个数字分类账,其中交易按时间顺序和公开记录。这些交易以块的形式记录,分布式网络中的节点竞争以找到下一个有效块。 一旦找到有效的块,它就被添加到区块链中,并且该信息被中继到网络。然后,每个节点都将其区块链更新为最新副本。
每个区块链都以Genesis Block开始,这是链中的第一个区块,0区块——唯一没有前任的区块。
为了创建我们的私有区块链,我们将创建一个创世块。为此,我们将创建一个自定义的Genesis文件,并要求Geth使用该genesis文件创建我们自己的genesis块,这反过来将成为我们自定义私有区块链的开始。
这是Genesis文件的样子:
这就是属性的意思…
此时,让我们继续创建我们的文件。我只是使用文本编辑器并将其存储在我的计算机上的文件夹中。
下一个打开终端并假设你已经安装了Geth,只需运行此代码段即可:
此代码段指示Geth使用你创建的文件作为自定义区块链的第一个块。然后,我们还指定一个数据目录,用于存储我们的私有链数据。Geth将为你创建数据目录。只需选择一个与公共以太坊链文件夹分开的位置(如果有的话)。
在终端窗口上运行此代码段后,你应该看到Geth连接到genesis文件并提供相同的确认。
创建一个将共享此区块链的专用网络
好的,所以在这一点上我们已经建立了私有区块链的最初阶段。接下来,我们将启动我们的专用网络,以便我们可以挖掘将添加到我们的专用链的新块。
为此,请在终端上运行此命令:
此片段告诉geth启动我们的专用网络并使用我们刚刚指定的目录来访问我们的私有区块链详细信息。
请注意,我们还指定了一个名为的参数。这标志着你的以太坊网络的身份。我们在这个例子中使用了,但你应该用你选择的随机数替换它来创建你自己的网络并防止其他人无意中连接到你的网络。
Main Ethereum网络的。以下是网络ID和相应网络的列表。
无论如何,一旦你在终端上运行命令——你的专用网络将上线。这是我的终端在运行代码段后显示的内容。
另一件重要事情。每次你想要访问你的私人链时,你必须按原样按顺序运行这两个片段,因为Geth不记得你的私有区块链网络的参数。因此,我建议你保存下面的设置步骤,以便稍后访问。
如果你已经跟着这一点,你有一个私人区块链,一个私人网络启动并运行!现在,我们可以通过帐户开始与我们的私人区块链和私人网络进行互动。
创建外部拥有帐户(EOA)
我们现在将创建一个帐户来操纵我们的区块链网络。如果你一直关注这个系列,我们在上一篇文章中讨论过帐户。
打开第一个geth实例后,打开另一个控制台/终端并键入以下内容:
这会将你的第二个控制台连接到第一个终端窗口上运行的Geth实例(确保它实际运行)。你应该得到一个像这样的Javascript控制台:
一旦你有了javascript控制台,你就可以创建一个帐户了。
系统将要求你设置密码,然后生成新帐户。简单!
现在,将此帐户保存为#,因为你经常需要它。另外,请记住密码,因为你需要它来访问你的帐户。
接下来,使用以下代码行检查此帐户有多少以太网:
这就是我得到的:
你的余额应为0。这是正确的,因为当你第一次创建一个帐户时你不会有任何以太。
有两种方法可以让以太进入你的帐户,或者有人向你发送一些,或者你挖掘交易区块并依次获得以太奖励。
既然你现在独自一人在你的私人网络中,你现在唯一的选择是挖掘一些区块并获得奖励。
我们的帐户中有一些以太
在真实或主要以太坊区块链中挖掘是相当困难的,并且需要专用硬件,例如专用GPU。但是,对私有链中的块进行挖掘很容易,因为我们在创建文件中指定难度级别非常低,还记得吗?我们可以使用以下代码简单地开始挖掘:
此时,如果你查看正在运行Geth实例的其他控制台,你将看到矿工成功挖掘的块。给它10-15秒并再次检查你的余额。
哇噢!你的新帐户中会出现大量以太币。
(记住这是假的以太,你不能使用这个以太网在主以太网网络上进行交易)但是你可以用它来测试区块链的几个功能,包括转账,部署合约等。
最后,使用脚本停止挖矿。
恭喜!
你刚刚建造了你的第一个私人以太坊区块链并开采了一些以太!很多细节,但我希望其中一些有意义,并让你更清楚地了解区块链的工作原理。
文章来自官方博客:
领取专属 10元无门槛券
私享最新 技术干货