用Raspberry Pi探索以太坊第2部分:创建一个私人区块链

描述

建立一个全新的预先分配资金和对等节点的测试网络。

在本系列的第1部分中,在安装以太坊geth客户端,创建一个帐户并运行一些简单的命令之前,我们探讨了以太坊的基础知识 - 这不仅仅是一种加密货币,它为智能合约提供了一个分散的平台。

在这篇文章中,我们将创建一个私人区块链,并用它来更详细地探索以太坊。由于我们将从一个全新的区块链开始,我们可以完全同步这一点,并且不需要配置节点来使用光同步模式。
 

停止主网同步

如果您遵循第1部分的规定,并将节点配置为使用mainnet并以轻同步模式运行,则可以通过以下方式停止并启动:

$ sudo systemctl stop geth@pi.service $ sudo systemctl disable geth@pi.service

创建一个新帐户

区块链

我们需要为我们的新区块链网络提供一个名称,就本示例而言,我们将使用“的DesignSpark”。默认情况下,以太坊将数据存储在名为“.ethereum”的主目录的子目录中,即Linux / BSD上的隐藏目录。为了将我们私人区块链的数据分开,我们将使用“.designspark”。

我们开始创建一个新帐户:

$ geth --datadir .designspark account new

并记下该帐户的地址,因为如果我们想为其预先分配任何资金,我们在初始化新网络时都需要这些。

一开始,只有 block 0

区块链

链中必须有第一个链接,区块链也没有区别,需要创建一个将由参与网络的初始节点集使用的创建区块。这是通过JSON文件配置的,作为例子,我们使用的内容如下。

{     "config": {         "chainId": 555,         "homesteadBlock": 0,         "eip155Block": 0,         "eip158Block": 0     },     "difficulty": "20",     "gasLimit": "2100000",     "alloc": {         "1fd4027fe390abaa49e5afde7896ff1e5ecacabf":         { "balance": "20000000000000000000" }     }}

'chainId'是标识网络的数值,可以在这里找到公共网络正在使用的列表。我们需要为我们的私人DesignSpark网络选择一个数字,出于某种原因555看起来是一个不错的选择 - 您可以使用不同的选项的数字。

那么其他参数是什么?

  • homesteadBlock. Homestead是一个以太坊版本,对于我们的连锁店,这个设置为0。

  • eip155Block.我们的连锁对于EIP155来说不会硬叉性的,所以这个设置为0。

  • eip158Block.我们的连锁对于EIP158来说并不是硬叉性的,所以这个设定为0。

  • difficulty. 这设定了采矿难度,在我们的情况下,我们希望这个比较低。

  • GasLimit.这是每块Gas成本的限制。

  • alloc. 这是我们可以预先分配资金到账户的地方。

以太坊改进建议 (EIPs) 描述了以太坊平台的标准,并可能发布新的标准以解决缺陷。随着网络的增长,它可能会在某个时候分叉以允许电子信息产品被合并。这并不是我们的专用网络所关心的问题,但有关EIP155在哪里用mainnet实现的细节以及它的作用,请参阅Spurious Dragon.

Gas是用来衡量一个动作或一组动作执行多少工作量的单位。从而允许成本附加到执行智能合约 - 包含代码功能并位于区块链上,能够与其他合同进行交互,制定决策,存储数据,并将乙醚发送给其他合作伙伴的对象。更多关于这个在未来的帖子。

Alloc 允许我们将资金预先分配给一个或多个账户。这里资金已经分配到我们之前创建的账户的地址。

将我们的配置文件保存到designspark.json后,我们现在可以使用以下方式初始化网络:

$ geth --datadir .designspark init designspark.json

就这样,我们已经写出了我们的起源块,现在有了我们新网络的开始。如果后续节点以相同方式初始化,则它们也可以成为成员。
 

启动第一个节点

区块链

要使用的JavaScript控制台启动第一个节点,我们输入:

$ geth --identity chainpi --rpc --rpcport 8080 --rpccorsdomain "*" --datadir .designspark --port 30303 --nodiscover --rpcapi "db,eth,net,web3" --networkid 555 console

所有参数是什么意思?

  • indentity. 这设置以太坊节点标识。

  • rpc*. 各种RPC设置配置可用的API以及谁有权访问它们。

  • datadir. 我们显然需要像以前一样使用相同的数据目录。

  • nodiscover. 这意味着我们的节点不可发现。

  • networkid. 这需要在初始化期间配置相同的数字ID。

区块链

一旦我们进入控制台,我们可以使用eth.accounts列出可用的帐户,并使用eth.getBalance检查余额。

> eth.accounts> primary = eth.accounts[0]> balance = web3.fromWei(eth.getBalance(primary), “ether”);

请注意,返回的数字如何比我们通过designspark.json预先分配的小得多?这是因为Ether中的平衡被返回了,而在初始化过程中,这个分配实际上是在一个名為Wei的更小的单位。.
 

创建第二个节点

区块链

一个只有一个节点的区块链网络没有多大用处,所以我们将创建另一个节点。这个建议使用一台内存稍多的计算机,例如运行Debian / Ubuntu的笔记本电脑或台式机,因为如果我们希望在某个时候运行矿工,这可能是需要的。

回顾一下,涉及的步骤是:

  1. 安装GETH。

  2. 像上面那样运行命令来创建一个新帐户。

  3. 初始化使用相同的JSON配置文件。

  4. 像以前一样启动节点,但是这次使用不同的身份!

一旦我们完成了这个操作,节点已经启动并放入的JavaScript控制台,我们可以再次通过以下方式检查新帐户及其余额:

> eth.accounts> primary = eth.accounts[0]> balance = web3.fromWei(eth.getBalance(primary), “ether”);

这次我们应该看到我们的余额为0,因为我们没有预先分配任何资金到账户。
 

连接同伴

区块链

由于我们不希望我们的节点是可发现的,因此我们使用--nodiscover选项启动它们,这意味着我们需要一些将它们配置为对等的方式。我们可以通过创建一个名为静态nodes.json的文件来实现这一点,该文件位于datadir中,在我们的例子中是〜/ .designspark。

首先,我们需要通过在每个系统上的JavaScript控制台输入来获取每个节点的enode URL:

> admin.nodeInfo.enode

然后,我们使用此信息填充静态nodes.json文件,如下所示:

["enode://01f5ecc7c232f7571175bffc71c4e1608e1308e2ce7fd6ed3ae17d5e97e2d5253dcaa854286f99991d671788127f7902fa56d20875eabae49665a515da105047@10.100.1.196:30303", "enode://5156218119a3697389a34bf0a19ceca49d9f3d06948836b8cc6c206c9f7b7081e64537eeb0f9c059561736a8e7cb6ebbe438028dd949d0f69f4cab642c11d46c@10.100.1.229:30303"]

请注意,[::]如何被节点IP地址替换,并省略了?discport = 0后缀。

区块链

一旦在两个节点上创建了这个文件,我们可以通过CTRL-d退出GETH,然后重新启动控制台之后如果我们在第一个节点上输入:

> admin.peers

我们应该看到第二个节点的细节。

区块链

在第二个节点上重复此操作,我们应该看到第一个节点的信息。

因此,现在我们拥有自己的私人区块链网络,其中包含两个节点,每个节点都配有一个账户,其中一个配有预先分配的资金。

在本系列的第3部分中,我们将继续与网络进行交易 - 转移资金,执行智能合约和挖掘以太网。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分