本地多节点Testnet

本教程介绍如何设置在单个主机上运行的多节点区块链配置。这被称为单主机,多节点testnet。我们将在您的本地计算机上设置两个节点,并让它们相互通信。本节中的示例依赖于三个命令行应用程序,nodeoskeosd,和cleos。下图描绘了所需的testnet配置。

假设keosdcleos以及nodeos已经安装在你的路径,或者你知道如何从文件系统中的位置启动这些应用程序。(请参阅设置本地环境

打开四个“终端”窗口以执行本教程中的步骤。

 

启动电子钱包管理器

在第一个终端窗口中,启动keosd钱包管理应用程序:

  • shell
keosd --http-server-address 127.0.0.1:8899

如果成功,keosd将显示一些信息,从以下开始:

  • shell
```
2493323ms thread-0   wallet_plugin.cpp:39          plugin_initialize    ] initializing wallet plugin
2493323ms thread-0   http_plugin.cpp:141           plugin_initialize    ] host: 127.0.0.1 port: 8899
2493323ms thread-0   http_plugin.cpp:144           plugin_initialize    ] configured http to listen on 127.0.0.1:8899
2493323ms thread-0   http_plugin.cpp:213           plugin_startup       ] start listening for http requests
2493324ms thread-0   wallet_api_plugin.cpp:70      plugin_startup       ] starting wallet_api_plugin
```

找一条线说钱包正在收听127.0.0.1:8899。这将指示keosd正确启动并正在侦听正确的端口。如果您看到其他任何内容,或者在“启动wallet_api_plugin”之前看到一些错误报告,那么您需要诊断问题并重新启动。

如果keosd运行正常,请在钱包应用程序运行时打开该窗口,然后移动到下一个终端窗口。

 

创建默认钱包

在下一个终端窗口中,使用cleos命令行实用程序创建默认钱包。

  • shell
cleos --wallet-url http://127.0.0.1:8899  wallet create --to-console

cleos将表明它创建了“默认”钱包,并将为将来的钱包访问提供密码。如消息所示,请务必保留此密码以备将来使用。以下是此输出的示例:

  • shell
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JsmfYz2wrdUEotTzBamUCAunAA8TeRZGT57Ce6PkvM12tre8Sm"

keosd将在其窗口中生成一些状态输出。我们将继续使用第二个窗口来执行后续cleos命令。

 

加载eosio密钥

在上述步骤中启动的私有区块链是使用默认初始密钥创建的,必须将其加载到钱包中。

$ cleos --wallet-url http://127.0.0.1:8899 wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

 

启动第一个生产者节点

我们现在可以启动第一个生产者节点。在第三个终端窗口中运行:

  • shell
nodeos --enable-stale-production --producer-name eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin

这创造了一个特殊的生产者,被称为“bios”生产者。假设到目前为止一切都已正确执行,您应该看到nodeos创建流程报告块的输出。

 

启动第二个生产者节点

以下命令假定您从${EOSIO_SOURCE}目录运行本教程,从该目录运行./eosio_build.sh以构建。如果不清楚,请参阅获取代码以获取更多信息。

要启动其他节点,必须先加载eosio.bios合同。通过此合同,您可以直接控制其他帐户的资源分配并访问其他特权API调用。返回第二个终端窗口并运行以下命令以加载合同:

  • shell
cleos --wallet-url http://127.0.0.1:8899 set contract eosio build/contracts/eosio.bios

我们将使用帐户名称创建一个帐户以成为生产者inita。要创建帐户,我们需要生成与帐户关联的密钥,并将其导入我们的钱包。

运行create key命令:

  • shell
cleos create key

这将报告新生成的公共和私人密钥对,它们看起来类似于以下内容。

重要信息:以下命令行说明使用下面显示的键。为了能够直接从本教程中剪切和粘贴命令行指令,请不要使用刚刚生成的键。相反,如果要使用新生成的密钥,则需要在命令中用您的密钥值替换密钥值。

  • shell
Private key: 5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr
Public key: EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg

现在将私钥部分导入您的钱包。如果成功,将报告匹配的公钥。这应该与先前生成的公钥匹配:

  • shell
cleos --wallet-url http://localhost:8899 wallet import 5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr
imported private key for: EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg

创建inita我们将用于成为生产者的帐户。该create account命令需要两个公钥,一个用于帐户的所有者密钥,另一个用于其活动密钥。在此示例中,新创建的公钥使用两次,作为所有者密钥和活动密钥。显示create命令的示例输出:

  • shell
cleos --wallet-url http://localhost:8899 create account eosio inita EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg
executed transaction: d1ea511977803d2d88f46deb554f5b6cce355b9cc3174bec0da45fc16fe9d5f3  352 bytes  102400 cycles
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"inita","owner":{"threshold":1,"keys":[{"key":"EOS6hMjoWRF2L8x9YpeqtUEcsDK...

我们现在有一个帐户可以分配合同,使其能够进行有意义的工作。在其他教程中,该帐户已用于建立简单合同。在这种情况下,该帐户将被指定为块生产者。

在第四个终端窗口中,启动第二个nodeos实例。请注意,此命令行比我们上面用于创建第一个生成器的命令行要长得多。这对于避免与第一个nodeos实例的冲突是必要的。幸运的是,您可以剪切并粘贴此命令行并调整键:

  • shell
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\"]

此新节点的输出将显示一些活动,但将停止报告,直到本教程的最后一步,此时inita帐户已注册为生产者帐户并已激活。以下是新启动节点的一些示例输出。您的输出可能看起来有点不同,具体取决于您输入每个命令所花费的时间。此外,这个例子只是最后几行输出:

  • shell
2393147ms thread-0   producer_plugin.cpp:176       plugin_startup       ] producer plugin:  plugin_startup() end
2393157ms thread-0   net_plugin.cpp:1271           start_sync           ] Catching up with chain, our last req is 0, theirs is 8249 peer dhcp15.ociweb.com:9876 - 295f5fd
2393158ms thread-0   chain_controller.cpp:1402     validate_block_heade ] head_block_time 2018-03-01T12:00:00.000, next_block 2018-04-05T22:31:08.500, block_interval 500
2393158ms thread-0   chain_controller.cpp:1404     validate_block_heade ] Did not produce block within block_interval 500ms, took 3061868500ms)
2393512ms thread-0   producer_plugin.cpp:241       block_production_loo ] Not producing block because production is disabled until we receive a recent block (see: --enable-stale-production)
2395680ms thread-0   net_plugin.cpp:1385           recv_notice          ] sync_manager got last irreversible block notice
2395680ms thread-0   net_plugin.cpp:1271           start_sync           ] Catching up with chain, our last req is 8248, theirs is 8255 peer dhcp15.ociweb.com:9876 - 295f5fd
2396002ms thread-0   producer_plugin.cpp:226       block_production_loo ] Previous result occurred 5 times
2396002ms thread-0   producer_plugin.cpp:244       block_production_loo ] Not producing block because it isn't my turn, its eosio

此时,第二个nodeos是空闲的生产者。要将其转换为活动生成器,inita需要使用bios节点注册为生产者,并且bios节点需要执行操作以更新生成器计划。

  • shell
cleos --wallet-url http://localhost: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...

恭喜,您现在已经配置了一个双节点testnet!您可以看到原始节点不再生成块,但它正在接收它们。您可以通过get info对每个节点运行命令来验证这一点。

获取有关第一个节点的信息:

  • shell
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"
}

现在为第二个节点:

  • shell
cleos --url http://localhost: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"
}

在后面的教程中,我们将探索如何使用更高级的工具来运行多主机,多节点testnet。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值