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 PayjoinReceiverContext(InvoiceRepository invoiceRepository, ExplorerClient explorerClient, PayJoinRepository payJoinRepository, BTCPayServer.Logging.Logs logs) { this.BTCPayLogs = logs; _invoiceRepository = invoiceRepository; _explorerClient = explorerClient; _payJoinRepository = payJoinRepository; }
public NbxChainWatchInterface(ExplorerClient nbxplorerClient, ILogger <NbxChainWatchInterface> logger, NRustLightningNetwork network) { _logger = logger; _network = network; NbxplorerClient = nbxplorerClient; util = new ChainWatchInterfaceUtil(network.NBitcoinNetwork); }
public ServerTester(string scope) { _Directory = scope; if (Directory.Exists(_Directory)) { Utils.DeleteDirectory(_Directory); } if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } NetworkProvider = new BTCPayNetworkProvider(NetworkType.Regtest); ExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_BTCRPCCONNECTION", "server=http://127.0.0.1:43782;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork <BTCPayNetwork>("BTC").NBitcoinNetwork); ExplorerNode.ScanRPCCapabilities(); ExplorerClient = new ExplorerClient(NetworkProvider.GetNetwork <BTCPayNetwork>("BTC").NBXplorerNetwork, new Uri(GetEnvironment("TESTS_BTCNBXPLORERURL", "http://127.0.0.1:32838/"))); PayTester = new BTCPayServerTester(Path.Combine(_Directory, "pay")) { NBXplorerUri = ExplorerClient.Address, TestDatabase = Enum.Parse <TestDatabases>(GetEnvironment("TESTS_DB", TestDatabases.Postgres.ToString()), true), Postgres = GetEnvironment("TESTS_POSTGRES", "User ID=postgres;Host=127.0.0.1;Port=39372;Database=btcpayserver"), MySQL = GetEnvironment("TESTS_MYSQL", "User ID=root;Host=127.0.0.1;Port=33036;Database=btcpayserver") }; PayTester.Port = int.Parse(GetEnvironment("TESTS_PORT", Utils.FreeTcpPort().ToString(CultureInfo.InvariantCulture)), CultureInfo.InvariantCulture); PayTester.HostName = GetEnvironment("TESTS_HOSTNAME", "127.0.0.1"); PayTester.InContainer = bool.Parse(GetEnvironment("TESTS_INCONTAINER", "false")); PayTester.SSHPassword = GetEnvironment("TESTS_SSHPASSWORD", "opD3i2282D"); PayTester.SSHKeyFile = GetEnvironment("TESTS_SSHKEYFILE", ""); PayTester.SSHConnection = GetEnvironment("TESTS_SSHCONNECTION", "[email protected]:21622"); }
public NBXplorerWaiter(NBXplorerDashboard dashboard, BTCPayNetwork network, ExplorerClient client, EventAggregator aggregator) { _Network = network; _Client = client; _Aggregator = aggregator; _Dashboard = dashboard; }
public ExplorerClient GetClient(string cryptoCode) { if (_clients.ContainsKey(cryptoCode)) { return(_clients[cryptoCode]); } _logger.LogWarning($"Creating NBXplorer Client {cryptoCode}"); var client = new ExplorerClient(_nbXplorerNetworkProvider.GetFromCryptoCode(cryptoCode), _options.Uri); if (string.IsNullOrEmpty(_options.CookieFile) && !_options.UseDefaultCookie) { _logger.LogWarning($"Connecting to NBXplorer @{_options.Uri} with no auth"); client.SetNoAuth(); } else if (string.IsNullOrEmpty(_options.CookieFile) && _options.UseDefaultCookie) { _logger.LogWarning( $"Connecting to NBXplorer @{_options.Uri} with default cookie {client.Network.DefaultSettings.DefaultCookieFile}"); client.SetCookieAuth(client.Network.DefaultSettings.DefaultCookieFile); } else { _logger.LogWarning( $"Connecting to NBXplorer @{_options.Uri} with auth cookie {_options.CookieFile}"); client.SetCookieAuth(_options.CookieFile); } _clients.AddOrReplace(cryptoCode, client); return(client); }
public void Start() { if (Directory.Exists(_Directory)) { Utils.DeleteDirectory(_Directory); } if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } NetworkProvider = new BTCPayNetworkProvider(ChainType.Regtest); ExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_BTCRPCCONNECTION", "server=http://127.0.0.1:43782;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("BTC").NBitcoinNetwork); LTCExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_LTCRPCCONNECTION", "server=http://127.0.0.1:43783;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("LTC").NBitcoinNetwork); ExplorerClient = new ExplorerClient(NetworkProvider.GetNetwork("BTC").NBXplorerNetwork, new Uri(GetEnvironment("TESTS_BTCNBXPLORERURL", "http://127.0.0.1:32838/"))); LTCExplorerClient = new ExplorerClient(NetworkProvider.GetNetwork("LTC").NBXplorerNetwork, new Uri(GetEnvironment("TESTS_LTCNBXPLORERURL", "http://127.0.0.1:32838/"))); PayTester = new BTCPayServerTester(Path.Combine(_Directory, "pay")) { NBXplorerUri = ExplorerClient.Address, LTCNBXplorerUri = LTCExplorerClient.Address, Postgres = GetEnvironment("TESTS_POSTGRES", "User ID=postgres;Host=127.0.0.1;Port=39372;Database=btcpayserver") }; PayTester.Port = int.Parse(GetEnvironment("TESTS_PORT", Utils.FreeTcpPort().ToString(CultureInfo.InvariantCulture)), CultureInfo.InvariantCulture); PayTester.HostName = GetEnvironment("TESTS_HOSTNAME", "127.0.0.1"); PayTester.Start(); var btc = NetworkProvider.GetNetwork("BTC").NBitcoinNetwork; CustomerEclair = new EclairTester(this, "TEST_ECLAIR", "http://*****:*****@127.0.0.1:30992/", "eclair", btc); MerchantCharge = new ChargeTester(this, "TEST_CHARGE", "http://*****:*****@127.0.0.1:54938/", "lightning-charged", btc); }
public void ActivateLBTC() { LBTCExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_LBTCRPCCONNECTION", "server=http://127.0.0.1:19332;liquid:liquid")), NetworkProvider.GetNetwork <BTCPayNetwork>("LBTC").NBitcoinNetwork); LBTCExplorerClient = new ExplorerClient(NetworkProvider.GetNetwork <BTCPayNetwork>("LBTC").NBXplorerNetwork, new Uri(GetEnvironment("TESTS_LBTCNBXPLORERURL", "http://127.0.0.1:32838/"))); PayTester.Chains.Add("LBTC"); PayTester.LBTCNBXplorerUri = LBTCExplorerClient.Address; }
public PayjoinReceiverContext(InvoiceRepository invoiceRepository, ExplorerClient explorerClient, PayJoinRepository payJoinRepository, InvoiceLogsService invoiceLogsService) { _invoiceRepository = invoiceRepository; _explorerClient = explorerClient; _payJoinRepository = payJoinRepository; _invoiceLogsService = invoiceLogsService; }
public void Start() { if (Directory.Exists(_Directory)) { Utils.DeleteDirectory(_Directory); } if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } ExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_RPCCONNECTION", "server=http://127.0.0.1:43782;ceiwHEbqWI83:DwubwWsoo3")), Network); ExplorerClient = new ExplorerClient(Network, new Uri(GetEnvironment("TESTS_NBXPLORERURL", "http://127.0.0.1:32838/"))); PayTester = new BTCPayServerTester(Path.Combine(_Directory, "pay")) { NBXplorerUri = ExplorerClient.Address, Postgres = GetEnvironment("TESTS_POSTGRES", "User ID=postgres;Host=127.0.0.1;Port=39372;Database=btcpayserver") }; PayTester.Port = int.Parse(GetEnvironment("TESTS_PORT", Utils.FreeTcpPort().ToString())); PayTester.HostName = GetEnvironment("TESTS_HOSTNAME", "127.0.0.1"); PayTester.Start(); MerchantEclair = new EclairTester(this, "TEST_ECLAIR1", "http://127.0.0.1:30992/", "eclair1"); CustomerEclair = new EclairTester(this, "TEST_ECLAIR2", "http://127.0.0.1:30993/", "eclair2"); }
public NBXplorerFeeProviderFactory(ExplorerClient explorerClient) { if (explorerClient == null) { throw new ArgumentNullException(nameof(explorerClient)); } _ExplorerClient = explorerClient; }
public NBXplorerListener(ExplorerClient explorerClient, PeerManager peerManager, ILogger <NBXplorerListener> logger, ChannelWriter <FeeRateSet> feeRateWriter) { _explorerClient = explorerClient; _peerManager = peerManager; _logger = logger; _feeRateWriter = feeRateWriter; }
public BitcoinConnector(string oracleAddress, string endpoint, Channel <Deposit> depositStream, Channel <WithdrawInfo> withdrawStream) { this.depositStream = depositStream; this.withdrawStream = withdrawStream; this.oracleAddress = TrackedSource.Create(new BitcoinPubKeyAddress(oracleAddress)); client = new ExplorerClient(new NBXplorerNetworkProvider(NetworkType.Testnet).GetBTC(), new Uri(endpoint)); client.SetNoAuth(); }
public BitcoinOracleConnector(string network, string endpoint, string pkcsUser, string hsmKey) { this.pkcsUser = pkcsUser; this.hsmKey = hsmKey; this.network = network == "testnet" ? NetworkType.Testnet : NetworkType.Mainnet; client = new ExplorerClient(new NBXplorerNetworkProvider(this.network).GetBTC(), new Uri(endpoint)); pubKey = new NBitcoin.PubKey("045138d46c0e99a3b94a49551581097bae7162bdbd70dbddc580963f98b2771bbee5ecf367dfa34b2c9952269691f87153cbf2a1589c177dfd66ac6735b92f6cf7"); }
public NBXplorerWaiter(NBXplorerDashboard dashboard, BTCPayNetwork network, ExplorerClient client, EventAggregator aggregator, Logs logs) { this.Logs = logs; _Network = network; _Client = client; _Aggregator = aggregator; _Dashboard = dashboard; _Dashboard.Publish(_Network, State, null, null); }
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); }
public CallbackController(SettingsRepository repo, ExplorerClient explorer, InvoiceWatcher watcher, Network network) { _Settings = repo; _Network = network; _Watcher = watcher; _Explorer = explorer; }
private static ExplorerClient CreateExplorerClient(BTCPayNetwork n, Uri uri, string cookieFile) { var explorer = new ExplorerClient(n.NBitcoinNetwork, uri); if (!explorer.SetCookieAuth(cookieFile)) { explorer.SetNoAuth(); } return(explorer); }
public BTCPayWallet(ExplorerClient client, TransactionCache cache, BTCPayNetwork network) { if (client == null) { throw new ArgumentNullException(nameof(client)); } _Client = client; _Network = network; _Cache = cache; }
ExplorerClient GetClient() { if (_client == null) { // create NBXplorer client _client = new ExplorerClient(GetNbxNetwork(), nbxplorerAddress); _client.Track(pubkey); } return(_client); }
private void StartNBXplorer() { var port = CustomServer.FreeTcpPort(); List <(string key, string value)> keyValues = new List <(string key, string value)>(); keyValues.Add(("conf", Path.Combine(datadir, "settings.config"))); keyValues.Add(("datadir", datadir)); keyValues.Add(("port", port.ToString())); keyValues.Add(("network", "regtest")); keyValues.Add(("chains", CryptoCode.ToLowerInvariant())); keyValues.Add(("verbose", "1")); keyValues.Add(($"{CryptoCode.ToLowerInvariant()}rpcauth", Explorer.GetRPCAuth())); keyValues.Add(($"{CryptoCode.ToLowerInvariant()}rpcurl", Explorer.CreateRPCClient().Address.AbsoluteUri)); keyValues.Add(("cachechain", "0")); keyValues.Add(("rpcnotest", "1")); keyValues.Add(("mingapsize", "3")); keyValues.Add(("maxgapsize", "8")); keyValues.Add(($"{CryptoCode.ToLowerInvariant()}startheight", Explorer.CreateRPCClient().GetBlockCount().ToString())); keyValues.Add(($"{CryptoCode.ToLowerInvariant()}nodeendpoint", $"{Explorer.Endpoint.Address}:{Explorer.Endpoint.Port}")); keyValues.Add(("asbcnstr", AzureServiceBusTestConfig.ConnectionString)); keyValues.Add(("asbblockq", AzureServiceBusTestConfig.NewBlockQueue)); keyValues.Add(("asbtranq", AzureServiceBusTestConfig.NewTransactionQueue)); keyValues.Add(("asbblockt", AzureServiceBusTestConfig.NewBlockTopic)); keyValues.Add(("asbtrant", AzureServiceBusTestConfig.NewTransactionTopic)); var args = keyValues.SelectMany(kv => new[] { $"--{kv.key}", kv.value } .Concat(new[] { $"--{CryptoCode.ToLowerInvariant()}hastxindex" })).ToArray(); Host = new WebHostBuilder() .UseConfiguration(new DefaultConfiguration().CreateConfiguration(args)) .UseKestrel() .ConfigureLogging(l => { l.SetMinimumLevel(LogLevel.Information) .AddFilter("System.Net.Http.HttpClient", LogLevel.Error) .AddFilter("Microsoft", LogLevel.Error) .AddFilter("Hangfire", LogLevel.Error) .AddFilter("NBXplorer.Authentication.BasicAuthenticationHandler", LogLevel.Critical) .AddProvider(Logs.LogProvider); }) .UseStartup <Startup>() .Build(); RPC = ((RPCClientProvider)Host.Services.GetService(typeof(RPCClientProvider))).GetRPCClient(CryptoCode); var nbxnetwork = ((NBXplorerNetworkProvider)Host.Services.GetService(typeof(NBXplorerNetworkProvider))).GetFromCryptoCode(CryptoCode); Network = nbxnetwork.NBitcoinNetwork; var conf = (ExplorerConfiguration)Host.Services.GetService(typeof(ExplorerConfiguration)); Host.Start(); Configuration = conf; _Client = new ExplorerClient(nbxnetwork, Address); _Client.SetCookieAuth(Path.Combine(conf.DataDir, ".cookie")); Notifications = _Client.CreateLongPollingNotificationSession(); }
public BlockSourceTests(DockerFixture dockerFixture, ITestOutputHelper output) { _dockerFixture = dockerFixture; _output = output; _loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); builder.AddDebug(); }); _cli = _dockerFixture.StartExplorerFixtureAsync(nameof(BlockSourceTests)).GetAwaiter().GetResult(); }
public async Task <FeeRate> GetFeeRateAsync() { try { return((await ExplorerClient.GetFeeRateAsync(BlockTarget).ConfigureAwait(false)).FeeRate); } catch (NBXplorerException ex) when(ex.Error.HttpCode == 400 && ex.Error.Code == "fee-estimation-unavailable") { return(Fallback); } }
public BTCPayWallet(ExplorerClient client, IMemoryCache memoryCache, BTCPayNetwork network, ApplicationDbContextFactory dbContextFactory, Logs logs) { ArgumentNullException.ThrowIfNull(client); ArgumentNullException.ThrowIfNull(memoryCache); Logs = logs; _Client = client; _Network = network; _dbContextFactory = dbContextFactory; _MemoryCache = memoryCache; }
private async Task UpdateSummaryContinuously(ExplorerClient explorerClient, CancellationToken cancellationToken) { await explorerClient.WaitServerStartedAsync(cancellationToken); while (!cancellationToken.IsCancellationRequested) { await _nbXplorerSummaryProvider.UpdateClientState(explorerClient, cancellationToken); var summary = _nbXplorerSummaryProvider.GetSummary(explorerClient.CryptoCode); await Task.Delay(TimeSpan.FromSeconds(summary.State == NBXplorerState.Ready ? 30 : 5), cancellationToken); } }
public NBXplorerListener( ExplorerClient explorerClient, PeerManagerProvider peerManagerProvider, ILogger <NBXplorerListener> logger, ChannelWriter <FeeRateSet> feeRateWriter, NRustLightningNetwork network) { _explorerClient = explorerClient; _peerManagerProvider = peerManagerProvider; _logger = logger; _feeRateWriter = feeRateWriter; _network = network; }
public InvoiceWatcher(ExplorerClient explorerClient, InvoiceRepository invoiceRepository, BTCPayWallet wallet, InvoiceNotificationManager notificationManager) { LongPollingMode = explorerClient.Network == Network.RegTest; PollInterval = explorerClient.Network == Network.RegTest ? TimeSpan.FromSeconds(10.0) : TimeSpan.FromMinutes(1.0); _Wallet = wallet ?? throw new ArgumentNullException(nameof(wallet)); _ExplorerClient = explorerClient ?? throw new ArgumentNullException(nameof(explorerClient)); _DerivationFactory = new DerivationStrategyFactory(_ExplorerClient.Network); _InvoiceRepository = invoiceRepository ?? throw new ArgumentNullException(nameof(invoiceRepository)); _NotificationManager = notificationManager ?? throw new ArgumentNullException(nameof(notificationManager)); }
public NBXplorerClientProvider(IOptions <Config> config, IOptionsMonitor <ChainConfiguration> chainConfig, NRustLightningNetworkProvider networkProvider, IHttpClientFactory httpClientFactory, ILogger <NBXplorerClientProvider> logger) { _logger = logger; foreach (var n in networkProvider.GetAll()) { var chainConf = chainConfig.Get(n.CryptoCode); if (!(chainConf is null)) { var c = new ExplorerClient(n.NbXplorerNetwork, config.Value.NBXplorerUri); if (!string.IsNullOrEmpty(config.Value.NBXCookieFile)) { c.SetCookieAuth(config.Value.NBXCookieFile); } c.SetClient(httpClientFactory.CreateClient(nameof(NBXplorerClientProvider))); // check the connection by getting status. // TODO: Prepare HostedService for waiting NBXplorer and bitcoind gets ready? int sleepMs = 50; Exception e = null; int maxRetry = 6; for (int count = 0; count <= maxRetry; count++) { try { var _ = c.GetStatus(); e = null; } catch (Exception ex) { _logger.LogWarning($"Failed to connect to nbxplorer. retrying in {sleepMs} milliseconds..."); e = ex; Thread.Sleep(sleepMs); sleepMs *= 2; } } if (e != null) { _logger.LogCritical($"Failed to connect nbxplorer. check your settings."); throw e; } explorerClients.Add(n.CryptoCode, c); } } if (explorerClients.Count == 0) { throw new NRustLightningException("Found zero valid nbxplorer instance to connect"); } }
public async Task UpdateClientState(ExplorerClient client, CancellationToken cancellation) { _logger.LogInformation($"Updating summary for {client.CryptoCode}"); var state = (NBXplorerState?)null; string error = null; StatusResult status = null; try { status = await client.GetStatusAsync(cancellation); if (status == null) { state = NBXplorerState.NotConnected; } else if (status.IsFullySynched) { state = NBXplorerState.Ready; } else if (!status.IsFullySynched) { state = NBXplorerState.Synching; } } catch (Exception ex) when(!cancellation.IsCancellationRequested) { _logger.LogWarning($"Could not update summary for {client.CryptoCode} because {ex.Message}"); error = ex.Message; } if (status != null && error == null && status.NetworkType != _options.NetworkType) { error = $"{client.CryptoCode}: NBXplorer is on a different ChainType (actual: {status.NetworkType}, expected: {_options.NetworkType})"; } if (error != null) { state = NBXplorerState.NotConnected; } var summary = new NBXplorerSummary() { Status = status, State = state.GetValueOrDefault(NBXplorerState.NotConnected), Error = error }; _logger.LogInformation($"summary updated {client.CryptoCode}"); _summaries.AddOrReplace(client.CryptoCode.ToUpperInvariant(), summary); }
public BTCPayWallet(ExplorerClient client, IMemoryCache memoryCache, BTCPayNetwork network) { if (client == null) { throw new ArgumentNullException(nameof(client)); } if (memoryCache == null) { throw new ArgumentNullException(nameof(memoryCache)); } _Client = client; _Network = network; _MemoryCache = memoryCache; }