内容简介:EOS主网上线一百多天,区块数达到2100多万,已经远远超过仅有650多万块的以太坊;即使看交易(Transaction,以太坊和EOS含义不太相同)数量,两者也都达到了3亿的量级。从数据上看,EOS才几个月就已经走完了以太坊几年走过的路。链上数据量这么大,哪些是你需要的?使用何种方式获取?本文记录一些自己的理解和踩过的坑,而且随着数据量的不断增加,之前可行的方法,还需要不停变化。那EOS主链上有哪些数据,我们怎样获取呢?链上的数据可分为实时的和历史的,实时的提供给业务逻辑做处理,历史的数据可以做统计分析
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如下:
只有一部分Transaction信息,完整的可点击链接查看 一个块信息 。
首先获取到的块是一个json串,在块信息中,包含了块生成的时间,BP名称等基本信息,不细说,看名称就能识别。其中的Transaction信息,看上图,能看到执行的合约是eosio.token,执行的是转账(Transfer)操作,从data中能看到,发送者是vuniyuoxoeub,发送给balance33333,数量是499.9000 EOS,很简单,很直观。一般从区块浏览器中看到这些就够了,转账的确认再加上确认数就可以了。
然而这些是最基本的信息,很多隐藏的合约调用和通知是无法看到的。从eosflare上能看到这部分隐藏信息。 同一个块的链接 ,部分截图如下:
可以看到同一个转账,其实还分别通知了发送者和接收者。而这些状态信息就是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一同发展。
参考链接:
3. EOSIO 1.2.0 版本发布:MongoDB 插件功能增强,社区插件集成和重放优化
转载请注明出处: http://blog.csdn.net/w7849516230,
欢迎关注微信公众号“编程阳光”
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- WordPress插件开发 -- 在插件使用数据库存储数据
- (是时候开发属于自己的插件了)数据校验插件开发指南
- 译 Tim Rose 的kibana插件教程-消费数据的可视化插件
- 一种 Grafana 数据源插件开发的方案(纯后端)
- 基于Layui的可自定义添加删除数据的表格处理插件
- Springboot 系列(十一)使用 Mybatis(自动生成插件) 访问数据库
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。