EOS基础全家桶(四)启动节点

简介

本篇我们将会介绍在安装了EOS后,如何快速的启动一个节点,及启动产块节点的方式。

EOS程序主要由三部分组成,nodeos(node eos)、cleos(cli eos)和keosd(key eos)。

nodeos为节点,负责产块和提供节点API等。

cleos是命令行工具,可以和nodeos、keosd进行交互。

keosd是负责存储钱包私钥的。

Docker启动

目前官方已经不推荐使用docker容器了,但是使用容器可以给我们带来很多方便,已经让windows用户也能使用EOS,所幸我们仍然可以使用到最新的镜像,这得力于eostudio的贡献。我们可以使用eostudio/eos,该镜像下有多个tag对应不同的EOS发行版本,请拉取时指定特定的版本,EOS各版本间不能保证完全兼容,各版本的升级说明还请关注官方github的release中的updating部分。

#拉取镜像

docker pull eostudio/eos:v2.0.2

以下是创建容器的最简推荐方式:

docker run --name eosio -d \

-p 8888:8888 -p 9876:9876 \

-v /var/program/eosio/chain/:/eosio/nodeos \

-v /var/program/eosio/wallet:/root/eosio-wallet \

eostudio/eos:v2.0.2 /bin/bash -c "nodeos --data-dir /eosio/data/ --config-dir /eosio/config/"

启动后,我们挂载的目录下会生成默认配置文件。你可以手动修改配置文件后重新启动已便让配置生效。

docker restart eosio

当然,你也可以将需要复写的配置项带在启动参数中:

docker run --name eosio -d \

-p 8888:8888 -p 9876:9876 \

-v /var/program/eosio/chain/:/eosio/nodeos \

-v /var/program/eosio/wallet:/root/eosio-wallet \

eostudio/eos:v2.0.2 /bin/bash -c "nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::wallet_plugin --plugin eosio::producer_plugin --plugin eosio::chain_api_plugin  --plugin eosio::http_plugin -d /mnt/dev/data --data-dir /eosio/data/ --config-dir /eosio/config/ --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console"

节点启动后,你可以通过docker的log来查看输出。

docker logs -f eosio

在没有启动产块或者配置p2p同步节点的情况下,节点完成初始化便会停留此界面下

我们也可通过docker的执行程序来进入容器操作节点,或者调用cleos等。

#进入容器内

docker exec -it eosio /bin/bash

#也可直接调用cleos的命令

docker exec eosio cleos get account eosio

nodeos程序

默认启动nodeos时会同时启动keosd。

初始化

直接运行nodeos就可以运行,初始会生成默认配置,不会产块。

nodeos

通过直接运行nodeos可以让程序在默认目录下生成所需文件夹,如config、data、wallet,还有所需的文件,如:config.ini。

然后我们就可以停止节点了,如果是在当前运行窗口中执行的,可以直接通过command+c或者ctrl+c来退出,如果需要杀进程的话,这里特别提醒,一定要使用kill -2 pid软杀进程,如果在产生数据后还进行强杀的话会导致数据校验不通过,然后重新进行数据重放。如果是使用的docker,可以直接停止容器docker stop eosio。

配置

找到系统自动生成的config.ini文件,然后进行下列的一些修改。

开发环境的配置参考如下:

开发

# print contract's output to console (eosio::chain_plugin)

contracts-console = true

跨域

这里配置的参数是用于rpc调用时,允许跨域请求。

# Specify the Access-Control-Allow-Origin to be returned on each request. (eosio::http_plugin)

access-control-allow-origin = *

# Specify the Access-Control-Allow-Headers to be returned on each request. (eosio::http_plugin)

access-control-allow-headers = Content-Type

# Specify if Access-Control-Allow-Credentials: true should be returned on each request. (eosio::http_plugin)

access-control-allow-credentials = true

# If set to false, then any incoming "Host" header is considered valid (eosio::http_plugin)

http-validate-host = 0

监听

这里你可以修改监听http请求的ip和端口,使用0.0.0.0将会允许所有ip的请求。

# The local IP and port to listen for incoming http connections; set blank to disable. (eosio::http_plugin)

http-server-address = 0.0.0.0:8888

产块

这里的配置是打开产块开关,然后指定出块节点的名字,并配置该节点使用的公钥和私钥。

# Enable block production, even if the chain is stale. (eosio::producer_plugin)

enable-stale-production = true

# ID of producer controlled by this node (e.g. inita; may specify multiple times) (eosio::producer_plugin)

producer-name = eosio

signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

最后这个是产块节点使用的公钥和私钥。开发环境需要使用该私钥进行初始账号的操作。

插件

针对我们使用到的功能,我加载相应的插件。

# Plugin(s) to enable, may be specified multiple times

plugin = eosio::producer_plugin

plugin = eosio::chain_api_plugin

plugin = eosio::http_plugin

启动节点并检查

修改好了config.ini的配置后,我们直接启动节点。如果你使用的不是默认config,那么,你需要在启动时指定–config-dir参数。

我们将eosio的目录放在自定义的/mnt/lv1/eosio下,然后我们使用nohup来托管nodeos,并将日志输出到logs/eos.log中。

nohup nodeos --config-dir /mnt/lv1/eosio/config --data-dir /mnt/lv1/eosio/data --genesis-json /mnt/lv1/eosio/config/genesis.json > /mnt/lv1/eosio/logs/eos.log 2>&1 &

通过日志或者命令行确认节点已启动。

