一个朋友和我说起YOYOW,想让我帮他写个小程序,咦,YOYOW,说起来好像是上个世纪的事情了呢,当年号称要做区块链版的区块链版知乎+简书+今日头条。
(图源 :pixabay)
当年YOYOW也甚是火爆过一阵,有无数个Q群/微信群,我记得还有个网站叫做币问,去上边提问或者回到问题就可以赚到YOYO币,我还在上边赚过几百个币呢。不过币问好像已经关站了,唉,我也不知道我在里边还有有没有积分啥的了,亏啊。
看了一下,YOYOW的官网还在、主网还在、github上也有更新,说明团队在做事,这还是比较难得的。唉,扯远了,本文主要是学API,不谈别的啦。
从YOYOW官网开发者文档中,可以了解到,YOYOW有两大类API:
- 节点API (Node API)
- 钱包API (Wallet API)
我记得以前在bitshares网站上看到过一个API工作的流程图,放在YOYOW上一样适用:
那个Withdraw API,我觉得是书写错误,应该是Wallet API,除了能处理查询等操作外,还能处理转账啊、投票之类的需要权限才能完成的操作。
其实钱包API也是通过和Node API (Blockchain API)打交道来完成相关操作的。所以理论上,我们也可以通过Node API 实现转账、投票等诸如此类需要授权的操作,只是这样需要我们自己组成交易数据、序列化、签名、广播,相对而言比较复杂。
今天我们先来学习Node API,从文档中得知,有两种连接方法:
- 使用websocket接口
- 使用HTTP/HTTPS接口(JSON-RPC)
我比较喜欢使用HTTP/HTTPS接口(JSON-RPC),使用websocket接口大家可以自行查看文档。
以最简单的获取get_accounts_by_uid
为例,官方给的示例如下:
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [["250926091"]]], "id": 1}' https://api.testnet.yoyow.org/rpc
很可惜的是,官方的测试节点貌似不工作了。于是我自己跑了一个节点,开启了RPC服务,然后测试一下:
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [["250926091"]]], "id": 1}' http://127.0.0.1:8091/rpc
得到如下结果:
{"id":1,"jsonrpc":"2.0","result":[null]}
这说明API的调用什么的都没问题,但是这个用户ID(UID)并不存在,也不知道是做文档时特意选了个不存在的id。从最近交易中找了个uid试试。
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_accounts_by_uid", [["316238807"]]], "id": 1}' http://127.0.0.1:8091/rpc
返回结果比较乱,整理一下之后是这个样子:
这个貌似是个交易所账户哦,我们来看看它里边有多少钱:
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_account_balances", ["316238807", [0]]], "id": 1}' http://127.0.0.1:8091/rpc
返回信息如下:
{"id":1,"jsonrpc":"2.0","result":[{"amount":"7685480975225","asset_id":0}]}
其中的零代表核心资产,精度是到小数点后五位,所以就是有76854809.75225
这么多代币,哇,一笔巨款哦。
尽管,官方网站的开发者文档以及github上的WIKI文档中已经列出一些API,但是好像并不完整,比如说我常用的get_block
以及get_dynamic_global_properties
啥的,文档中都没有介绍。
所以要看完整的API列表还得去看代码,比如查看database_api.hpp
列出的API,同时也可以查看相应的参数信息等等。这样我们就有大把的API可用了。
比如说,我们可以用get_block
来查看一下创世块:
curl --data '{"jsonrpc": "2.0", "method": "call", "params": [0, "get_block", [1]], "id": 1}' http://127.0.0.1:8091/rpc
结果如下:
所以,其实YOYOW的API与HIVE的并无太大区别,其实它们都是从Bitshares发展出来的,有相同的血缘。这样也好,至少学习起来,难度低了好多呢。