上一篇 搭建一个私有的EOS集群 搭建了一个单节点的私链,本文将继续介绍多节点的私链搭建。
启动keosd和创建钱包
1、启动keosd程序
keosd的配置文件可以参考上一篇文章。
1
keosd -d wallet/data --config-dir wallet/config &
2、创建钱包
1
2
3
4
5
[root@dbl14195 eos]# cleos
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5Juu3fMoX6wK3rV4kMeZToXitspmWLHw3k1zpx7BJ9piBxsoGGv"
如果钱包被锁住,可以通过下面的命令解锁:
1
cleos --wallet-url http://127.0 .0.1 :8899 wallet unlock -n default --password PW5Juu3fMoX6wK3rV4kMeZToXitspmWLHw3k1zpx7BJ9piBxsoGGv
3、导入初始的eosio的密钥
1
2
[root@dbl14195 eos]
imported private key for : EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
启动第一个节点
我们可以使用初始的密钥5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
启动第一个节点。
配置和第一篇文章中的一样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bnet-endpoint = 0.0 .0.0 :44321
http-server-address = 0.0 .0.0 :48888
p2p-listen-endpoint = 0.0 .0.0 :49876
producer-name = eosio
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV= KEY:5 KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
plugin = eosio::producer_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
plugin = eosio::history_api_plugin
启动第二个节点
1、首先加载eosio.bios
合约
1
2
3
4
5
6
7
[root@dbl14195 eos]
Reading WASM from /data1/eos/eos/build/contracts/eosio.bios/eosio.bios.wasm...
Publishing contract...
executed transaction: d7204ea95bcc9723eb69c231a6cf13adb12820b7973984f80ce35dfb1a834e27 4352 bytes 1688 us
warning: transaction executed locally, but may not be confirmed by the network yet ]
这个合约允许你可以直接控制其他账号的资源分配,访问 privileged API。
2、创建新的密钥
1
2
3
[root@dbl14195 eos]# cleos create key
Private key : 5 KcEKvuxxTvShQUCYKT7FKVdA1LJh9CSKTYTCLgCjmmPYL2CjGq
Public key : EOS7mq47SiZVXyw9R3CeGoEsh5YeEtEpmasWL8H14E9a3mrUnbq1B
然后再导入到钱包:
1
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 wallet import --private-key 5KcEKvuxxTvShQUCYKT7FKVdA1LJh9CSKTYTCLgCjmmPYL2CjGq
3、创建新的账号
1
2
3
4
[root@dbl14195 eos]
executed transaction: 930 cf193cf5604298570ec843d3f25c79157266121638eaaff36a8c3c52de1e1 200 bytes 459 us
warning: transaction executed locally, but may not be confirmed by the network yet ]
4、配置第二个节点
修改第二个节点的配置文件,处理端口和地址的修改,注意配置下面两个项:
1
2
producer-name = admin1
signature-provider = EOS7mq47SiZVXyw9R3CeGoEsh5YeEtEpmasWL8H14E9a3mrUnbq1B= KEY:5 KcEKvuxxTvShQUCYKT7FKVdA1LJh9CSKTYTCLgCjmmPYL2CjGq
如果你查看第二个节点的输出,回发现还是一直由eosio
出块,admin1
一直是idle的。
5、激活producer
为了激活admin1
, 需要注册admin1
到bios
节点, bios
节点需要更新producer schedule
。
1
cleos --wallet-url http://127.0 .0.1 :8899 -u http://127.0 .0.1 :48888 push action eosio setprods "{ \"schedule\": [{\"producer_name\": \"admin1\",\"block_signing_key\": \"EOS7mq47SiZVXyw9R3CeGoEsh5YeEtEpmasWL8H14E9a3mrUnbq1B\"}]}" -p eosio@active
查看链的信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@dbl14195 eos]
{
"server_version" : "59626f1e" ,
"chain_id" : "6cbecff836a9fa60da53bf97a0a180103b2e76041d4414693d11bf39e2341547" ,
"head_block_num" : 2021 ,
"last_irreversible_block_num" : 2020 ,
"last_irreversible_block_id" : "000007e4da8cfb1df4830984b71a9d01b83bff8838bd0664760cb4a25855e34e" ,
"head_block_id" : "000007e5769882a45e38e3c458868d8c0d7a584a3840985f9da8ec4068ac1ee5" ,
"head_block_time" : "2018-11-23T09:21:09.500" ,
"head_block_producer" : "admin1" ,
"virtual_block_cpu_limit" : 1505902 ,
"virtual_block_net_limit" : 7909266 ,
"block_cpu_limit" : 99900 ,
"block_net_limit" : 1048576 ,
"server_version_string" : "v1.4.4"
}
启动第三个节点
1
2
3
4
5
6
7
8
9
cleos create key --to-console
Private key: 5 KKFC7iXX7UNXHfWe7ZyHCadWqU4iTUc2waja5fUmW8i8YFZZ9U
Public key: EOS81Nchk9aYx7Ld7jNQwqXfCJqiSc5Nxg3p6v3Fev8Uq78BzyArZ
cleos --wallet-url http://127.0 .0.1 :8899 -u http://127.0 .0.1 :48888 wallet import --private-key 5 KKFC7iXX7UNXHfWe7ZyHCadWqU4iTUc2waja5fUmW8i8YFZZ9U
cleos --wallet-url http://127.0 .0.1 :8899 -u http://127.0 .0.1 :48888 create account eosio admin2 EOS81Nchk9aYx7Ld7jNQwqXfCJqiSc5Nxg3p6v3Fev8Uq78BzyArZ EOS81Nchk9aYx7Ld7jNQwqXfCJqiSc5Nxg3p6v3Fev8Uq78BzyArZ
cleos --wallet-url http://127.0 .0.1 :8899 -u http://127.0 .0.1 :48888 push action eosio setprods "{ \"schedule\": [{\"producer_name\": \"admin1\",\"block_signing_key\": \"EOS7mq47SiZVXyw9R3CeGoEsh5YeEtEpmasWL8H14E9a3mrUnbq1B\"},{\"producer_name\": \"admin2\",\"block_signing_key\": \"EOS81Nchk9aYx7Ld7jNQwqXfCJqiSc5Nxg3p6v3Fev8Uq78BzyArZ\"}]}" -p eosio@active
注意我们设置了两个producer
,你可以看到它们轮流出块:
1
2
3
4
5
6
#2971 @ 2018 -11 -23 T09:29 :04.500 signed by admin1 [trxs: 0 , lib: 2949 , conf: 0 , latency: 1 ms]
info 2018 -11 -23 T09:29 :05.002 thread-0 producer_plugin.cpp:337 on_incoming_block ] Received block 2 fe5f94d61b899bc... #2972 @ 2018 -11 -23 T09:29 :05.000 signed by admin1 [trxs: 0 , lib: 2949 , conf: 0 , latency: 2 ms]
info 2018 -11 -23 T09:29 :05.502 thread-0 producer_plugin.cpp:337 on_incoming_block ] Received block e15dc2b6c7d299b4... #2973 @ 2018 -11 -23 T09:29 :05.500 signed by admin1 [trxs: 0 , lib: 2949 , conf: 0 , latency: 2 ms]
info 2018 -11 -23 T09:29 :06.000 thread-0 producer_plugin.cpp:1490 produce_block ] Produced block 00000 b9e92b7c061... #2974 @ 2018 -11 -23 T09:29 :06.000 signed by admin2 [trxs: 0 , lib: 2961 , confirmed: 12 ]
info 2018 -11 -23 T09:29 :06.500 thread-0 producer_plugin.cpp:1490 produce_block ] Produced block 00000 b9f57fc9e40... #2975 @ 2018 -11 -23 T09:29 :06.500 signed by admin2 [trxs: 0 , lib: 2961 , confirmed: 0 ]
info 2018 -11 -23 T09:29 :07.000 thread-0 producer_plugin.cpp:1490 produce_block ] Produced block 00000 ba09fc353fc... #2976 @ 2018 -11 -23 T09:29 :07.000 signed by admin2 [trxs: 0 , lib: 2961 , confirmed: 0 ]
本文介绍了使用eosio.bios
合约创建多个producer的例子,一般用于链启动的时刻。 进一步,你可以使用其他的智能合约,通过投票的方式选举producer。
其他一些cleos参考
创建钱包
1
2
3
4
5
6
7
cleos
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KTTysN5kLt8g5Kz7JmUzGkQu5GkwfDVdKhiEzCDwDxYGaayDoo"
cleos
导入eosio的密钥
1
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
导入下列账号的密钥
1
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 wallet import --private-key 5JBdJmbN4d3eJ5eC2Cqostnv1bFELVgcgRRLxzw2D7UriWnLJVK
创建下列账号
1
2
3
4
5
6
7
8
9
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.token EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.bpay EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.msig EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.names EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.ram EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.ramfee EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.saving EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.stake EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 create account eosio eosio.vpay EOS8JiEZKuszbSKS273ekW6p62MEGGYcswfgTTV6eDb2SLJFotZT6
导入智能合约
1
2
3
4
5
6
7
8
9
10
11
12
13
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 set contract eosio /data1/eos/eos/build/contracts/eosio.bios -p eosio@active
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 set contract eosio.token /data1/eos/eos/build/contracts/eosio.token
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 set contract eosio.msig /data1/eos/eos/build/contracts/eosio.msig
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 push action eosio.token create '[ "eosio", "10000000000.0000 SYS" ]' -p eosio.token@active
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 push action eosio.token issue '[ "eosio", "1000000000.0000 SYS", "memo" ]' -p eosio@active
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 set contract eosio /data1/eos/eos/build/contracts/eosio.system -p eosio
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 push action eosio setpriv '["eosio.msig", 1]' -p eosio@active
创建新的账号
1
2
3
4
5
6
7
- - - . . . - . . . - - -
- - - . . . - . . . - - -
- - - . . . - . . . - - - - - . - - - . - - - -
- - - . . . - . . . - - - - - . - - - . - - - -
注册为producer
1
2
cleos --wallet-url http: //127.0.0.1:8899 -u http:/ /127.0.0.1:48888 system regproducer admin1 EOS6CrKkykBfRkiqS5kkbhjVHhnQFxf8YuwtVqQgrso4GniesqPcG https:/ /admin1.com/ EOS6CrKkykBfRkiqS5kkbhjVHhnQFxf8YuwtVqQgrso4GniesqPcG
cleos --wallet-url http: //127.0.0.1:8899 -u http:/ /127.0.0.1:48888 system regproducer admin2 EOS6FF1ByAGfNEbx1okMiKjeKq9FeNQvybz7pPTWqpJ7vwxDatDiS https:/ /admin2.com/ EOS6FF1ByAGfNEbx1okMiKjeKq9FeNQvybz7pPTWqpJ7vwxDatDiS
查看producer列表
1
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 system listproducers
投票
1
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 system voteproducer prods admin1 admin2
查看账号信息
1
cleos --wallet-url http://127.0.0.1:8899 -u http://127.0.0.1:48888 get account eosio
参考资料
https://blockflow.net/t/topic/621
https://www.jianshu.com/p/ed90f99ead51
https://developers.eos.io/eosio-nodeos/docs/local-multi-node-testnet