3. 本地多节点测试网络
3.1 目标
本章节描述如何在一个机器上配置2个节点,2个节点互相通信的测试网络。
架构如下图所示:

3.2 准备工作
1、安装eosio软件
2、确保nodeos,cleos,keosd是可用的
3、知道如何传配置选项来开启或者禁用某个功能
3.3 步骤
1、启动wallet manager
2、创建默认钱包
3、导入eosio密钥
4、启动第一个生产者节点
5、启动第二个生产者节点
6、获取节点信息
3.3.1 启动wallet manager
在命令行中启动keosd,命令如下:
keosd --http-server-address 127.0.0.1:8899
3.3.2 创建默认钱包
新起一个命令行窗口(第2个命令行窗口),创建默认钱包,执行以下命令:
cleos --wallet-url http://127.0.0.1:8899 wallet create --to-console
如提示消息所示,需要保存密码,以备后用。
3.3.3 导入eosio密钥
此处可以参考之前的文章:https://www.jianshu.com/p/e7088db4720b
执行以下命令,私钥换成自己的:
cleos --wallet-url http://127.0.0.1:8899 wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
大体是这么个逻辑:钱包是存储私钥和进行签名,创建钱包,创建密钥对,导入密钥到钱包,这样钱包就和密钥关联起来了。
3.3.4 启动第一个生产者节点
新起一个命令行窗口(第3个命令行窗口),启动第一个生产者节点:
nodeos --enable-stale-production --producer-name eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin
创建一个特殊的生产者,也就是bios生产者。此处生产者的名字是eosio。
3.3.5 启动第二个生产者节点
以下命令假定你在eos\build目录中运行,并且已经在该目录中运行./eosio_build.sh构建了eosio的二进制文件。
为了启动第二个生产者节点,必须首先导入eosio.bios合约。这个合约可以让你对其他账号的资源分配有直接控制,并且可以访问特权api。
返回到第二个命令行窗口,执行以下命令导入合约:
cleos --wallet-url http://127.0.0.1:8899 set contract eosio build/contracts/eosio.bios
我们将使用账号名inita创建一个账号,并将其变成生产者。
为了创建账号,需要生成和账号相关的密钥对,并且导入密钥到我们的钱包中。执行以下命令:
cleos create key
这将会产生如下的密钥对:
Private key: 5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr
Public key: EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg
导入私钥到钱包:
cleos --wallet-url http://127.0.0.1:8899 wallet import 5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr
如果成功会出现:
imported private key for: EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg
创建inita账号:
cleos --wallet-url http://127.0.0.1:8899 create account eosio inita EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg
至此,将inita账号,钱包,密钥对进行了关联。先生成密钥对,用生成的私钥导入钱包,用生成的公钥创建inita账号。
接下来,在第四个命令行窗口,启动第二个nodeos实例。为了避免和第一个nodeos实例产生冲突,这次的命令行会比第一次启动nodeos的命令行长:
nodeos --producer-name inita --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --http-server-address 127.0.0.1:8889 --p2p-listen-endpoint 127.0.0.1:9877 --p2p-peer-address 127.0.0.1:9876 --config-dir node2 --data-dir node2 --private-key [\"EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg\",\"5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr\"]
至此,第二个nodeos是一个空闲的生产者。为了将它变成活跃的生产者,inita需要通过bios节点注册成一个生产者,bios节点需要执行一个操作来执行生产者调度:
cleos --wallet-url http://127.0.0.1:8899 push action eosio setprods "{ \"schedule\": [{\"producer_name\": \"inita\",\"block_signing_key\": \"EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg\"}]}" -p eosio@active
如果成功,会有以下输出:
executed transaction: 2cff4d96814752aefaf9908a7650e867dab74af02253ae7d34672abb9c58235a 272 bytes 105472 cycles
# eosio <= eosio::setprods {"version":1,"producers":[{"producer_name":"inita","block_signing_key":"EOS6hMjoWRF2L8x9YpeqtUEcsDKA...
至此,恭喜你,你现在配置了两个节点的测试网络。
你能看到原始的节点不再生产区块,而是接收区块。
3.3.6 获取节点信息
对第一个节点执行:
cleos get info
输出如下:
{ "server_version": "223565e8", "head_block_num": 11412, "last_irreversible_block_num": 11411, "head_block_id": "00002c94daf7dff456cd940bd585c4d9b38e520e356d295d3531144329c8b6c3", "head_block_time": "2018-04-06T00:06:14", "head_block_producer": "inita"}
对第二个节点执行:
cleos --url http://127.0.0.1:8889 get info
输出如下:
{ "server_version": "223565e8", "head_block_num": 11438, "last_irreversible_block_num": 11437, "head_block_id": "00002cae32697444fa9a2964e4db85b5e8fd4c8b51529a0c13e38587c1bf3c6f", "head_block_time": "2018-04-06T00:06:27", "head_block_producer": "inita"}
网友评论