EOS数据与MongoDB插件

栏目: 数据库 · 发布时间: 5年前

内容简介:EOS主网上线一百多天,区块数达到2100多万,已经远远超过仅有650多万块的以太坊;即使看交易(Transaction,以太坊和EOS含义不太相同)数量,两者也都达到了3亿的量级。从数据上看,EOS才几个月就已经走完了以太坊几年走过的路。链上数据量这么大,哪些是你需要的?使用何种方式获取?本文记录一些自己的理解和踩过的坑,而且随着数据量的不断增加,之前可行的方法,还需要不停变化。那EOS主链上有哪些数据,我们怎样获取呢?链上的数据可分为实时的和历史的,实时的提供给业务逻辑做处理,历史的数据可以做统计分析

EOS数据

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

数据的价值

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

EOS数据与 <a href='https://www.codercto.com/topics/18948.html'>MongoDB</a> 插件

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

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

数据内容与获取

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

首先说实时的数据获取,最典型的就是大家会在自己的服务器上启动一个nodeos,加入EOS主网,同步最新的链上数据,同时就能很方便的执行转账,使用命令行玩各种DApps。(具体的可以参考我之前写的加入EOS主网和测试网 和cleos使用详解等文章)。当然如果你懒得配置nodeos,也可以使用各个超级BP提供的RPC API。

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

EOS数据与MongoDB插件

只有一部分Transaction信息,完整的可点击链接查看 一个块信息

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

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

EOS数据与MongoDB插件

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

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

Config Options for eosio::history_plugin:
  -f [ --filter-on ] arg                Track actions which match 
                                        receiver:action:actor. Actor may be 
                                        blank to include all. Action and Actor 
                                        both blank allows all from Recieiver. 
                                        Receiver may not be blank.
  -F [ --filter-out ] arg               Do not track actions which match 
                                        receiver:action:actor. Action and Actor
                                        both blank excludes all from Reciever. 
                                        Actor blank excludes all from 
                                        reciever:action. Receiver may not be 
                                        blank.

从上面的帮助信息中能看到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 ,查看此文档能帮助你如何使用,更多的信息还得看下它的历史。在EOSIO1.0版本中,其实你是看不到此插件的,而在1.1的版本中才恢复,而且在当时的版本,问题不少,功能也有欠缺;在1.2版本之后才越来越稳定好用。

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

account_controls
accounts
action_traces
actions(不再支持,变为action_traces)
block_states
blocks
transaction_traces
transactions

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

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

abi-serializer-max-time-ms = 5000
    plugin = eosio::mongo_db_plugin
    mongodb-uri = mongodb://localhost:27017/eos
    # 曾经刷测TPS的账号,目前已经停止
    mongodb-filter-out = blocktwitter:tweet:
    # 可以控制存储哪些信息
    #mongodb-store-blocks = false
    # 可以选择从哪个块开始存储
    #mongodb-block-start = 19455000

另外,在新的官方文档中,提供了其他一些插件连接,如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月11日左右的数据,Actions虽然不明显,但是在traces中能发现大量数据,还不知道是用来做什么的。

3.新增账号

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

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

参考链接:

1. EOS MongoDB支持

2. eosio-mongodb-queries

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

转载请注明出处: http://blog.csdn.net/w7849516230,

欢迎关注微信公众号“编程阳光”

EOS数据与MongoDB插件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Persuasive Technology

Persuasive Technology

B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95

Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具