EOS 同步相关

最近一直都在处理 EOS 同步相关的事情,刚好今天有空,就将最近整理的资料发布出来。

使用 nodeos 快速做一个 EOS RPC 节点

1.下载 nodeos

1
wget https://github.com/EOSIO/eos/releases/download/v1.5.3/eosio_1.5.3-1-ubuntu-18.04_amd64.deb
  • 安装:
1
sudo apt install ./eosio_1.5.3-1-ubuntu-18.04_amd64.deb
  • 验证
1
nodeos -v

查看当前 nodeos 版本

2.下载logs文件

1
wget $(wget --quiet "https://eosnode.tools/api/blocks?limit=1" -O- | jq -r '.data[0].s3') -O blocks_backup.tar.gz
  • 解压
1
tar xvzf blocks_backup.tar.gz

3.配置文件

  • config.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
agent-name = EOSNODE

chain-state-db-size-mb = 10240
reversible-blocks-db-size-mb = 340

http-server-address = 0.0.0.0:8870

http-validate-host = false
verbose-http-errors = true
abi-serializer-max-time-ms = 2000

access-control-allow-origin = *
allowed-connection = any

max-clients = 2
connection-cleanup-period = 30
network-version-match = 1
sync-fetch-span = 2000
enable-stale-production = true

max-implicit-request = 1500
pause-on-startup = false
max-transaction-time = 30
max-irreversible-block-age = -1
txn-reference-block-lag = 0

plugin = eosio::chain_api_plugin
plugin = eosio::chain_plugin
  • p2p 地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
p2p-peer-address = 185.253.188.1:19876
p2p-peer-address = bp.cryptolions.io:9876
p2p-peer-address = p2p.mainnet.eospace.io:88
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 = mainnet.genereos.io:9876
p2p-peer-address = mainnet.eospay.host:19876
p2p-peer-address = 130.211.59.178:9876
p2p-peer-address = 54.153.59.31:9999
p2p-peer-address = 94.130.250.22:9806
p2p-peer-address = peer.main.alohaeos.com:9876
p2p-peer-address = peer.eosn.io:9876
p2p-peer-address = prod.mainnet.eos.cybex.io:9888
p2p-peer-address = p2p-1.eosnetwork.io:9876
p2p-peer-address = p.jeda.one:3322
p2p-peer-address = eosbattles.com:9877
p2p-peer-address = 34.226.76.22:9876
p2p-peer-address = mainnet.eosoasis.io:9876
p2p-peer-address = node.eosflare.io:1883
p2p-peer-address = mainnet.eoscalgary.io:5222
p2p-peer-address = eos-p2p.worbli.io:33981
p2p-peer-address = 18.188.38.175:9876
p2p-peer-address = 18.221.255.38:9876
p2p-peer-address = eos.staked.us:9870
p2p-peer-address = peering.dutcheos.io:9876
p2p-peer-address = 18.188.4.97:9876
p2p-peer-address = 18.191.125.105:9876
p2p-peer-address = boot.eostitan.com:9876
p2p-peer-address = eosboot.chainrift.com:9876
p2p-peer-address = dc1.eosemerge.io:9876
p2p-peer-address = m.eosvibes.io:9876
p2p-peer-address = node1.eosphere.io:9876
p2p-peer-address = node2.eosphere.io:9876
p2p-peer-address = 45.33.60.65:9820
p2p-peer-address = peering.eosio.cr:1976
p2p-peer-address = peering.eosio.cr:5418
p2p-peer-address = 54.203.121.17:19866
p2p-peer-address = eosnode.fi:9888
p2p-peer-address = api.eosuk.io:12000
p2p-peer-address = fullnode.eoslaomao.com:443
p2p-peer-address = new.eoshenzhen.io:10034
p2p-peer-address = peer.eosio.sg:9876
p2p-peer-address = eos.nodepacific.com:9876
p2p-peer-address = 18.234.6.119:80
p2p-peer-address = eu1.eosdac.io:49876
p2p-peer-address = br.eosrio.io:9876
p2p-peer-address = p2p-public.hkeos.com:19875
p2p-peer-address = node.eosmeso.io:9876
p2p-peer-address = pub1.eostheworld.io:9876
p2p-peer-address = 807534da.eosnodeone.io:19872
p2p-peer-address = mainnet.eoseco.com:10010

