mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 22:14:26 +01:00
Add Bitbank provider
This commit is contained in:
@@ -2327,15 +2327,22 @@ donation:
|
|||||||
Assert.NotNull(exchangeRates);
|
Assert.NotNull(exchangeRates);
|
||||||
Assert.NotEmpty(exchangeRates);
|
Assert.NotEmpty(exchangeRates);
|
||||||
Assert.NotEmpty(exchangeRates.ByExchange[result.ExpectedName]);
|
Assert.NotEmpty(exchangeRates.ByExchange[result.ExpectedName]);
|
||||||
|
if (result.ExpectedName == "bitbank")
|
||||||
// This check if the currency pair is using right currency pair
|
{
|
||||||
Assert.Contains(exchangeRates.ByExchange[result.ExpectedName],
|
Assert.Contains(exchangeRates.ByExchange[result.ExpectedName],
|
||||||
|
e => e.CurrencyPair == new CurrencyPair("BTC", "JPY") && e.BidAsk.Bid > 100m); // 1BTC will always be more than 100JPY
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This check if the currency pair is using right currency pair
|
||||||
|
Assert.Contains(exchangeRates.ByExchange[result.ExpectedName],
|
||||||
e => (e.CurrencyPair == new CurrencyPair("BTC", "USD") ||
|
e => (e.CurrencyPair == new CurrencyPair("BTC", "USD") ||
|
||||||
e.CurrencyPair == new CurrencyPair("BTC", "EUR") ||
|
e.CurrencyPair == new CurrencyPair("BTC", "EUR") ||
|
||||||
e.CurrencyPair == new CurrencyPair("BTC", "USDT") ||
|
e.CurrencyPair == new CurrencyPair("BTC", "USDT") ||
|
||||||
e.CurrencyPair == new CurrencyPair("BTC", "CAD"))
|
e.CurrencyPair == new CurrencyPair("BTC", "CAD"))
|
||||||
&& e.BidAsk.Bid > 1.0m // 1BTC will always be more than 1USD
|
&& e.BidAsk.Bid > 1.0m // 1BTC will always be more than 1USD
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Kraken emit one request only after first GetRates
|
// Kraken emit one request only after first GetRates
|
||||||
factory.Providers["kraken"].GetRatesAsync(default).GetAwaiter().GetResult();
|
factory.Providers["kraken"].GetRatesAsync(default).GetAwaiter().GetResult();
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ namespace BTCPayServer.HostedServices
|
|||||||
var exchanges = new CoinAverageExchanges();
|
var exchanges = new CoinAverageExchanges();
|
||||||
foreach (var item in (await new CoinAverageRateProvider() { Authenticator = _coinAverageSettings }.GetExchangeTickersAsync())
|
foreach (var item in (await new CoinAverageRateProvider() { Authenticator = _coinAverageSettings }.GetExchangeTickersAsync())
|
||||||
.Exchanges
|
.Exchanges
|
||||||
.Select(c => new CoinAverageExchange(c.Name, c.DisplayName)))
|
.Select(c => new CoinAverageExchange(c.Name, c.DisplayName, $"https://apiv2.bitcoinaverage.com/exchanges/{c.Name}")))
|
||||||
{
|
{
|
||||||
exchanges.Add(item);
|
exchanges.Add(item);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,14 +21,16 @@ namespace BTCPayServer.Models.StoreViewModels
|
|||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Value { get; set; }
|
public string Value { get; set; }
|
||||||
|
public string Url { get; set; }
|
||||||
}
|
}
|
||||||
public void SetExchangeRates(CoinAverageExchange[] supportedList, string preferredExchange)
|
public void SetExchangeRates(CoinAverageExchange[] supportedList, string preferredExchange)
|
||||||
{
|
{
|
||||||
var defaultStore = preferredExchange ?? CoinAverageRateProvider.CoinAverageName;
|
var defaultStore = preferredExchange ?? CoinAverageRateProvider.CoinAverageName;
|
||||||
var choices = supportedList.Select(o => new Format() { Name = o.Display, Value = o.Name }).ToArray();
|
var choices = supportedList.Select(o => new Format() { Name = o.Display, Value = o.Name, Url = o.Url }).ToArray();
|
||||||
var chosen = choices.FirstOrDefault(f => f.Value == defaultStore) ?? choices.FirstOrDefault();
|
var chosen = choices.FirstOrDefault(f => f.Value == defaultStore) ?? choices.FirstOrDefault();
|
||||||
Exchanges = new SelectList(choices, nameof(chosen.Value), nameof(chosen.Name), chosen);
|
Exchanges = new SelectList(choices, nameof(chosen.Value), nameof(chosen.Name), chosen);
|
||||||
PreferredExchange = chosen.Value;
|
PreferredExchange = chosen.Value;
|
||||||
|
RateSource = chosen.Url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<TestResultViewModel> TestRateRules { get; set; }
|
public List<TestResultViewModel> TestRateRules { get; set; }
|
||||||
@@ -59,10 +61,8 @@ namespace BTCPayServer.Models.StoreViewModels
|
|||||||
|
|
||||||
public string RateSource
|
public string RateSource
|
||||||
{
|
{
|
||||||
get
|
get;
|
||||||
{
|
set;
|
||||||
return PreferredExchange == CoinAverageRateProvider.CoinAverageName ? "https://apiv2.bitcoinaverage.com/indices/global/ticker/short" : $"https://apiv2.bitcoinaverage.com/exchanges/{PreferredExchange}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
32
BTCPayServer/Services/Rates/BitbankRateProvider.cs
Normal file
32
BTCPayServer/Services/Rates/BitbankRateProvider.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using BTCPayServer.Rating;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace BTCPayServer.Services.Rates
|
||||||
|
{
|
||||||
|
public class BitbankRateProvider : IRateProvider, IHasExchangeName
|
||||||
|
{
|
||||||
|
private readonly HttpClient _httpClient;
|
||||||
|
public BitbankRateProvider(HttpClient httpClient)
|
||||||
|
{
|
||||||
|
_httpClient = httpClient ?? new HttpClient();
|
||||||
|
}
|
||||||
|
public string ExchangeName => "bitbank";
|
||||||
|
|
||||||
|
public async Task<ExchangeRates> GetRatesAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var response = await _httpClient.GetAsync("https://public.bitbank.cc/prices", cancellationToken);
|
||||||
|
var jobj = await response.Content.ReadAsAsync<JObject>(cancellationToken);
|
||||||
|
return new ExchangeRates(((jobj["data"] as JObject) ?? new JObject())
|
||||||
|
.Properties()
|
||||||
|
.Select(p => new ExchangeRate(ExchangeName, CurrencyPair.Parse(p.Name), new BidAsk(p.Value["buy"].Value<decimal>(), p.Value["sell"].Value<decimal>())))
|
||||||
|
.ToArray());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,20 +23,18 @@ namespace BTCPayServer.Services.Rates
|
|||||||
|
|
||||||
public class CoinAverageExchange
|
public class CoinAverageExchange
|
||||||
{
|
{
|
||||||
public CoinAverageExchange(string name, string display)
|
public CoinAverageExchange(string name, string display, string url)
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
Display = display;
|
Display = display;
|
||||||
|
Url = url;
|
||||||
}
|
}
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Display { get; set; }
|
public string Display { get; set; }
|
||||||
public string Url
|
public string Url
|
||||||
{
|
{
|
||||||
get
|
get;
|
||||||
{
|
set;
|
||||||
return Name == CoinAverageRateProvider.CoinAverageName ? $"https://apiv2.bitcoinaverage.com/indices/global/ticker/short"
|
|
||||||
: $"https://apiv2.bitcoinaverage.com/exchanges/{Name}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class CoinAverageExchanges : Dictionary<string, CoinAverageExchange>
|
public class CoinAverageExchanges : Dictionary<string, CoinAverageExchange>
|
||||||
@@ -47,7 +45,11 @@ namespace BTCPayServer.Services.Rates
|
|||||||
|
|
||||||
public void Add(CoinAverageExchange exchange)
|
public void Add(CoinAverageExchange exchange)
|
||||||
{
|
{
|
||||||
TryAdd(exchange.Name, exchange);
|
if (!TryAdd(exchange.Name, exchange))
|
||||||
|
{
|
||||||
|
this.Remove(exchange.Name);
|
||||||
|
this.Add(exchange.Name, exchange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class CoinAverageSettings : ICoinAverageAuthenticator
|
public class CoinAverageSettings : ICoinAverageAuthenticator
|
||||||
@@ -84,7 +86,6 @@ namespace BTCPayServer.Services.Rates
|
|||||||
(DisplayName: "Coincheck", Name: "coincheck"),
|
(DisplayName: "Coincheck", Name: "coincheck"),
|
||||||
(DisplayName: "Bittylicious", Name: "bittylicious"),
|
(DisplayName: "Bittylicious", Name: "bittylicious"),
|
||||||
(DisplayName: "Gemini", Name: "gemini"),
|
(DisplayName: "Gemini", Name: "gemini"),
|
||||||
(DisplayName: "QuadrigaCX", Name: "quadrigacx"),
|
|
||||||
(DisplayName: "Bit2C", Name: "bit2c"),
|
(DisplayName: "Bit2C", Name: "bit2c"),
|
||||||
(DisplayName: "Luno", Name: "luno"),
|
(DisplayName: "Luno", Name: "luno"),
|
||||||
(DisplayName: "Negocie Coins", Name: "negociecoins"),
|
(DisplayName: "Negocie Coins", Name: "negociecoins"),
|
||||||
@@ -122,7 +123,7 @@ namespace BTCPayServer.Services.Rates
|
|||||||
(DisplayName: "Bitso", Name: "bitso"),
|
(DisplayName: "Bitso", Name: "bitso"),
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
AvailableExchanges.TryAdd(item.Name, new CoinAverageExchange(item.Name, item.DisplayName));
|
AvailableExchanges.TryAdd(item.Name, new CoinAverageExchange(item.Name, item.DisplayName, $"https://apiv2.bitcoinaverage.com/exchanges/{item.Name}"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ namespace BTCPayServer.Services.Rates
|
|||||||
Providers.Add(CoinAverageRateProvider.CoinAverageName, new CoinAverageRateProvider() { Exchange = CoinAverageRateProvider.CoinAverageName, HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_COINAVERAGE"), Authenticator = _CoinAverageSettings });
|
Providers.Add(CoinAverageRateProvider.CoinAverageName, new CoinAverageRateProvider() { Exchange = CoinAverageRateProvider.CoinAverageName, HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_COINAVERAGE"), Authenticator = _CoinAverageSettings });
|
||||||
Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_KRAKEN") });
|
Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_KRAKEN") });
|
||||||
Providers.Add("bylls", new ByllsRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BYLLS")));
|
Providers.Add("bylls", new ByllsRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BYLLS")));
|
||||||
|
Providers.Add("bitbank", new BitbankRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITBANK")));
|
||||||
|
|
||||||
// Those exchanges make multiple requests when calling GetTickers so we remove them
|
// Those exchanges make multiple requests when calling GetTickers so we remove them
|
||||||
//DirectProviders.Add("gdax", new ExchangeSharpRateProvider("gdax", new ExchangeGdaxAPI()));
|
//DirectProviders.Add("gdax", new ExchangeSharpRateProvider("gdax", new ExchangeGdaxAPI()));
|
||||||
@@ -168,9 +169,9 @@ namespace BTCPayServer.Services.Rates
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add other exchanges supported here
|
// Add other exchanges supported here
|
||||||
exchanges.Add(new CoinAverageExchange(CoinAverageRateProvider.CoinAverageName, "Coin Average"));
|
exchanges.Add(new CoinAverageExchange(CoinAverageRateProvider.CoinAverageName, "Coin Average", $"https://apiv2.bitcoinaverage.com/indices/global/ticker/short"));
|
||||||
exchanges.Add(new CoinAverageExchange("bylls", "Bylls"));
|
exchanges.Add(new CoinAverageExchange("bylls", "Bylls", "https://bylls.com/api/price?from_currency=BTC&to_currency=CAD"));
|
||||||
exchanges.Add(new CoinAverageExchange("cryptopia", "Cryptopia"));
|
exchanges.Add(new CoinAverageExchange("bitbank", "Bitbank", "https://public.bitbank.cc/prices"));
|
||||||
|
|
||||||
return exchanges;
|
return exchanges;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user