dfuse 上手指南

背景介绍

EOS 因为 TPS 高,对交易数据的存储和查询反而成为一个让人头疼的事情,成本问题 EOS 自带的 history 插件也很少有节点会开放。一般解决方案有两种:自己搭建大数据库导入链上交易数据,使用第三方的 API 进行查询。

dfuse 能看得出是 EOS Canada 团队开发 eosq 区块浏览器时的 side project。试用了一下,比较让我惊讶的是其查询的自由度非常高,比如可以查询某个账户在过去某个区块高度的余额。

使用步骤

申请 API Key

https://www.dfuse.io/zh/

点击右上角【获得免费API密钥】

注册完成后你会收到类似下面这样的key:
eyJhbGciOiJLTVNFUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NTQ5NjcxNDksImp0aSI6Ijc5YmE0ZjdkLTU5NTMtNDA4NC1iNDQwLTFlMWE5MGVmMmRjMyIsImlhdCI6MTU1MjM3NTE0OSwiaXNzIjoiZGZ1c2UuaW8iLCJzdWIiOiJDaVFBNmNieWUrc2o3SFVyTXZ4eW1…

根据文档进行测试

本文主要介绍 REST API 的使用方法,WebSocket的接口大家自行测试

打开 https://docs.dfuse.io 可以查看到接口的文档

我们来测试一下 【REST API】-【GET /v0/state/tables/accounts】这个接口

把下面这些参数填到 POSTMAN 工具中,URL那边如下填写

https://mainnet.eos.dfuse.io/v0/state/tables/accounts?accounts=eosio.token|eosadddddddd&scope=eosadddddddd&table=accounts&block_num=19000000&json=true

Headers – Authorization 的值是 【Bearer 之前收到的KEY】

account

这个查询的意思是返回:eosadddddddd这个账号在区块高度 19000000 时,EOS 和 ADD token的余额。
accounts 的值是 EOS 和 ADD token 的合约地址。

如何学习交易记录查询参数怎么写

交易记录的查询是一个更加常用的查询,我们可以通过 eosq 这个浏览器来学习其写法,熟练掌握基础写法后就可以进行更多高级查询了,如果有不支持的语法,你也可以加 dfuse 的 telegram 进行反馈。

介绍下通过 eosq 学习查询的步骤

打开:
https://eosq.app/account/eoscanadacom

鼠标移动,可以在界面上找到如下图中的 搜索 小图标
search

点击后在搜索框就是当前的查询语句
questy

复制查询语句到 dfuse transactions API 即可直接使用
(action:delegatebw OR action:undelegatebw) receiver:eosio data.receiver:eoscanadacom

下面的查询做的是:eoscanadacom 这个账号从 19000000 开始往后 19038649 个块里面倒序前10条 抵押和赎回 的交易记录

https://mainnet.eos.dfuse.io/v0/search/transactions?start_block=19000000&block_count=19038649&limit=10&sort=desc&q=(action:delegatebw OR action:undelegatebw) receiver:eosio data.receiver:eoscanadacom

transaction

更多资料

https://www.dfuse.io/zh/blog

有一个用 dfuse 开发的很有意思的项目:
https://eosinbox.io

介绍两个有用的安全合约 FireWall.X 和 ProPatingEOS

FireWall.X

https://github.com/firewall-x/contract

Firewall.x 主要有慢雾安全团队开发,通过这个工具可以对合约的调用地址进行黑白名单控制。信息不对称其实是很大的安全风险,一个安全漏洞传到开发者这里可能已经过了很久,而通过启用慢雾的恶意地址库,能够第一时间挡掉可能的攻击者账号,从而尽可能的提高安全性。

配合 Firewall.x 控制台 开发者可以自由控制 DApp 的用户黑白名单,禁止恶意用户访问,限制合约账号使用 DApp,查看调用频率以及查看异常调用日志,同时在 sdk 内为开发者提供了常用的账号检测接口,开发者也可根据需要调用。

ProPatingEOS

https://github.com/ProChain/ProRatingEOS/blob/master/README.md

ProRating是ProChain(般若)开源的链上账号评级合约,在链上存储全网账号属性,能够标注出合约账号、羊毛党黑名单、PRA KYC人脸比对结果、PRA CandyBox人机滑块验证结果,并具备数据实时更新特性。

DAPP开发者只需包含该头文件,即可在合约内部通过代码查询数据,适用于DAPP开发者防范合约攻击、防范羊毛党攻击、免人机滑块验证等应用场景。

这个合约主要对羊毛党的 EOS 账号实现有效打击,而 PRA 作为 EOS 生态最大的糖果盒,将自己在这一块的数据积累共享给社区非常值得点赞。

EOS Studio 介绍

EOS Studio 是由黑曜石实验室(Obsidian Labs)开发,他们是来自美国硅谷的技术团队,2018年初成立后在YCombinator孵化,目前专注于去中心化应用(DApps)生态的工具开发。团队曾获得2018年EOS黑客马拉松旧金山站第三,并获全球总决赛前三。

EOS Studio 的产品思路与之前介绍过的 Beosin EOS IDE 不同,它以客户端为主,能够帮助大家快速进行 Docker 版本的 EOS 以及相关工具的安装,通过本地的测试节点进行编译。
同时包括C++代码编辑器,EOS合约开发工具包(EOSIO.CDT),智能合约部署和调试工具,EOS帐户查看器,EOSIO版本管理器等。
也可以随时在本地网络、测试网和EOSIO主网环境之间切换。
比较适合想要一站式完整安装EOS到本地并进行合约开发的开发者,如果想要快速方便的话,则可以选择之前说到的Web IDE。

