主页 > imtoken安卓官方下载 > 如何搭建以太坊测试环境

如何搭建以太坊测试环境

imtoken安卓官方下载 2023-05-11 05:20:32

介绍

本来不想写这样的文章,但是在学习和调试以太坊代码和合约的过程中,自己的机制搭建了好几次以太坊私网,每次都会忘记一些东西; 另外,在一些文章中,如果要表达完整性,必须加上搭建测试环境的说明。 所以干脆单独写一篇文章,详细描述如何搭建测试环境。

在本文中,我将测试环境分为两类,一类是加入官方测试网; 另一种是在自己的机器上搭建两个以上节点的私有网络。 下面分别说明一下。

编译geth

由于我创建测试网的主要目的是了解以太坊代码的运行机制,所以本文只介绍使用geth程序运行以太坊节点创建测试网。 至于使用其他以太坊客户端加入官方测试网,本文不做介绍。

geth 程序可以从以太坊源代码编译。 编译方法很简单。 下载源码go-ethereum后,进入项目主目录,运行make成功后,即可在build/bin/geth路径下获取geth程序。 当然,前提是你得安装好go语言并制作相关程序。

加入官方测试网

随着以太坊的发展,以太坊官方测试网有多个版本,目前使用较多的是“Rinkeby”。 “Rinkeby”是一个使用PoA共识的测试网络,其区块链浏览器URL为. 水龙头的地址是 。 以下是加入测试网的详细步骤:

创建一个以太坊账户

首先,你必须有自己的以太坊账户地址。 这可以使用命令 geth account new 创建。 如果不想使用默认数据目录,可以指定数据目录参数:geth --datadir your/data/path account new。 记得记住创建过程中输入的密码。运行以太坊节点

拥有账号后,可以运行本地节点加入测试网。 运行命令为:geth --rinkeby --unlock 0,运行后会提示输入第一步创建账户时设置的密码。 (如果创建账号时不使用默认数据目录,运行时需要添加--datadir your/data/path参数)

加入“Rinkeby”网络就这么简单。 但是仅仅加入网络我们能做的事情并不多,我们需要在自己的账户中有一些以太币,以便我们可以测试转账、合约等。我们可以从上面提到的官方水龙头获取测试网络的以太币,然后按照主页上的提示“这是如何工作的”。 目前的提示需要使用推特或脸书账号,无法翻墙的朋友就麻烦了。 (以前可以用github账号,现在不能用了)

当你的账户中有币时,你可以随心所欲地测试你想测试的功能。

自建专网

加入官方测试网很方便,但不一定能满足我们的需求。 比如我们想要指定一个特定的共识算法,或者我们想要我们的账户有更多的以太坊使用,或者电脑无法联网,或者我们觉得测试网同步区块太慢占用磁盘空间。 自己搭建私有网络,随意配置,满足自己的需求。

请注意,我们不需要多台机器来构建私有以太坊网络。 我们只需要一台机器就可以运行以太坊的多个节点,组成一个小型私有网络。

下面是搭建私网的步骤(一般你的私网可以有3个节点,其中至少有2个开启挖矿功能(因为只有一个矿工时,PoA无法正常出块)):

1.创建每个节点的datadir

由于我们要在同一台机器上运行多个节点,所以不能使用默认的数据路径,需要为不同的节点创建不同的数据路径。 为了图解方便以太坊网址,我们假设我们要创建三个节点,那么我们需要三个目录,例如:

./node0

./节点1

./node2

2.创建以太坊账户

想启动哪个节点,需要创建几个账号。 推荐至少两个账户,因为在配置矿工账户的时候,最好配置两个或两个以上的矿工,这样clique模块实现的PoA共识才能在挖矿时正常出块。 (一般创建三个账号即可满足所有测试需求)

sitecsdn.net 以太坊和以太币的关系_以太坊网址_以太坊与以太基金

我们已经创建了每个节点的数据目录,所以我们需要创建账户到各自的数据目录中。 以上例中的node0、node1、node2为例,可以这样创建三个以太坊账户:

geth --datadir ./node0 account new
geth --datadir ./node1 account new
geth --datadir ./node2 account new

