【问链-Eos公开课】第5课 组建单机多节点EOS网络

1.配置nodeos节点的初始集

我们将启动许多nodeos,nodeos,将它们指向彼此,并最终对一组生产者进行投票。所有的nodeos节点都将在同一个服务器上运行。在接下来的章节中,我们将采取各种步骤来准备我们的候选生产者。producer1、producer2作为出块节点,user1、user2作为普通节点。

2.为每个nodeos创建配置和数据目录

因为所有的nodeos节点都将在同一个服务器上运行,所以我们需要单独的配置和数据目录。下面的例子为每个noedos节点创建~/eosio_test目录。使用任何最适合你的方法来创建多个账户,记住,账户名称的命名限制必须是12个字符,从a-z和1-5的集合。这里我们目录为:
producer1、producer2。

3.为点对点通信准备IP地址

确定每个nodeos节点之间的点对点通信的IP地址和端口号(稍后您将在实际启动生产者节点时使用它)。每个nodeos都可以通过设置p2p-peer-address地址配置属性来配置,也可以在命令行启动nodeos时(每个对等点有一个参数),或者在配置中设置nodeos的config.ini文件(每个节点一行)属性。

producer1:

bnet-endpoint = 0.0.0.0:4321

bnet-no-trx = false

blocks-dir = "blocks"

chain-state-db-size-mb = 1024

reversible-blocks-db-size-mb = 340

contracts-console = false

https-client-validate-peers = 1

http-server-address = 127.0.0.1:8011

access-control-allow-origin = *

access-control-allow-credentials = false

p2p-listen-endpoint = 127.0.0.1:9011

p2p-peer-address = localhost:9022

p2p-max-nodes-per-host = 1

agent-name = "producer1-node"

allowed-connection = any

max-clients = 20

connection-cleanup-period = 30

network-version-match = 1

sync-fetch-span = 1000

max-implicit-request = 1500

enable-stale-production = true

pause-on-startup = false

max-transaction-time = 10000

max-irreversible-block-age = -1

producer-name = producer1

signature-provider = EOS83GKHM7NLhxmYEB4wiTR57mpVVzgnfnU4SiGEsQjiPuZB9Cu2r=KEY:5JgGMrqeaczH6UoqWGZL2EPZ8fsJEnuifGnDSK7hpcKGXRsMvQJ

keosd-provider-timeout = 5

txn-reference-block-lag = 0

wallet-dir = "."

unlock-timeout = 6000

filter-on = *

abi-serializer-max-time-ms=45

plugin = eosio::producer_plugin

plugin = eosio::wallet_api_plugin

plugin = eosio::wallet_plugin

plugin = eosio::chain_api_plugin

plugin = eosio::http_plugin

plugin = eosio::history_api_plugin

producer2:

bnet-endpoint = 0.0.0.0:4321

bnet-no-trx = false

blocks-dir = "blocks"

chain-state-db-size-mb = 1024

reversible-blocks-db-size-mb = 340

contracts-console = false

https-client-validate-peers = 1

http-server-address = 127.0.0.1:8022

access-control-allow-origin = *

access-control-allow-credentials = false

p2p-listen-endpoint = 127.0.0.1:9022

p2p-peer-address = localhost:9011

p2p-max-nodes-per-host = 1

agent-name = "producer2-node"

allowed-connection = any

max-clients = 20

connection-cleanup-period = 30

network-version-match = 1

sync-fetch-span = 1000

max-implicit-request = 1500

enable-stale-production = true

pause-on-startup = false

max-transaction-time = 10000

max-irreversible-block-age = -1

producer-name = producer2

signature-provider = EOS81FEATW43yBVGYHqRRCXWBvRjwo8jCHZUSkALYtqbpKJfF3uKc=KEY:5Jwq3ve4jGG3uihCj3oLt7bB3NpmgN4WpLyrgvPua9vkJYJzpCp

keosd-provider-timeout = 5

txn-reference-block-lag = 0

wallet-dir = "."

unlock-timeout = 6000

filter-on = *

abi-serializer-max-time-ms=45

plugin = eosio::producer_plugin

plugin = eosio::wallet_api_plugin

plugin = eosio::wallet_plugin

plugin = eosio::chain_api_plugin

plugin = eosio::http_plugin

plugin = eosio::history_api_plugin

4.启动“创世纪”节点

创世”节点是我们开始的第一个节点,它将产生区块链网络。所有其他节点都将从创世纪节点中派生出来。在创世纪节点上做以下操作:
(以后台进程的方式启动,避免关掉终端进程关闭)

nohup nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin &

5.创建钱包

创建一个钱包。在默认情况下,keosd会自动开始管理钱包。

$ cleos wallet create

一定要保存钱包密码,以便将来解锁钱包。
在本教程中,无论哪个节点被访问,相同的钱包都将被用于所有帐户的所有关键管理。在分布式部署中,钱包管理应该是本地的活动。

6.创建重要的系统账户