目前支持 Mac 和 Linux 版本:
https://www.eosstudio.io/

Beosin EOS-IDE

之前一直用 EOSMedi 开发的 https://dev4eos.com IDE工具做合约的编译和部署,不过最近无法使用了,好在成都链安做了一个更强大的:

https://beosin.com/EOS-IDE/index.html#/

支持EOS智能合约在线编辑、编译、一键部署和调试等多种功能,供所有开发者免费使用:

1、首款具备在线编辑、编译、运行调试、部署于一体的EOS开发工具

2、无需搭建开发环境,无需安装,在线操作

3、一切交互均以图形化方式

4、支持多个编译器版本

5、支持多种EOS节点部署运行

6、运行速度快、提示信息明确,极大提升了用户体验

7、开发人员可以高效完成EOS智能合约开发等工作

8、协助开发者在开发过程中提高漏洞风险意识,避免安全隐患

操作步骤:

1.1 加载本地磁盘文件及新增文件
在文件浏览区域上有如图1-2红框处两个图标,点击左侧图标创建新增文件名称,点击右侧图标选择打开本地文件。


如图 1-2 Beosin EOS-IDE文件浏览区

选择文件后可以右击对文件进行重命名或者删除操作。

1.2 编辑

IDE中上方是EOS智能合约编辑器区域。支持代码展开及合并,支持代码联想功能。

1.3 编译

在右边的功能区域选择Compile页签,会动态的显示当前编辑区域合约的编译信息,如显示错误和警告。编译成功后可点击Details查看ABI接口返回的详细信息。

编译器版本分为1.2.x、1.3.x、1.4.x、1.5.x四个版本。

注:若主合约与文件名不相同,请填写正确的合约名称。

1.4 部署

编译成功后进入run页签,选择账户及要部署的网络点击Deploy进行部署,网络包含:Local network、Test network、Main network,部署在测试网或主网时,浏览器需要安装钱包插件。部署结果将在中部下方Run log list中展示。

可以根据不同账户部署不同合约,无需二次部署即可直接运行。

1.5 运行

部署合约成功后,页面返回函数信息及设置账户权限、Tables查询功能,录入函数参数信息即可运行该函数。运行结果将在Run log list中展示。每运行一次都会在Run log list生成一条记录。点击“Inquire”按钮可以查询后台Tables数据信息。

参数录入规则:

1、多个参数以“,”分割。

2、asset类型参数录入int64_t和symbol_type以空格分开

3、数组参数录入见下图:

EOS 姐妹链的简介

准确来说 EOS 侧链目前还未出现,目前的侧链更多是基于 eosio 代码的姐妹链/分叉链,本文主要介绍下他们各自的特点:

EOS原力
https://www.eosforce.io/
初始分配:按 EOS 主网启动时映射 1:1 分配
原力特点是他把EOS资源模型改成了与ETH类似的GAS模型,另外一个特点是一票一投和投票分红。

ENU 牛油果
https://enumivo.org/
初始分配:80%在以太坊上空投,后映射到ENU主网
ENU的特点是其主打 UBI(普遍基本收入),尝试在链上做财富平均分配。

Telos
https://telosfoundation.io/
初始分配:按 EOS 主网启动时映射 1:1 分配,但每个地址最多被分配4万TLOS代币
目标是降低开发人员开发EOSIO DApp的成本,包括:缓速RAM扩容,稳定RAM价格,逆向加权投票,提高生产节点可靠性的恒定奖励等。

Worbli
https://worbli.io/
初始分配:40%即10亿代币,用于对EOS持有人进行空投,即按照2018年9月EOS主网快照 1:1 空投。
Worbli的目标是在合规的监管下构建金融服务类的dApp,提供合规的KYC和AML的环境。

BOS
https://boscore.io/
初始分配:10%空投(5千万按2019年1月EOS主网账户快照空投,5千万根据DApp和节点在链上的交易情况进行空投)
BOS的账户采取了低保模式,确保每个账号最低限度的使用,后续将落地资产跨链,以及提供对开发者激励的DAPP开发基金。

关于 RPC 节点的选择

什么是 RPC 节点

RPC 就是上图中 EOSIO Access Network 这一层,提供普通用户、DAPP对EOS上数据和合约进行访问的 JSON-RPC 接口。

DAPP 中如何设置 RPC 节点

一般 dapp 使用 eosjs 初始化 eos 的 network 对象时,对 RPC 节点进行指定:

      var endpoint = 'https://mainnet.eoscannon.io';
      var eos = Eos({
          keyProvider: '',
          httpEndpoint: endpoint,
          chainId: chainId,
        });

dapp 也可以加一个功能,允许用户选择速度最快的 RPC 节点

选择哪个 RPC 节点

EOS 生态的超级节点、钱包和DAPP项目方都会搭建一些可访问的 RPC 节点入口,在下面的地址中可以查到

https://validate.eosnation.io/mainnet/reports/endpoints.html

如果对RPC节点的稳定性要求特别高,也可以找专业的服务提供方,比如 EOSInfra