public async Task OutBoundConnectAll()
        {
            var clightningPeerInfo = await CLightningClient.ListPeersAsync();

            var lndPeerInfo = await LndClient.SwaggerClient.ListPeersAsync();

            var nrlInfo = await NRustLightningHttpClient.GetInfoAsync();

            if (clightningPeerInfo.Any(x => x.Id.Equals(nrlInfo.ConnectionString.NodeId.ToHex())) &&
                lndPeerInfo.Peers.Any(x => x.Pub_key.Equals(nrlInfo.ConnectionString.NodeId.ToHex())))
            {
                return;
            }

            var lndConnString        = (await LndLNClient.GetInfo()).NodeInfoList.First().ToConnectionString();
            var clightningConnString = (await ClightningLNClient.GetInfo()).NodeInfoList.First().ToConnectionString();
            await NRustLightningHttpClient.ConnectAsync(lndConnString);

            await NRustLightningHttpClient.ConnectAsync(clightningConnString);

            await Support.Utils.Retry(4, TimeSpan.FromSeconds(2), async() =>
            {
                clightningPeerInfo = await CLightningClient.ListPeersAsync();
                lndPeerInfo        = await LndClient.SwaggerClient.ListPeersAsync();
                nrlInfo            = await NRustLightningHttpClient.GetInfoAsync();
                return
                (nrlInfo.NodeIds.Count >= 2 &&
                 clightningPeerInfo.Any(x => x.Id.Equals(nrlInfo.ConnectionString.NodeId.ToHex())) &&
                 lndPeerInfo.Peers.Any(x => x.Pub_key.Equals(nrlInfo.ConnectionString.NodeId.ToHex())));
            }, "Failed to establish outbound connection");
        }
Exemple #2
0
        static async Task Main(string[] args)
        {
            var command = CommandLine.GetRootCommand();

            command.Handler = CommandHandler.Create((ParseResult pr) =>
            {
                Console.WriteLine($"Calling handler");
                Network?network;
                var n   = pr.RootCommandResult.ValueForOption <string>("network");
                network = n == "mainnet" ? Network.Main :
                          n == "testnet" ? Network.TestNet :
                          n == "regtest" ? Network.RegTest : null;
                if (network is null)
                {
                    if (pr.RootCommandResult.ValueForOption <bool>("testnet"))
                    {
                        network = Network.TestNet;
                    }
                    else if (pr.RootCommandResult.ValueForOption <bool>("regtest"))
                    {
                        network = Network.RegTest;
                    }
                }
                if (network is null)
                {
                    network = Network.Main;
                }

                var ip = pr.RootCommandResult.ValueForOption <string>("rpcip");
                if (String.IsNullOrEmpty(ip))
                {
                    ip = "127.0.0.1";
                }

                var networkProvider       = new NRustLightningNetworkProvider(network.NetworkType);
                var nrustLightningNetwork = networkProvider.GetByCryptoCode(pr.RootCommandResult.ValueForOption <string>("cryptocode") ?? "btc");

                var port = pr.RootCommandResult.ValueForOption <int>("rpcport");
                if (port == 0)
                {
                    port = 80;
                }
                var baseUrl = $"http://{ip}:{port}";
                var client  = new NRustLightningClient(baseUrl, nrustLightningNetwork);

                var subCommand = pr.CommandResult.Symbol.Name;
                Console.WriteLine($"Subcomamnd is {subCommand}");
                if (subCommand == SubCommands.GetInfo)
                {
                    var nodeInfo = client.GetInfoAsync().Result;
                    Console.WriteLine(nodeInfo.ConnectionString);
                }
                else
                {
                    throw new ArgumentException($"Unknown sub command {subCommand}");
                }
                return;
            });
            var commandLine = new CommandLineBuilder(command).UseDefaults()
                              .Build();
            await commandLine.InvokeAsync(args);
        }