EOS小白学习(四)使用http请求EOS节点
欢迎来到EOS小白学习系列,本系列会记录EOS学习过程中的一些操作和细节,大饼果子非C++出身,如有错误,欢迎指出
接上一篇:
EOS小白学习(三)创建一个EOS的账户
前一篇用cleos完成了创建账户以及转账的一系列操作,也就是说,使用命令行就可以完成对节点的操作,那么http的api有什么用处呢?
本果子的意图是通过http了解eos的结构,并且对于真实业务,例如钱包的开发,是有需求要对接节点提供的http api的
eos的官方文档参见:EOS HTTP API
那么我们进入到docker里面
$ docker exec -it nodeos sh
# ls
bin config.ini dev home lib64 mnt proc run srv tmp usr
boot contracts etc lib media opt root sbin sys tutorials var
就可以看到config.ini文件,查看以下该文件
# cat config.ini
就会看到最后几行的插件声明里有
# Plugin(s) to enable, may be specified multiple times
# plugin =
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
这里注册了chain和history的插件,当然,你还可以注册很多其他插件,eos的源码包中就有这么多的插件
那么如我们的docker,已经有了chain和history api的插件,就可以进行http的调用了
我们来试一下在浏览器输入http://127.0.0.1:8888/v1/chain/get_info
诶?奇怪?怎么不行嘞?
并不是所有小伙伴都不行,大饼果子使用1.1.0的版本就不可以,于是翻看了一下eos的代码,找到了这样两句
第一句
("http-validate-host", boost::program_options::value<bool>()->default_value(true), "If set to false, then any incoming \"Host\" header is considered valid")
第二句
void http_plugin::plugin_initialize(const variables_map& options) { try { my->validate_host = options.at("http-validate-host").as<bool>(); if( options.count( "http-alias" )) { const auto& aliases = options["http-alias"].as<vector<string>>(); my->valid_hosts.insert(aliases.begin(), aliases.end()); } ...
这是给http的请求加了限制呐,那么我们可以打开所有http的权限,或者指定一个http-alias
所以我们编辑一下config.ini的文件
在文件的最后加入
http-validate-host = false
或者
http-alias = 127.0.0.1:8888
然后我们重新执行一下
$ docker restart nodeos
nodeos
于是我们预期的结果就出现了
接下来,我们还要改一个配置(config.ini)
# Track actions which match receiver:action:actor. Actor may be blank to include all. Receiver and Action may not be blank. (eosio::history_plugin)
filter-on = dabingguozi:transfer:
filter-on这里改成receiver:action:actor,如果actor没有填,就认为所有的合约的名字为action,receiver是receiver的历史都会被记录
什么意思呢?就是说,这个filter会影响到我们的history记录,影响到我们对history transaction的查询,有了这个filter,节点会特别记录一些transaction,具体效果参见下一篇
下一篇我们介绍几个常用的API
EOS小白学习(五)EOS的HTTP API
本篇没有ps,>_<