请记住记住您在创建帐户时配置的帐户密码。

3.创建私有网络配置

使用 puppeth 命令创建专用网络配置(在与 geth 相同的目录中)。 运行该程序后,会通过问题提示一步步进行配置,过程中会使用到之前创建的账户地址。 过程如下:

运行木偶

... // 一些解释性信息

// 输入一个网络名,只是为了标识生成的配置信息所在的文件

// 以 > 提示开头的是我的输入

请指定要管理的网络名称(请不要使用空格、连字符或大写字母)

> 我的配置

// 注意这两行log最后显示的存储配置信息的位置,在~/.puppeth/myconfig文件中

INFO [07-29|20:16:20.879] 管理以太坊网络名称=myconfig

警告 [07-29|20:16:20.882] 未找到以前的配置 path=/Users/usrname/.puppeth/myconfig

// 选择配置新的创世信息

你想干什么? (默认=统计)

1.显示网络统计

2.配置新创世纪

3.跟踪新的远程服务器

4.部署网络组件

> 2

你想干什么? (默认=创建)

1. 从零开始创造新的起源

以太坊与以太基金_以太坊网址_sitecsdn.net 以太坊和以太币的关系

2.导入已有的genesis

> 1

// 选择要使用的共识机制。 如果非要用Ethash,没有特殊要求,建议选择Clique,更规律可控。

使用哪个共识引擎? (默认=集团)

1. Ethash 工作量证明

2. Clique-proof-of-authority

> 2

// PoA共识的出块时间间隔,这里我选择5秒

区块需要多少秒? (默认值 = 15)

> 5

// 哪些账户可以挖矿。 至少选择一个上一步创建的账户地址(我的建议是至少两个,原因前面说了)

// 这里我把刚刚创建的三个账户的地址都填进去了,这样在节点运行的时候,这三个账户就有挖矿的权限了。

// 输入完成后,直接按回车键进入下一项

哪些账户可以封号? (必填至少一项)

> 0x7656bde2ff583c0b0817386e7b88eb8991f4d90c

> 0x4b40b728ab138dcfd641aa4592fb58349c4bd0c3

> 0xfdabd4d5728b0203ac028e32dc540a85ba99fe4d

> 0x

// 这里输入的账户一开始有很多以太币

// 至少输入一个上一步创建的新账户,这里三个账户我都输入了

// 输入完成后,直接按回车键进入下一项

哪些账户应该预先注资? (建议至少一个)

> 0x7656bde2ff583c0b0817386e7b88eb8991f4d90c

sitecsdn.net 以太坊和以太币的关系_以太坊网址_以太坊与以太基金

> 0x4b40b728ab138dcfd641aa4592fb58349c4bd0c3

> 0xfdabd4d5728b0203ac028e32dc540a85ba99fe4d

> 0x

// 如果是,那么从 0x0000000000000000000000000000000000000000 到

// 0x000000000000000000000000000000000000000ff 这些地址将有 1wei 的以太币。

// 这个要看情况,需要就选yes

预编译地址 (0x1 .. 0xff) 是否应该预先提供 1 wei? (建议是)

> 没有

// 指定网络ID,按回车键随机生成

如果你想要一个显式的,请指定你的链/网络 ID(默认 = 随机)

>

INFO [07-29|20:31:57.518] 配置新创世块

// 生成成功,此时所有的配置都已经写入到~/.puppeth/myconfig中了。

// 按 Ctrl+C 退出程序

你想干什么? (默认=统计)

1.显示网络统计

2. 管理现有的起源

3.跟踪新的远程服务器

4.部署网络组件

> ^C

puppeth程序运行完毕后,会生成一个json格式的文件,内容如下:

