eos-state-history-API是eos社区新研发的history插件, 用来代替过去的history插件.
优点是分离了入库的逻辑, 不用replay就能自由的同步的其他数据库
原理是:
nodeos ( eos-state-history-API 插件 )
=> fill-postgresql 程序
=> PostgreSQL 数据库
操作过程是:
1. 先搭建一个已经能连接主网的nodeos, 编译更新到最新版本>=1.5.0
2. 配置eos-state-history-API, 然后启动
https://github.com/acoutts/eos-state-history-API
重点是config.ini中添加
##########################################
# State History Plugin
##########################################
plugin = eosio::state_history_plugin
state-history-endpoint = 0.0.0.0:8080
trace-history = true
chain-state-history = true
##########################################
并在nodeos启动参数中追加这句话
--disable-replay-opts
3. 安装,配置并启动PostgreSQL
可用最新安装包, 完成后需要配置data目录, 和用户, 为下面fill准备
4. 编译fill-postgresql
https://github.com/EOSIO/fill-postgresql
这个按它说明编译即可, 但写的略简单, 我是用centos编译, 编译过程琐碎且漫长
这里略加补充:
cmake: 直接下载最新版代码并编译
A C++17 compiler: 可直接下载gcc8版本代码并编译
Boost 1.58:
实际上我使用1.58是不成功的, 所以直接用了最新版Boost 1.68,
如果因为boost编译失败, 检查一下boost的头文件和lib库是否安装到位
如果启动时缺乏so文件, 使用ldd 查看下一程序, 检查一下boost的so是否安装到位
另外, 还需要修改一处fill-postgresql代码的bug, 参照: https://github.com/EOSIO/fill-postgresql/issues/6
libpqxx: 直接最新版下载或编译
libpq:: 直接最新版下载或编译
5.启动fill-postgresql
首先设置几个环境变量, 举例:
PGUSER="root"
PGPASSWORD="xxx"
PGDATABASE="chain"
PGHOST="127.0.0.1"
然后试着启动fill-postgresql
如果发生一些错误, 使用gdb调试, 用bt看堆栈, 尝试修改源代码.
不得不继续吐槽EOS, 好的架构是能让各种人在上面填写代码的, 显然过于强调C++会让EOS生态僵化, C++不能提高TPS也不能提高安全, 这些只是DPoS的作用范围.
这就怪不得BM寻求下个发力点了, 这就是个实验产品.
另一个例子是,使用graphql, 我没有尝试过