【问链-Eos公开课】第二课 EOS环境搭建(Ubuntu系统下)

1、EOS三个组件:

这里写图片描述
nodeos:服务端区块链节点组件,也就是区块生产节点,用于接受客户端的远端请求,并打包区块,主要包含四个插件,chain_plugin、http_plugin、net_plugin、producer_plugin。

cleos:命令行接口,与区块链交互,管理钱包,管理账户,在区块链上调用方法。(很重要,相当于以太坊web3),根据具体命令请求调用相应的接口,例如查看区块信息、操作钱包等等。

keosd:管理EOSIO钱包的组件。主要包括三个插件,wallet_plugin、wallet_api_plugin、http_plugin。
接下来,我们将构建这些EOSIO组件,并将它们部署在一个主机,通过单个节点对网络(testnet)进行测试与配置。

搭建环境前注意事项:

虚拟机要求分配至少 8GB 内存, 至少 20GB 可用磁盘空间,另一种方式通过修改eos/scripts/eosio_build_ubuntu.sh文件,修改方式如下:
这里写图片描述

2、下载Eos代码

git clone https://github.com/EOSIO/eos --recursive

recursive参数会将所有子组件自动克隆下来,最终我们会在本地得到全部完整的源码。

3、编译代码

1)脚本自动化编译

cd eos
./eosio_build_ubuntu.sh full

编译的时间巨长… 我的虚拟机装在SSD上都平均至少编译1+小时….
./build.sh ubuntu 后面可以跟一个参数,默认值为 full , 也可以是 build。full用于第一次编译或完全重新编译,它会重新尝试编译安装依赖项.
build是仅编译EOS代码,在变更代码后可以使用以下命令重新编译。

./build.sh ubuntu build

编译可能会有个错误如下
这里写图片描述

解决方法是到build/contracts执行make命令,之后在重新执行编译脚本eosio_build.sh就可以了

编译成功后如下图:
这里写图片描述

2)手动编译

安装 development toolkit:

sudo apt-get update
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make \
libbz2-dev libssl-dev libgmp3-dev \
autotools-dev build-essential \
libbz2-dev libicu-dev python-dev \
autoconf libtool git mongodb
安装依赖
可以参照官方文档[https://developers.eos.io/eosio-nodeos/docs/clean-install-ubuntu-1604-and-higher]

4.安装命令

cd build
make install

该命令会将编译好的可执行文件、头文件、库文件和模板文件安装到build下的install目录下,在该目录的bin下有所有编译好的命令,包括eosd、eosc、eoscpp等等。命令会被安装在/usr/local。执行完这个命令以后,我们可以在系统任何位置进行命令启用。

5.启动单节点网络

cd programs/nodeos && ./nodeos -e -p eosio –plugin eosio::wallet_api_plugin –plugin eosio::chain_api_plugin –plugin eosio::account_history_api_plugin

这条命令中,可执行文件./nodeos后面有很多参数,好看的是后面的plugin是启动时对插件的配置,剩下的参数配置我们会在接下来介绍到。启动以后,日志打印出来相关信息:
这里写图片描述
下面来逐一分析一下这个日志内容,可以看出EOS启动私链节点是通过插件实现的,在启动私链前,要对插件进行初始化配置,启动各依赖组件处理器。下面来列举一下主要插件内容:

wallet_plugin,钱包管理相关,启动阶段只出现过一次,说明它的功能主要依赖启动后的操作,而在启动期间需要做的配置很少。

wallet_api_plugin,依赖于wallet_plugin,出现一次,应该是提供外部调用与钱包交互的接口服务。

http_plugin,启动阶段大量出现的插件,说明在准备期,针对HTTP的配置和添加接口服务非常多。配置包括url,端口,监听。接口服务包括钱包相关,链相关,账户相关的一系列api地址。

chain_plugin,链插件配置,出现了几次,除了初始化启动以外,还有针对链数据读取模式的配置为read/write模式,生成创世块配置文件genesis.json,以及展示了创世区块的各种属性信息。

chain_api_plugin,同样的,依赖于chain_plugin,提供外部调用链相关操作的接口服务。

net_plugin,网络插件,出现了几次,是对网络节点的基本配置,包括网络日志的级别为info,本地网络监听端口,生成节点id。最后启动监听器,并设置了以该网络节点为服务器的客户端最多能够连入25个。

main,主插件,对eosio这整个软件的一个主要插件,配置了eosio的版本以及展示了eosio工作的本地root地址。

account_history_api_plugin,顾名思义,账户历史接口插件,估计是与账户历史相关的供外部调用的接口服务。

producer_plugin,区块生产者插件,插件启动。

以上出现的所有插件亦可理解为组件。

6.停止

断开私链直接按下复制键(Ctrl+C)即可,日志中也有体现:

eosio generated block de403b91… #37 @ 2018-04-13T03:14:24.000 with 0 trxs, lib: 36
eosio generated block f40f0e68… #38 @ 2018-04-13T03:14:24.500 with 0 trxs, lib: 37
eosio generated block c1b717d0… #39 @ 2018-04-13T03:14:25.000 with 0 trxs, lib: 38
865075ms thread-0 net_plugin.cpp:2771 plugin_shutdown ] shutdown..
865075ms thread-0 net_plugin.cpp:2774 plugin_shutdown ] close acceptor
865075ms thread-0 net_plugin.cpp:2777 plugin_shutdown ] close 0 connections
865075ms thread-0 net_plugin.cpp:2785 plugin_shutdown ] exit shutdown

可以看到私链停止时,都是通过net_plugin插件来操作,操作的方法是与plugin_startup对应的plugin_shutdown,步骤为:

开始关闭的标识
关闭接收器acceptor
关闭连接
完成私链停止工作,退出shutdown程序
以上内容在未来的源码分析中均会涉及。

猜你喜欢

转载自blog.csdn.net/tiandiwuya/article/details/80807690