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. BZOJ 4519 [CQOI2016]不同的最小割

    这道题目很奇怪. 为什么奇怪?因为这道题用了一种叫分治最小割/最小割树的玩意. 以前从来没有见过这东西. 推荐一个讲这玩意的博客 写起来还是很顺手的. #include<iostream> ...

  2. EASYARM-IMX283 制作ubifs文件系统

    ubifs主页:http://www.linux-mtd.infradead.org/doc/ubifs.html nandflash上常用的文件系统有jffs2.yaffs和ubifs,其中ubif ...

  3. smokeping 微信报警配置

    1. 准备alert脚本,用来调用微信脚本 #!/bin/bash alertname=$ target=$ losspattern=$ rtt=$ smokename="hq_to_idc ...

  4. 基于深度学习的目标检测算法:SSD——常见的目标检测算法

    from:https://blog.csdn.net/u013989576/article/details/73439202 问题引入: 目前,常见的目标检测算法,如Faster R-CNN,存在着速 ...

  5. resEdit

    resEdit:一个图形界面编辑工具,它不但可以用来编写程序所图形界面(如修改图标.菜单.鼠标.版本信息等),还支持了对exe.dll等执行文件内的资源(图标.菜单.鼠标指针.位图.版本信息)等进行修 ...

  6. 【Lintcode】074.First Bad Version

    题目: The code base version is an integer start from 1 to n. One day, someone committed a bad version ...

  7. 媒体格式分析之flv -- 基于FFMPEG

    本来是应该先写一个媒体文件格式的简单讲解的,还没来得及写,以后再写.今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv. FLV 是FLASH V ...

  8. uC/OS-II源码分析(六)

    μC/OS-Ⅱ总是运行进入就绪态任务中优先级最高的那一个.确定哪个任务优先级最高, 下面该哪个任务运行了的工作是由调度器(Scheduler)完成的.任务级的调度是由函数 OSSched()完成的.中 ...

  9. ReportEvent的正确使用方式

    向操作系统的事件管理器报告重大信息是一种非常有用的方式,特别是对于没有界面的后台服务而言.如果你对Windows编程有一定了解,应该很快就能想到使用ReportEvent这个API,然后快速写出下面的 ...

  10. QT画矩形

    第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C#  (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个 先上效果图 代码贴全了 #i ...