EOS解读--BIOS 启动顺序

BIOS 启动顺序

3.1 配置初始的nodeos节点集

将启动一些nodeos节点,将它们指向彼此,并最终对一组生产者进行投票。 所有nodeos节点都在同一服务器上运行。

(1) 为每个nodeos创建配置和数据目录

//在nodeos命令行上将这些目录与--config-dir和--data-dir参数一起使用。

$ mkdir ~/eosio_test

$ for (( i = 1; i <= 5; i++ )); do for (( j = 1 ; j <=5 ; j++ )); do mkdir ~/eosio_test/accountnum$i$j; done; done

(2)准备用于对等通信的IP地址

将生产者指向彼此,以便进行对等通信。确定每个nodeos节点之间的对等通信的IP地址和端口号集,可以通过在启动nodeos时在命令行上设置p2p-peer-address配置属性(每个对等体一个参数),或者通过在config.ini文件中为nodeos设置属性(每个对等体一行)来配置每个nodeos 。

//例如,假设我们为生产者使用端口号9011-9055(即分别为accountnum11-accountnum55),请在nodes命令行上为accountnum12包含以下参数:

--p2p-peer-address localhost:9011 --p2p-peer-address localhost:9013 --p2p-peer-address localhost:9014 ...

//或者在config.mini里设置

p2p-peer-address = localhost:9011

p2p-peer-address = localhost:9013

p2p-peer-address = localhost:9014

无论是使用命令行还是配置文件方法,都注意不要在生成器列表中包含生产者自己的地址。

3.2 启动 “genesis” 节点

“genesis”节点是开始的第一个节点,它将生成区块链。 所有其他节点将从genesis节点派生。 在genesis节点上执行以下操作。

(1)创建一个钱包wallet

$ cleos wallet create

(2)配制genesis.json

位置:eos/tutorials/bios-boot-tutorial

作用:genesis.json文件定义了初始链状态。所有节点必须从相同的初始状态开始。有以下两个重要属性:

initial_timestamp:区块链的开始时间

initial_key :将使用该密钥对启动genesis节点,并使用此密钥对创建eosio的所有帐户。与genesis nodeos的公钥相匹配. 密钥对可以通过nodeos命令行 –private-key 指定,或 config.ini 的 private-key属性。

(3)为eosio帐户创建密钥:

$ cleos create key  

(4)启动genesis 节点

$ nodeos -e -p eosio --private-key '[ "${pub-key}","${private-key}" ]' --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --plugin eosio::history_api_plugin

3.3 创建重要的系统账户

//系统账户

eosio.bpay

eosio.msig

eosio.names

eosio.ram

eosio.ramfee

eosio.saving

eosio.stake

eosio.token

eosio.vpay

重复以下过程:

$ cleos create key  # for eosio.bpay

$ cleos wallet import ${private-key}

$ cleos create account eosio eosio.bpay ${owner-key}  ${active-key}

3.4 创建eosio.token合约

此合约可以创建,发布,传输和获取有关token的信息。

$ cleos set contract eosio.token  /eos/build/contracts/eosio.token

3.5 创建eosio.msig合约

作用:启用并简化了权限级别的定义和管理、执行多签名操作。

$ cleos set contract eosio.msig  eos/build/contracts/eosio.msig

3.6 创建和分配SYS货币

创建最大值为100亿token的SYS货币,然后发行十亿个代币。 可以用特定货币名称替换SYS。

//在 eosio账户中创建10B SYS tokens ,这有效地创造了最大的代币供应,但不会使任何代币进入流通。 没有流通的代币可以被存储。

$ cleos push action eosio.token create '[ "eosio", "10000000000.0000 SYS" ]' -p eosio.token

executed transaction: 0440461e0d8816b4a8fd9d47c1a6a53536d3c7af54abf53eace884f008429697  120 bytes  326 us  eosio.token <= eosio.token::create          {"issuer":"eosio","maximum_supply":"10000000000.0000 SYS"}

//eosio.token合同将1B SYS token从存储中移除并将其置于流通中。在发行时,token保存在eosio帐户中。 由于eosio帐户拥有未流通的token储备,因此需要其权限才能执行此操作。

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

executed transaction: a53961a566c1faa95531efb422cd952611b17d728edac833c9a55582425f98ed  128 bytes  432 us eosio.token <= eosio.token::issue           {"to":"eosio","quantity":"1000000000.0000 SYS","memo":"memo"}

3.7 创建eosio.system 合约

此合约包含了几乎所有基于toekn的操作。 一旦启用了系统合同,必须支付资源(cpu,网络,内存)、创建新帐户。 系统合同允许标记放样和未标记,要购买的资源,潜在生产者的注册和投票,生产者奖励认领,设置特权和限制等。

$ cleos set contract eosio  eos/build/contracts/eosio.system

3.8 从单一生产者过渡到多个生产者

此后,将从单个块生成器(创建节点)转换到多个生成器。到目前为止,只有内置的eosio帐户具有特权并且可以对块进行签名。但目标是通过一系列选定的生产者来管理区块链。

选举产生的生产者名单可以改变,规则不是直接向任何生产者提供特权,而是与名为eosio.prods的特殊内置帐户相关联。该帐户代表当选的生产者组。 eosio.prods帐户(实际上是生产者组)使用eosio.msig合同定义的权限进行操作。

安装eosio.system合同后,尽快将eosio.msig设为特权帐户,以便代表eosio帐户进行授权。 eosio将尽快辞去其权威,由eosio.prods接管。

//使eosio.msig成为特权帐户

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

3.9 放置token并扩展网络

至此,完成了单主机单节点的以下合约配置:

eosio.token

eosio.msig

eosio.system

帐户eosio和eosio.msig是特权帐户。 其他eosio帐户已创建但没有特权。接下来绑定账户并扩大生产者网络。

