Esempio n. 1
0
        public void InitThought()
        {
            //not needed: NBitcoin.Altcoins.Thought.Instance.EnsureRegistered();
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("THT");

            Add(new BTCPayNetwork()
            {
                CryptoCode        = nbxplorerNetwork.CryptoCode,
                DisplayName       = "Thought",
                BlockExplorerLink = NetworkType == NetworkType.Mainnet
                    ? "https://exp.thought.live/insight/tx/{0}"
                    : "https://ext.thought.live/insight/tx/{0}",
                NBXplorerNetwork = nbxplorerNetwork,
                UriScheme        = "thought",
                DefaultRateRules = new[]
                {
                    "THT_X = THT_BTC * BTC_X",
                    "THT_BTC = coinall(THT_BTC)"
                },
                CryptoImagePath = "imlegacy/thought.png",
                DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                //https://github.com/satoshilabs/slips/blob/master/slip-0044.md
                CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("5'")
                    : new KeyPath("1'")
            });
        }
Esempio n. 2
0
        private static ExplorerClient CreateNBXClient(Network network)
        {
            NBXplorerNetworkProvider provider = new NBXplorerNetworkProvider(network.ChainName);
            ExplorerClient           client   = new NBXplorer.ExplorerClient(provider.GetFromCryptoCode(network.NetworkSet.CryptoCode));

            return(client);
        }
 public BTCPayNetworkProvider(ChainType chainType)
 {
     _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(chainType);
     ChainType = chainType;
     InitBitcoin();
     InitLitecoin();
 }
Esempio n. 4
0
        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'")
            });
        }
        public NBXplorerClientProvider(NBXplorerOptions options, ILogger <NBXplorerClientProvider> logger)
        {
            _options = options;
            _logger  = logger;

            _nbXplorerNetworkProvider = new NBXplorerNetworkProvider(_options.NetworkType);
        }
