美文网首页
EOS解读--BIOS 启动顺序

EOS解读--BIOS 启动顺序

作者: 脆果咒 | 来源:发表于2019-01-18 21:05 被阅读0次

    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 启动顺序

          本文链接:https://www.haomeiwen.com/subject/iteodqtx.html