Exemplo n.º 1
0
        public async Task CanSendOpenCloseChannelRequest()
        {
            var hostBuilder = new HostBuilder().ConfigureTestHost();

            using var host = await hostBuilder.StartAsync();

            var c = host.GetTestNRustLightningClient();
            var i = new Key().PubKey;

            // push_msat is larger than channel_value. so RL must complain about it.
            var request = new OpenChannelRequest {
                TheirNetworkKey = i, ChannelValueSatoshis = 100000, PushMSat = 10000000000000
            };
            var ex = await Assert.ThrowsAsync <HttpRequestException>(async() => await c.OpenChannelAsync(request));

            Assert.Contains("Unknown peer", ex.Message);

            // overriding config with bogus value will cause an error. (too short too-self-delay)
            var overrideConfig        = UserConfig.GetDefault();
            var bogusOwnChannelConfig = Adaptors.ChannelHandshakeConfig.GetDefault();

            bogusOwnChannelConfig.OurToSelfDelay = 1;
            overrideConfig.OwnChannelConfig      = bogusOwnChannelConfig;
            request.OverrideConfig = overrideConfig;
            ex = await Assert.ThrowsAsync <HttpRequestException>(async() => await c.OpenChannelAsync(request));

            Assert.Contains("Unknown peer", ex.Message);
        }
