400-700-1307

【区块链技术基础教程】EOS源码分析(2)EOS运行

2019-01-28 16:35
EOS 安装完毕后,就可以运行EOS 程序了。目前支持三种方式的运行,分别是:


- 本地私有节点运行
    在本地局域网中部署EOS节点,提供EOS服务,节点可以单个,也可以部署多节点
- 在测试公网下运行
    Block.One 公司提供了测试的公网环境,你可以使自己部署的节点连接公网测试环境
- Docker 中运行
   
## 本地私有节点运行
EOS为了能够方便开发者测试,目前在公网环境下部署了一套测试网络。如果你部署的节点不与这套公网测试环境连接,那就成为本地私有节点部署。在进行本地部署的时候,可以只部署单一节点,也可以部署多个节点,下面我们会分别介绍这两种情况:


### 单节点的部署与运行
当成功编译项目后,就可以在`build/programs/eosiod` 目录下运行程序了。调用`eosiod` 命令可以运行EOS 节点程序,当你第一次运行时,很有可能会出现错误而停止运行,不管是否出现错误,都通过 `Ctrl-C` 停止程序,你需要先对程序做一些配置后,系统才能真正运行。当第一次运行程序后,会自动生成 `data-dir` 目录,里面包含了默认的配置文件(`config.ini`)和一些其他文件。你需要对配置文件做如下的修改:


- 添加创世纪的block
`genesis-json = /path/to/eos/genesis.json`


- 在测试链上设置producers,并通过他们生产区块
   
    ```
    producer-name = inita
    producer-name = initb
    producer-name = initc
    producer-name = initd
    producer-name = inite
    producer-name = initf
    producer-name = initg
    producer-name = inith
    producer-name = initi
    producer-name = initj
    producer-name = initk
    producer-name = initl
    producer-name = initm
    producer-name = initn
    producer-name = inito
    producer-name = initp
    producer-name = initq
    producer-name = initr
    producer-name = inits
    producer-name = initt
    producer-name = initu
    ```
- 加载区块生产插件,从而系统可以生产区块
`plugin = eosio::producer_plugin`
- 加载钱包插件,从而支持钱包服务
`plugin = eosio::wallet_api_plugin`
- 加载RPC和API插件,从而可以通过这两种接口访问EOS服务


    ```
    plugin = eosio::chain_api_plugin
    plugin = eosio::http_plugin
    ```


再次运行 `eosiod` 命令,当你看到如下日志的时候,说明你已经成功启动EOS服务了。


```
1575001ms thread-0 chain_controller.cpp:235 _push_block ] initm #1 @2017-09-04T04:26:15 | 0 trx, 0 pending, exectime_ms=0
1575001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initm generated block #1 @ 2017-09-04T04:26:15 with 0 trxs 0 pending
1578001ms thread-0 chain_controller.cpp:235 _push_block ] initc #2 @2017-09-04T04:26:18 | 0 trx, 0 pending, exectime_ms=0
1578001ms thread-0 producer_plugin.cpp:207 block_production_loo ] initc generated block #2 @ 2017-09-04T04:26:18 with 0 trxs 0 pending
...
```


### 部署多节点网络
在你EOS项目的 `build/programs/eosio-launcher` 目录下,有一个专门用于EOS节点启动的应用,名称为 `eosio-launcher`,下面的命令运行了两个可以相互交互的节点:


```sh
cd ~/eos/build
cp ../genesis.json ./
./programs/eosio-launcher/eosio-launcher -p2 --skip-signature
```


上面的命令将会建立两个数据目录,每个节点对应其中一个目录,目录名称分别是:`tn_data_00` 和`tn_data_01`


你可以在命令行终端中看到如下的日志输出, 日志表示系统生成了两个子进程,每个进程对应一个运行节点:


```
spawning child, programs/eosiod/eosiod --skip-transaction-signatures --data-dir tn_data_0
spawning child, programs/eosiod/eosiod --skip-transaction-signatures --data-dir tn_data_1
```


为了进一步验证这两个节点确实在正常运行,你可以使用`eosioc`客户端工具分别连接这两个节点,如下:


```
cd path-to-eos/build/programs/eosioc
./eosioc -p 8888 get info
./eosioc -p 8889 get info
```
上面的两条`eosioc` 分别连接两个节点,可以看到,这两个节点端口号分别是8888和8889,连接后,调用 `get info`命令,获取到不同节点的区块链信息。


## 在测试公网下运行
Block.One 为测试人员和开发者提供了公网测试环境,如果你已经在本地体验过EOS节点的运行,希望能够在公网下测试你的代码,那你可以把本地的EOS节点连接到公网环境,具体操作如下:


```
cd path-to-eos/build/scripts
./start_npnode.sh
```


系统编译后,会生成`start_npnode.sh` 脚本文件,此脚本其实也是调用了`eosd`程序,不过其使用的默认数据目录参数是`testnet_np`,此目录的`config.ini`文件中的设置了公网环境下p2p节点的连接地址,因此,程序启动后就会直接与公网进行连接了,这也是连接公网环境和在私有链下运行的主要区别,这行配置如下:
`p2p-peer-address = p2p-testnet1.eos.io:9876`


`p2p-testnet1.eos.io`这个域名就指向Block.One 公网环境的一个节点。`start_npnode.sh` 命令运行后,可以得到如下日志输出:


```
Launched eosd.
See testnet_np/stderr.txt for eosd output.
Synching requires at least 8 minutes, depending on network conditions.
```


如果希望了解节点运行和同步的具体情况,可以运行如下命令查看:


```
tail -F testnet_np/stderr.txt
```


当连接公网环境时,节点首先需要从公网中同步已有的区块链数据,这需要一定的时间,当你看到如下日志信息的时候,说明数据正在同步:


```
3439731ms chain_plugin.cpp:272 accept_block ] Syncing Blockchain --- Got block: #200000 time: 2017-12-09T07:56:32 producer: initu
3454532ms chain_plugin.cpp:272 accept_block ] Syncing Blockchain --- Got block: #210000 time: 2017-12-09T13:29:52 producer: initc
```


当同步全部完成后,你将看到如下的信息:


```
42467ms net_plugin.cpp:1245 start_sync ] Catching up with chain, our last req is 351734, theirs is 351962 peer ip-10-160-11-116:9876
42792ms chain_controller.cpp:208 _push_block ] initt #351947 @2017-12-12T22:59:44 | 0 trx, 0 pending, exectime_ms=0
42793ms chain_controller.cpp:208 _push_block ] inito #351948 @2017-12-12T22:59:46 | 0 trx, 0 pending, exectime_ms=0
42793ms chain_controller.cpp:208 _push_block ] initd #351949 @2017-12-12T22:59:48 | 0 trx, 0 pending, exectime_ms=0
```


  Docker 中运行


 获取更多免费资源加qq群:785163015
  兄弟连官网:www.itxdl.cn
  【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!



开班信息

当前校区

北京校区
  • 北京校区
  • 上海校区
  • 广州校区
  • 沈阳校区
  • 杭州校区
  • 南京校区
  • 郑州校区
  • 成都校区
  • 深圳校区
  • 西安校区
  • 苏州校区
  • 深圳沙井
  • 深圳观澜
  • 深圳龙岗
  • 武汉校区
  • 西宁校区
  • 石家庄校区
  • 湖北咸宁
  • 广东惠州
  • 广东佛山

                    Copyright © 2007-2019 IT兄弟连教育 版权所有 京ICP备11018177号  京公网安备 11010802026987号