From e751be21ea8452aa10042fdcd85fa3d6f998371b Mon Sep 17 00:00:00 2001 From: Peter Williams Date: Mon, 22 Jun 2020 15:41:20 +1000 Subject: [PATCH] Altcoin - Add Chaincoin (#1636) * Altcoin - Add Chaincoin * Image * Altcoin - Rating CHC * Altcoin - Chaincoin insertion * Revert * Fix large diff * Unit Test revert --- .../BTCPayNetworkProvider.Chaincoin.cs | 33 ++++++++++++++++++ .../Altcoins/BTCPayNetworkProvider.cs | 1 + BTCPayServer.Rating/Currencies.json | 7 ++++ BTCPayServer/wwwroot/imlegacy/chaincoin.png | Bin 0 -> 14846 bytes 4 files changed, 41 insertions(+) create mode 100644 BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.Chaincoin.cs create mode 100644 BTCPayServer/wwwroot/imlegacy/chaincoin.png diff --git a/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.Chaincoin.cs b/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.Chaincoin.cs new file mode 100644 index 000000000..925a46419 --- /dev/null +++ b/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.Chaincoin.cs @@ -0,0 +1,33 @@ +using NBitcoin; + +namespace BTCPayServer +{ + public partial class BTCPayNetworkProvider + { + public void InitChaincoin() + { + var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("CHC"); + Add(new BTCPayNetwork() + { + CryptoCode = nbxplorerNetwork.CryptoCode, + DisplayName = "Chaincoin", + BlockExplorerLink = NetworkType == NetworkType.Mainnet + ? "https://explorer.chaincoin.org/Explorer/Transaction/{0}" + : "https://test.explorer.chaincoin.org/Explorer/Transaction/tx/{0}", + NBXplorerNetwork = nbxplorerNetwork, + UriScheme = "chaincoin", + DefaultRateRules = new[] + { + "CHC_X = CHC_BTC * BTC_X", + "CHC_BTC = txbit(CHC_X)" + }, + CryptoImagePath = "imlegacy/chaincoin.png", + DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType), + //https://github.com/satoshilabs/slips/blob/master/slip-0044.md + CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("711'") + : new KeyPath("1'") + }); + } + } +} + diff --git a/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.cs b/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.cs index db93a2a64..be3f1c407 100644 --- a/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.cs +++ b/BTCPayServer.Common/Altcoins/BTCPayNetworkProvider.cs @@ -60,6 +60,7 @@ namespace BTCPayServer InitViacoin(); InitMonero(); InitPolis(); + InitChaincoin(); // Assume that electrum mappings are same as BTC if not specified foreach (var network in _Networks.Values.OfType()) diff --git a/BTCPayServer.Rating/Currencies.json b/BTCPayServer.Rating/Currencies.json index 6fb8ff8b8..aff33597f 100644 --- a/BTCPayServer.Rating/Currencies.json +++ b/BTCPayServer.Rating/Currencies.json @@ -1266,6 +1266,13 @@ "symbol":null, "crypto":true }, + { + "name":"CHC", + "code":"CHC", + "divisibility":8, + "symbol":null, + "crypto":true + }, { "name":"Satoshis", "code":"SATS", diff --git a/BTCPayServer/wwwroot/imlegacy/chaincoin.png b/BTCPayServer/wwwroot/imlegacy/chaincoin.png new file mode 100644 index 0000000000000000000000000000000000000000..ff3724454abc57acab74ab50c8b36dc4be424aeb GIT binary patch literal 14846 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
PO7HmHKo0ISh+pOr`go_5@2J~|KVXVi& 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%0AVj9L_-vU& zrIDuA>HaAVww~3a>uB4wjvu3%n zj!lx0z;C*5r;pA=PeR+ZQs2r6yO$R2lt0q+;{W^`tJ}Zh(KY7=$yg^Kcg2KbT&cVT zyMXM)EkD8U#A^E!MM2ac7P1Gt;*fAz82I7OV#&O^hcH3e0%@TL%%@y)IsTMz+`tV2 z$KxdxCkX54g}!bpe_KO{0T)qr)mu0=+>TzzQj8lXkq0yY&7hu40u B72^N^ literal 0 HcmV?d00001