diff --git a/BTCPayServer.Rating/BTCPayServer.Rating.csproj b/BTCPayServer.Rating/BTCPayServer.Rating.csproj index a2f63847a..5ccd765da 100644 --- a/BTCPayServer.Rating/BTCPayServer.Rating.csproj +++ b/BTCPayServer.Rating/BTCPayServer.Rating.csproj @@ -8,7 +8,7 @@ - + diff --git a/BTCPayServer.Rating/Providers/ArgoneumRateProvider.cs b/BTCPayServer.Rating/Providers/ArgoneumRateProvider.cs deleted file mode 100644 index 7bcc1d3dd..000000000 --- a/BTCPayServer.Rating/Providers/ArgoneumRateProvider.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using BTCPayServer.Rating; -using Newtonsoft.Json.Linq; - -namespace BTCPayServer.Services.Rates -{ - public class ArgoneumRateProvider : IRateProvider - { - private readonly HttpClient _httpClient; - public ArgoneumRateProvider(HttpClient httpClient) - { - _httpClient = httpClient ?? new HttpClient(); - } - - public RateSourceInfo RateSourceInfo => new("argoneum", "Argoneum", "https://rates.argoneum.net/rates"); - - public async Task GetRatesAsync(CancellationToken cancellationToken) - { - // Example result: AGM to BTC rate: {"agm":5000000.000000} - var response = await _httpClient.GetAsync("https://rates.argoneum.net/rates/btc", cancellationToken); - var jobj = await response.Content.ReadAsAsync(cancellationToken); - var value = jobj["agm"].Value(); - return new[] { new PairRate(new CurrencyPair("BTC", "AGM"), new BidAsk(value)) }; - } - } -} diff --git a/BTCPayServer.Rating/Providers/ExchangeRateHostRateProvider.cs b/BTCPayServer.Rating/Providers/ExchangeRateHostRateProvider.cs deleted file mode 100644 index 59add1df7..000000000 --- a/BTCPayServer.Rating/Providers/ExchangeRateHostRateProvider.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; -using BTCPayServer.Rating; -using Newtonsoft.Json.Linq; - -namespace BTCPayServer.Services.Rates; - - -public class ExchangeRateHostRateProvider : IRateProvider -{ - public RateSourceInfo RateSourceInfo => new("exchangeratehost", "Exchangerate.host", "https://api.exchangerate.host/latest?base=BTC"); - private readonly HttpClient _httpClient; - public ExchangeRateHostRateProvider(HttpClient httpClient) - { - _httpClient = httpClient ?? new HttpClient(); - } - - public async Task GetRatesAsync(CancellationToken cancellationToken) - { - var response = await _httpClient.GetAsync(RateSourceInfo.Url, cancellationToken); - response.EnsureSuccessStatusCode(); - var jobj = await response.Content.ReadAsAsync(cancellationToken); - if(jobj["success"].Value() is not true || !jobj["base"].Value().Equals("BTC", StringComparison.InvariantCulture)) - throw new Exception("exchangerate.host returned a non success response or the base currency was not the requested one (BTC)"); - var results = (JObject) jobj["rates"] ; - //key value is currency code to rate value - var list = new List(); - foreach (var item in results) - { - string name = item.Key; - var value = item.Value.Value(); - list.Add(new PairRate(new CurrencyPair("BTC", name), new BidAsk(value))); - } - - return list.ToArray(); - } -} diff --git a/BTCPayServer.Rating/Providers/RipioExchangeProvider.cs b/BTCPayServer.Rating/Providers/RipioExchangeProvider.cs index 78a8e6e3b..049c63b04 100644 --- a/BTCPayServer.Rating/Providers/RipioExchangeProvider.cs +++ b/BTCPayServer.Rating/Providers/RipioExchangeProvider.cs @@ -13,7 +13,7 @@ namespace BTCPayServer.Services.Rates { public class RipioExchangeProvider : IRateProvider { - public RateSourceInfo RateSourceInfo => new("ripio", "Ripio", "https://api.exchange.ripio.com/api/v1/rate/all/"); + public RateSourceInfo RateSourceInfo => new("ripio", "Ripio", "https://api.ripiotrade.co/v4/public/tickers"); private readonly HttpClient _httpClient; public RipioExchangeProvider(HttpClient httpClient) { @@ -21,9 +21,9 @@ namespace BTCPayServer.Services.Rates } public async Task GetRatesAsync(CancellationToken cancellationToken) { - var response = await _httpClient.GetAsync("https://api.exchange.ripio.com/api/v1/rate/all/", cancellationToken); + var response = await _httpClient.GetAsync("https://api.ripiotrade.co/v4/public/tickers", cancellationToken); response.EnsureSuccessStatusCode(); - var jarray = (JArray)(await response.Content.ReadAsAsync(cancellationToken)); + var jarray = (JArray)(await response.Content.ReadAsAsync(cancellationToken))["data"]; return jarray .Children() .Select(jobj => ParsePair(jobj)) diff --git a/BTCPayServer/Data/StoreBlob.cs b/BTCPayServer/Data/StoreBlob.cs index e22d22e9b..9da287e02 100644 --- a/BTCPayServer/Data/StoreBlob.cs +++ b/BTCPayServer/Data/StoreBlob.cs @@ -197,11 +197,11 @@ namespace BTCPayServer.Data { "GBP", "kraken" }, { "CHF", "kraken" }, { "GTQ", "bitpay" }, - { "COP", "exchangeratehost" }, + { "COP", "yadio" }, { "ARS", "yadio" }, { "JPY", "bitbank" }, { "TRY", "btcturk" }, - { "UGX", "exchangeratehost"}, + { "UGX", "yadio"}, { "RSD", "bitpay"} }; diff --git a/BTCPayServer/Hosting/BTCPayServerServices.cs b/BTCPayServer/Hosting/BTCPayServerServices.cs index 7bc00c13e..6271271fb 100644 --- a/BTCPayServer/Hosting/BTCPayServerServices.cs +++ b/BTCPayServer/Hosting/BTCPayServerServices.cs @@ -505,7 +505,7 @@ namespace BTCPayServer.Hosting // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request services.AddRateProviderExchangeSharp(new("binance", "Binance", "https://api.binance.com/api/v1/ticker/24hr")); services.AddRateProviderExchangeSharp(new("bittrex", "Bittrex", "https://bittrex.com/api/v1.1/public/getmarketsummaries")); - services.AddRateProviderExchangeSharp(new("poloniex", "Poloniex", "https://poloniex.com/public?command=returnTicker")); + services.AddRateProviderExchangeSharp(new("poloniex", "Poloniex", " https://api.poloniex.com/markets/price")); services.AddRateProviderExchangeSharp(new("ndax", "NDAX", "https://ndax.io/api/returnTicker")); services.AddRateProviderExchangeSharp(new("bitfinex", "Bitfinex", "https://api.bitfinex.com/v2/tickers?symbols=tBTCUSD,tLTCUSD,tLTCBTC,tETHUSD,tETHBTC,tETCBTC,tETCUSD,tRRTUSD,tRRTBTC,tZECUSD,tZECBTC,tXMRUSD,tXMRBTC,tDSHUSD,tDSHBTC,tBTCEUR,tBTCJPY,tXRPUSD,tXRPBTC,tIOTUSD,tIOTBTC,tIOTETH,tEOSUSD,tEOSBTC,tEOSETH,tSANUSD,tSANBTC,tSANETH,tOMGUSD,tOMGBTC,tOMGETH,tNEOUSD,tNEOBTC,tNEOETH,tETPUSD,tETPBTC,tETPETH,tQTMUSD,tQTMBTC,tQTMETH,tAVTUSD,tAVTBTC,tAVTETH,tEDOUSD,tEDOBTC,tEDOETH,tBTGUSD,tBTGBTC,tDATUSD,tDATBTC,tDATETH,tQSHUSD,tQSHBTC,tQSHETH,tYYWUSD,tYYWBTC,tYYWETH,tGNTUSD,tGNTBTC,tGNTETH,tSNTUSD,tSNTBTC,tSNTETH,tIOTEUR,tBATUSD,tBATBTC,tBATETH,tMNAUSD,tMNABTC,tMNAETH,tFUNUSD,tFUNBTC,tFUNETH,tZRXUSD,tZRXBTC,tZRXETH,tTNBUSD,tTNBBTC,tTNBETH,tSPKUSD,tSPKBTC,tSPKETH,tTRXUSD,tTRXBTC,tTRXETH,tRCNUSD,tRCNBTC,tRCNETH,tRLCUSD,tRLCBTC,tRLCETH,tAIDUSD,tAIDBTC,tAIDETH,tSNGUSD,tSNGBTC,tSNGETH,tREPUSD,tREPBTC,tREPETH,tELFUSD,tELFBTC,tELFETH,tNECUSD,tNECBTC,tNECETH,tBTCGBP,tETHEUR,tETHJPY,tETHGBP,tNEOEUR,tNEOJPY,tNEOGBP,tEOSEUR,tEOSJPY,tEOSGBP,tIOTJPY,tIOTGBP,tIOSUSD,tIOSBTC,tIOSETH,tAIOUSD,tAIOBTC,tAIOETH,tREQUSD,tREQBTC,tREQETH,tRDNUSD,tRDNBTC,tRDNETH,tLRCUSD,tLRCBTC,tLRCETH,tWAXUSD,tWAXBTC,tWAXETH,tDAIUSD,tDAIBTC,tDAIETH,tAGIUSD,tAGIBTC,tAGIETH,tBFTUSD,tBFTBTC,tBFTETH,tMTNUSD,tMTNBTC,tMTNETH,tODEUSD,tODEBTC,tODEETH,tANTUSD,tANTBTC,tANTETH,tDTHUSD,tDTHBTC,tDTHETH,tMITUSD,tMITBTC,tMITETH,tSTJUSD,tSTJBTC,tSTJETH,tXLMUSD,tXLMEUR,tXLMJPY,tXLMGBP,tXLMBTC,tXLMETH,tXVGUSD,tXVGEUR,tXVGJPY,tXVGGBP,tXVGBTC,tXVGETH,tBCIUSD,tBCIBTC,tMKRUSD,tMKRBTC,tMKRETH,tKNCUSD,tKNCBTC,tKNCETH,tPOAUSD,tPOABTC,tPOAETH,tEVTUSD,tLYMUSD,tLYMBTC,tLYMETH,tUTKUSD,tUTKBTC,tUTKETH,tVEEUSD,tVEEBTC,tVEEETH,tDADUSD,tDADBTC,tDADETH,tORSUSD,tORSBTC,tORSETH,tAUCUSD,tAUCBTC,tAUCETH,tPOYUSD,tPOYBTC,tPOYETH,tFSNUSD,tFSNBTC,tFSNETH,tCBTUSD,tCBTBTC,tCBTETH,tZCNUSD,tZCNBTC,tZCNETH,tSENUSD,tSENBTC,tSENETH,tNCAUSD,tNCABTC,tNCAETH,tCNDUSD,tCNDBTC,tCNDETH,tCTXUSD,tCTXBTC,tCTXETH,tPAIUSD,tPAIBTC,tSEEUSD,tSEEBTC,tSEEETH,tESSUSD,tESSBTC,tESSETH,tATMUSD,tATMBTC,tATMETH,tHOTUSD,tHOTBTC,tHOTETH,tDTAUSD,tDTABTC,tDTAETH,tIQXUSD,tIQXBTC,tIQXEOS,tWPRUSD,tWPRBTC,tWPRETH,tZILUSD,tZILBTC,tZILETH,tBNTUSD,tBNTBTC,tBNTETH,tABSUSD,tABSETH,tXRAUSD,tXRAETH,tMANUSD,tMANETH,tBBNUSD,tBBNETH,tNIOUSD,tNIOETH,tDGXUSD,tDGXETH,tVETUSD,tVETBTC,tVETETH,tUTNUSD,tUTNETH,tTKNUSD,tTKNETH,tGOTUSD,tGOTEUR,tGOTETH,tXTZUSD,tXTZBTC,tCNNUSD,tCNNETH,tBOXUSD,tBOXETH,tTRXEUR,tTRXGBP,tTRXJPY,tMGOUSD,tMGOETH,tRTEUSD,tRTEETH,tYGGUSD,tYGGETH,tMLNUSD,tMLNETH,tWTCUSD,tWTCETH,tCSXUSD,tCSXETH,tOMNUSD,tOMNBTC,tINTUSD,tINTETH,tDRNUSD,tDRNETH,tPNKUSD,tPNKETH,tDGBUSD,tDGBBTC,tBSVUSD,tBSVBTC,tBABUSD,tBABBTC,tWLOUSD,tWLOXLM,tVLDUSD,tVLDETH,tENJUSD,tENJETH,tONLUSD,tONLETH,tRBTUSD,tRBTBTC,tUSTUSD,tEUTEUR,tEUTUSD,tGSDUSD,tUDCUSD,tTSDUSD,tPAXUSD,tRIFUSD,tRIFBTC,tPASUSD,tPASETH,tVSYUSD,tVSYBTC,tZRXDAI,tMKRDAI,tOMGDAI,tBTTUSD,tBTTBTC,tBTCUST,tETHUST,tCLOUSD,tCLOBTC,tIMPUSD,tIMPETH,tLTCUST,tEOSUST,tBABUST,tSCRUSD,tSCRETH,tGNOUSD,tGNOETH,tGENUSD,tGENETH,tATOUSD,tATOBTC,tATOETH,tWBTUSD,tXCHUSD,tEUSUSD,tWBTETH,tXCHETH,tEUSETH,tLEOUSD,tLEOBTC,tLEOUST,tLEOEOS,tLEOETH,tASTUSD,tASTETH,tFOAUSD,tFOAETH,tUFRUSD,tUFRETH,tZBTUSD,tZBTUST,tOKBUSD,tUSKUSD,tGTXUSD,tKANUSD,tOKBUST,tOKBETH,tOKBBTC,tUSKUST,tUSKETH,tUSKBTC,tUSKEOS,tGTXUST,tKANUST,tAMPUSD,tALGUSD,tALGBTC,tALGUST,tBTCXCH,tSWMUSD,tSWMETH,tTRIUSD,tTRIETH,tLOOUSD,tLOOETH,tAMPUST,tDUSK:USD,tDUSK:BTC,tUOSUSD,tUOSBTC,tRRBUSD,tRRBUST,tDTXUSD,tDTXUST,tAMPBTC,tFTTUSD,tFTTUST,tPAXUST,tUDCUST,tTSDUST,tBTC:CNHT,tUST:CNHT,tCNH:CNHT,tCHZUSD,tCHZUST,tBTCF0:USTF0,tETHF0:USTF0")); @@ -527,7 +527,6 @@ namespace BTCPayServer.Hosting services.AddRateProvider(); services.AddRateProvider(); services.AddRateProvider(); - services.AddRateProvider(); // Broken // Providers.Add("argoneum", new ArgoneumRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_ARGONEUM")));