Esempio n. 6
0
        public void InitGroestlcoin()
        {
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("GRS");

            Add(new BTCPayNetwork()
            {
                CryptoCode        = nbxplorerNetwork.CryptoCode,
                DisplayName       = "Groestlcoin",
                BlockExplorerLink = NetworkType == NetworkType.Mainnet
                    ? "https://chainz.cryptoid.info/grs/tx.dws?{0}.htm"
                    : "https://chainz.cryptoid.info/grs-test/tx.dws?{0}.htm",
                NBXplorerNetwork = nbxplorerNetwork,
                UriScheme        = "groestlcoin",
                DefaultRateRules = new[]
                {
                    "GRS_X = GRS_BTC * BTC_X",
                    "GRS_BTC = bittrex(GRS_BTC)"
                },
                CryptoImagePath    = "imlegacy/groestlcoin.png",
                LightningImagePath = "imlegacy/groestlcoin-lightning.svg",
                DefaultSettings    = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                CoinType           = NetworkType == NetworkType.Mainnet ? new KeyPath("17'") : new KeyPath("1'"),
                SupportRBF         = true,
                SupportPayJoin     = true
            });
        }
        public static void Run()
        {
            var            network = new NBXplorerNetworkProvider(ChainType.Main).GetBTC();
            ExplorerClient client  = new ExplorerClient(network, new Uri(Config.Instance.NBXplorer.ServerUrl));
            Dictionary <int, GetTransactionsResponse> lastResponseDict = new Dictionary <int, GetTransactionsResponse>();

            using (Way.Lib.CLog log = new Way.Lib.CLog("runForTransactions"))
            {
                while (true)
                {
                    try
                    {
                        //程序刚启动,把所有交易拿出来检验一遍
                        checkAllTransactionForInit(network, client, log);
                        break;
                    }
                    catch (Exception ex)
                    {
                        System.Threading.Thread.Sleep(3000);
                        using (Way.Lib.CLog logErr = new Way.Lib.CLog("handleAllTransactionForInit error", false))
                        {
                            logErr.Log(ex.ToString());
                        }
                    }
                }

                while (true)
                {
                    try
                    {
                        var events = client.CreateNotificationSession();
                        events.ListenAllDerivationSchemes();
                        log.Log($"init");
                        while (true)
                        {
                            log.Log($"waiting event...");

                            var txEvent = events.NextEvent();
                            log.Log($"received event,type:{txEvent?.GetType().FullName}");
                            if (txEvent is NBXplorer.Models.NewTransactionEvent)
                            {
                                using (var db = new MainDB())
                                {
                                    var tranEvent = txEvent as NBXplorer.Models.NewTransactionEvent;
                                    checkTransaction(db, tranEvent.TransactionData.Transaction, tranEvent.TransactionData.Confirmations, log);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Threading.Thread.Sleep(2000);
                        using (Way.Lib.CLog logErr = new Way.Lib.CLog("runForTransactions error", false))
                        {
                            logErr.Log(ex.ToString());
                        }
                    }
                }
            }
        }
        public void InitTerracoin()
        {
            //not needed: NBitcoin.Altcoins.Terracoin.Instance.EnsureRegistered();
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("TRC");

            Add(new BTCPayNetwork()
            {
                CryptoCode        = nbxplorerNetwork.CryptoCode,
                DisplayName       = "Terracoin",
                BlockExplorerLink = NetworkType == NetworkType.Mainnet
                    ? "https://insight.terracoin.io/tx/{0}"
                    : "https://test-insight.terracoin.io/tx/{0}",
                NBitcoinNetwork  = nbxplorerNetwork.NBitcoinNetwork,
                NBXplorerNetwork = nbxplorerNetwork,
                UriScheme        = "terracoin",
                DefaultRateRules = new[]
                {
                    "TRC_X = TRC_BTC * BTC_X",
                    "TRC_BTC = coingecko(TRC_BTC)"
                },
                CryptoImagePath = "imlegacy/terracoin.png",
                DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                //https://github.com/satoshilabs/slips/blob/master/slip-0044.md
                CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("83'") : new KeyPath("1'"),
                MinFee   = Money.Satoshis(0.0001m)
            });
        }
Esempio n. 9
0
        public void InitDash()
        {
            //not needed: NBitcoin.Altcoins.Dash.Instance.EnsureRegistered();
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("DASH");

            Add(new BTCPayNetwork()
            {
                CryptoCode        = nbxplorerNetwork.CryptoCode,
                DisplayName       = "Dash",
                BlockExplorerLink = NetworkType == ChainName.Mainnet
                    ? "https://insight.dash.org/insight/tx/{0}"
                    : "https://testnet-insight.dashevo.org/insight/tx/{0}",
                NBXplorerNetwork = nbxplorerNetwork,
                DefaultRateRules = new[]
                {
                    "DASH_X = DASH_BTC * BTC_X",
                    "DASH_BTC = bitfinex(DSH_BTC)"
                },
                CryptoImagePath = "imlegacy/dash.png",
                DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                //https://github.com/satoshilabs/slips/blob/master/slip-0044.md
                CoinType = NetworkType == ChainName.Mainnet ? new KeyPath("5'")
                    : new KeyPath("1'")
            });
        }
        public void InitBitcoin()
        {
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("BTC");

            Add(new BTCPayNetwork()
            {
                CryptoCode         = nbxplorerNetwork.CryptoCode,
                DisplayName        = "Bitcoin",
                BlockExplorerLink  = NetworkType == NetworkType.Mainnet ? "https://www.smartbit.com.au/tx/{0}" : "https://testnet.smartbit.com.au/tx/{0}",
                NBitcoinNetwork    = nbxplorerNetwork.NBitcoinNetwork,
                NBXplorerNetwork   = nbxplorerNetwork,
                UriScheme          = "bitcoin",
                CryptoImagePath    = "imlegacy/bitcoin.svg",
                LightningImagePath = "imlegacy/bitcoin-lightning.svg",
                DefaultSettings    = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                CoinType           = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'"),
                SupportRBF         = true,
                //https://github.com/spesmilo/electrum/blob/11733d6bc271646a00b69ff07657119598874da4/electrum/constants.py
                ElectrumMapping = NetworkType == NetworkType.Mainnet
                    ? new Dictionary <uint, DerivationType>()
                {
                    { 0x0488b21eU, DerivationType.Legacy },     // xpub
                    { 0x049d7cb2U, DerivationType.SegwitP2SH }, // ypub
                    { 0x4b24746U, DerivationType.Segwit },      //zpub
                }
                    : new Dictionary <uint, DerivationType>()
                {
                    { 0x043587cfU, DerivationType.Legacy },
                    { 0x044a5262U, DerivationType.SegwitP2SH },
                    { 0x045f1cf6U, DerivationType.Segwit }
                }
            });
        }
        public void InitLitecoin()
        {
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LTC");

            Add(new BTCPayNetwork()
            {
                CryptoCode        = nbxplorerNetwork.CryptoCode,
                DisplayName       = "Litecoin",
                BlockExplorerLink = NetworkType == NetworkType.Mainnet
                    ? "https://live.blockcypher.com/ltc/tx/{0}/"
                    : "http://explorer.litecointools.com/tx/{0}",
                NBXplorerNetwork   = nbxplorerNetwork,
                UriScheme          = "litecoin",
                CryptoImagePath    = "imlegacy/litecoin.svg",
                LightningImagePath = "imlegacy/litecoin-lightning.svg",
                DefaultSettings    = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                CoinType           = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'"),
                //https://github.com/pooler/electrum-ltc/blob/0d6989a9d2fb2edbea421c116e49d1015c7c5a91/electrum_ltc/constants.py
                ElectrumMapping = NetworkType == NetworkType.Mainnet
                    ? new Dictionary <uint, DerivationType>()
                {
                    { 0x0488b21eU, DerivationType.Legacy },
                    { 0x049d7cb2U, DerivationType.SegwitP2SH },
                    { 0x04b24746U, DerivationType.Segwit },
                }
                    : new Dictionary <uint, DerivationType>()
                {
                    { 0x043587cfU, DerivationType.Legacy },
                    { 0x044a5262U, DerivationType.SegwitP2SH },
                    { 0x045f1cf6U, DerivationType.Segwit }
                }
            });
        }
Esempio n. 12
0
        public void InitVeles()
        {
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("VLS");

            Add(new BTCPayNetwork()
            {
                CryptoCode         = nbxplorerNetwork.CryptoCode,
                DisplayName        = "Veles",
                BlockExplorerLink  = NetworkType == NetworkType.Mainnet ? "https://explorer.veles.network/tx/{0}" : "https://blockstream.info/testnet/tx/{0}",
                NBitcoinNetwork    = nbxplorerNetwork.NBitcoinNetwork,
                NBXplorerNetwork   = nbxplorerNetwork,
                UriScheme          = "veles",
                CryptoImagePath    = "imlegacy/veles.svg",
                LightningImagePath = "imlegacy/veles-lightning.svg",
                DefaultSettings    = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                CoinType           = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'"),
                SupportRBF         = true,
                ElectrumMapping    = NetworkType == NetworkType.Mainnet
                    ? new Dictionary <uint, DerivationType>()
                {
                    { 0x0488b21eU, DerivationType.Legacy },     // xpub
                    { 0x049d7cb2U, DerivationType.SegwitP2SH }, // ypub
                    { 0x4b24746U, DerivationType.Segwit },      //zpub
                }
                    : new Dictionary <uint, DerivationType>()
                {
                    { 0x043587cfU, DerivationType.Legacy },
                    { 0x044a5262U, DerivationType.SegwitP2SH },
                    { 0x045f1cf6U, DerivationType.Segwit }
                }
            });
        }
Esempio n. 13
0
        protected override CommandLineApplication CreateCommandLineApplicationCore()
        {
            var provider = new NBXplorerNetworkProvider(ChainName.Mainnet);
            var chains   = string.Join(",", provider.GetAll().Select(n => n.CryptoCode.ToLowerInvariant()).ToArray());
            CommandLineApplication app = new CommandLineApplication(true)
            {
                FullName = "NBXplorer\r\nLightweight block explorer for tracking HD wallets",
                Name     = "NBXplorer"
            };

            app.HelpOption("-? | -h | --help");
            app.Option("-n | --network", $"Set the network among (mainnet,testnet,regtest) (default: mainnet)", CommandOptionType.SingleValue);
            app.Option("--testnet | -testnet", $"Use testnet", CommandOptionType.BoolValue);
            app.Option("--regtest | -regtest", $"Use regtest", CommandOptionType.BoolValue);
            app.Option("--signet | -signet", $"Use signet", CommandOptionType.BoolValue);
            app.Option("--chains", $"Chains to support comma separated (default: btc, available: {chains})", CommandOptionType.SingleValue);

            app.Option($"--dbcache", $"If more than 0, the size of the cache for the database, in MB. Else, no limit on the size of the cache. (default: 50)", CommandOptionType.SingleValue);
            foreach (var network in provider.GetAll())
            {
                var crypto = network.CryptoCode.ToLowerInvariant();
                app.Option($"--{crypto}rescan", $"Rescan from startheight", CommandOptionType.BoolValue);
                app.Option($"--{crypto}rpcuser", $"RPC authentication method 1: The RPC user (default: using cookie auth from default network folder)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}rpcpassword", $"RPC authentication method 1: The RPC password (default: using cookie auth from default network folder)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}rpccookiefile", $"RPC authentication method 2: The RPC cookiefile (default: using cookie auth from default network folder)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}rpcauth", $"RPC authentication method 3: user:password or cookiefile=path (default: using cookie auth from default network folder)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}rpcurl", $"The RPC server url (default: default rpc server depended on the network)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}startheight", $"The height where starting the scan (default: where your rpc server was synched when you first started this program)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}minutxovalue", $"The minimum value of tracked UTXOs, any UTXO with value less than this is ignored. (default: 1 (satoshi))", CommandOptionType.SingleValue);
                app.Option($"--{crypto}nodeendpoint", $"The p2p connection to a Bitcoin node, make sure you are whitelisted (default: default p2p node on localhost, depends on network)", CommandOptionType.SingleValue);
                app.Option($"--{crypto}hastxindex", "If true, NBXplorer will try to fetch missing transactions from the local node (default: false)", CommandOptionType.BoolValue);
                app.Option($"--{crypto}exposerpc", $"Expose the node RPCs through the REST API (default: false)", CommandOptionType.SingleValue);
            }

            app.Option("--asbcnstr", "[For Azure Service Bus] Azure Service Bus Connection string. New Block and New Transaction messages will be pushed to queues when this values is set", CommandOptionType.SingleValue);
            app.Option("--asbblockq", "[For Azure Service Bus] Name of Queue to push new block message to. Leave blank to turn off", CommandOptionType.SingleValue);
            app.Option("--asbtranq", "[For Azure Service Bus] Name of Queue to push new transaction message to. Leave blank to turn off", CommandOptionType.SingleValue);
            app.Option("--asbblockt", "[For Azure Service Bus] Name of Topic to push new block message to. Leave blank to turn off", CommandOptionType.SingleValue);
            app.Option("--asbtrant", "[For Azure Service Bus] Name of Topic to push new transaction message to. Leave blank to turn off", CommandOptionType.SingleValue);

            app.Option("--rmqhost", "[For RabbitMq] RabbitMq host name. Leave blank to turn off", CommandOptionType.SingleValue);
            app.Option("--rmquser", "[For RabbitMq] RabbitMq username. Leave blank to turn off", CommandOptionType.SingleValue);
            app.Option("--rmqpass", "[For RabbitMq] RabbitMq password. Leave blank to turn off", CommandOptionType.SingleValue);
            app.Option("--rmqvirtual", "[For RabbitMq] RabbitMq virtual host.", CommandOptionType.SingleValue);
            app.Option("--rmqtranex", "[For RabbitMq] Name of exchange to push transaction messages.", CommandOptionType.SingleValue);
            app.Option("--rmqblockex", "[For RabbitMq] Name of exchange to push block messages.", CommandOptionType.SingleValue);

            app.Option("--customkeypathtemplate", $"Define an additional derivation path tracked by NBXplorer (Format: m/1/392/*/29, default: empty)", CommandOptionType.SingleValue);
            app.Option("--maxgapsize", $"The maximum gap address count on which the explorer will track derivation schemes (default: 30)", CommandOptionType.SingleValue);
            app.Option("--mingapsize", $"The minimum gap address count on which the explorer will track derivation schemes (default: 20)", CommandOptionType.SingleValue);
            app.Option("--trimevents", $"When NBXplorer starts, NBXplorer will remove old events to reach this count. No trimming if equals to less than 0 (default: -1)", CommandOptionType.SingleValue);
            app.Option("--signalfilesdir", $"The directory where files signaling if a chain is ready is created (default: the network specific datadir)", CommandOptionType.SingleValue);
            app.Option("--noauth", $"Disable cookie authentication", CommandOptionType.BoolValue);
            app.Option("--instancename", $"Define an instance name for this server that, if not null, will show in status response and in HTTP response headers (default: empty)", CommandOptionType.SingleValue);
            app.Option("--cachechain", $"Whether the chain of header is locally cached for faster startup (default: true)", CommandOptionType.SingleValue);
            app.Option("--rpcnotest", $"Faster start because RPC connection testing skipped (default: false)", CommandOptionType.SingleValue);
            app.Option("--exposerpc", $"Expose the node RPC through the REST API (default: false)", CommandOptionType.SingleValue);
            app.Option("-v | --verbose", $"Verbose logs (default: true)", CommandOptionType.SingleValue);
            return(app);
        }
Esempio n. 14
0
        public void Start()
        {
            try
            {
                var cryptoSettings = new NBXplorerNetworkProvider(NetworkType.Regtest).GetFromCryptoCode(CryptoCode);
                NodeBuilder = NodeBuilder.Create(nodeDownloadData, Network, _Directory);

                Explorer = NodeBuilder.CreateNode();
                Explorer.ConfigParameters.Add("txindex", "1");
                foreach (var node in NodeBuilder.Nodes)
                {
                    node.WhiteBind  = true;
                    node.CookieAuth = cryptoSettings.SupportCookieAuthentication;
                }
                NodeBuilder.StartAll();
                Explorer.CreateRPCClient().EnsureGenerate(Network.Consensus.CoinbaseMaturity + 1);

                datadir = Path.Combine(_Directory, "explorer");
                DeleteFolderRecursive(datadir);
                StartNBXplorer();
                this.Client.WaitServerStarted();
            }
            catch
            {
                Dispose();
                throw;
            }
        }
 public BTCPayNetworkProvider(NetworkType networkType)
 {
     _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(networkType);
     NetworkType = networkType;
     InitBitcoin();
     InitLitecoin();
     InitDogecoin();
 }
Esempio n. 16
0
 public BrokerHostedService(BitcoinDWaiters waiters, ChainProvider chainProvider, EventAggregator eventAggregator, IOptions <ExplorerConfiguration> config, NBXplorerNetworkProvider networks)
 {
     _EventAggregator = eventAggregator;
     Networks         = networks;
     ChainProvider    = chainProvider;
     Waiters          = waiters;
     _config          = config.Value;
 }
Esempio n. 17
0
 public RabbitMqBroker(
     NBXplorerNetworkProvider networks, ConnectionFactory connectionFactory,
     string newTransactionExchange, string newBlockExchange)
 {
     Networks               = networks;
     ConnectionFactory      = connectionFactory;
     NewTransactionExchange = newTransactionExchange;
     NewBlockExchange       = newBlockExchange;
 }
Esempio n. 18
0
        public void TestMethod1()
        {
            var            network = new NBXplorerNetworkProvider(ChainType.Main).GetBTC();
            ExplorerClient client  = new ExplorerClient(network, new System.Uri("http://47.75.159.73:24444"));


            //获取一个没有使用的收款地址
            var info = client.GetFeeRate(2);
        }
Esempio n. 19
0
        public ExplorerConfiguration LoadArgs(IConfiguration config)
        {
            NetworkProvider = new NBXplorerNetworkProvider(DefaultConfiguration.GetChainType(config));
            var defaultSettings = NBXplorerDefaultSettings.GetDefaultSettings(NetworkProvider.ChainType);

            Logs.Configuration.LogInformation("Network: " + NetworkProvider.ChainType.ToString());
            var supportedChains = config.GetOrDefault <string>("chains", "btc")
                                  .Split(',', StringSplitOptions.RemoveEmptyEntries)
                                  .Select(t => t.ToUpperInvariant());
            var validChains = new List <string>();

            foreach (var network in NetworkProvider.GetAll())
            {
                if (supportedChains.Contains(network.CryptoCode))
                {
                    validChains.Add(network.CryptoCode);
                    var chainConfiguration = new ChainConfiguration();
                    chainConfiguration.Rescan     = config.GetOrDefault <bool>($"{network.CryptoCode}.rescan", false);
                    chainConfiguration.CryptoCode = network.CryptoCode;
                    var args = RPCArgs.Parse(config, network.NBitcoinNetwork, network.CryptoCode);
                    chainConfiguration.RPC          = args.ConfigureRPCClient(network);
                    chainConfiguration.NodeEndpoint = DefaultConfiguration.ConvertToEndpoint(config.GetOrDefault <string>($"{network.CryptoCode}.node.endpoint", "127.0.0.1"), network.NBitcoinNetwork.DefaultPort);
                    chainConfiguration.StartHeight  = config.GetOrDefault <int>($"{network.CryptoCode}.startheight", -1);

                    ChainConfigurations.Add(chainConfiguration);
                }
            }
            var invalidChains = String.Join(',', supportedChains.Where(s => !validChains.Contains(s)).ToArray());

            if (!string.IsNullOrEmpty(invalidChains))
            {
                throw new ConfigException($"Invalid chains {invalidChains}");
            }

            Logs.Configuration.LogInformation("Supported chains: " + String.Join(',', supportedChains.ToArray()));
            BaseDataDir = config.GetOrDefault <string>("datadir", Path.GetDirectoryName(defaultSettings.DefaultDataDirectory));
            MinGapSize  = config.GetOrDefault <int>("mingapsize", 20);
            MaxGapSize  = config.GetOrDefault <int>("maxgapsize", 30);
            if (MinGapSize >= MaxGapSize)
            {
                throw new ConfigException("mingapsize should be equal or lower than maxgapsize");
            }
            if (!Directory.Exists(BaseDataDir))
            {
                Directory.CreateDirectory(BaseDataDir);
            }
            DataDir = Path.Combine(BaseDataDir, NetworkProvider.ChainType.ToNetwork().Name);
            if (!Directory.Exists(DataDir))
            {
                Directory.CreateDirectory(DataDir);
            }
            CacheChain       = config.GetOrDefault <bool>("cachechain", true);
            NoAuthentication = config.GetOrDefault <bool>("noauth", false);
            return(this);
        }
Esempio n. 20
0
        public NRustLightningNetworkProvider(NetworkType networkType)
        {
            NetworkType = networkType;
            nbXplorerNetworkProvider = new NBXplorerNetworkProvider(NetworkType);
            var invoicePrefix =
                networkType == NetworkType.Mainnet ? "lnbc" :
                networkType == NetworkType.Testnet ? "lntb" :
                "lnbcrt";

            Add(Bitcoin.Instance, networkType, nbXplorerNetworkProvider.GetBTC(), new KeyPath("m/84'/0'"), invoicePrefix);
        }
Esempio n. 21
0
 public FingerprintHostedService(EventAggregator eventAggregator,
                                 NBXplorerNetworkProvider networkProvider,
                                 BitcoinDWaiters waiters)
 {
     this.eventAggregator = eventAggregator;
     foreach (var network in networkProvider.GetAll())
     {
         data.Add(network, new NetworkFingerprintData()
         {
             waiter = waiters.GetWaiter(network)
         });
     }
 }
 BTCPayNetworkProvider(BTCPayNetworkProvider filtered, string[] cryptoCodes)
 {
     NetworkType = filtered.NetworkType;
     _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(filtered.NetworkType);
     _Networks   = new Dictionary <string, BTCPayNetworkBase>();
     cryptoCodes = cryptoCodes.Select(c => c.ToUpperInvariant()).ToArray();
     foreach (var network in filtered._Networks)
     {
         if (cryptoCodes.Contains(network.Key))
         {
             _Networks.Add(network.Key, network.Value);
         }
     }
 }
 public FingerprintHostedService(EventAggregator eventAggregator,
                                 NBXplorerNetworkProvider networkProvider,
                                 BitcoinDWaiters waiters)
 {
     this.eventAggregator = eventAggregator;
     foreach (var network in networkProvider.GetAll())
     {
         data.Add(network, new NetworkFingerprintData()
         {
             waiter = waiters.GetWaiter(network),
             DefaultDistribution = network.CryptoCode == "BTC" ? _DefaultBTC : null
         });
     }
 }
 public BTCPayNetworkProvider(NetworkType networkType)
 {
     _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(networkType);
     NetworkType = networkType;
     InitBitcoin();
     InitLitecoin();
     InitDogecoin();
     InitBitcoinGold();
     InitMonacoin();
     InitPolis();
     InitFeathercoin();
     InitGroestlcoin();
     //InitUfo();
 }
Esempio n. 25
0
        static async Task <int> Main(string[] args)
        {
            var validChains = string.Join(",", new NBXplorerNetworkProvider(NetworkType.Mainnet).GetAll().Select(n => n.CryptoCode.ToLowerInvariant()).ToArray());

            using (CancellationTokenSource stop = new CancellationTokenSource())
                using (CancelOnExit(stop))
                {
                    var provider = new CommandLineExConfigurationProvider(args, CreateCommandLineApplication);
                    provider.Load();

                    if (provider.TryGet("help", out var unused))
                    {
                        return(1);
                    }
                    if (!provider.TryGet("chains", out var chains))
                    {
                        chains = "btc";
                    }
                    if (!provider.TryGet("network", out var network))
                    {
                        network = "mainnet";
                    }

                    var networkType     = GetNetworkType(network);
                    var networkProvider = new NBXplorerNetworkProvider(networkType);

                    var supportedChains = chains
                                          .Split(',', StringSplitOptions.RemoveEmptyEntries)
                                          .Select(t => GetNetwork(provider, networkProvider, t, validChains))
                                          .ToList();

                    var wait = TimeSpan.FromSeconds(1);
                    while (true)
                    {
                        if (await AreSynchedAndStarted(supportedChains, stop.Token))
                        {
                            return(0);
                        }
                        Write($"-----trying again in {(int)wait.TotalSeconds} seconds-----");
                        await Task.Delay(wait, stop.Token);

                        wait = TimeSpan.FromTicks(2 * wait.Ticks);
                        if (wait > TimeSpan.FromMinutes(5))
                        {
                            wait = TimeSpan.FromMinutes(5);
                        }
                    }
                }
        }
 BTCPayNetworkProvider(BTCPayNetworkProvider unfiltered, string[] bitcoinCodes)
 {
     UnfilteredNetworks        = unfiltered.UnfilteredNetworks ?? unfiltered;
     NetworkType               = unfiltered.NetworkType;
     _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(unfiltered.NetworkType);
     _Networks    = new Dictionary <string, BTCPayNetworkBase>();
     bitcoinCodes = bitcoinCodes.Select(c => c.ToUpperInvariant()).ToArray();
     foreach (var network in unfiltered._Networks)
     {
         if (bitcoinCodes.Contains(network.Key))
         {
             _Networks.Add(network.Key, network.Value);
         }
     }
 }
Esempio n. 27
0
        public void InitLiquidAssets()
        {
            var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LBTC");

            Add(new ElementsBTCPayNetwork()
            {
                CryptoCode        = "USDt",
                NetworkCryptoCode = "LBTC",
                ShowSyncSummary   = false,
                DefaultRateRules  = new[]
                {
                    "USDT_UST = 1",
                    "USDT_X = USDT_BTC * BTC_X",
                    "USDT_BTC = bitfinex(UST_BTC)",
                },
                AssetId           = new uint256("ce091c998b83c78bb71a632313ba3760f1763d9cfcffae02258ffa9865a37bd2"),
                DisplayName       = "Liquid Tether",
                BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://blockstream.info/liquid/tx/{0}" : "https://blockstream.info/testnet/liquid/tx/{0}",
                NBXplorerNetwork  = nbxplorerNetwork,
                UriScheme         = "liquidnetwork",
                CryptoImagePath   = "imlegacy/liquid-tether.svg",
                DefaultSettings   = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                CoinType          = NetworkType == NetworkType.Mainnet ? new KeyPath("1776'") : new KeyPath("1'"),
                SupportRBF        = true
            });

            Add(new ElementsBTCPayNetwork()
            {
                CryptoCode        = "ETB",
                NetworkCryptoCode = "LBTC",
                ShowSyncSummary   = false,
                DefaultRateRules  = new[]
                {
                    "ETB_X = ETB_BTC * BTC_X",
                    "ETB_BTC = bitpay(ETB_BTC)"
                },
                Divisibility      = 2,
                AssetId           = new uint256("aa775044c32a7df391902b3659f46dfe004ccb2644ce2ddc7dba31e889391caf"),
                DisplayName       = "Ethiopian Birr",
                BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://blockstream.info/liquid/tx/{0}" : "https://blockstream.info/testnet/liquid/tx/{0}",
                NBXplorerNetwork  = nbxplorerNetwork,
                UriScheme         = "liquidnetwork",
                CryptoImagePath   = "imlegacy/etb.png",
                DefaultSettings   = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
                CoinType          = NetworkType == NetworkType.Mainnet ? new KeyPath("1776'") : new KeyPath("1'"),
                SupportRBF        = true
            });
        }
Esempio n. 28
0
 public void InitLitecoin()
 {
     var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LTC");
     Add(new BTCPayNetwork()
     {
         CryptoCode = nbxplorerNetwork.CryptoCode,
         BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://live.blockcypher.com/ltc/tx/{0}/" : "http://explorer.litecointools.com/tx/{0}",
         NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
         NBXplorerNetwork = nbxplorerNetwork,
         UriScheme = "litecoin",
         CryptoImagePath = "imlegacy/litecoin-symbol.svg",
         LightningImagePath = "imlegacy/ltc-lightning.svg",
         DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
         CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'")
     });
 }
Esempio n. 29
0
        private static CommandLineApplication CreateCommandLineApplication()
        {
            var provider = new NBXplorerNetworkProvider(NetworkType.Mainnet);
            var chains   = string.Join(",", provider.GetAll().Select(n => n.CryptoCode.ToLowerInvariant()).ToArray());
            CommandLineApplication app = new CommandLineApplication(true)
            {
                FullName = "NBXplorer NodeWaiter\r\nUtility which exit only when the NBXplorer Server is fully up",
                Name     = "NBXplorer Waiter"
            };

            app.HelpOption("-? | -h | --help");
            app.Option("-n | --network", $"Set the network among (mainnet,testnet,regtest) (default: mainnet)", CommandOptionType.SingleValue);
            app.Option("--chains", $"Chains to support comma separated (default: btc, available: {chains})", CommandOptionType.SingleValue);
            app.Option($"--explorerurl", "The url to nbxplorer instance", CommandOptionType.SingleValue);
            return(app);
        }
Esempio n. 30
0
        public BTCPayNetworkProvider(ChainName networkType)
        {
            _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(networkType);
            NetworkType = networkType;
            InitBitcoin();
#if ALTCOINS
            InitLiquid();
            InitLiquidAssets();
            InitLitecoin();
            InitBitcore();
            InitDogecoin();
            InitBGold();
            InitMonacoin();
            InitDash();
            InitFeathercoin();
            InitAlthash();
            InitGroestlcoin();
            InitViacoin();
            InitMonero();
            InitPolis();
            InitChaincoin();
            // InitArgoneum();//their rate source is down 9/15/20.
            InitMonetaryUnit();
            InitEthereum();
            InitERC20();

            // Assume that electrum mappings are same as BTC if not specified
            foreach (var network in _Networks.Values.OfType <BTCPayNetwork>())
            {
                if (network.ElectrumMapping.Count == 0)
                {
                    network.ElectrumMapping = GetNetwork <BTCPayNetwork>("BTC").ElectrumMapping;
                    if (!network.NBitcoinNetwork.Consensus.SupportSegwit)
                    {
                        network.ElectrumMapping =
                            network.ElectrumMapping
                            .Where(kv => kv.Value == DerivationType.Legacy)
                            .ToDictionary(k => k.Key, k => k.Value);
                    }
                }
            }

            // Disabled because of https://twitter.com/Cryptopia_NZ/status/1085084168852291586
            //InitBPlus();
            //InitUfo();
#endif
        }