Skip to main content
shopping_basket 购物车 0
登录

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

Andrew Back
0

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

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

Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.

Recommended Articles

DesignSpark Electrical Logolinkedin