##eos钱包##
项目需要对接eos钱包,在这里记录一下搭建的过程。eos钱包和btc,eth不大相同,eos的钱包由三部分组成

nodeos,keosdcleos

###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个大字母,恭喜你编译成功了。
nodeoskeosdcleos被编译在了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,删掉或注释掉就行。