ubuntu搭建EOS环境
##eos钱包##
项目需要对接eos钱包,在这里记录一下搭建的过程。eos钱包和btc,eth不大相同,eos的钱包由三部分组成
nodeos,keosd和cleos
###nodeos###
nodeos是运行在服务端的区块链节点组件,是EOSIO系统的核心进程,可以通过它运行一个节点。
###keosd###
keosd就是EOSIO的钱包管理客户端,可以被认为是一个存储公钥-私钥的仓库,同时管理钱包信息。
nodeos与keosd之间并不存在必然关联,只有在需要签名时它们才会产生联系,例如为交易签名。
有一点要注意的是,nodeos已经包含了keosd的完整功能,也就是说在nodeos上也可以管理钱包。
###cleos###
cleos是用户与keosd/nodeos交互的命令行工具。
即我们操作钱包都使用cleos就跟eth的geth console一样。
##安装eos钱包##
本次安装系统为Ubuntu 18.04,AWS云服务器。
###官方推荐系统环境###
- Centos 7
- Ubuntu 16.04 LTS (Ubuntu 16.10 推荐)
- Ubuntu 18.04 LTS
- Amazon 2017.09 或以上
- Fedora 25或以上 (Fedora 27 推荐)
- Mint 18
- MacOS Darwin 10.12 或以上 (MacOS 10.13.x 推荐)
内存最好能在8g以上,硬盘目前20g足矣。
###下载EOS安装包###
从github克隆安装包到本地。
git clone https://github.com/EOSIO/eos --recursive
如遇git失败的自行查找原因。。。
###编译&安装###
进入刚刚克隆下来的eos文件夹,以root权限执行eosio_build.sh
。
cd eos
sudo ./eosio_build.sh
然后就是漫长编译时间,因为要下载很多很多的依赖,所以时间会稍长,我这次用了两个半小时,但是出乎意料的没有报错。
_______ _______ _______ _________ _______
( ____ \( ___ )( ____ \\__ __/( ___ )
| ( \/| ( ) || ( \/ ) ( | ( ) |
| (__ | | | || (_____ | | | | | |
| __) | | | |(_____ ) | | | | | |
| ( | | | | ) | | | | | | |
| (____/\| (___) |/\____) |___) (___| (___) |
(_______/(_______)\_______)\_______/(_______)
如果出现以上EOSIO5个大字母,恭喜你编译成功了。
nodeos,keosd,cleos被编译在了eos/build/programs
目录下,为了方便以后操作,这里可以安装一下。
cd eos/build
sudo make install
安装完毕后执行cleos -h
,不出意外会提示
cleos -h
cleos: command not found
因为eos钱包相关的执行文件都被安装在了/usr/local/eosio/bin
里,所以我们需要先配置一下环境变量。
执行以下命令
export PATH=$PATH:/usr/local/eosio/bin
或者一劳永逸,编辑/etc/profile
文件,在最后面添加以上代码。提示ReadOnly
请用sudo
打开,编辑完后重启。
配置完毕后,再次执行就能看到cleos
的相关参数了。
##同步主网区块##
安装完eos钱包之后,接着就是启动钱包并同步区块了。
###genesis-json###
如果是第一次同步区块,一定要记得加上--genesis-json
参数,采用官方的genesis.json
文件才能连上主网同步区块。
genesis.json
文件如下,可以自己创建一份。
{
"initial_timestamp": "2018-06-08T08:08:08.888",
"initial_key": "EOS7EarnUhcyYqmdnPon8rm7mBCTnBoot6o7fE2WzjvEX2TdggbL3",
"initial_configuration": {
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
"max_block_cpu_usage": 200000,
"target_block_cpu_usage_pct": 1000,
"max_transaction_cpu_usage": 150000,
"min_transaction_cpu_usage": 100,
"max_transaction_lifetime": 3600,
"deferred_trx_expiration_window": 600,
"max_transaction_delay": 3888000,
"max_inline_action_size": 4096,
"max_inline_action_depth": 4,
"max_authority_depth": 6
}
}
有了这个文件后再启动nodeos
nodeos --genesis-json /root/genesis.json
注意:只需要在第一次启动nodeos时加上--genesis-json,之后都不要再加上此参数,不然会报错,提示"Genesis state can only be set on a fresh blockchain."
同步区块是一个持续的过程,建议使用screen
运行。
开始同步后查看一下chain_id
是不是主网的aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906
。
cleos get info
如果不是的话也不要慌,问题99%出在genesis-json
上。可能是你没有配置正确或者根本就没有使用它。
创建好正确的genesis.json
文件后,执行以下命令(注意genesis.json
的位置),--delete-all-blocks
会帮助你删除之前的所有区块。
nodeos --genesis-json /root/genesis.json --delete-all-blocks
启动成功后再次查看一下chain_id
是否正确。
###config.ini###
虽然nodeos
启动了,但是你会发现他甚至动都不会动一下,cleos get info
中的head_block_number
始终为1。
这是因为你没有连上任何的种子节点~。
nodeos初次启动后会在~/.local/share/eosio/nodeos/config/
下创建config.ini
,在Ubuntu系统下如此。
编辑config.ini,在文件后面加上节点
p2p-peer-address = p2p.one.eosdublin.io:9876
p2p-peer-address = eu-west-nl.eosamsterdam.net:9876
p2p-peer-address = p2p.mainnet.eosgermany.online:9876
p2p-peer-address = 35.197.190.234:19878
p2p-peer-address = p2p.genereos.io:9876
p2p-peer-address = fullnode.eoslaomao.com:443
p2p-peer-address = new.eoshenzhen.io:10034
p2p-peer-address = node1.eosphere.io:9876
p2p-peer-address = p2p.meet.one:9876
p2p-peer-address = bp.eosbeijing.one:8080
p2p-peer-address = peer1.mainnet.helloeos.com.cn:80
p2p-peer-address = p2p-public.hkeos.com:19875
p2p-peer-address = pub1.eostheworld.io:9876
p2p-peer-address = eu1.eosdac.io:49876
p2p-peer-address = peer.eosio.sg:9876
再次执行
nodeos -e
不出意外的话,就会开始从主网同步区块了,可以确认head_block_number
是否增长。
##意外终止##
钱包偶尔会发生突然终止的情况,一般都会有报错提示。
###Please increase the value set for "chain-state-db-size-mb" and restart the process!###
长期运行eos钱包,导致数据库容量不足。打开config.ini
找到chain-state-db-size-mb
,改大点就行了。
###Unable to resolve *: Host not found (authoritative)###
这代表着某个节点连接不上或不可用了,但这不会影响到钱包的运行,打开config.ini
,找到对应的p2p-peer-address
,删掉或注释掉就行。
Or you can contact me by Email