node1

config.ini



blocks-dir = "blocks" 
http-server-address = 0.0.0.0:8888
p2p-listen-endpoint = 0.0.0.0:9876
p2p-server-address = localhost:9876
allowed-connection = any
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
producer-name = eosio

enable-stale-production = true

access-control-allow-origin = *  
http-validate-host = false 
filter-on = *
chain-state-db-size-mb = 2048  
abi-serializer-max-time-ms = 3000

plugin = eosio::producer_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::history_plugin
plugin = eosio::history_api_plugin
plugin = eosio::http_plugin
plugin = eosio::mongo_db_plugin 
mongodb-uri = mongodb://admin:123456@mongodb:27017/eos1 
mongodb-queue-size = 2048
mongodb-abi-cache-size = 2048

##启动keosd、nodeos

##编译合约
eosio.contracts/build.sh

##创建钱包
cleos wallet create –to-console

##导入eosio密钥
cleos wallet import –private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
##导入其他新创建的密钥
cleos wallet import –private-key 5KUUc1wsZuDiZSKjhVRH3iMz82A2bg58v2stzzyYzZWWeFhKp2H
cleos wallet import –private-key 5J3CA2Y57zkU6U4UPWgKJfgwA4eMs7gvGrLz8nxk5U7xtpFXb9a

发布合约

cleos set contract eosio /eosio.contracts/contracts/eosio.token/src eosio.token.wasm eosio.token.abi -p eosio

然后再创建account1、account2两个账户:
cleos create account eosio account1 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio account2 EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

创建九个系统账户

这九个系统用户的名称及其作用如下说明:

eosio.bpay:矿工获取出块奖励的临时代管账户,增发EOS的1%的25%会先转到这个账户;

eosio.msig:多重签名管理的账户;

eosio.names:靓号账户拍卖管理的账户;

eosio.ram:内存买卖管理的账户;

eosio.ramfee:内存买卖收取手续费的账户,按照每笔交易千分之5的费率收取手续费;

eosio.saving:增发EOS临时存放账户,增发总量 5%,其中80%放在此账户,另外 20%再分成25%和75%,分别给eosio.bpay和eosio.vpay;

eosio.stake:管理EOS抵押的账户;

eosio.token:发行和管理token的账户;

eosio.vpay:矿工按照获得投票多少比例获取奖励的临时代管账户,增发EOS的1%的75%会先转到这个账户.

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

加载四大合约,发行代币

cleos set contract eosio.token /eosio.contracts/contracts/eosio.token
cleos set contract eosio.msig /eosio.contracts/contracts/eosio.msig
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

cleos set contract eosio /eosio.contracts/contracts/eosio.system
cleos push action eosio setpriv ‘[“eosio.msig”, 1]’ -p eosio@active

四大智能合约

  • eosio.bios
    基本操作,设置帐户和全局操作限制、权限、生产者以及建立授权级别。

  • eosio.token
    提供基本货币管理功能。包括创建货币、发行货币、转移货币。

  • eosio.msig
    进行所需授权级别的多个签名。

  • eosio.system
    让用户可以使用token,对生产者和工作人员进行配置和投票提案,可以经济且有效地建立和管理区块链。

加载系统智能合约并发币:
加载系统合约的时候有可能会有一个报错: ……too long. 可以在命令行最后面加上 -x 3000 的选项,3000是一个大概的数字,自行调整这个数据到正确运行为止;
智能合约的文件路径必须是全路径,尽量不要使用相对路径;
代币发行的大小是用的uint32_t类型,所以代币发行不能超过这个类型的数字,否则会报错;
系统合约加载不成功,检查一下九个系统用户是否正确创建,其它三个合约是否正确加载;

完成以后,在eosio用户里有10亿 SYS 代币,

创建普通用户

加载了eosio.system之后就不能使用create account命令了,只能用system newaccount创建账户

cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system newaccount –transfer eosio zero EOS5nquErGx97QiN6m5DspwLU8wNLmVAm78ccpzV6Ht4nfcJhepyj –stake-net “100000000.0000 SYS” –stake-cpu “100000000.0000 SYS” –buy-ram “20000.0000 SYS”
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 transfer eosio zero “20000.0000 SYS”
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system newaccount –transfer eosio two EOS5VmHFnwVyiFurmFLw387xRpgXEnyF1yxqZs6JLtVwU1hv9gaEb –stake-net “100000000.0000 SYS” –stake-cpu “100000000.0000 SYS” –buy-ram “20000.0000 SYS”
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 transfer eosio two “20000.0000 SYS”
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system newaccount –transfer eosio four EOS8UXVwDadaS8pLDjQ2vRa6Jaqy5k1rqpMHUNCFqzeDF4KfoguJe –stake-net “100000000.0000 SYS” –stake-cpu “100000000.0000 SYS” –buy-ram “20000.0000 SYS”
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 transfer eosio four “20000.0000 SYS”

注册节点候选人

cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system regproducer zero EOS5nquErGx97QiN6m5DspwLU8wNLmVAm78ccpzV6Ht4nfcJhepyj
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system regproducer two EOS5VmHFnwVyiFurmFLw387xRpgXEnyF1yxqZs6JLtVwU1hv9gaEb
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system regproducer four EOS8UXVwDadaS8pLDjQ2vRa6Jaqy5k1rqpMHUNCFqzeDF4KfoguJe
可以用下列命令查看节点候选人:

cleos --wallet-url http://127.0.0.1:8900 --url http://192.168.154.157:8888 system listproducers

给创建的账户转账

cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 push action eosio.token transfer ‘[“eosio”, “zero”,”1000.0000 SYS”,”vote”]’ -p eosio
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 push action eosio.token transfer ‘[“eosio”, “two”,”1000.0000 SYS”,”vote”]’ -p eosio
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 push action eosio.token transfer ‘[“eosio”, “four”,”1000.0000 SYS”,”vote”]’ -p eosio

使用命令进行投票(自己给自己投票)

所有代币的15%进行投票后eosio会停止出块,主网会自动启动。在这里我们的代币数据数量总共是10亿,那么我们的主网启动需要1.5亿质押的代币进行投票后才能启动,质押的代币计算方式:staked = cpu + net:

cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system voteproducer prods zero zero
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system voteproducer prods two two
cleos –wallet-url http://127.0.0.1:8900 –url http://192.168.154.157:8888 system voteproducer prods four four

结尾

过一段时间后就能看到节点轮流产块,创世节点只需同步块,如下所示

本文是在学习了q_776355102的博客后做的简单总结,有诸多详细命令请参考原文:

https://blog.csdn.net/weixin_39842528/article/details/81034018

更改节点出块数目

按上面的步骤可以让节点轮流出块了,但是每个节点出块个数是12,而不是像官网白皮书说的那样是6个,修改下相关代码就可以让节点出块个数变为6。

执行指令:vi libraries/chain/include/eosio/chain/config.hpp +99

//const static int producer_repetitions = 12;
const static int producer_repetitions = 6;
保存退出之后编译下源码,在按照上面的步骤再来一遍就可以看到如下界面: