本文作者:陈进坚
博客地址:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
联系方式:jian1098@qq.com
接口说明
本文基于EOS私有链环境,理论上测试环境也可以,比如jungle测试链,但是测试链提供的节点服务器一般无法使用wallet相关的接口,比如创建钱包、交易签名等,因为没有开启–filter-on。私有链的搭建步骤可以参见我的另一篇文章《Ubuntu下EOS测试环境(私链)搭建》。
本文的所有参数都是json格式,以表单字段格式post是不行的。
旧版本的eos的chain和wallet功能都是有nodeos程序执行的,新版本更新后与wallet相关的RPC接口改为keosd程序控制,所以要使用与wallet相关的RPC接口必须先启动keosd程序,并且两个程序的端口不能相同。本文的nodeos程序端口为默认的8888,keosd程序端口设置为8889。
nodeos程序是可以不运行在本地的,运行在本地的是私有链,也可以本地不运行,直接连接主网或者测试网络的ip和端口。但是keosd是要运行在本地的,主网和测试网络上没有提供对钱包操作相关的接口,只能在本地操作钱包。所以如果要创建一个EOS节点,要操作钱包的话,不管是私链,主网还是测试网,都要一台服务器编译源码,然后启动keosd来管理钱包账号。
启动nodeos
1 | jian@ubuntu:~$ cd ~/eos/build/programs/nodeos |
启动成功后大约每0.5秒就产生一个区块
启动keosd
打开另一个终端执行,ip地址192.168.1.131:8889改为你的本地ip
1 | jian@ubuntu:~$ cd ~/eos/build/programs/keosd |
这里会出现一个错误警告,但是不影响后面的操作
1 | error 2018-12-08T02:48:31.877 thread-0 wallet_api_plugin.cpp:123 plugin_initialize ] |
访问RPC接口
在浏览器打开:http://127.0.0.1:8888/v1/chain/get_info ,推荐使用postman等http调试工具进行调试,云服务器请在安全组策略开放8888和8889两个端口。
如果需要开放给外部浏览器访问RPC端口,需要修改配置文件:
1 | jian@ubuntu:~/eos$ cd ~/.local/share/eosio/nodeos/config |
将 http-server-address = 127.0.0.1:8888改为你的公网ip和端口即可,或者在启动命令添加参数 –http-server-address = 192.168.1.123:8888,然后在浏览器打开:http://192.168.1.123:8888/v1/chain/get_info 。修改后在命令行对使用cleos程序都必须带上 –url http://192.168.1.131:8888,例如:
1 | sudo ./cleos --url http://192.168.1.131:8888 get account ubuntueos111 |
chain相关接口
获取节点信息
接口链接:http://192.168.1.131:8888/v1/chain/get_info
post参数:无
返回数据:
1 | { |
获取区块信息
接口链接:http://192.168.1.131:8888/v1/chain/get_block
post参数:{“block_num_or_id”:”13598552”}
返回数据:
1 | { |
获取账户信息
接口链接:http://192.168.1.131:8888/v1/chain/get_account
post参数:{“account_name”:”account1”}
返回数据:
1 | { |
获取指定币种信息
接口链接:http://192.168.1.131:8888/v1/chain/get_currency_stats
post参数:{“code”:”eosio.token”, “symbol”:”EOS”}
返回数据:
1 | { |
json 转 bin
接口链接:http://192.168.1.131:8888/v1/chain/abi_json_to_bin
post参数:
1 | { |
返回数据:
1 | { |
查询余额
接口链接:http://192.168.1.131:8888/v1/chain/get_currency_balance
post参数:
{“code”:”eosio.token”, “account”: “account1”, “symbol”:”EOS”}
参数说明:account为账号名,symbol为指定代币名
返回数据:
1 | [ |
wallet相关接口
- 注意与wallet相关的接口需要启动keosd程序,并且端口为8889
创建钱包
接口链接:http://192.168.1.131:8889/v1/wallet/create
post参数:”account1”
参数说明:传入需要创建的账号名即可,返回结果是钱包的私钥
返回数据:
1 | "PW5HrziwLJZYntiyNQnS7F9FSFFJAGjeZSDT2U5tbR5WVxWVgapRv" |
钱包列表
接口链接:http://192.168.1.131:8889/v1/wallet/list_wallets
post参数:无
返回数据:
1 | [ |
锁定指定钱包
接口链接:http://192.168.1.131:8889/v1/wallet/lock
post参数:”accountname”
参数说明:传入需要解锁的账号名即可
返回数据:
1 | {} |
锁定所有钱包
接口链接:http://192.168.1.131:8889/v1/wallet/lock_all
post参数:无
返回数据:
1 | {} |
解锁钱包
接口链接:http://192.168.1.131:8889/v1/wallet/unlock
post参数:[“account3”, “PW5Kxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”]
参数说明:传入需要解锁的账号名和私钥
返回数据:
1 | {} |
设置自动锁定时间
接口链接:http://192.168.1.131:8889/v1/wallet/set_timeout
post参数:3600
参数说明:单位是秒
返回数据:
1 | {} |
获取所有钱包中的公钥
接口链接:http://192.168.1.131:8889/v1/wallet/get_public_keys
post参数:无
返回数据:
1 | [ |
导入私钥
接口链接:http://192.168.1.131:8889/v1/wallet/import_key
post参数:[“account3”,”5JxhYZZnFJJMRrf7KkSHNLFq2LM4eZigJfeKXXYSa1TvPMdWtLc”]
参数说明:账号名和密钥对的私钥
返回数据:
1 | {} |
获取指定钱包的公私钥对
接口链接:http://192.168.1.131:8889/v1/wallet/list_keys
post参数:[“account3”,”PW5HrziwLJZYntiyNQnS7F9FSFFJAGjeZSDT2U5tbR5WVxWVgapRv”]
参数说明:账号名和私钥,返回私钥对的public key和private key
返回数据:
1 | [ |
history相关接口
要使用history相关的接口,节点启动必须--filter-on "*"
参数,一般网上公开的节点是不开启的,所以查到的数据为空
获取指定账号的交易记录
接口链接:http://192.168.1.115:8888/v1/history/get_actions
post参数:{“pos”:0,”offset”:5,”account_name”:”exchange2222”}
参数说明:偏移量、查找数量和要查询的账号名,前两个参数好像不起作用。
如果是在jungle测试网络,可以逐个节点测试,一般都会有几个节点打开--filter-on
的,例如 http://jungle2-eos.blckchnd.com:8888 这个节点
返回数据:
1 | { |
根据交易id查询交易信息
接口链接:http://192.168.1.115:8888/v1/history/get_transaction
post参数:{“id”:”50c9bedc542a5d17a66bace81486d2fc2e3b047ed67d34c2ad0c1c6d75040948”}
返回数据:
1 | { |
查询相同公钥的账号
接口链接:http://192.168.1.131:8888/v1/history/get_key_accounts
post参数:{“public_key”:”EOS5Fwtc4vnQE8AigimXvHrERrK7XFpycQ8Dijq2611timbVTReDt”}
参数说明:公钥
返回数据:
1 | { |
交易相关接口
通过RPC发送交易需要下面几个步骤
1.序列化交易信息
接口链接:http://192.168.1.131:8888/v1/chain/abi_json_to_bin
post参数:
1 | { |
参数说明:设置好from,to账号和数量,memo是备注
返回数据:
1 | { |
2.获取最新区块
接口链接:http://192.168.1.131:8888/v1/chain/get_info
post参数:无
返回数据:
1 | { |
得到最新区块为43593
3. 获取区块id
接口链接:http://192.168.1.131:8888/v1/chain/get_block
post参数:{“block_num_or_id”:”43593”}
返回数据:
1 | { |
得到id
和ref_block_prefix
4.获取from账号信息
接口链接:http://192.168.1.131:8888/v1/chain/get_account
post参数:{“account_name”:”account1”}
返回数据:
1 | { |
可以得到active权限的公钥是EOS75hPAeMGgAw9FYLTAHqjHyicjW82bB1q9grXqDtCdMDMpe1eoa
5.解锁from钱包
接口链接:http://192.168.1.131:8889/v1/wallet/unlock
post参数:[“account3”, “PW5Kxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”]
参数说明:传入需要解锁的账号名和私钥
返回数据:
1 | {} |
6.交易签名
1 | [{ |