一、网络层
1.1 EOS网络视图:
1.2 核心网络层
EOSIO网络的核心是块生产者和其所在服务器。完整的EOSIO网络由21个生产节点组成,这些节点已由网络社区投票选出,通过网络连接在一起,生产这之间可以流畅地通信。
这一层网络的关键设计目标是使生产节点专注于生成块并在它们之间进行同步。每个服务器都配备了高处理能力和大的内存,大的磁盘(用于日志存储),通过高容量冗余链路连接,受防火墙保护。如果运行服务器出现问题,备份服务器可以接管。
1.3 访问网络层
在消费层和核心层的生产者之间进行过滤和缓冲,保证核心层的高效运转。
根据功能可分为: API 、 Seed 、 Proxy 节点。
(1)API节点处理来自cleos的请求以执行事务和查询状态,每个生产者节点应至少具有一个关联的API节点。
(2)seed节点:seed节点与其他节点节点通信,以便与生产者节点保持同步。 可能是生产者候选者,它们与生产者保持同步并为其他节点提供服务,并因此建立了他们作为生产者的能力,希望得到社区投票。也可以进行区块链间通信,提供对另一个区块链的访问。 可以隔离生产者和网络上的其他节点之间。 一种重要类型是验证节点,验证类型节点在Access或Consumer 网络中运行,并跟踪区块链。
seed节点通常仅使用EOSIO网络协议传送块(而不是事务),并且未配置为运行http协议(即不能通过cleos访问)。每个生产者节点应至少具有一个关联的seed节点。
(3)Proxy 代理节点:提供负载均衡和DDOS保护。
1.4 消费网络层
任何使用区块链的用户,包括直接通过cleos、间接使用与区块链接口的某些应用程序。
二、系统自带合约
2.1 eosio.bios
基本操作,设置帐户和全局操作限制、权限、生产者以及建立授权级别。
2.2 eosio.token
提供基本货币管理功能。包括创建货币、发行货币、转移货币。
2.3 eosio.msig
进行所需授权级别的多个签名。
2.4 eosio.system
让用户可以使用token,对生产者和工作人员进行配置和投票提案,可以经济且有效地建立和管理区块链。
三、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