【精解】EOS多节点组网:商业场景分析以及节点启动时序 (5)

三个变量stakeNet,stakeCpu,ramFunds就是我们用来抵押资源的值,这个策略与前面提到的“Stake 流程”有些不同,我们通过脚本参数指定了内存购买数而不是上面提到的0.1 SYS,另外还有最小抵押值和最大非抵押值等,所以这个流程是更加复杂的,具备生产可行性。

二,注册区块生产者候选人

我们可以指定某个或某些个股权账户作为区块生产者。这个过程首先要先将股权账户注册为一个区块生产者候选人,通过以下命令执行:

root@iZ2ze5wsiqz8cj0lqgf73tZ:~/239# cleos system regproducer accountnum11 EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb https://accountnum11.com/EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb 400025ms thread-0 main.cpp:429 create_action ] result: {"binargs":"1082d4334f4d11320003e5419cfdd7d6d511bc2c2f7f88c0e93432cf0ff39718fe99491e18e2069dd2674e68747470733a2f2f6163636f756e746e756d31312e636f6d2f454f5338614361484141524a7657714437587362714b323563346168444b543454776d716a76534346624433626f66384c313646620000"} arg: {"code":"eosio","action":"regproducer","args":{"producer":"accountnum11","producer_key":"EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb","url":"https://accountnum11.com/EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb","location":0}} executed transaction: 8181fe1cd180afeae280b8f8f2ffc735aa63cb10a8c0cf12a86198e179203228 216 bytes 1481 us # eosio <= eosio::regproducer {"producer":"accountnum11","producer_key":"EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb","u... warning: transaction executed locally, but may not be confirmed by the network yet

参数介绍:

指定股权账户名称

指定该账户未来作为区块生产者的公钥(这个可以与账户本身的公钥不同)

url,一般由生产者账户名加公钥组成。用来展示区块生产者的信息的网址,这个网址是我们自己维护的,相当于我们的官网,主要介绍一些区块生产者的名称,愿景,意义等,让其他节点更加了解自己,从而为自己投票。

候选人列表展示

下面我们再用相同的流程多注册几个候选人,然后展示候选人列表:

root@iZ2ze5wsiqz8cj0lqgf73tZ:~/239# cleos system listproducers Producer Producer key Url Scaled votes a EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb https://www.baidu.com 0.0000 accountnum1 EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb https://www.google.com 0.0000 accountnum11 EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4TwmqjvSCFbD3bof8L16Fb https://accountnum11.com/EOS8aCaHAARJvWqD7XsbqK25c4ahDKT4Tw 0.0000

两个问题:

我注册的三个候选人的生产公钥都是相同的,好像也没有失败,看看后面有没有坑吧。

使用system newaccount时并未有账户长度的限制,没有让我去bid 名字,这个后面再观察研究。

三,区块生产者开启

使用一个候选人账户开启一条链,配置config.ini,手动去写比较复杂。我们直接使用脚本执行,执行前先安装numpy

sudo apt-get install python3-numpy

然后修改脚本中的一些数字为有效值,开始执行(我们约束只要3个bp,8个普通账户),

./bios-boot-tutorial.py -a --user-limit 8 --producer-limit 3

前面提到的流程全都跑完了,跑到当前位置停下,可以看到,先来查一下候选人列表:

bios-boot-tutorial.py: ../../build/programs/cleos/cleos --wallet-url :6666 --url :8000 system listproducers Producer Producer key Url Scaled votes producer111a EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz https://producer111a.com/EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8 0.0000 producer111b EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC https://producer111b.com/EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuE 0.0000 producer111c EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6 https://producer111c.com/EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNj 0.0000

然后分别开启这三个账户的链,

bios-boot-tutorial.py: rm -rf ./nodes/01-producer111a/ bios-boot-tutorial.py: mkdir -p ./nodes/01-producer111a/ bios-boot-tutorial.py: ../../build/programs/nodeos/nodeos --max-irreversible-block-age 9999999 --contracts-console --genesis-json /root/lwb-work/eos/tutorials/bios-boot-tutorial/genesis.json --blocks-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/01-producer111a/blocks --config-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/01-producer111a --data-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/01-producer111a --chain-state-db-size-mb 1024 --http-server-address 127.0.0.1:8001 --p2p-listen-endpoint 127.0.0.1:9001 --max-clients 13 --p2p-max-nodes-per-host 13 --enable-stale-production --producer-name producer111a --private-key '["EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz","5KLGj1HGRWbk5xNmoKfrcrQHXvcVJBPdAckoiJgFftXSJjLPp7b"]' --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin --p2p-peer-address localhost:9000 2>>./nodes/01-producer111a/stderr bios-boot-tutorial.py: rm -rf ./nodes/02-producer111b/ bios-boot-tutorial.py: mkdir -p ./nodes/02-producer111b/ bios-boot-tutorial.py: ../../build/programs/nodeos/nodeos --max-irreversible-block-age 9999999 --contracts-console --genesis-json /root/lwb-work/eos/tutorials/bios-boot-tutorial/genesis.json --blocks-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/02-producer111b/blocks --config-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/02-producer111b --data-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/02-producer111b --chain-state-db-size-mb 1024 --http-server-address 127.0.0.1:8002 --p2p-listen-endpoint 127.0.0.1:9002 --max-clients 13 --p2p-max-nodes-per-host 13 --enable-stale-production --producer-name producer111b --private-key '["EOS7Ef4kuyTbXbtSPP5Bgethvo6pbitpuEz2RMWhXb8LXxEgcR7MC","5K6qk1KaCYYWX86UhAfUsbMwhGPUqrqHrZEQDjs9ekP5j6LgHUu"]' --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin --p2p-peer-address localhost:9000 --p2p-peer-address localhost:9001 2>>./nodes/02-producer111b/stderr bios-boot-tutorial.py: rm -rf ./nodes/03-producer111c/ bios-boot-tutorial.py: mkdir -p ./nodes/03-producer111c/ bios-boot-tutorial.py: ../../build/programs/nodeos/nodeos --max-irreversible-block-age 9999999 --contracts-console --genesis-json /root/lwb-work/eos/tutorials/bios-boot-tutorial/genesis.json --blocks-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/03-producer111c/blocks --config-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/03-producer111c --data-dir /root/lwb-work/eos/tutorials/bios-boot-tutorial/nodes/03-producer111c --chain-state-db-size-mb 1024 --http-server-address 127.0.0.1:8003 --p2p-listen-endpoint 127.0.0.1:9003 --max-clients 13 --p2p-max-nodes-per-host 13 --enable-stale-production --producer-name producer111c --private-key '["EOS5n442Qz4yVc4LbdPCDnxNSseAiUCrNjRxAfPhUvM8tWS5svid6","5JCStvbRgUZ6hjyfUiUaxt5iU3HP6zC1kwx3W7SweaEGvs4EPfQ"]' --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin --p2p-peer-address localhost:9000 --p2p-peer-address localhost:9001 --p2p-peer-address localhost:9002 2>>./nodes/03-producer111c/stderr

启动候选人链时有几点注意:

要保证路径下包含genesis.json文件,用于描述启动初始化链属性信息。

命令中组装的参数作用域仅对当下生效,与在/nodes/01-producer111a目录下的config.ini文件中的配置不同。

这三个候选人分别占用了http的端口8001,8002,8003,p2p端口9001,9002,9003,分别监听其他p2p地址。

三个候选人的出块账户均设为自己,同时设置了对应的密钥对。

每个链的日志,包括源节点和三个候选人的都时刻同步在各自节点目录下的文件stderr中。

四,为区块生产者投票

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwjjp.html