歡迎來到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,>_<