fcoin_ruby_client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/issue_template.md +12 -0
- data/.github/pull_request_template.md +12 -0
- data/.gitignore +13 -0
- data/.rspec +3 -0
- data/.rubocop.yml +12 -0
- data/.rubocop_todo.yml +431 -0
- data/.travis.yml +26 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +176 -0
- data/LICENSE.txt +21 -0
- data/README.md +204 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/fcoin +95 -0
- data/bin/setup +8 -0
- data/examples/cli/realtime_api.md +78 -0
- data/examples/cli/rest_api.md +149 -0
- data/examples/cli/setting.md +39 -0
- data/examples/realtime_api.rb +43 -0
- data/examples/rest_api.rb +47 -0
- data/fcoin_ruby_client.gemspec +39 -0
- data/lib/fcoin/api.rb +47 -0
- data/lib/fcoin/authorization.rb +83 -0
- data/lib/fcoin/cli/endpoint/accounts_task.rb +33 -0
- data/lib/fcoin/cli/endpoint/market_task.rb +98 -0
- data/lib/fcoin/cli/endpoint/orders_task.rb +196 -0
- data/lib/fcoin/cli/endpoint/public_task.rb +59 -0
- data/lib/fcoin/cli/realtime/endpoint_task.rb +107 -0
- data/lib/fcoin/cli.rb +77 -0
- data/lib/fcoin/client.rb +7 -0
- data/lib/fcoin/config/custom_settings.yml +171 -0
- data/lib/fcoin/config/settings.yml +10 -0
- data/lib/fcoin/configuration.rb +95 -0
- data/lib/fcoin/connection.rb +33 -0
- data/lib/fcoin/endpoint/accounts.rb +23 -0
- data/lib/fcoin/endpoint/market.rb +91 -0
- data/lib/fcoin/endpoint/orders.rb +171 -0
- data/lib/fcoin/endpoint/public.rb +51 -0
- data/lib/fcoin/endpoint/utility.rb +14 -0
- data/lib/fcoin/endpoint.rb +13 -0
- data/lib/fcoin/error.rb +4 -0
- data/lib/fcoin/faraday/fcoin_formatter.rb +17 -0
- data/lib/fcoin/formatter/base_formatter.rb +8 -0
- data/lib/fcoin/formatter/depth_formatter.rb +33 -0
- data/lib/fcoin/formatter/ticker_formatter.rb +34 -0
- data/lib/fcoin/formatter.rb +38 -0
- data/lib/fcoin/generators/locale.rb +18 -0
- data/lib/fcoin/generators/templates/locale/locales/en.yml +176 -0
- data/lib/fcoin/generators/templates/locale/locales/ja.yml +176 -0
- data/lib/fcoin/generators/templates/locale/locales/zh_CN.yml +176 -0
- data/lib/fcoin/generators/templates/validation/my_settings.yml +171 -0
- data/lib/fcoin/generators/validation.rb +18 -0
- data/lib/fcoin/realtime/api.rb +38 -0
- data/lib/fcoin/realtime/client.rb +9 -0
- data/lib/fcoin/realtime/endpoint.rb +160 -0
- data/lib/fcoin/realtime/formatter/base_formatter.rb +10 -0
- data/lib/fcoin/realtime/formatter/depth_formatter.rb +37 -0
- data/lib/fcoin/realtime/formatter/ticker_formatter.rb +36 -0
- data/lib/fcoin/realtime/formatter.rb +40 -0
- data/lib/fcoin/realtime/wss.rb +113 -0
- data/lib/fcoin/request.rb +73 -0
- data/lib/fcoin/validator/market_validator.rb +60 -0
- data/lib/fcoin/validator/orders/base_validator.rb +96 -0
- data/lib/fcoin/validator/orders/create_order_limit_validator.rb +54 -0
- data/lib/fcoin/validator/orders/create_order_market_validator.rb +95 -0
- data/lib/fcoin/validator/orders/order_list_validator.rb +33 -0
- data/lib/fcoin/validator/orders_validator.rb +69 -0
- data/lib/fcoin/validator/validator_utility.rb +24 -0
- data/lib/fcoin/validator.rb +58 -0
- data/lib/fcoin/version.rb +3 -0
- data/lib/fcoin.rb +11 -0
- metadata +353 -0
@@ -0,0 +1,149 @@
|
|
1
|
+
# REST API CLI
|
2
|
+
|
3
|
+
In development, please use the `./bin/fcoin`.<br>
|
4
|
+
In Actual, please use the `bundle exec fcoin`.
|
5
|
+
|
6
|
+
## All
|
7
|
+
```bash
|
8
|
+
$ ./bin/fcoin
|
9
|
+
Commands:
|
10
|
+
fcoin account # Get Account Information
|
11
|
+
fcoin help [COMMAND] # Describe available commands or one specific command
|
12
|
+
fcoin locale # Locale Setting
|
13
|
+
fcoin market # Get Market Information
|
14
|
+
fcoin order # Operate Order
|
15
|
+
fcoin public # Get Public Information
|
16
|
+
fcoin subscribe # Subscribe topic
|
17
|
+
fcoin validation # Validation Setting
|
18
|
+
fcoin version # Print Version
|
19
|
+
|
20
|
+
```
|
21
|
+
|
22
|
+
__If you want to validate__
|
23
|
+
|
24
|
+
```bash
|
25
|
+
$ # For more settings
|
26
|
+
$ # @see https://github.com/yukihirop/fcoin_ruby_client#validation
|
27
|
+
$ ./bin/fcoin validation init --path ./config
|
28
|
+
create
|
29
|
+
create my_settings.yml
|
30
|
+
$ export VALIDATION_SETTING_PATH='/path/to/your/my_settings.yml'
|
31
|
+
```
|
32
|
+
|
33
|
+
## Public
|
34
|
+
```bash
|
35
|
+
$ ./bin/fcoin public
|
36
|
+
Commands:
|
37
|
+
fcoin public currencies # Display available currency
|
38
|
+
fcoin public help [COMMAND] # Describe subcommands or one specific subcommand
|
39
|
+
fcoin public server_time # Get server time
|
40
|
+
fcoin public symbols # Query available transaction pairs
|
41
|
+
|
42
|
+
```
|
43
|
+
|
44
|
+
```bash
|
45
|
+
$ # Get server time
|
46
|
+
$ ./bin/fcoin public server_time
|
47
|
+
{"status":0,"data":1533311785257}
|
48
|
+
$
|
49
|
+
$ # Display available currency
|
50
|
+
$ ./bin/fcoin public currencies
|
51
|
+
{"status":0,"data":["btc","eth","bch","ltc","eos","usdt","ft_frozen","ft","zip","etc","omg","btm","zrx","xrp","bnb","gtc","fi","zil","icx","ae","777","gus","cccx","banca","pra","dcc","sss","mdt","tst","pmd","rte","xps","tct","dws","ngot","at","soc","blz","ocn","datx","let","dag","yee","aaa","nc","ait","arp","gram","tbcoin","ifood","hpc","sgcc","lxt","3db","drink1","drink","drct","ionc","xmx","rct","cit","ees","fair","brm","sda","cbr","tkt","vct","biz","show","pai","sec","lovc","mst","iov","ejoy","iht","iic","fbc","fota","dagt","wte","tos","oas","fres","gene","maya","mesh","icc","scl","cofi","but","zsc","jac","vns","aidoc","ccc","fuel","edu","beauty","mof","dta","cps","msc","latx","dscoin","dscb","boc","18t","newos","mxm","idxe","pnt","vpp","lmm","rnt","hotc","fff","dht","fbee","vlc","wicc","mot","bcv","baic","ruff","ink","ges","sac","see","dpn","smt","musk","ptt","mith","lth","wmch","cwv","jll","bhpc","unc","int","insur","pun","facc","osch","uto","btmc","cnmc","fcandy","dacc","fti","bbc","orme","tcash","mitx","pok","icst","gu","iota","ft1808","ft1810_i","zpr","nrc","kan","dac","eai","ifish","tat","you","win","fish","box","cosm","loom","kcash","rrc","olt","agi","kora","skm","bto","uuu","gse","bft","abt","mds","ors","vaac","lba","knc","gto","bfdt","est","gnx","iost","hpb","xin","cai","tac","risk","vnt","vboom","ugc","ole","bkbt","cpc","qos"]}
|
52
|
+
$
|
53
|
+
$ # Query available transaction pairs
|
54
|
+
$ ./bin/fcoin public symbols
|
55
|
+
{"status":0,"data":[{"name":"btcusdt","base_currency":"btc","quote_currency":"usdt","price_decimal":2,"amount_decimal":4},{"name":"ethusdt","base_currency":"eth","quote_currency":"usdt","price_decimal":2,"amount_decimal":4},{"name":"bchusdt","base_currency":"bch","quote_currency":"usdt","price_decimal":2,"amount_decimal":4},{"name":"ltcusdt","base_currency":"ltc","quote_currency":"usdt","price_decimal":2,"amount_decimal":4},{"name":"ftusdt","base_currency":"ft","quote_currency":"usdt","price_decimal":6,"amount_decimal":2},{"name":"fteth","base_currency":"ft","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"zipeth","base_currency":"zip","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"etcusdt","base_currency":"etc","quote_currency":"usdt","price_decimal":2,"amount_decimal":4},{"name":"ftbtc","base_currency":"ft","quote_currency":"btc","price_decimal":8,"amount_decimal":2},{"name":"omgeth","base_currency":"omg","quote_currency":"eth","price_decimal":6,"amount_decimal":4},{"name":"btmusdt","base_currency":"btm","quote_currency":"usdt","price_decimal":4,"amount_decimal":2},{"name":"zrxeth","base_currency":"zrx","quote_currency":"eth","price_decimal":6,"amount_decimal":2},{"name":"bnbusdt","base_currency":"bnb","quote_currency":"usdt","price_decimal":4,"amount_decimal":2},{"name":"zipusdt","base_currency":"zip","quote_currency":"usdt","price_decimal":6,"amount_decimal":2},{"name":"xrpusdt","base_currency":"xrp","quote_currency":"usdt","price_decimal":4,"amount_decimal":2},{"name":"fieth","base_currency":"fi","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"fiusdt","base_currency":"fi","quote_currency":"usdt","price_decimal":6,"amount_decimal":2},{"name":"icxeth","base_currency":"icx","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"zileth","base_currency":"zil","quote_currency":"eth","price_decimal":6,"amount_decimal":4},{"name":"aeeth","base_currency":"ae","quote_currency":"eth","price_decimal":6,"amount_decimal":2},{"name":"777eth","base_currency":"777","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"guseth","base_currency":"gus","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"cccxeth","base_currency":"cccx","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"bancaeth","base_currency":"banca","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"praeth","base_currency":"pra","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dcceth","base_currency":"dcc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ssseth","base_currency":"sss","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"mdteth","base_currency":"mdt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"tsteth","base_currency":"tst","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"pmdeth","base_currency":"pmd","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"rteeth","base_currency":"rte","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"xpseth","base_currency":"xps","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"tcteth","base_currency":"tct","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dwseth","base_currency":"dws","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ngoteth","base_currency":"ngot","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ateth","base_currency":"at","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"soceth","base_currency":"soc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"blzeth","base_currency":"blz","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ocneth","base_currency":"ocn","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"datxeth","base_currency":"datx","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"gtceth","base_currency":"gtc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"leteth","base_currency":"let","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dageth","base_currency":"dag","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"yeeeth","base_currency":"yee","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"aaaeth","base_currency":"aaa","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"nceth","base_currency":"nc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"aiteth","base_currency":"ait","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"arpeth","base_currency":"arp","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"grameth","base_currency":"gram","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ifoodeth","base_currency":"ifood","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"hpceth","base_currency":"hpc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"sgcceth","base_currency":"sgcc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"3dbeth","base_currency":"3db","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"xmxeth","base_currency":"xmx","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"rcteth","base_currency":"rct","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"citeth","base_currency":"cit","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"eeseth","base_currency":"ees","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"faireth","base_currency":"fair","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"brmeth","base_currency":"brm","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"sdaeth","base_currency":"sda","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"cbreth","base_currency":"cbr","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"tkteth","base_currency":"tkt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"vcteth","base_currency":"vct","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"bizeth","base_currency":"biz","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"showeth","base_currency":"show","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"paieth","base_currency":"pai","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ioveth","base_currency":"iov","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ihteth","base_currency":"iht","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"fotaeth","base_currency":"fota","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ejoyeth","base_currency":"ejoy","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"iiceth","base_currency":"iic","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"wteeth","base_currency":"wte","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"freseth","base_currency":"fres","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"mesheth","base_currency":"mesh","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"icceth","base_currency":"icc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ionceth","base_currency":"ionc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"drcteth","base_currency":"drct","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"oaseth","base_currency":"oas","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"buteth","base_currency":"but","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"aidoceth","base_currency":"aidoc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"cofieth","base_currency":"cofi","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"lxteth","base_currency":"lxt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"edueth","base_currency":"edu","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dtaeth","base_currency":"dta","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"msceth","base_currency":"msc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"geneeth","base_currency":"gene","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ccceth","base_currency":"ccc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dscoineth","base_currency":"dscoin","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"boceth","base_currency":"boc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"toseth","base_currency":"tos","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"fueleth","base_currency":"fuel","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"pnteth","base_currency":"pnt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"seceth","base_currency":"sec","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"mofeth","base_currency":"mof","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"rnteth","base_currency":"rnt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"wicceth","base_currency":"wicc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"fffeth","base_currency":"fff","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"cpseth","base_currency":"cps","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"zsceth","base_currency":"zsc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"latxeth","base_currency":"latx","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dhteth","base_currency":"dht","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"seeeth","base_currency":"see","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"inketh","base_currency":"ink","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"saceth","base_currency":"sac","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"scleth","base_currency":"scl","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"mitheth","base_currency":"mith","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"smteth","base_currency":"smt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"fcandyusdt","base_currency":"fcandy","quote_currency":"usdt","price_decimal":8,"amount_decimal":2},{"name":"newoseth","base_currency":"newos","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"hotceth","base_currency":"hotc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ptteth","base_currency":"ptt","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"dpneth","base_currency":"dpn","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ltheth","base_currency":"lth","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"jlleth","base_currency":"jll","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"utoeth","base_currency":"uto","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"777usdt","base_currency":"777","quote_currency":"usdt","price_decimal":8,"amount_decimal":2},{"name":"xpsusdt","base_currency":"xps","quote_currency":"usdt","price_decimal":8,"amount_decimal":2},{"name":"prausdt","base_currency":"pra","quote_currency":"usdt","price_decimal":8,"amount_decimal":2},{"name":"hpcusdt","base_currency":"hpc","quote_currency":"usdt","price_decimal":8,"amount_decimal":2},{"name":"vppeth","base_currency":"vpp","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"oscheth","base_currency":"osch","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"guusdt","base_currency":"gu","quote_currency":"usdt","price_decimal":8,"amount_decimal":2},{"name":"ft1808usdt","base_currency":"ft1808","quote_currency":"usdt","price_decimal":6,"amount_decimal":2},{"name":"ruffeth","base_currency":"ruff","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"baiceth","base_currency":"baic","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ormeeth","base_currency":"orme","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"puneth","base_currency":"pun","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"facceth","base_currency":"facc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"cwveth","base_currency":"cwv","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"lmmeth","base_currency":"lmm","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"vlceth","base_currency":"vlc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"icsteth","base_currency":"icst","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ftft1808","base_currency":"ft","quote_currency":"ft1808","price_decimal":6,"amount_decimal":2},{"name":"iotausdt","base_currency":"iota","quote_currency":"usdt","price_decimal":4,"amount_decimal":2},{"name":"drink1eth","base_currency":"drink1","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"drinketh","base_currency":"drink","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"musketh","base_currency":"musk","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"mxmeth","base_currency":"mxm","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"mitxeth","base_currency":"mitx","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ft1810_iusdt","base_currency":"ft1810_i","quote_currency":"usdt","price_decimal":6,"amount_decimal":2},{"name":"ftft1810_i","base_currency":"ft","quote_currency":"ft1810_i","price_decimal":6,"amount_decimal":2},{"name":"inteth","base_currency":"int","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"btmceth","base_currency":"btmc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"cnmceth","base_currency":"cnmc","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"ftieth","base_currency":"fti","quote_currency":"eth","price_decimal":8,"amount_decimal":2},{"name":"eosusdt","base_currency":"eos","quote_currency":"usdt","price_decimal":4,"amount_decimal":4}]}
|
56
|
+
```
|
57
|
+
|
58
|
+
## Market
|
59
|
+
```bash
|
60
|
+
$ ./bin/fcoin market
|
61
|
+
Commands:
|
62
|
+
fcoin market candles --resolution=RESOLUTION --symbol=SYMBOL # Returns candles info of symbol specified by resolution
|
63
|
+
fcoin market depth --level=LEVEL --symbol=SYMBOL # Returns depth info of symbol specified by level
|
64
|
+
fcoin market help [COMMAND] # Describe subcommands or one specific subcommand
|
65
|
+
fcoin market ticker --symbol=SYMBOL # Returns ticker info of symbol
|
66
|
+
fcoin market trades --symbol=SYMBOL # Returns trades info of symbol
|
67
|
+
|
68
|
+
```
|
69
|
+
|
70
|
+
```bash
|
71
|
+
$ # Returns ticker info of symbol
|
72
|
+
$ ./bin/fcoin market ticker --symbol ethusdt
|
73
|
+
{"status":0,"data":{"ticker":{"latest_price":414.02,"most_recent_trade_vol":0.0902,"max_buy_price":414.02,"max_buy_amount":1.8507,"min_sell_price":414.03,"min_sell_amount":0.5,"trade_price_yesterday":412.04,"highest_price_today":415.31,"lowest_price_today":397.61,"symbol_base_vol_today":20506.814864234,"symbol_base_price_today":8368527.290918281},"type":"ticker.ethusdt","seq":105330258}}
|
74
|
+
|
75
|
+
$ # Returns depth info of symbol specified by level
|
76
|
+
$ ./bin/fcoin market depth --symbol ethusdt --level L20
|
77
|
+
{"status":0,"data":{"bids":[{"price":414.06,"amount":0.015},{"price":414.05,"amount":0.045},{"price":414.02,"amount":0.4694},{"price":414.0,"amount":0.1042},{"price":413.94,"amount":0.0084},{"price":413.93,"amount":0.4181},{"price":413.91,"amount":0.0025},{"price":413.9,"amount":0.0242},{"price":413.81,"amount":0.0036},{"price":413.8,"amount":0.04},{"price":413.71,"amount":0.1499},{"price":413.7,"amount":0.095},{"price":413.68,"amount":0.0558},{"price":413.67,"amount":0.0803},{"price":413.66,"amount":0.0684},{"price":413.62,"amount":0.0617},{"price":413.6,"amount":0.9768},{"price":413.59,"amount":0.0469},{"price":413.5,"amount":1.6528},{"price":413.41,"amount":0.0541}],"asks":[{"price":414.08,"amount":0.1742},{"price":414.09,"amount":0.1153},{"price":414.1,"amount":0.0201},{"price":414.11,"amount":0.1566},{"price":414.13,"amount":0.1332},{"price":414.15,"amount":0.2891},{"price":414.16,"amount":0.0951},{"price":414.23,"amount":0.4024},{"price":414.27,"amount":0.0283},{"price":414.3,"amount":0.005},{"price":414.31,"amount":0.0072},{"price":414.32,"amount":0.0035},{"price":414.35,"amount":0.0072},{"price":414.36,"amount":0.0025},{"price":414.46,"amount":0.0638},{"price":414.49,"amount":1.2057},{"price":414.5,"amount":0.005},{"price":414.51,"amount":0.0105},{"price":414.53,"amount":0.0015},{"price":414.6,"amount":0.06}],"ts":1533312373012,"seq":105330896,"type":"depth.L20.ethusdt"}}
|
78
|
+
|
79
|
+
$ # Returns trades info of symbol
|
80
|
+
$ ./bin/fcoin market trades --symbol ethusdt
|
81
|
+
{"status":0,"data":[{"amount":0.0371,"ts":1533312528424,"id":105331864002,"side":"buy","price":413.8}]}
|
82
|
+
|
83
|
+
$ # Returns candles info of symbol specified by resolution
|
84
|
+
$ ./bin/fcoin market candles --symbol ethusdt --resolution MN
|
85
|
+
{"status":0,"data":[{"open":430.1,"close":413.84,"high":435.93,"quote_vol":48966834.28889369,"id":1533052800,"count":357474,"low":397.61,"seq":10533250500000,"base_vol":116515.627401974},{"id":1530374400,"seq":10277314000000,"high":516.09,"low":418.29,"open":449.1,"close":430.1,"count":6460281,"base_vol":3214156.779928503,"quote_vol":1481280928.4282734},{"id":1527782400,"seq":7385778300000,"high":555.13,"low":406.11,"open":523.97,"close":449.04,"count":20382481,"base_vol":28258854.226292703,"quote_vol":13579650310.735054},{"id":1525104000,"seq":2847062700000,"high":582.99,"low":559.66,"open":563.23,"close":575.77,"count":4617,"base_vol":4159.317883344,"quote_vol":2380070.431548223}]}
|
86
|
+
```
|
87
|
+
|
88
|
+
## Order
|
89
|
+
|
90
|
+
__Please authenticate before command execution__
|
91
|
+
```bash
|
92
|
+
export FCOIN_API_KEY='your_fcoin_api_key'
|
93
|
+
export FCOIN_SECRET_KEY='your_fcoin_secret_key'
|
94
|
+
```
|
95
|
+
|
96
|
+
```bash
|
97
|
+
$ ./bin/fcoin order
|
98
|
+
Commands:
|
99
|
+
fcoin order cancel --order-id=ORDER_ID # Cancel order
|
100
|
+
fcoin order create_limit --amount=N --price=N --side=SIDE --symbol=SYMBOL # Create limit order
|
101
|
+
fcoin order help [COMMAND] --side=SIDE --symbol=SYMBOL # Describe subcommands or one specific subcommand
|
102
|
+
fcoin order list --states=STATES --symbol=SYMBOL # Get order list
|
103
|
+
fcoin order reference --order-id=ORDER_ID # Ouery order
|
104
|
+
fcoin order transaction --order-id=ORDER_ID # Query the transaction record for the specified by order_id
|
105
|
+
|
106
|
+
```
|
107
|
+
|
108
|
+
```bash
|
109
|
+
$ # Create limit order
|
110
|
+
$ ./bin/fcoin order create_limit --symbol ftusdt --side sell --price 1 --amount 3
|
111
|
+
{"status":0,"data":"6SlFV7PSsxYu0FduMlYwghCgLgjeD_AiT5loT-ZFl2s="}
|
112
|
+
|
113
|
+
$ # Ouery order
|
114
|
+
$ ./bin/fcoin order reference --order-id 6SlFV7PSsxYu0FduMlYwghCgLgjeD_AiT5loT-ZFl2s=
|
115
|
+
{"status":0,"data":{"id":"6SlFV7PSsxYu0FduMlYwghCgLgjeD_AiT5loT-ZFl2s=","symbol":"ftusdt","amount":"3.000000000000000000","price":"1.000000000000000000","created_at":1533313517068,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"submitted"}}
|
116
|
+
|
117
|
+
$ # Query the transaction record
|
118
|
+
$ ./bin/fcoin order transaction --order-id 6SlFV7PSsxYu0FduMlYwghCgLgjeD_AiT5loT-ZFl2s=
|
119
|
+
{"status":0,"data":[]}
|
120
|
+
|
121
|
+
$ # Cancel order
|
122
|
+
$ ./bin/fcoin order cancel --order-id 6SlFV7PSsxYu0FduMlYwghCgLgjeD_AiT5loT-ZFl2s=
|
123
|
+
{"status":0} # cancel is success
|
124
|
+
|
125
|
+
$ # Get order list
|
126
|
+
$ ./bin/fcoin order list --symbol ethusdt --states canceled
|
127
|
+
{"status":0,"data":[{"id":"nMEC_VrW0LYlP4iCcWzmdL50jFrvNWZoaQxvZSjeUSA=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531732778736,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"canceled"},{"id":"V6WE1JJCUwvqJFgCjfT5lA37ioU_xOYi6_NSrtOVOsw=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531732713230,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"canceled"},{"id":"R0moy92q4Qaf_GDEQ6Y1IKCgl5wwJM2bz_Zyacp-Ek8=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531714333569,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"canceled"},{"id":"L7rbALEIoI0ymo3uOXBF4gT4BlyTxgHhGoZjvptIv2U=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531714218130,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"canceled"},{"id":"32ZZCBEpPz2J9oFIJ4RMTIbypltjrVD9PAdYxQTHhUE=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531714092732,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"canceled"},{"id":"VotO2IKI2opgyKRd1lhR5bYj9zNZ398IW85gcBNPisU=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531712709955,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"api","state":"canceled"},{"id":"tYH6LczJxaVe_WhsLOzOk4YM53hK2q169nYn9ReiwGM=","symbol":"ethusdt","amount":"0.001000000000000000","price":"1000.000000000000000000","created_at":1531675732267,"type":"limit","side":"sell","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"web","state":"canceled"},{"id":"U50WtZkmIh_bbuVKoipAMayCIy0A7qk4hBLxpDvKdPk=","symbol":"ethusdt","amount":"0.025800000000000000","price":"491.100000000000000000","created_at":1529665880201,"type":"limit","side":"buy","filled_amount":"0.000000000000000000","executed_value":"0.000000000000000000","fill_fees":"0.000000000000000000","source":"web","state":"canceled"}]}
|
128
|
+
```
|
129
|
+
|
130
|
+
## Account
|
131
|
+
|
132
|
+
__Please authenticate before command execution__
|
133
|
+
```bash
|
134
|
+
export FCOIN_API_KEY='your_fcoin_api_key'
|
135
|
+
export FCOIN_SECRET_KEY='your_fcoin_secret_key'
|
136
|
+
```
|
137
|
+
|
138
|
+
```bash
|
139
|
+
$ ./bin/fcoin account
|
140
|
+
Commands:
|
141
|
+
fcoin account balance # Get account info
|
142
|
+
fcoin account help [COMMAND] # Describe subcommands or one specific subcommand
|
143
|
+
|
144
|
+
```
|
145
|
+
|
146
|
+
```bash
|
147
|
+
$ ./bin/fcoin account balance
|
148
|
+
# Do not display because it is personal information
|
149
|
+
```
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Setting CLI
|
2
|
+
|
3
|
+
In development, please use the `./bin/fcoin`.<br>
|
4
|
+
In Actual, please use the `bundle exec fcoin`.
|
5
|
+
|
6
|
+
## All
|
7
|
+
```bash
|
8
|
+
$ ./bin/fcoin
|
9
|
+
Commands:
|
10
|
+
fcoin account # Get Account Information
|
11
|
+
fcoin help [COMMAND] # Describe available commands or one specific command
|
12
|
+
fcoin locale # Locale Setting
|
13
|
+
fcoin market # Get Market Information
|
14
|
+
fcoin order # Operate Order
|
15
|
+
fcoin public # Get Public Information
|
16
|
+
fcoin subscribe # Subscribe topic
|
17
|
+
fcoin validation # Validation Setting
|
18
|
+
fcoin version # Print Version
|
19
|
+
|
20
|
+
```
|
21
|
+
|
22
|
+
## Validation
|
23
|
+
```bash
|
24
|
+
$ # Create validation setting file
|
25
|
+
$ ./bin/fcoin validation init --path ./config
|
26
|
+
create
|
27
|
+
create my_settings.yml
|
28
|
+
```
|
29
|
+
|
30
|
+
## Locale
|
31
|
+
```bash
|
32
|
+
$ # Create locale file
|
33
|
+
$ ./bin/fcoin locale init --path ./config
|
34
|
+
exist
|
35
|
+
create .DS_Store
|
36
|
+
create locales/en.yml
|
37
|
+
create locales/ja.yml
|
38
|
+
create locales/zh_CN.yml
|
39
|
+
```
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require './lib/fcoin.rb'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
Fcoin.configure do |config|
|
6
|
+
config.api_key = ENV['FCOIN_API_KEY']
|
7
|
+
config.secret_key = ENV['FCOIN_SECRET_KEY']
|
8
|
+
config.skip_validation = false
|
9
|
+
## Please execute 「bundle exec fcoin validation init --path ./config」
|
10
|
+
config.validation_setting_path = File.expand_path('../../config/my_settings.yml', __FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
client = Fcoin::RealTime::Client.new
|
14
|
+
# client = Fcoin::RealTime::Client.new(api_key: 'hoge', secret_key: 'fuga')
|
15
|
+
# or
|
16
|
+
# client = Fcoin::Client.new.realtime
|
17
|
+
|
18
|
+
|
19
|
+
client.on_ticker(symbol: :ethusdt) do |data|
|
20
|
+
puts data
|
21
|
+
end
|
22
|
+
|
23
|
+
client.on_depth(symbol: :ethusdt, level: :L20) do |data|
|
24
|
+
puts data
|
25
|
+
end
|
26
|
+
|
27
|
+
client.on_trade(symbol: :ethusdt, limit: 5) do |data|
|
28
|
+
puts data
|
29
|
+
end
|
30
|
+
|
31
|
+
client.on_candle(symbol: :ethusdt, resolution: :M1, limit: 5) do |data|
|
32
|
+
puts data
|
33
|
+
end
|
34
|
+
|
35
|
+
client.on_topics do |data|
|
36
|
+
puts data
|
37
|
+
end
|
38
|
+
|
39
|
+
client.on_hello do |data|
|
40
|
+
puts data
|
41
|
+
end
|
42
|
+
|
43
|
+
client.subscribe
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require './lib/fcoin.rb'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
Fcoin.configure do |config|
|
6
|
+
config.api_key = ENV['FCOIN_API_KEY']
|
7
|
+
config.secret_key = ENV['FCOIN_SECRET_KEY']
|
8
|
+
config.skip_validation = false
|
9
|
+
## Please execute 「bundle exec fcoin validation init --path ./config」
|
10
|
+
config.validation_setting_path = File.expand_path('../../config/my_settings.yml', __FILE__)
|
11
|
+
end
|
12
|
+
|
13
|
+
client = Fcoin::Client.new
|
14
|
+
# client = Fcoin::Client.new(api_key: 'hoge', secret_key: 'fuga')
|
15
|
+
|
16
|
+
## public
|
17
|
+
puts client.public_server_time
|
18
|
+
puts client.public_currencies
|
19
|
+
puts client.public_symbols
|
20
|
+
|
21
|
+
|
22
|
+
## market
|
23
|
+
puts client.market_ticker(symbol: :ethusdt)
|
24
|
+
puts client.market_depth(level: :L20 ,symbol: :ethusdt)
|
25
|
+
puts client.market_trades(symbol: :ethusdt)
|
26
|
+
puts client.market_candles(symbol: :ethusdt, resolution: :M1)
|
27
|
+
|
28
|
+
|
29
|
+
## accounts
|
30
|
+
puts client.accounts_balance
|
31
|
+
|
32
|
+
|
33
|
+
## orders
|
34
|
+
# client.create_order_limit(symbol: :ethusdt, side: :sell, type: :limit, price: 1000, amount: 0.001)
|
35
|
+
puts client.order_list(symbol: :ethusdt, states: :canceled, page_before: nil, page_after: nil, per_page: 20)
|
36
|
+
# puts client.order_list(symbol: :ethusdt, states: 'canceled', page_before: nil, page_after: nil, per_page: 20)
|
37
|
+
|
38
|
+
|
39
|
+
puts client.order(order_id: "L7rbALEIoI0ymo3uOXBF4gT4Bl********jvptIv2U=")
|
40
|
+
# alias method
|
41
|
+
# client.reference_order(order_id: "L7rbALEIoI0ymo3uOXBF4gT4Bl********jvptIv2U=")
|
42
|
+
|
43
|
+
puts client.cancel_order(order_id: "nMEC_VrW0LYlP4iCcWzmdL50jFrvNWZoaQxvZSjeUSA=")
|
44
|
+
|
45
|
+
puts client.order_match_results(order_id: "kW3cRiXIGHG-cHNdter*********qfoMzbeHEQcqp4=")
|
46
|
+
# alias method
|
47
|
+
# client.order_transaction(order_id: "kW3cRiXIGHG-cHNdter*********qfoMzbeHEQcqp4=")
|
@@ -0,0 +1,39 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "fcoin/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "fcoin_ruby_client"
|
7
|
+
spec.version = Fcoin::VERSION
|
8
|
+
spec.authors = ["yukihirop"]
|
9
|
+
spec.email = ["yfsidejob@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{A Ruby wrapper for Fcoin API}
|
12
|
+
spec.description = %q{A Ruby wrapper for Fcoin API}
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
|
+
f.match(%r{^(test|spec|features)/})
|
16
|
+
end
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.16.a"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
+
spec.add_development_dependency "pry"
|
25
|
+
spec.add_development_dependency "webmock"
|
26
|
+
spec.add_development_dependency "vcr"
|
27
|
+
spec.add_development_dependency "yard"
|
28
|
+
spec.add_development_dependency "rubocop"
|
29
|
+
spec.add_development_dependency "onkcop"
|
30
|
+
spec.add_development_dependency "simplecov"
|
31
|
+
spec.add_development_dependency "coveralls"
|
32
|
+
|
33
|
+
spec.add_runtime_dependency "faraday"
|
34
|
+
spec.add_runtime_dependency "faraday_middleware"
|
35
|
+
spec.add_runtime_dependency "activesupport"
|
36
|
+
spec.add_runtime_dependency "faye-websocket"
|
37
|
+
spec.add_runtime_dependency "config"
|
38
|
+
spec.add_runtime_dependency "thor"
|
39
|
+
end
|
data/lib/fcoin/api.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative 'connection'
|
2
|
+
require_relative 'request'
|
3
|
+
require_relative 'endpoint'
|
4
|
+
require_relative 'error'
|
5
|
+
require_relative 'realtime/api'
|
6
|
+
require 'active_support'
|
7
|
+
require 'active_support/core_ext'
|
8
|
+
|
9
|
+
module Fcoin
|
10
|
+
class API
|
11
|
+
include Connection
|
12
|
+
include Request
|
13
|
+
include Endpoint
|
14
|
+
|
15
|
+
# @param [Hash] options the options to setting Fcoin Setting. For example, Authorization, Validation and so on.
|
16
|
+
# @option options [String] :adapter(Faraday.default_adapter)
|
17
|
+
# @option options [String] :endpoint(https://api.fcoin.com/v2/) REST API endpoint
|
18
|
+
# @option options [String] :wss_endpoint(wss://api.fcoin.com/v2/ws) Websocket endpoint
|
19
|
+
# @option options [String] :user_agent
|
20
|
+
# @option options [String] :proxy(nil)
|
21
|
+
# @option options [String] :ca_path
|
22
|
+
# @option options [String] :ca_file
|
23
|
+
# @option options [Array<Faraday::Middleware>] :middlewares request faraday middlewares
|
24
|
+
# @option options [String] :api_key
|
25
|
+
# @option options [String] :secret_key
|
26
|
+
# @option options [Boolean] :skip_validation(true)
|
27
|
+
# @option options [String] :validation_setting_path configuration file path for validation
|
28
|
+
def initialize(options={})
|
29
|
+
self.merged_options = Fcoin.options.merge(options)
|
30
|
+
Configuration::VALID_OPTIONS_KEYS.each do |key|
|
31
|
+
send("#{key}=", merged_options[key])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Build realtime client
|
36
|
+
#
|
37
|
+
# @see RealTime::Client
|
38
|
+
# @return [Fcoin::RealTime::Client]
|
39
|
+
def realtime
|
40
|
+
RealTime::Client.new(merged_options)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
attr_accessor *Configuration::VALID_OPTIONS_KEYS, :merged_options
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'base64'
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_support/core_ext'
|
5
|
+
|
6
|
+
module Fcoin
|
7
|
+
class Authorization
|
8
|
+
# @param http_method [String]
|
9
|
+
# @param path [String]
|
10
|
+
# @param payload [Hash]
|
11
|
+
# @param endpoint [String]
|
12
|
+
# @api_key [String]
|
13
|
+
# @secret_key [String]
|
14
|
+
def initialize(http_method:, path:, payload:, endpoint:, api_key:, secret_key:)
|
15
|
+
self.http_method = http_method
|
16
|
+
self.path = path
|
17
|
+
self.payload = payload
|
18
|
+
self.endpoint = endpoint
|
19
|
+
self.api_key = api_key
|
20
|
+
self.secret_key = secret_key
|
21
|
+
end
|
22
|
+
|
23
|
+
# Header required for authentication
|
24
|
+
#
|
25
|
+
# @see https://developer.fcoin.com/zh.html#32c808cbe5
|
26
|
+
def original_headers
|
27
|
+
{
|
28
|
+
'FC-ACCESS-KEY' => api_key,
|
29
|
+
'FC-ACCESS-SIGNATURE' => encoded_signature,
|
30
|
+
'FC-ACCESS-TIMESTAMP' => timestamp
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_accessor :http_method, :path, :payload, :endpoint, :api_key, :secret_key
|
37
|
+
|
38
|
+
def encoded_signature
|
39
|
+
base64_signature = Base64.strict_encode64(signature)
|
40
|
+
Base64.strict_encode64(OpenSSL::HMAC.digest('sha1', secret_key.to_s, base64_signature))
|
41
|
+
end
|
42
|
+
|
43
|
+
# @example HTTP_METHOD + HTTP_REQUEST_URI + TIMESTAMP + POST_BODY
|
44
|
+
# POSThttps://api.fcoin.com/v2/orders1523069544359amount=100.0&price=100.0&side=buy&symbol=btcusdt&type=limit
|
45
|
+
#
|
46
|
+
# @see https://developer.fcoin.com/zh.html#api
|
47
|
+
def signature
|
48
|
+
if http_method == :get && query_string.present?
|
49
|
+
http_method.upcase.to_s + full_url.to_s + '?' +query_string.to_s + timestamp.to_s
|
50
|
+
else
|
51
|
+
http_method.upcase.to_s + full_url.to_s + timestamp.to_s + payload_string.to_s
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def full_url
|
56
|
+
endpoint.to_s + path.to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
# digits number: 13
|
60
|
+
#
|
61
|
+
# @note When accessing the API with the UNIX EPOCH timestamp, the time difference between the server and the server must be less than 30 seconds.
|
62
|
+
#
|
63
|
+
# @example
|
64
|
+
# 1531632081423
|
65
|
+
#
|
66
|
+
#
|
67
|
+
# @see https://developer.fcoin.com/zh.html#api
|
68
|
+
def timestamp
|
69
|
+
# digits number: 13
|
70
|
+
# e.x.) 1531632081423
|
71
|
+
@timestamp ||= Time.now.strftime('%s%L').to_i.to_s
|
72
|
+
end
|
73
|
+
|
74
|
+
# sort by alphabet ASC
|
75
|
+
#
|
76
|
+
# @see https://developer.fcoin.com/jp.html?javascript#
|
77
|
+
def query_string
|
78
|
+
query_string = Hash[ payload.sort ].to_query
|
79
|
+
query_string.blank? ? '' : query_string
|
80
|
+
end
|
81
|
+
alias :payload_string :query_string
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative '../../../fcoin'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
module Fcoin
|
5
|
+
module EndPoint
|
6
|
+
class AccountsTask < Thor
|
7
|
+
# Get account info.
|
8
|
+
#
|
9
|
+
# curl: GET https://api.fcoin.com/v2/accounts/balance
|
10
|
+
#
|
11
|
+
# @note This method can not be invoked without authentication.
|
12
|
+
#
|
13
|
+
# @example get account info
|
14
|
+
# export FCOIN_API_KEY='your_fcoin_api_key'
|
15
|
+
# export FCOIN_SECRET_KEY='your_fcoin_secret_key'
|
16
|
+
# ./bin/fcoin accounts balance
|
17
|
+
#
|
18
|
+
#
|
19
|
+
# @see https://developer.fcoin.com/zh.html#486f6037ed
|
20
|
+
# @return [JSON]
|
21
|
+
desc 'balance', 'Get account info'
|
22
|
+
def balance
|
23
|
+
STDOUT.puts client.accounts_balance
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def client
|
29
|
+
Fcoin::Client.new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require_relative '../../../fcoin'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
module Fcoin
|
5
|
+
module EndPoint
|
6
|
+
class MarketTask < Thor
|
7
|
+
# Returns ticker info of symbol.
|
8
|
+
#
|
9
|
+
# curl: GET https://api.fcoin.com/v2/market/ticker/$symbol
|
10
|
+
#
|
11
|
+
# @example get ethusdt ticker info
|
12
|
+
# ./bin/fcoin market ticker --symbol ethusdt
|
13
|
+
#
|
14
|
+
#
|
15
|
+
# @see https://developer.fcoin.com/zh.html#ticker
|
16
|
+
# @raise [ArgumentError] If the symbol does not have.
|
17
|
+
# @param symbol [String] Transaction pairs.
|
18
|
+
# @return [JSON] Returns ticker info.
|
19
|
+
desc 'ticker', 'Returns ticker info of symbol'
|
20
|
+
option :symbol, type: :string, required: true, desc: 'Transaction pairs'
|
21
|
+
def ticker
|
22
|
+
symbol = options[:symbol]
|
23
|
+
STDOUT.puts client.market_ticker(symbol: symbol)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns depth info of symbol specified by level.
|
27
|
+
#
|
28
|
+
# curl: GET https://api.fcoin.com/v2/market/depth/$level/$symbol
|
29
|
+
#
|
30
|
+
# @example get ethusdt depth info specified by L20 level.
|
31
|
+
# ./bin/fcoin market depth --symbol ethusdt --level L20
|
32
|
+
#
|
33
|
+
#
|
34
|
+
# @see https://developer.fcoin.com/zh.html#50f4407ea4
|
35
|
+
# @raise [ArgumentError] If the symbol or level does not have.
|
36
|
+
# @raise [InvalidValueError] If symbol or level is invalid.
|
37
|
+
# @param symbol [String] Transaction pairs.
|
38
|
+
# @param level [String] Level of depth chart. level must be included in [L20, L40, full].
|
39
|
+
# @return [JSON] Returns depth info.
|
40
|
+
desc 'depth', 'Returns depth info of symbol specified by level'
|
41
|
+
option :symbol, type: :string, required: true, desc: 'Transaction pairs'
|
42
|
+
option :level, type: :string, required: true, desc: 'Level of depth chart. level must be included in [L20, L40, full]'
|
43
|
+
def depth
|
44
|
+
symbol = options[:symbol]
|
45
|
+
level = options[:level]
|
46
|
+
STDOUT.puts client.market_depth(symbol: symbol, level: level)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns trades info of symbol.
|
50
|
+
#
|
51
|
+
# curl: GET https://api.fcoin.com/v2/market/trades/$symbol
|
52
|
+
#
|
53
|
+
# @example get ethusdt trades info.
|
54
|
+
# ./bin/fcoin market trades --symbol ethusdt
|
55
|
+
#
|
56
|
+
#
|
57
|
+
# @see https://developer.fcoin.com/zh.html#6477a1394e
|
58
|
+
# @raise [ArgumentError] If the symbol does not have.
|
59
|
+
# @param symbol [String] Transaction pairs.
|
60
|
+
# @return [JSON] Returns trades info.
|
61
|
+
desc 'trades', 'Returns trades info of symbol'
|
62
|
+
option :symbol, type: :string, required: true, desc: 'Transaction pairs'
|
63
|
+
def trades
|
64
|
+
symbol = options[:symbol]
|
65
|
+
STDOUT.puts client.market_trades(symbol: symbol)
|
66
|
+
end
|
67
|
+
|
68
|
+
# Returns candles info of symbol specified by resolution.
|
69
|
+
#
|
70
|
+
# curl: GET https://api.fcoin.com/v2/market/candles/$resolution/$symbol
|
71
|
+
#
|
72
|
+
# @example get monthly(MN) ethusdt candles info.
|
73
|
+
# ./bin/fcoin market candles --symbol ethusdt --resolution D1
|
74
|
+
#
|
75
|
+
#
|
76
|
+
# @see https://developer.fcoin.com/zh.html#candle
|
77
|
+
# @raise [ArgumentError] If the symbol or resolution does not have.
|
78
|
+
# @raise [InvalidValueError] If symbol or resolution is invalid.
|
79
|
+
# @param symbol [String or Symbol] Transaction pairs.
|
80
|
+
# @param resolution [String or Symbol] period of candles chart. resolution must be included in [M1, M3, M5, M15, M30, H1, H4, H6, D1, W1, MN].
|
81
|
+
# @return [JSON] Returns candles info.
|
82
|
+
desc 'candles', 'Returns candles info of symbol specified by resolution'
|
83
|
+
option :symbol, type: :string, required: true, desc: 'Transaction pairs'
|
84
|
+
option :resolution, type: :string, required: true, desc: 'period of candles chart. resolution must be included in [M1, M3, M5, M15, M30, H1, H4, H6, D1, W1, MN]'
|
85
|
+
def candles
|
86
|
+
symbol = options[:symbol]
|
87
|
+
resolution = options[:resolution]
|
88
|
+
STDOUT.puts client.market_candles(symbol: symbol, resolution: resolution)
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
|
93
|
+
def client
|
94
|
+
@client = Fcoin::Client.new
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|