如果你是直接启动的nodeos的话,在命令行中应该可以直接看到输出。

如果你使用了我上面nohup的方式启动并输出到了日志文件中的话,可以通过以下方式跟随查看输出。

#查看节点日志记录,如果你使用了参数配置启动的方式的话

tail -f /mnt/lv1/eosio/logs/eos.log

如果使用的是docker启动的,可以直接看docker的logs

#查看节点日志记录,如果你使用了参数配置启动的方式的话

docker logs -f eosio

通过http请求调用RPC接口检查。

默认的节点http端口是8888。当然你也可以直接通过浏览器请求。

curl http://localhost:8888/v1/chain/get_info

同步主网

接入主网的节点,目前有几种常用启动方式。

同步。直接配置p2p节点,然后开启同步,从创世区块开始同步。

全量数据,同步缓慢,占用硬盘空间很大,速度和p2p节点网络有很大关系。

重放。从网上下载最新blocks数据,然后进行重放,重放完后开始同步。

全量数据,重放速度比同步快很多,但是无法中途停止,重放完后的同步速度取决于p2p节点网络。

快照。从网上获取最新快照,然后从快照启动,开始同步。

部分数据,快速启动,占用硬盘空间较小,启动后会进行数据还原,还原后开始同步,同步速度取决于p2p节点网络。

EOS的体量很大,远大于BTC和ETH,所以对于不做数据分析的用户来说,最快速的启动方式就是通过快照了,这也是官方是经历了1年多后最终的解决方案。现在单blocks文件应该已经上T了,当你重放完成后,全盘占用应该要翻番了,所以没有一定的硬盘量,还是不要尝试全量数据了。

获取快照

我们可以从eossweden下载最新的快照。

注意:如果你要从其他的网站下载快照,那么你要特别注意快照锁使用的EOS版本,EOS在1.8以后使用的快照数据结构和1.7.x及以前使用的不同,所以快照不兼容。

注意2:下载的快照是压缩后的,解压后大概需要2G多。

修改配置

主网同步时,我们需要根据自身服务器情况和使用情况修改配置,这里提供几个推荐修改的配置。

按照BM的说的,使用wabt的速度要快2倍。

# Override default WASM runtime (eosio::chain_plugin)wasm-runtime= wabt

修改一下存储数据库的最大大小,默认值早存不下了。

# Maximum size (in MiB) of the chain state database (eosio::chain_plugin)chain-state-db-size-mb=102400# Maximum size (in MiB) of the reversible blocks database (eosio::chain_plugin)reversible-blocks-db-size-mb=10240

结合服务器性能,调大链线程池还有网络线程池,以及同步时每次通过p2p节点获取的区块数。

# Number of worker threads in controller thread pool (eosio::chain_plugin)chain-threads=30# Number of worker threads in net_plugin thread pool (eosio::net_plugin)net-threads=10# number of blocks to retrieve in a chunk from any individual peer during synchronization (eosio::net_plugin)sync-fetch-span=100

读取模式很重要,如果你只是用于数据查询或者导出的话,建议使用read-only或者irreversible,你拿到的数据会更可靠。但是也意味着你的区块高度会低于现在的头区块。如果你要使用speculative,那么你的速度会很快,并能很快速的处理链上交易,但是数据有很高的几率会被回滚或者抛弃。所以保守的模式是使用head。

# Database read mode ("speculative", "head", "read-only", "irreversible").# In "speculative" mode database contains changes done up to the head block plus changes made by transactions not yet included to the blockchain.# In "head" mode database contains changes done up to the current head block.# In "read-only" mode database contains changes done up to the current head block and transactions cannot be pushed to the chain API.# In "irreversible" mode database contains changes done up to the last irreversible block and transactions cannot be pushed to the chain API.#  (eosio::chain_plugin)read-mode= head

最大交易时间其实是要结合你的交易体量来决定的,一般发布合约或者某些费时的操作可能会超过最大交易时间,你可以适量调大。

# Limits the maximum time (in milliseconds) that is allowed a pushed transaction's code to execute before being considered invalid (eosio::producer_plugin)max-transaction-time=10000

启动插件除了常规的那几个外,推荐增加这两个api插件,net_api提供了p2p节点的管理的api,而producer_api中有生成快照的api,你需要定期对已启动的节点生成新的快照,以便在节点异常退出时能快速从快照重启,而不是重新下载一个快照或者从很早以前的快照启动后重新同步。

plugin= eosio::net_api_pluginplugin= eosio::producer_api_plugin

快照启动

快照启动前,你需要确保你的数据目录data里满足如下要求。

删除state文件夹(如果之前启动过节点就会有,请备份后删除)

删除blocks文件夹。blocks文件夹也可以保留,但要删除blocks里的reversible文件夹,同时必须保证blocks.log中包含的区块和快照起始区块有交集,否则请备份后删除。

从快照启动很简单,你只要把快照放到某个目录里(推荐放在snapshots里),然后启动节点时,指定参数–snapshot,指向具体的快照文件即可。如下:

nohup nodeos --config-dir /mnt/lv1/eosio/config --data-dir /mnt/lv1/eosio/data --disable-replay-opts --snapshot /mnt/lv1/eosio/data/snapshots/snapshot-066a790d51e2e8d80d27eb643a9f31a7308f11421b08bc6581ec837d55692589.bin > /mnt/lv1/eosio/logs/eos.log 2>&1 &

注意:通过快照启动后,关闭节点,再打开时,不需要再指定–snapshot参数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容