有几个系统帐户是必需的。这些都是:
eosio.bpay
eosio.msig
eosio.names
eosio.ram
eosio.ramfee
eosio.saving
eosio.stake
eosio.token
eosio.vpay
重复以下步骤,为每个系统账户创建一个账户。在本教程中,我们将为帐户所有者和活动键使用相同的密匙对,因此我们只需要在命令行上提供一次密钥对值。对于大多数一般的帐户,对于所有者和活动使用单独的密钥是一种很好的做法。该脚本对所有的eosio.* 账户都使用相同的密钥。您可以为每个账户使用不同的密钥。

$ cleos create key  # for eosio.bpay
Private key: 5Hye2hueojzGHEhiriWQvedd77De1AuVc2mqa4XD3mgkWF9yENy
Public key: EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR

$ cleos wallet import 5Hye2hueojzGHEhiriWQvedd77De1AuVc2mqa4XD3mgkWF9yENy
imported private key for: EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR

创建各种系统账户:

cleos create account eosio eosio.bpay EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.msig EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.names EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.ram EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.ramfee EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.saving EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.stake EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.token EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.vpay EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR
cleos create account eosio eosio.system EOS6WtUR4G5rRRGWrxSZdFd21iYYRgr3Hr7Pymcqg6dG5FVP12JcR

7.安装eosio.token智能合约

安装eosio.token的合约。这个合约使您能够创建、发行、交易和获取代币。

cleos set contract eosio.token ../../contracts/eosio.token

8.创建系统货币,其最大值为10亿个token。然后发行10亿个代币。用你的特定货币名称替换SYS符号。


cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS" ]' -p eosio.token
cleos push action eosio.token issue '[ "eosio", "1000000000.0000 SYS", "memo" ]' -p eosio

9.安装eosio.msig智能合约

msig合约支持和简化定义和管理权限级别和执行多签名操作。

cleos set contract eosio.msig ../../contracts/eosio.msig

10.安装eosio.system智能合约

该合约提供了几乎所有基于代币的操作行为的操作。在安装系统合约之前,操作是独立于账户的。一旦系统合约被启用,操作现在就有了一个经济元素。资源(cpu、网络、内存)必须付费。同样,新账户必须支付费用。

cleos set contract eosio  ../../contracts/eosio.system

11.从单一生产者转变为多个生产者

使eosio.msig成为特权帐户(最后一步执行eosio.system合约,否则会被覆盖,eosio.system 必须用eosio来部署)

cleos push action eosio setpriv '["eosio.msig", 1]' -p eosio@active

11.创建投票账户

创建出块节点并分配代币:

cleos system newaccount eosio --transfer producer1  EOS83GKHM7NLhxmYEB4wiTR57mpVVzgnfnU4SiGEsQjiPuZB9Cu2r --stake-net "100.0000 SYS" --stake-cpu "100000.0000 SYS" --buy-ram "100.0000 SYS" --buy-ram-kbytes "100.0000 SYS"

cleos system newaccount eosio --transfer producer2  EOS81FEATW43yBVGYHqRRCXWBvRjwo8jCHZUSkALYtqbpKJfF3uKc --stake-net "100.0000 SYS" --stake-cpu "100000.0000 SYS" --buy-ram "100.0000 SYS" --buy-ram-kbytes "100.0000 SYS"

创建非出块节点并分配代币:

cleos system newaccount eosio --transfer user1  EOS5SWHoG1mgy74uyXQTVuGnaT4gG4JfsCiWxQoY9veiQ4V2sQ753 --stake-net "37500000.0000 SYS" --stake-cpu "37500000.0000 SYS" --buy-ram "100.0000 SYS" --buy-ram-kbytes "100.0000 SYS"
cleos system newaccount eosio --transfer user2  EOS5bBuPnSmxyU178D8fvYNxfUv8yGqf6UM81NeJBvtKASEusVPzD --stake-net "37500000.0000 SYS" --stake-cpu "37500000.0000 SYS" --buy-ram "100.0000 SYS" --buy-ram-kbytes "100.0000 SYS"

12.登记为出块节点

登记为生产节点:

cleos system regproducer producer1 EOS83GKHM7NLhxmYEB4wiTR57mpVVzgnfnU4SiGEsQjiPuZB9Cu2r https://producer1.com/EOS83GKHM7NLhxmYEB4wiTR57mpVVzgnfnU4SiGEsQjiPuZB9Cu2r

cleos system regproducer producer2 EOS81FEATW43yBVGYHqRRCXWBvRjwo8jCHZUSkALYtqbpKJfF3uKc https://producer2.com/EOS81FEATW43yBVGYHqRRCXWBvRjwo8jCHZUSkALYtqbpKJfF3uKc

为便于投票过程,列出可供选择的生产者。

cleos system listproducers

13.进行投票
只有15%的可用选票被投票后才开始出块。


cleos system voteproducer prods user1 producer1
cleos system voteproducer prods user2 producer2

14.启动生产者
在每个生产者的单独窗口中,运行以下nodeos命令,调整命令行参数为每个生产者。
先清除一下缓存

rm -rf /root/.local/share/eosio/nodeos/data/

启动生产者

nodeos  --config-dir  ~/eosio_test/producer1
nodeos  --config-dir  ~/eosio_test/producer2

看到开始出块,整个过程完毕

猜你喜欢

转载自blog.csdn.net/tiandiwuya/article/details/81279891