首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EOS数据与MongoDB插件

EOS数据

EOS主网上线一百多天,区块数达到2100多万,已经远远超过仅有650多万块的以太坊;即使看交易(Transaction,以太坊和EOS含义不太相同)数量,两者也都达到了3亿的量级。从数据上看,EOS才几个月就已经走完了以太坊几年走过的路。链上数据量这么大,哪些是你需要的?使用何种方式获取?本文记录一些自己的理解和踩过的坑,而且随着数据量的不断增加,之前可行的方法,还需要不停变化。

数据的价值

随着菠菜类游戏DApp的爆发,十一之后,EOS上的日新增用户超过五千,踩着七千,八千往上爬,不过看趋势,这种持续性还不太确定。从dappradar上看,一半的应用是菠菜类的,单个应用24小时交易量也在几十万个EOS的级别,十一期间更是在百万个左右,月流水惊人啊。难怪越来越多的开发者进入,而数据就是个指南针,帮你辨别方向,但是如何走,还得靠你自己决定。

另一方面,DApp的开发者也面临如何获取链上数据,整理出自己应用的交易信息等这些统计信息,也有可能是开奖或者转账的凭证,是不可或缺的。虽然EOSPark等也提供了一些API,但目前还都非常初级,还有很多需要开发者自己摸索。

那EOS主链上有哪些数据,我们怎样获取呢?

数据内容与获取

链上的数据可分为实时的和历史的,实时的提供给业务逻辑做处理,历史的数据可以做统计分析;实时的数据相对容易,历史的数据则根据使用的场景不同,复杂度也有相当大的差异。

首先说实时的数据获取,最典型的就是大家会在自己的服务器上启动一个nodeos,加入EOS主网,同步最新的链上数据,同时就能很方便的执行转账,使用命令行玩各种DApps。(具体的可以参考我之前写的

加入EOS主网和测试网

和cleos使用详解等文章)。当然如果你懒得配置nodeos,也可以使用各个超级BP提供的RPC API。

获取到的最常见的数据就是块(block)信息以及块中的Transaction(翻译成交易不太准确,翻译成事务不太好理解)信息。比如从链上取到的一个Transaction如下:

首先获取到的块是一个json串,在块信息中,包含了块生成的时间,BP名称等基本信息,不细说,看名称就能识别。其中的Transaction信息,看上图,能看到执行的合约是eosio.token,执行的是转账(Transfer)操作,从data中能看到,发送者是vuniyuoxoeub,发送给balance33333,数量是499.9000 EOS,很简单,很直观。一般从区块浏览器中看到这些就够了,转账的确认再加上确认数就可以了。

然而这些是最基本的信息,很多隐藏的合约调用和通知是无法看到的。从eosflare上能看到这部分隐藏信息。同一个块的链接(https://eosflare.io/block/11422924),部分截图如下:

可以看到同一个转账,其实还分别通知了发送者和接收者。而这些状态信息就是trace信息,是不能直接通过块信息获取的,而是存在了nodeos的state中的数据。这个还不够直观,如果看一个购买RAM或者创建新账号的操作,其实会发现你购买RAM的动作(Action),是你向eosio.ram和eosio.ramfee账号分别转账,然后获得系统给你增加的RAM值;创建账号的动作,更是包含了购买RAM,抵押获取CPU和网络的多个内部动作。

这些信息默认情况下是无法获取的,需要在你启动的nodeos的配置文件config.ini中设置filter-on后才能获取。看下nodeos -h的提示信息如下:

从上面的帮助信息中能看到receiver:action:actor是filter-on的配置格式,比如你关心EOS转账,可以配置eosio.token:transfer:*,如果想收集所有traces信息,可以配置filter-on = *,当然这种配置也有非常大的问题,后面会说到;另外还能发现,它属于history_plugin,查询一个账号的Transaction和Action都依赖于此插件,但是在EOSIO的1.3.0版本,已经移除了此插件。那么还有其他地方记录这些状态信息么?请看下面的MongoDB插件

MongoDB插件

EOS上的数据对外输出都直接是json格式的,而MongoDB非常适合存储这样的数据。在EOSIO官方文档中是mongo_db_plugin(https://developers.eos.io/eosio-nodeos/docs/mongo_db_plugin),查看此文档能帮助你如何使用,更多的信息还得看下它的历史。在EOSIO1.0版本中,其实你是看不到此插件的,而在1.1的版本中才恢复,而且在当时的版本,问题不少,功能也有欠缺;在1.2版本之后才越来越稳定好用。

看看使用该插件都存储了哪些信息:

完整信息可以看此连接 https://github.com/EOSIO/eos/pull/5066 。在没有action_traces之前,前面说的traces信息主要看transaction_traces,里面包含了所有合约调用交互的细节,比如买卖RAM的所有转账信息。

那如何使用呢,上面的官方文档里面有配置说明,通常在配置文件config.ini中增加如下配置即可,当然还得启动mongodb(下面的参考链接里有)

另外,在新的官方文档中,提供了其他一些插件连接,如TokenPocket的Kafka插件,老猫的ElasticSearch插件,有兴趣的人可以看看 https://github.com/EOSIO/eos/blob/master/plugins/COMMUNITY.md

部分问题说明

EOSIO的代码更新很快,有时候觉得后进入整理数据的人有时候是幸运的,nodeos稳定许多,mongodb_db_plugin插件还增加了更多的功能。不过EOS的链上数据增长也很快,存储blocks的文件夹都已经有61G,mongodb光存储transactions_traces信息都有几百G了。

1.state数据库

早期想保存所有traces信息的人,如果使用filter-on=*配置,简直就不可能。因为traces信息很快将state数据库填满,使你在config.ini中配置的chain-state-db-size-mb不够用,而这也将使nodeos的同步停止,IO飙升,只能升机器的内存,当时用过128G内存的机器,很快就不够用了。必须加以过滤。这个也和EOSIO使用的状态数据库chainbase有关,有兴趣的可以查查

2.非常规数据

在主网正式运行后不久,就一直能看到blocktwitter账号执行tweet,来压测整个网络的TPS,导致了大量无用的信息,这也是前面配置过滤该账号的原因。而最近又有部分非常规数据出现,比如账号cryptohongbo,在10月10日左右的数据,Actions虽然不明显,但是在traces中能发现大量数据。

3.新增账号

前面提到块中信息的不完整,导致的一个问题就是新增账号数统计,有可能不准确。比如直接调用系统合约创建账号,那么在块信息中会有体现。但是很多合约如signupeoseos提供了通过转账,自动帮你创建账号的功能。而这些信息是在块中看不到的,只有traces新中才有。

拖了这么久才又更新,真的很惭愧,自己继续加油,慢慢拨开迷雾,看清EOSIO,跟着EOS一同发展。

参考链接:

1.EOS MongoDB支持

(http://blog.eosdata.io/index.php/2018/07/01/eos-mongodb-setup/)

2.eosio-mongodb-queries

(https://github.com/EOS-BP-Developers/eosio-mongodb-queries)

3. EOSIO 1.2.0 版本发布:MongoDB 插件功能增强,社区插件集成和重放优化

(https://eosfans.io/topics/1124)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181014G0EBMH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券