From e3def45c831b03d9fb1aa94d522ae99a3a657891 Mon Sep 17 00:00:00 2001 From: Jonathan Underwood Date: Thu, 25 Nov 2021 17:34:49 +0900 Subject: [PATCH] Update Bitbank API (#3157) Co-authored-by: Kukks --- .../Providers/BitbankRateProvider.cs | 21 ++++++++++++------- .../Services/RateProviderFactory.cs | 2 +- BTCPayServer.Tests/ThirdPartyTests.cs | 5 ----- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/BTCPayServer.Rating/Providers/BitbankRateProvider.cs b/BTCPayServer.Rating/Providers/BitbankRateProvider.cs index 1aa573a3e..560337bfb 100644 --- a/BTCPayServer.Rating/Providers/BitbankRateProvider.cs +++ b/BTCPayServer.Rating/Providers/BitbankRateProvider.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using System.Net.Http; using System.Threading; @@ -17,18 +18,24 @@ namespace BTCPayServer.Services.Rates public async Task GetRatesAsync(CancellationToken cancellationToken) { - var response = await _httpClient.GetAsync("https://public.bitbank.cc/prices", cancellationToken); + var response = await _httpClient.GetAsync("https://public.bitbank.cc/tickers", cancellationToken); var jobj = await response.Content.ReadAsAsync(cancellationToken); - return ((jobj["data"] as JObject) ?? new JObject()) - .Properties() - .Select(p => new PairRate(CurrencyPair.Parse(p.Name), CreateBidAsk(p))) + var data = jobj.ContainsKey("data") ? jobj["data"] : null; + if (jobj["success"]?.Value() != 1) + { + var errorCode = data is null? "Unknown": data["code"].Value(); + throw new Exception( + $"BitBank Rates API Error: {errorCode}. See https://github.com/bitbankinc/bitbank-api-docs/blob/master/errors.md for more details."); + } + return ((data as JArray) ?? new JArray()) + .Select(item => new PairRate(CurrencyPair.Parse(item["pair"].ToString()), CreateBidAsk(item as JObject))) .ToArray(); } - private static BidAsk CreateBidAsk(JProperty p) + private static BidAsk CreateBidAsk(JObject o) { - var buy = p.Value["buy"].Value(); - var sell = p.Value["sell"].Value(); + var buy = o["buy"].Value(); + var sell = o["sell"].Value(); // Bug from their API (https://github.com/btcpayserver/btcpayserver/issues/741) return buy < sell ? new BidAsk(buy, sell) : new BidAsk(sell, buy); } diff --git a/BTCPayServer.Rating/Services/RateProviderFactory.cs b/BTCPayServer.Rating/Services/RateProviderFactory.cs index 4ea7124da..b1e465b30 100644 --- a/BTCPayServer.Rating/Services/RateProviderFactory.cs +++ b/BTCPayServer.Rating/Services/RateProviderFactory.cs @@ -72,7 +72,7 @@ namespace BTCPayServer.Services.Rates yield return new AvailableRateProvider("coingecko", "CoinGecko", "https://api.coingecko.com/api/v3/exchange_rates"); yield return new AvailableRateProvider("kraken", "Kraken", "https://api.kraken.com/0/public/Ticker?pair=ATOMETH,ATOMEUR,ATOMUSD,ATOMXBT,BATETH,BATEUR,BATUSD,BATXBT,BCHEUR,BCHUSD,BCHXBT,DAIEUR,DAIUSD,DAIUSDT,DASHEUR,DASHUSD,DASHXBT,EOSETH,EOSXBT,ETHCHF,ETHDAI,ETHUSDC,ETHUSDT,GNOETH,GNOXBT,ICXETH,ICXEUR,ICXUSD,ICXXBT,LINKETH,LINKEUR,LINKUSD,LINKXBT,LSKETH,LSKEUR,LSKUSD,LSKXBT,NANOETH,NANOEUR,NANOUSD,NANOXBT,OMGETH,OMGEUR,OMGUSD,OMGXBT,PAXGETH,PAXGEUR,PAXGUSD,PAXGXBT,SCETH,SCEUR,SCUSD,SCXBT,USDCEUR,USDCUSD,USDCUSDT,USDTCAD,USDTEUR,USDTGBP,USDTZUSD,WAVESETH,WAVESEUR,WAVESUSD,WAVESXBT,XBTCHF,XBTDAI,XBTUSDC,XBTUSDT,XDGEUR,XDGUSD,XETCXETH,XETCXXBT,XETCZEUR,XETCZUSD,XETHXXBT,XETHZCAD,XETHZEUR,XETHZGBP,XETHZJPY,XETHZUSD,XLTCXXBT,XLTCZEUR,XLTCZUSD,XMLNXETH,XMLNXXBT,XMLNZEUR,XMLNZUSD,XREPXETH,XREPXXBT,XREPZEUR,XXBTZCAD,XXBTZEUR,XXBTZGBP,XXBTZJPY,XXBTZUSD,XXDGXXBT,XXLMXXBT,XXMRXXBT,XXMRZEUR,XXMRZUSD,XXRPXXBT,XXRPZEUR,XXRPZUSD,XZECXXBT,XZECZEUR,XZECZUSD"); yield return new AvailableRateProvider("bylls", "Bylls", "https://bylls.com/api/price?from_currency=BTC&to_currency=CAD"); - yield return new AvailableRateProvider("bitbank", "Bitbank", "https://public.bitbank.cc/prices"); + yield return new AvailableRateProvider("bitbank", "Bitbank", "https://public.bitbank.cc/tickers"); yield return new AvailableRateProvider("bitflyer", "Bitflyer", "https://api.bitflyer.com/v1/ticker"); yield return new AvailableRateProvider("bitpay", "Bitpay", "https://bitpay.com/rates"); yield return new AvailableRateProvider("ripio", "Ripio", "https://api.exchange.ripio.com/api/v1/rate/all/"); diff --git a/BTCPayServer.Tests/ThirdPartyTests.cs b/BTCPayServer.Tests/ThirdPartyTests.cs index 62ab3a5d9..96b9ae289 100644 --- a/BTCPayServer.Tests/ThirdPartyTests.cs +++ b/BTCPayServer.Tests/ThirdPartyTests.cs @@ -89,11 +89,6 @@ namespace BTCPayServer.Tests .ToList()) { TestLogs.LogInformation($"Testing {result.ExpectedName}"); - if (result.ExpectedName == "ndax") - { - TestLogs.LogInformation($"Skipping (currently crashing)"); - continue; - } result.Fetcher.InvalidateCache(); var exchangeRates = new ExchangeRates(result.ExpectedName, result.ResultAsync.Result);