4.启动

执行以下命令,进行 EOS 同步:

1
nodeos --data-dir /blockData/blocks --config-dir /blockData --hard-replay --wasm-runtime wabt

执行完命令后,数据将进行replay。replay 结束后,节点将正常进行同步。

后期启动节点时,只需要执行:

1
nodeos --data-dir /blockData/blocks --config-dir /blockData 

EOS 使用快照快速启动

1. 下载快照文件:

快照备份地址

目录结构:

.
├── config.ini
├── node-data
│   ├── blocks
│   ├── snapshots
│   └── state
└── snapshot.sh

  • 注意:使用快照备份的方式启动时,需要删除 blocks/state 这两个文件夹

2. 配置文件:

vim config.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
agent-name = EOSNODEOS

chain-state-db-size-mb = 10240
reversible-blocks-db-size-mb = 1024

http-server-address = 0.0.0.0:8870

http-validate-host = false
verbose-http-errors = true
abi-serializer-max-time-ms = 2000

access-control-allow-origin = *
allowed-connection = any

max-clients = 2
sync-fetch-span = 3000
connection-cleanup-period = 30
enable-stale-production = false

plugin = eosio::chain_api_plugin
plugin = eosio::chain_plugin

p2p-peer-address = bp.cryptolions.io:9876
p2p-peer-address = p2p.mainnet.eosgermany.online:9876
p2p-peer-address = mainnet.eospay.host:19876
p2p-peer-address = 94.130.250.22:9806
p2p-peer-address = peer.main.alohaeos.com:9876
p2p-peer-address = peer.eosn.io:9876
p2p-peer-address = p.jeda.one:3322
p2p-peer-address = peering.eosio.cr:1976
p2p-peer-address = eos.nodepacific.com:9876
p2p-peer-address = eu1.eosdac.io:49876
p2p-peer-address = pub1.eostheworld.io:9876
p2p-peer-address = 807534da.eosnodeone.io:19872
p2p-peer-address = mainnet.eoseco.com:10010

3. 初次启动脚本:

1
nodeos --config-dir ./ --data-dir ./node-data --snapshot ./node-data/snapshots/snapshot-023e5e8813f687c6c5ffcf6eae853eb24f78d90b475dac4fb94face8c8308e4f.bin

4. 再次启动:

1
nodeos --config-dir ./ --data-dir ./node-data

5. 验证:

1
2
3
4
5
6
7
8
9
10
11
12
13
const FIBOS = require("fibos.js");
const fibos = FIBOS({
chainId: "aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906",
httpEndpoint: "http://127.0.0.1:8871",
keyProvider: "",
logger: {
log: null,
error: null
}
});

let r = fibos.getBlockSync("最新快高度");
console.log(r);

6.生成快照

1. 添加插件

在 config.ini 中添加:

1
plugin = eosio::producer_api_plugin
  • 注意: 开启该插件后,请确保你的节点放置在内网无法被其他地方访问到。

2. 设置备份目录

启动时添加参数:

1
--snapshots-dir ../snapshots-backups

3. 创建快照

1
curl http://curl http://127.0.0.1:8870/v1/producer/create_snapshot

按照目前EOS的大小,这一步大约需要耗时 10~15 分钟。快照创建结束后,在 snapshots-backups 目录下,便生成相应的快照文件。

7. 总结:

优点:

  1. 使用快照方式能够快速启动节点同时保证和主网同步。
  2. 使用快照的方式能够节省磁盘空间。

缺点

  1. 使用快照启动的节点,快照高度之前的区块数据无法获取。