EOS version:v1.0.5 Date:2018-06-19
Host: Centos 7
 
     通过分析并运行eos/tutorials/bios-boot-tutorial目录下的bios-boot-tutorial.py脚本文件,结合以前的学习过的eos命令,对eos的启动过程做一个简略的分析。此文件在于用单台主机模拟eos的启动流程,最后创建了多个节点并轮流出块的环境,为以后布置多节点多主机环境创建一个良好的基础。
在运行bios-boot-tutorial.py脚本前,请安装好python及其依赖包。另外还有一些小的报错信息需要修改,比较简单,不再详述。脚本中的测试数据有20多万条,我们只取10条数据进行测试,命令如下:
./bios-boot-tutorial.py -a --producer-limit 10 --user-limit 10 --num-voters 5 --num-producers-vote 5 --producer-sync-delay 10
 
注:下面的所有命令是我根据脚本回显及脚本代码添加上去的,仅供参考。
 

1.创建默认的钱包

 
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 wallet create
用于创建了一个default的钱包,其密匙为PW5JQ57Ee63S6bKPCzyZfNoFe5Se3SbaxJCSKo7oWh114VdPVLA1C;
 

2.将eosio用户和普通用户的私匙导入钱包

 
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 wallet import EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr
 
这里共有21个私匙导入,因为是测试数据,这里把eosio的私匙、10个普通用户的私匙、10个节点用户的私匙全部导入了default钱包里。
 

3.运行eosio 的nodeos进程

nodeos --max-irreversible-block-age 9999999 --contracts-console --genesis-json /home/hml/eos/tutorials/bios-boot-tutorial/genesis.json --blocks-dir /home/hml/eos/tutorials/bios-boot-tutorial/nodes/00-eosio/blocks --config-dir /home/hml/eos/tutorials/bios-boot-tutorial/nodes/00-eosio --data-dir /home/hml/eos/tutorials/bios-boot-tutorial/nodes/00-eosio --chain-state-db-size-mb 1024 --http-server-address 127.0.0.1:8000 --p2p-listen-endpoint 127.0.0.1:9000 --max-clients 20 --p2p-max-nodes-per-host 20 --enable-stale-production --producer-name eosio --private-key '["EOS8Znrtgwt8TfpmbVpTKvA2oB8Nqey625CLN8bCN3TEbgx86Dsvr","5K463ynhZoCDDa4RDcr63cUwWLTnKqmdcoTKTHBjqoKfv4u5V7p"]' --plugin eosio::http_plugin --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin

4.创建用户

 
//创建9个系统用户,这9个用户必须创建,否则将无法继续进行
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 create account eosio eosio.bpay EOS857mMqsuY9T2fwxmYkZhhNJAMxjMhsNYpJGwoWvcPBfTYfe7Gq
 
这里一共需要创建9个系统用户,分别如下:
eosio.bpay: 生产者区块付款用户
eosio.msig: 多重签名,特权帐号;
eosio.name: 名字竞价的钱都会转到这个号上;
eosio.ram: 购买ram的手率真费(0.5%)会转到这个帐号上;
eosio.ramfee: 买ram的时候会产生0.5%的手续费,转到这个号上;
eosio.stake: 抵押网络和cpu资源时会得到股权,eos会转到这个帐号上,refund会从这个帐号转出;
eosio.token: 发行eosio.token合约的帐号;
eosio.saving: 未分配的通货膨胀资金用户
eosio.vpay: 生产者投票付款用户
 

5.加载智能合约

//加载token合约
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 set contract eosio.token /home/hml/eos/build/contracts/eosio.token
 
//加载多重标签合约
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 set contract eosio.msig /home/hml/eos/build/contracts/eosio.msig -p eosio.msig@active
 

6.创建并发行货币

//创建货币
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 push action eosio.token create '[ "eosio", "10000000000.0000 SYS" ]' -p eosio.token
 
//发行货币到eosio帐户
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 push action eosio.token issue '[ "eosio", "1000000000.0000 SYS", "memo" ]' -p eosio
 

7.创建系统合约

cleos --wallet-url http://localhost:6666 --url http://localhost:8000 set contract eosio /home/hml/eos/build/contracts/eosio.system -x 2000
 
注:这里的-x 2000 是指数据长度,要根据自己的数据长度具体调整大小。
 

8.设置eosio.msig为特权帐户

cleos --wallet-url http://localhost:6666 --url http://localhost:8000 push action eosio setpriv '["eosio.msig", 1]' -p eosio@active
 

9.为10个普通用户、10个生产者用户分配系统资源和货币

 
//创建普通用户useraaaaaaaa~useraaaaaaaj
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system newaccount --transfer eosio useraaaaaaaa EOS69X3383RzBZj41k73CSjUNXM5MYGpnDxyPnWUKPEtYQmTBWz4D --stake-net "207281665.4164 SYS" --stake-cpu "207281665.4163 SYS" --buy-ram "0.1000 SYS"
 
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 transfer eosio useraaaaaaaa "10.0000 SYS"
 
//创建生产者用户producer111a~producer111j
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system newaccount --transfer eosio producer111a EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz --stake-net "8674251.7040 SYS" --stake-cpu "8674251.7040 SYS" --buy-ram "0.1000 SYS"
 
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 transfer eosio producer111a "10.0000 SYS"
 