Exemplo n.º 2
0
 static NRustLightningDefaultSettings()
 {
     _Settings = new Dictionary <NetworkType, NRustLightningDefaultSettings>();
     foreach (var nType in new [] { NetworkType.Mainnet, NetworkType.Testnet, NetworkType.Regtest })
     {
         var settings = new NRustLightningDefaultSettings();
         _Settings.Add(nType, settings);
         settings.DefaultDataDir           = StandardConfiguration.DefaultDataDirectory.GetDirectory("NRustLightning", GetFolderName(nType), false);
         settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDir, "nrustlightning.conf");
         settings.DefaultCookieFile        = Path.Combine(settings.DefaultDataDir, ".cookie");
         settings.NBXplorerSettings        = NBXplorerDefaultSettings.GetDefaultSettings(nType);
         settings.DefaultPort         = Constants.DefaultP2PPort;
         settings.RustLightningConfig = UserConfig.GetDefault();
     }
 }
        public void RegistrationTests()
        {
            var keySeed             = new byte[] { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
            var keysInterface       = new KeysManager(keySeed, DateTime.UnixEpoch);
            var logger              = new TestLogger();
            var broadcaster         = new TestBroadcaster();
            var feeEstiamtor        = new TestFeeEstimator();
            var n                   = NBitcoin.Network.TestNet;
            var chainWatchInterface = new ChainWatchInterfaceUtil(n);

            using var blockNotifier      = BlockNotifier.Create(chainWatchInterface);
            using var manyChannelMonitor =
                      ManyChannelMonitor.Create(n, chainWatchInterface, broadcaster, logger, feeEstiamtor);

            blockNotifier.RegisterManyChannelMonitor(manyChannelMonitor);

            using var channelManager = ChannelManager.Create(n, UserConfig.GetDefault(), chainWatchInterface, keysInterface, logger, broadcaster, feeEstiamtor, 0, manyChannelMonitor);
            blockNotifier.RegisterChannelManager(channelManager);

            // second block in testnet3
            var block = (Block.Parse("0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000", n));

            blockNotifier.BlockConnected(block, 1);

            var b = manyChannelMonitor.Serialize(_pool);

            var(manyChannelMonitor2, keyToHeaderHash) = ManyChannelMonitor.Deserialize(new ManyChannelMonitorReadArgs(chainWatchInterface, broadcaster, logger, feeEstiamtor, n), b.AsMemory(), _pool);
            using (manyChannelMonitor2)
            {
                Assert.True(NBitcoin.Utils.ArrayEqual(b, manyChannelMonitor2.Serialize(_pool)));
                // without creating any channel, it will result to empty.
                Assert.Empty(keyToHeaderHash);
            }

            blockNotifier.UnregisterManyChannelMonitor(manyChannelMonitor);
            blockNotifier.UnregisterChannelManager(channelManager);
        }
Exemplo n.º 4
0
        public void CanConvertJsonTypes()
        {
            var invoice =
                "lnbc1p0vhtzvpp5akajlfqdj6ek7eeh4kae6gc05fz9j99n8jadatqt4fmlwwxwx4zsnp4q2uqg2j52gxtxg5d0v928h5pll95ynsaek2csgfg26tvuzydgjrwgdqhdehjqer9wd3hy6tsw35k7msna3vtx";
            var paymentRequest = PaymentRequest.Parse(invoice);
            var resp           = new InvoiceResponse()
            {
                Invoice = paymentRequest.ResultValue
            };
            var j = JsonSerializer.Serialize(resp);

            JsonSerializer.Deserialize <InvoiceResponse>(j);
            var invoiceResponseRaw = "{\"invoice\":\"lnbc1p0vma42pp5t2v5ehyay3x9g8769gqkrhmdlqjq0kc8ksqfxu3xjw7s2y96jegqnp4q2uqg2j52gxtxg5d0v928h5pll95ynsaek2csgfg26tvuzydgjrwgdqhdehjqer9wd3hy6tsw35k7ms3xhenl\"}";

            JsonSerializer.Deserialize <InvoiceResponse>(invoiceResponseRaw);


            var conf = UserConfig.GetDefault();

            j = JsonSerializer.Serialize(conf);
            var v = JsonSerializer.Deserialize <UserConfig>(j);

            Assert.Equal(conf.ChannelOptions.AnnouncedChannel, v.ChannelOptions.AnnouncedChannel);

            var openChannelRequest = new OpenChannelRequest();

            j = JsonSerializer.Serialize(openChannelRequest);
            var conv = JsonSerializer.Deserialize <OpenChannelRequest>(j);

            Assert.Equal(openChannelRequest.OverrideConfig, conv.OverrideConfig);

            // with custom config
            openChannelRequest.OverrideConfig = UserConfig.GetDefault();
            j = JsonSerializer.Serialize(openChannelRequest);
            // Don't know why but we must specify option here.
            var opt = new JsonSerializerOptions();

            opt.Converters.Add(new NullableStructConverterFactory());
            conv = JsonSerializer.Deserialize <OpenChannelRequest>(j, opt);

            Assert.True(conv.OverrideConfig.HasValue);
            Assert.Equal(openChannelRequest.OverrideConfig.Value.ChannelOptions.AnnouncedChannel, conv.OverrideConfig.Value.ChannelOptions.AnnouncedChannel);
            j =
                "{\"TheirNetworkKey\":\"024a8b7fc86957537bb365cc0242255582d3d40a5532489f67e700a89bcac2f010\",\"ChannelValueSatoshis\":100000,\"PushMSat\":1000,\"OverrideConfig\":null}";
            openChannelRequest = JsonSerializer.Deserialize <OpenChannelRequest>(j, new JsonSerializerOptions()
            {
                Converters = { new HexPubKeyConverter() }
            });
            Assert.Equal(100000UL, openChannelRequest.ChannelValueSatoshis);
            Assert.Equal(1000UL, openChannelRequest.PushMSat);
            Assert.NotNull(openChannelRequest.TheirNetworkKey);

            // wallet info
            j =
                "{\"DerivationStrategy\":\"tpubDBte1PdX36pt167AFbKpHwFJqZAVVRuJSadZ49LdkX5JJbJCNDc8JQ7w5GdaDZcUXm2SutgwjRuufwq4q4soePD4fPKSZCUhqDDarKRCUen\",\"OnChainBalanceSatoshis\":0}";
            var networkProvider = new NRustLightningNetworkProvider(NetworkType.Regtest);
            var btcNetwork      = networkProvider.GetByCryptoCode("BTC");
            var walletInfo      = JsonSerializer.Deserialize <WalletInfo>(j, new JsonSerializerOptions {
                Converters = { new DerivationStrategyJsonConverter(btcNetwork.NbXplorerNetwork.DerivationStrategyFactory) }
            });

            // FeatureBit
            var featureBit = FeatureBit.TryParse("0b000000100100000100000000").ResultValue;
            var opts       = new JsonSerializerOptions()
            {
                Converters = { new FeatureBitJsonConverter() }
            };

            j = JsonSerializer.Serialize(featureBit, opts);
            Assert.Contains("prettyPrint", j);
            var featureBit2 = JsonSerializer.Deserialize <FeatureBit>(j, opts);

            Assert.Equal(featureBit, featureBit2);
        }