{  
"genesis": {
"config": {
"chainId": 56680,
"homesteadBlock": 1,
......
}
......
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
}

但是geth在使用这个配置文件的时候只用到了“genesis”字段,所以应该把“genesis”字段的内容作为这个json文件的内容(相当于删掉{“genesis”:这个字符和结尾的归档最后一个})。 修改如下:

以太坊与以太基金_以太坊网址_sitecsdn.net 以太坊和以太币的关系

{
"config": {
"chainId": 56680,
"homesteadBlock": 1,
......
}
......
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

4.初始化节点

现在您有了专用网络的配置文件,您可以使用此配置来初始化每个节点。 假设这个配置文件是上例中的~/.puppeth/myconfig,数据目录也是上例中的node0、node1、node2,那么可以使用如下命令初始化节点:

geth --datadir ./node0 init ~/.puppeth/myconfig
geth --datadir ./node1 init ~/.puppeth/myconfig
geth --datadir ./node2 init ~/.puppeth/myconfig

5.配置p2p发现网络

每个节点的p2p模块启动时,需要知道一个或几个初始p2p地址。 p2p模块会先连接到这些地址,然后从这些地址中获取其他节点的地址再连接,这样所有的节点就可以加入到同一个网络中,形成一个大的p2p网络。

继续使用前面的例子,假设我们要创建的三个节点分别是node0、node1、node2。 我们可以选择一个或多个节点作为主节点。 比如我们选择node0,首先要知道node0的p2p地址,可以通过运行这个节点得到:

geth --datadir ./node0

运行后,可以按ctrl+C退出程序。 在输出日志中,有这么一行:

INFO [07-29|20:42:37.353] Started P2P networking                   self=enode://1cd68168360270a7ff43075bca80074156b080b37dc0a7be0ed4e6f73d8b6dacd39ef2a77fbaf1ce90e376de6b2d5cf776bb186460a01d2d6bce42e3995d572c@127.0.0.1:30303

self后面的地址为当前节点的p2p地址,本例为“enode://……@127.0.0.1:30303”

我们需要将这个地址写入到每个节点数据目录下的static-nodes.json文件中。 这是一个json文件,节点地址组成一个数组。 以刚才的地址为例:

[  
"enode://1cd68168360270a7ff43075bca80074156b080b37dc0a7be0ed4e6f73d8b6dacd39ef2a77fbaf1ce90e376de6b2d5cf776bb186460a01d2d6bce42e3995d572c@127.0.0.1:30303"
]

当然,你也可以在这个文件中写入多个地址。 比如我们把三个节点的地址写入这个文件:

[  
"enode://1cd68168360270a7ff43075bca80074156b080b37dc0a7be0ed4e6f73d8b6dacd39ef2a77fbaf1ce90e376de6b2d5cf776bb186460a01d2d6bce42e3995d572c@127.0.0.1:30303",
"enode://7022084f144acb9845199310f5d89c68fcab35885ca2fec96239ecc018d675171fd7d1d7dfb99efbb9f6eec1d0711d5e36ba76010f0d5d3b3ebdc498cca690f5@127.0.0.1:30304",
"enode://efab560571e54235a696680fc2387bce028d4cb4ce51b844e38d78b5eee490fc3fe8f51377492f57a4c1fb8220c89f61874e08fee7a96e2570d46ff9e4501204@127.0.0.1:30305"
]

需要注意的是,写多个地址时,地址末尾的端口号不能重复,必须和启动geth时的--port参数一致(后面会讲到)。

另外,这些内容必须保存在每个节点数据目录下的static-nodes.json文件中,不能使用其他文件名和路径。 在我们的三个节点的例子中,这个内容必须保存在三个文件中: ./node0/static-nodes.json, ./node1/static-nodes.json, ./node2/static-nodes.json ,文件内容可以是相同的。

6.启动节点

最后,我们只需要启动每个节点。 使用以下命令和参数启动节点:

geth --datadir ./node0 --unlock 0 --mine --rpc 
geth --datadir ./node1 --unlock 0 --mine --port 30304
geth --datadir ./node2 --unlock 0 --mine --port 30305

注意除第一个节点外,其他节点不启动rpc函数。 一是一个节点启动rpc功能就够了; 另一种是多个节点启动rpc功能时以太坊网址,rpc端口被最先启动的节点占用,后续启动会失败。

如果您不想让节点挖矿,请将启动参数中的 --mine 参数去掉。

最后要注意的是--port参数,它指定了p2p连接的端口,需要和static-nodes.json中的保持一致,不同的节点不能重复。

总结

本文内容不多,只是逐步说明搭建测试网络。 如果我错了,谢谢你纠正我。