10.将10个生产者用户注册为出块者,将来会轮巡出块

 
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system regproducer producer111a EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz https://producer111a.com/EOS8imf2TDq6FKtLZ8mvXPWcd6EF2rQwo8zKdLNzsbU9EiMSt9Lwz
 
//查看当前已注册为生产者的用户
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system listproducers
 
11.开启10个生产者用户的nodeos进程
 
//开户producer111b的nodeos
nodeos --max-irreversible-block-age 9999999 --contracts-console --genesis-json /home/hml/eos/tutorials/bios-boot-tutorial/genesis.json --blocks-dir /home/hml/eos/tutorials/bios-boot-tutorial/nodes/02-producer111b/blocks --config-dir /home/hml/eos/tutorials/bios-boot-tutorial/nodes/02-producer111b --data-dir /home/hml/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 20 --p2p-max-nodes-per-host 20 --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
 
这里用10个生产者,需要运行10个nodeos,相关的配置也要设置好。
 

11.使用已抵押的普通用户给生产者用户投票

cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system voteproducer prods useraaaaaaaa producer111d producer111i producer111c producer111b producer111e
 
投票:可以同时给多个生产者用户投票,也可以委托别人进行投票
 
//被委托的用户或者生产者需要先注册,producer111a注册为被委托人
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system regproxy producer111a
 
//委托人useraaaaaaaa 可以把投票权委托给已注册的节点或者帐户producer111a
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 system voteproducer proxy useraaaaaaaa producer111a
 

12.注销系统用户

 
当用生产者继承出块后,10个系统用户将会注销掉(eosio,eosio.bpay...).
 
//eosio注销
cleos --wallet-url http://localhost:6666 --url http://localhost:8000 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 --wallet-url http://localhost:6666 --url http://localhost:8000 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将正式启动,由系统合约创建的10个生产者将接替eosio用户进行出块,每个用户每次出块12个,系统用户eosio将不再参与出块。

EOS Bios Boot Sequence的更多相关文章

  1. In Depth : Android Boot Sequence / Process

    In Depth : Android Boot Sequence / Process What happened when I press power on button in my Android ...

  2. 翻译wiki(一):Bios boot partition

    文章翻译自wiki,水平有限,若有错万请见谅.原文:https://en.wikipedia.org/wiki/BIOS_boot_partition BIOS boot partition是一个分区 ...

  3. Legacy BIOS Boot 是如何启动或引导的

    现在Windows 8 64位操作系统全面采用UEFI引导启动的方式,与过去的Legacy启动有什么区别呢?今天就让我们一起来了解下. Legacy BIOS UEFI Boot 是如何启动或引导的 ...

  4. linux启动流程及自定义gurb

    linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...

  5. linux 内核升级

    LINUX 内核升级 linux 内核官网 https://www.kernel.org/ POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----& ...

  6. Linux Default Bootup、Startup、Autoload Configuration file(自启动服务脚本)

    目录 . Linux初始化init系统 . Linux配置文件自动加载过程 1. Linux初始化init系统 Linux初始化init系统在不同操作系统系列下的区别 . RHEL : SysVini ...

  7. CPU工作状态的知识介绍

    转自:http://www.bbwxbbs.com/forum.php?mod=viewthread&tid=2552   近几年,个人计算机的运行速度有了质的飞跃,但是功耗却没能与时俱进,着 ...

  8. Linux 相关基础笔记

    html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...

  9. 详解linux系统的启动过程及系统初始化

    一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(boot ...

随机推荐

  1. [egret+pomelo]实时对战游戏杂记(5)

    之前大体了解了pomelo服务端的运行的大体运行流程,下面详细的学习一下在服务端比较重要的一个容器模块bearcat,在bearcat的wiki中我们可以对其有个大概的了解,在服务端示例的代码中也大量 ...

  2. java图形界面设计

    1.       基本的java Frame操作. Java的图形界面的类主要包括AWT和Swing.在AWT中图形元素的父类为Component. 继承关系如下:Component->Cont ...

  3. SDUT OJ 1479 数据结构实验之栈:行编辑器

    数据结构实验之栈:行编辑器 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  一个简单的行编辑程序的功能是:接受用户从终端输入的程 ...

  4. 第三届蓝桥杯预赛c++b组

    1.微生物增值 假设有两种微生物 X 和 Y     X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍).     一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每 ...

  5. codewar代码练习1——8级晋升7级

    最近发现一个不错的代码练习网站codewar(http://www.codewars.com).注册了一个账号,花了几天的茶余饭后时间做题,把等级从8级升到了7级.本文的目的主要介绍使用感受及相应题目 ...

  6. python打印字体颜色

        格式:\033[显示方式;前景色;背景色m 显示方式           意义-------------------------0                终端默认设置1         ...

  7. Tensorflow知识点学习

    1.TensorFlow中Tensor维度理解: (1)对于2维Tensor 0维对应列 1维对应行 (2)维度操作举例: 对于k维的,tf.reduce_sum(x, axis=k-1)的结果是对最 ...

  8. QT(1)介绍

    Qt官网 Qt官网:https://www.qt.io Qt下载:http://www.qt.io/download Qt所有下载:http://download.qt.io/archive/qt Q ...

  9. ogg日常运维命令

    1.查看历史记录.快捷执行历史中的一条命令 GGSCI (11g) 32> h 23: view param exta24: info all25: lag exta.... GGSCI (11 ...

  10. 单机11g ogg 双向DML复制

    环境说明: Linux为Linux 2.6.32-573.el6.x86_64 Oracle为 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Pr ...