3.10 创建赌注账户

放样是将“真实世界”中的实体(例如,以Crowdsale或其他方式购买某物的个人)获得的令牌分配给EOSIO系统内的账户的过程。

对于初始放样过程可以采用如下方法:

1)0.1令牌:赌注RAM。默认情况下,cleos在创建帐户时会占用8 KB的RAM,由帐户创建者支付。在最初的赌注中,eosio账户是进行赌注的账户创建者。在最初的令牌赌注过程中,赌注的代币在达到最低投票要求之前不能保持不变,且要求为流动。

2)为CPU赌注0.45令牌,为网络赌注0.45令牌。

3)最多9个token可用作流动代币。

4)剩余toekn是赌注50/50 CPU和网络。

Example 1.  accountnum11 has 100 SYS. It will be staked as 0.1000 SYS on RAM; 45.4500 SYS on CPU; 45.4500 SYS on network; and 9.0000 SYS held for liquid use.

Example 2.  accountnum33 has 5 SYS. It will be staked as 0.1000 SYS on RAM; 0.4500 SYS on CPU; 0.4500 SYS on network; and 4.0000 SYS held for liquid use.

使用Pareto分布将1B令牌分发给帐户,模型为80-20规则,即80%的令牌由20%的人口持有。

(1)创建赌注账户

使用以下步骤为每个帐户放置令牌。 必须为每个帐户单独完成这些步骤。

$ cleos create key  # for accountnum11

$ cleos wallet import ${private-key}

使用初始资源和公钥创建一个赌注帐户。

cleossystemnewaccounteosio−−transferaccountnum11cleossystemnewaccounteosio−−transferaccountnum11{pubkey} –stake-net “100000.0000 SYS” –stake-cpu “100000.0000 SYS”

3.11 选择生产者

(1)注册为生产者

使用以下命令注册为生产者。 这使得节点成为生产者的候选者,但除非被选举,否则该节点实际上不是生产者。

$ cleos system regproducer accountnum11   ${pubkey}   [https://accountnum11.com/$](https://accountnum11.com/$){pubkey}

(2)列出生产者

$ cleos system listproducers

Producer      Producer key                                           Url  

(3)启动生产者

使用以下命令启动生成。 由于所有生产者都在单个服务器上运行,因此命令行参数用于确保每个生产者使用自己的目录。

在每个生产者的窗口中,运行以下nodeos命令。

$ nodeos --genesis-json ~/eosio_test/accountnum11/genesis.json --block-log-dir ~/eosio_test/accountnum11/blocks --config-dir ~/eosio_test/accountnum11/ --data-dir ~/eosio_test/accountnum11/ --http-server-address 127.0.0.1:8011 --p2p-listen-endpoint 127.0.0.1:9011 --enable-stale-production --producer-name accountnum11 --private-key '[ "pubkey","privatekey" ]' --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --plugin eosio::history_api_plugin --p2p-peer-address localhost:9022  --p2p-peer-address localhost:9033  --p2p-peer-address localhost:9044

为方便起见,可以复制以下命令行以在帐户accountnum22,accountnum33和accountnum44的单独shell窗口中运行nodeos。

$ nodeos --genesis-json ~/eosio_test/accountnum22/genesis.json --block-log-dir ~/eosio_test/accountnum22/blocks --config-dir ~/eosio_test/accountnum22/ --data-dir ~/eosio_test/accountnum22/ --http-server-address 127.0.0.1:8022 --p2p-listen-endpoint 127.0.0.1:9022 --enable-stale-production --producer-name accountnum22 --private-key '[ ""pubkey","privatekey" ]' --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --p2p-peer-address localhost:9011  --p2p-peer-address localhost:9033  --p2p-peer-address localhost:9044

$ nodeos --genesis-json ~/eosio_test/accountnum33/genesis.json --block-log-dir ~/eosio_test/accountnum33/blocks --config-dir ~/eosio_test/accountnum33/ --data-dir ~/eosio_test/accountnum33/ --http-server-address 127.0.0.1:8033 --p2p-listen-endpoint 127.0.0.1:9033 --enable-stale-production --producer-name accountnum33 --private-key '[ "pubkey","privatekey"]' --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --p2p-peer-address localhost:9011  --p2p-peer-address localhost:9022  --p2p-peer-address localhost:9044

$ nodeos --genesis-json ~/eosio_test/accountnum44/genesis.json --block-log-dir ~/eosio_test/accountnum44/blocks --config-dir ~/eosio_test/accountnum44/ --data-dir ~/eosio_test/accountnum44/ --http-server-address 127.0.0.1:8044 --p2p-listen-endpoint 127.0.0.1:9044 --enable-stale-production --producer-name accountnum44 --private-key '[ "pubkey","privatekey"]' --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin --plugin eosio::http_plugin --p2p-peer-address localhost:9011  --p2p-peer-address localhost:9022  --p2p-peer-address localhost:9033

(3)genesis.json

每个节点的输出都在该节点工作目录中的文件stderr中捕获,例如./nodes/accountnum44/stderr。

3.12 销毁eosio账户

一旦选择生产者满足了最低数量要求,即被选出,eosio帐户就可以销毁,将eosio.msig帐户留作唯一的特权帐户。

销毁主要涉及将eosio的所有帐户的密钥设置为null。 使用以下命令清除eosio帐户的所有者和活动密钥:

$ cleos push action eosio updateauth '{"account": "eosio", "permission": "owner", "parent": "", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": "active"}}]}}' -p eosio@owner

$ cleos push action eosio updateauth '{"account": "eosio", "permission": "active", "parent": "owner", "auth": {"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": "active"}}]}}' -p eosio@active

你可能感兴趣的:(EOS解读--BIOS 启动顺序)