From e4209231e32fbd9a96452e519fa8b29b83daf9ab Mon Sep 17 00:00:00 2001 From: joeuhren <46763106+joeuhren@users.noreply.github.com> Date: Mon, 23 Nov 2020 15:30:34 -0700 Subject: [PATCH] Add Fides-ex market --- lib/database.js | 6 +++ lib/locale.js | 1 + lib/markets/fides.js | 98 ++++++++++++++++++++++++++++++++++ locale/en.json | 1 + views/markets/fides.pug | 113 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 219 insertions(+) create mode 100644 lib/markets/fides.js create mode 100644 views/markets/fides.pug diff --git a/lib/database.js b/lib/database.js index bd6490c..3d85c97 100644 --- a/lib/database.js +++ b/lib/database.js @@ -11,6 +11,7 @@ var mongoose = require('mongoose') , settings = require('./settings') , fs = require('fs') , async = require('async') + , fides = require('./markets/fides') , poloniex = require('./markets/poloniex') , bittrex = require('./markets/bittrex') , bleutrade = require('./markets/bleutrade') @@ -190,6 +191,11 @@ function get_market_data(market, cb) { return cb(err, obj); }); break; + case 'fides': + fides.get_data(settings.markets.coin, settings.markets.exchange, function(err, obj){ + return cb(err, obj); + }); + break; case 'poloniex': poloniex.get_data(settings.markets.coin, settings.markets.exchange, function(err, obj){ return cb(err, obj); diff --git a/lib/locale.js b/lib/locale.js index abbd803..2484231 100644 --- a/lib/locale.js +++ b/lib/locale.js @@ -143,6 +143,7 @@ exports.heavy_changein = "Reward change in approximately", exports.heavy_key = "Key", exports.heavy_lastxvotes = "Last 20 votes", +exports.fides = "Fides-ex", exports.poloniex = "Poloniex", exports.bittrex = "Bittrex", exports.altmarkets = "AltMarkets", diff --git a/lib/markets/fides.js b/lib/markets/fides.js new file mode 100644 index 0000000..6fd7ffd --- /dev/null +++ b/lib/markets/fides.js @@ -0,0 +1,98 @@ +var request = require('request'); +var crypto = require('crypto'); +//var settings = require('./settings-market-example.json'); +var base_url = 'https://node1.fides-ex.com'; + +// +// Get Market From Fides-ex +// +function get_summary(coin, exchange, cb) { + var summary = {}; + var url=base_url + '/market/get-market-summary/' + exchange.toUpperCase() + "_" + coin.toUpperCase(); + + request({uri: url, json: true}, function (error, response, body) { + if (error) { + return cb(error, null); + } else if (body.error !== true) { + summary['ask'] = parseFloat(body['data']['LowestAsk']).toFixed(8); + summary['bid'] = parseFloat(body['data']['HeighestBid']).toFixed(8); + summary['volume'] = parseFloat(body['data']['QuoteVolume']).toFixed(8); + summary['volume_btc'] = parseFloat(body['data']['BaseVolume']).toFixed(8); + summary['high'] = parseFloat(body['data']['High_24hr']).toFixed(8); + summary['low'] = parseFloat(body['data']['Low_24hr']).toFixed(8); + summary['last'] = parseFloat(body['data']['Last']).toFixed(8); + summary['change'] = parseFloat(body['data']['PercentChange']); + return cb(null, summary); + } else { + return cb(error, null); + } + }); +} +// Get Trades +function get_trades(coin, exchange, cb) { + var req_url=base_url + '/market/get-trade-history/' + exchange.toUpperCase() + "_" + coin.toUpperCase(); + request({uri: req_url, json: true}, function (error, response, body) { + if (body.error) { + return cb(body.error, []); + } else { + return cb(null, body['data']); + } + }); +} + + + +function get_orders_side(coin, exchange, side, cb){ + var req_url = base_url + "/market/get-open-orders/" + exchange.toUpperCase() + "_" + coin.toUpperCase() +"/" + side.toUpperCase() + "/10"; + console.log("sending request to - " + req_url) + request({uri: req_url, json:true}, function (error, response, body){ + if(error) + return cb(error, null); + else if(body.error !== true){ + var orders = []; + if(body['data'].Orders.length > 0){ + for( var i = 0; i < body['data'].Orders.length; i++) { + var order = { + MarketType: body['data'].Orders[i].MarketType, + CurrencyType: body['data'].Orders[i].CurrencyType, + Type: body['data'].Type, + Pair: body['data'].Pair, + Rate: body['data'].Orders[i].Rate, + Volume: body['data'].Orders[i].Volume, + Total: body['data'].Orders[i].Rate * body['data'].Orders[i].Volume + } + orders.push(order); + } + return cb(null,orders); + } + } + }); +} + +//Get Orders +function get_orders(coin, exchange, cb) { + + var buyorders = get_orders_side(coin, exchange, "buy", function(err, buys){ + var sellorders = get_orders_side(coin, exchange, "sell", function(err, sells){ + return cb(null, buys, sells); + }) + }) +} + +module.exports = { + get_data: function(coin, exchange, cb) { + var error = null; + get_orders(coin, exchange, function(err, buys, sells) { + if (err) { error = err; } + get_trades(coin, exchange, function(err, trades) { + if (err) { error = err; } + get_summary(coin, exchange, function(err, stats) { + if (err) { error = err; } + //Note that chartdata is available for an API, but I can't get it to return anything + //return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); + return cb(error, {buys: buys, sells: sells, chartdata: [], trades: trades, stats: stats}); + }); + }); + }); + } +}; diff --git a/locale/en.json b/locale/en.json index 1f5459c..2ede3a8 100644 --- a/locale/en.json +++ b/locale/en.json @@ -133,6 +133,7 @@ "mkt_time_stamp": "Time Stamp", // Markets + "fides": "Fides-ex", "poloniex": "Poloniex", "bittrex": "Bittrex", "altmarkets": "AltMarkets", diff --git a/views/markets/fides.pug b/views/markets/fides.pug new file mode 100644 index 0000000..9ceb155 --- /dev/null +++ b/views/markets/fides.pug @@ -0,0 +1,113 @@ +extends menu + +block market_view + .row + .col-md-12 + .panel.panel-default + .panel-heading + strong #{settings.locale.fides} - #{marketdata.coin}/#{marketdata.exchange} - #{settings.locale.mkt_hours} + a(href='#') + span.fa.fa-line-chart.pull-right.view-chart-disabled.iquidus.market-toggle(data-toggle='tooltip', data-placement='bottom', title=settings.locale.mkt_no_chart) + table.table.table-bordered.summary-table + thead + tr + th #{settings.locale.mkt_high} + th #{settings.locale.mkt_low} + th #{settings.locale.mkt_volume} + th.hidden-xs #{settings.locale.mkt_top_bid} + th.hidden-xs #{settings.locale.mkt_top_ask} + th.hidden-xs #{settings.locale.mkt_last} + th #{settings.locale.mkt_change} + tbody + tr + td #{marketdata.data.summary.high} + td #{marketdata.data.summary.low} + td #{marketdata.data.summary.volume} + td.hidden-xs #{marketdata.data.summary.bid} + td.hidden-xs #{marketdata.data.summary.ask} + td.hidden-xs #{marketdata.data.summary.last} + - var fides_change = parseFloat(marketdata.data.summary.change).toFixed(4).replace(/(?:\.0+|(\.\d+?)0+)$/, "$1"); + if fides_change >= 0 + td.success +#{fides_change} % + else + td.danger #{fides_change} % + .row + .col-md-6.col-xs-12 + .panel.panel-default + .panel-heading + h3.panel-title #{settings.locale.mkt_buy_orders} + table.table.table-hover.history-table.table-bordered(cellspacing="0") + thead + tr + th #{settings.locale.mkt_price} (#{marketdata.exchange}) + th.hidden-xs #{settings.locale.mkt_total} (#{marketdata.coin}) + th #{settings.locale.mkt_amount} (#{marketdata.exchange}) + tbody + each buy in marketdata.data.buys + tr + td + =parseFloat(buy.Rate).toFixed(8) + td + =parseFloat(buy.Volume).toFixed(8) + td.hidden-xs + =parseFloat(buy.Total).toFixed(8) + + .col-md-6.col-xs-12 + .panel.panel-default + .panel-heading + h3.panel-title #{settings.locale.mkt_sell_orders} + table.table.table-hover.history-table.table-bordered(cellspacing="0") + thead + tr + th #{settings.locale.mkt_price} (#{marketdata.exchange }) + th.hidden-xs #{settings.locale.mkt_total} (#{marketdata.coin }) + th #{settings.locale.mkt_amount} (#{marketdata.exchange}) + tbody + each sell in marketdata.data.sells + tr + td + =parseFloat(sell.Rate).toFixed(8) + td + =parseFloat(sell.Volume).toFixed(8) + td.hidden-xs + =parseFloat(sell.Total).toFixed(8) + .row + .col-md-12 + .panel.panel-default + .panel-heading + h3.panel-title #{settings.locale.mkt_trade_history} + table.table.table-hover.history-table.table-bordered(cellspacing="0") + thead + tr + th.hidden-xs #{settings.locale.mkt_type} + th #{settings.locale.mkt_amount} (#{marketdata.coin}) + th #{settings.locale.mkt_price} (#{marketdata.exchange}) + th #{settings.locale.mkt_total} (#{marketdata.exchange}) + th.hidden-xs #{settings.locale.mkt_time_stamp} + tbody + each result in marketdata.data.history + if result.Type == 'SELL' + tr.danger + td.hidden-xs + =result.Type + td + =result.Volume.toFixed(8) + td + =result.Rate.toFixed(8) + td + =result.Total.toFixed(8) + td.hidden-xs + =result.Date + else + tr.success + td.hidden-xs + =result.Type + td + =result.Volume.toFixed(8) + td + =result.Rate.toFixed(8) + td + =result.Total.toFixed(8) + td.hidden-xs + =result.Date + .footer-padding