public void GivenApiUriIncludingPortIsProvided_ThenUseThePassedApiUri()
        {
            // Arrange.
            int          customPort   = 5522;
            string       customApiUri = $"http://0.0.0.0:{customPort}";
            Network      network      = Network.Main;
            NodeSettings nodeSettings = new NodeSettings(network, args: new[] { $"-apiuri={customApiUri}" }, loadConfiguration: false);

            // Act.
            ApiSettings settings = new FullNodeBuilder()
                                   .UseNodeSettings(nodeSettings)
                                   .UseApi()
                                   .Build()
                                   .NodeService <ApiSettings>();

            settings.Load(nodeSettings);

            // Assert.
            Assert.Equal(customPort, settings.ApiPort);
            Assert.Equal(new Uri($"{customApiUri}"), settings.ApiUri);
        }
        public void GivenApiUri_AndApiPortIsProvided_AndGivenBitcoinNetwork_ThenApiUriIsUsedWithApiPort()
        {
            // Arrange.
            string       customApiUri = "http://0.0.0.0";
            int          customPort   = 55555;
            Network      network      = Network.Main;
            NodeSettings nodeSettings = new NodeSettings(network, args: new[] { $"-apiuri={customApiUri}", $"-apiport={customPort}" }, loadConfiguration: false);

            // Act.
            ApiSettings settings = new FullNodeBuilder()
                                   .UseNodeSettings(nodeSettings)
                                   .UseApi()
                                   .Build()
                                   .NodeService <ApiSettings>();

            settings.Load(nodeSettings);

            // Assert.
            Assert.Equal(customPort, settings.ApiPort);
            Assert.Equal(new Uri($"{customApiUri}:{customPort}"), settings.ApiUri);
        }
        public void GivenNoApiSettingsAreProvided_AndOnStratisNetwork_ThenDefaultSettingAreUsed()
        {
            // Arrange.
            Transaction.TimeStamp = true;
            Block.BlockSignature  = true;
            Network      network      = Network.StratisMain;
            NodeSettings nodeSettings = new NodeSettings(network, loadConfiguration: false);

            // Act.
            ApiSettings settings = new FullNodeBuilder()
                                   .UseNodeSettings(nodeSettings)
                                   .UseApi()
                                   .Build()
                                   .NodeService <ApiSettings>();

            settings.Load(nodeSettings);

            // Assert.
            Assert.Equal(ApiSettings.DefaultStratisApiPort, settings.ApiPort);
            Assert.Equal(new Uri($"{ApiSettings.DefaultApiHost}:{ApiSettings.DefaultStratisApiPort}"), settings.ApiUri);
        }
Пример #4
0
        private static IFullNode GetFederatedPegFullNode(NodeSettings nodeSettings)
        {
            IFullNode node = new FullNodeBuilder()
                             .UseNodeSettings(nodeSettings)
                             .UseBlockStore()
                             .UseMempool()
                             .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts();
            })
                             .UseSmartContractPoAConsensus()
                             .UseSmartContractPoAMining()
                             .UseSmartContractWallet()
                             .UseApi()
                             .AddRPC()
                             .UseDns()
                             .Build();

            return(node);
        }
Пример #5
0
        public static async Task MainAsync(string[] args)
        {
            try
            {
                Network network = null;
                if (args.Contains("-testnet"))
                {
                    network = Network.DeStreamTest;
                }
                else
                {
                    network = Network.DeStreamMain;
                }

                DeStreamNodeSettings nodeSettings = new DeStreamNodeSettings(network, ProtocolVersion.ALT_PROTOCOL_VERSION, args: args, loadConfiguration: false);

                Console.WriteLine($"current network: {network.Name}");

                // NOTES: running BTC and STRAT side by side is not possible yet as the flags for serialization are static
                var node = new FullNodeBuilder()
                           .UseNodeSettings(nodeSettings)
                           .UseBlockStore()
                           .UsePosConsensus()
                           .UseMempool()
                           .UseWallet()
                           .AddPowPosMining()
                           .UseApi()
                           .AddRPC()
                           .Build();

                if (node != null)
                {
                    await node.RunAsync();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.Message);
            }
        }
        public static async Task Main(string[] args)
        {
            try
            {
                if (!ContainsDataDirRoot(args))
                {
                    args = AddDefaultDataDirRoot(args);
                }

                var nodeSettings = new NodeSettings(
                    networksSelector: Networks.Solaris,
                    protocolVersion: ProtocolVersion.PROTOCOL_VERSION,
                    agent: Agent,
                    args: args)
                {
                    MinProtocolVersion = ProtocolVersion.PROTOCOL_VERSION
                };

                IFullNode node = new FullNodeBuilder()
                                 .UseNodeSettings(nodeSettings)
                                 .UseBlockStore()
                                 .UsePosConsensus()
                                 .UseMempool()
                                 .UseColdStakingWallet()
                                 .AddPowPosMining()
                                 .UseApi()
                                 .UseApps()
                                 .AddRPC()
                                 .Build();

                if (node != null)
                {
                    await node.RunAsync();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"There was a problem initializing the node. Details: '{ex}'");
            }
        }
Пример #7
0
        public override void BuildNode()
        {
            NodeSettings settings = null;

            if (string.IsNullOrEmpty(this.Agent))
            {
                settings = new NodeSettings(this.Network, args: new string[] { "-conf=bitcoin.conf", "-datadir=" + this.DataFolder });
            }
            else
            {
                settings = new NodeSettings(this.Network, agent: this.Agent, args: new string[] { "-conf=bitcoin.conf", "-datadir=" + this.DataFolder });
            }

            var builder = new FullNodeBuilder()
                          .UseNodeSettings(settings)
                          .UseBlockStore()
                          .UsePowConsensus()
                          .UseMempool()
                          .AddMining()
                          .UseWallet()
                          .AddRPC()
                          .UseApi()
                          .UseTestChainedHeaderTree()
                          .MockIBD();

            ConfigureInterceptors(builder);

            if (this.ServiceToOverride != null)
            {
                builder.OverrideService <BaseFeature>(this.ServiceToOverride);
            }

            if (!this.EnablePeerDiscovery)
            {
                builder.RemoveImplementation <PeerConnectorDiscovery>();
                builder.ReplaceService <IPeerDiscovery>(new PeerDiscoveryDisabled());
            }

            this.FullNode = (FullNode)builder.Build();
        }
Пример #8
0
        public void CanHaveAllFullnodeServicesTest()
        {
            // This test is put in the mempool feature because the
            // mempool requires all the features to be a fullnode.

            var nodeSettings = new NodeSettings(KnownNetworks.TestNet, args: new string[] {
                $"-datadir=Blockcore.Features.MemoryPool.Tests/TestData/FullNodeBuilderTest/CanHaveAllServicesTest"
            });

            var persistenceManager = new TestPersistenceProviderManager(nodeSettings);

            var       fullNodeBuilder = new FullNodeBuilder(nodeSettings, persistenceManager);
            IFullNode fullNode        = fullNodeBuilder
                                        .UseBlockStore()
                                        .UsePowConsensus()
                                        .UseMempool()
                                        .Build();

            IServiceProvider serviceProvider = fullNode.Services.ServiceProvider;
            var network             = serviceProvider.GetService <Network>();
            var settings            = serviceProvider.GetService <NodeSettings>();
            var consensusManager    = serviceProvider.GetService <IConsensusManager>() as ConsensusManager;
            var chain               = serviceProvider.GetService <ChainIndexer>();
            var chainState          = serviceProvider.GetService <IChainState>() as ChainState;
            var consensusRuleEngine = serviceProvider.GetService <IConsensusRuleEngine>();

            consensusRuleEngine.SetupRulesEngineParent();
            var mempoolManager    = serviceProvider.GetService <MempoolManager>();
            var connectionManager = serviceProvider.GetService <IConnectionManager>() as ConnectionManager;

            Assert.NotNull(fullNode);
            Assert.NotNull(network);
            Assert.NotNull(settings);
            Assert.NotNull(consensusManager);
            Assert.NotNull(chain);
            Assert.NotNull(chainState);
            Assert.NotNull(consensusRuleEngine);
            Assert.NotNull(mempoolManager);
            Assert.NotNull(connectionManager);
        }
Пример #9
0
#pragma warning disable IDE1006 // Naming Styles

        public static async Task Main(string[] args)
#pragma warning restore IDE1006 // Naming Styles
        {
            try
            {
                var nodeSettings = new NodeSettings(networksSelector: Networks.X1, args: args);

                // extra support during network upgrade
                if (nodeSettings.Network is X1Main && DateTime.UtcNow < new DateTime(2021, 03, 01).AddSeconds(-1)) // till end of Feb
                {
                    string[] extraAddnodes = { "46.101.168.197", "134.122.89.152", "161.35.156.96" };
                    var      argList       = args.ToList();
                    foreach (var ip in extraAddnodes)
                    {
                        argList.Add($"-addnode={ip}");
                        argList.Add($"-whitelist={ip}");
                    }
                    argList.Add("iprangefiltering=0");
                    nodeSettings = new NodeSettings(networksSelector: Networks.X1, args: argList.ToArray());
                }

                IFullNodeBuilder nodeBuilder = new FullNodeBuilder()
                                               .UseNodeSettings(nodeSettings)
                                               .UseBlockStore()
                                               .UsePosConsensus()
                                               .UseMempool()
                                               .UseColdStakingWallet()
                                               .AddPowPosMining()
                                               .UseNodeHost()
                                               .AddRPC()
                                               .UseDiagnosticFeature();

                await nodeBuilder.Build().RunAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.ToString());
            }
        }
        public override void BuildNode()
        {
            var settings = new NodeSettings(this.Network, args: new string[] { "-conf=bitcoin.conf", "-datadir=" + this.DataFolder });

            var builder = new FullNodeBuilder()
                          .UseNodeSettings(settings)
                          .UseBlockStore()
                          .UsePowConsensus()
                          .UseMempool()
                          .AddMining()
                          .UseWallet()
                          .AddRPC()
                          .UseApi()
                          .MockIBD();

            if (this.ServiceToOverride != null)
            {
                builder.OverrideService <BaseFeature>(this.ServiceToOverride);
            }

            this.FullNode = (FullNode)builder.Build();
        }
Пример #11
0
        public void GivenApiUriIsProvided_AndGivenStratisNetwork_ThenApiUriIsUsedWithDefaultStratisApiPort()
        {
            // Arrange.
            Transaction.TimeStamp = true;
            Block.BlockSignature  = true;
            string       customApiUri = "http://0.0.0.0";
            Network      network      = Network.StratisMain;
            NodeSettings nodeSettings = new NodeSettings(network, args: new[] { $"-apiuri={customApiUri}" }, loadConfiguration: false);

            // Act.
            ApiSettings settings = new FullNodeBuilder()
                                   .UseNodeSettings(nodeSettings)
                                   .UseApi()
                                   .Build()
                                   .NodeService <ApiSettings>();

            settings.Load(nodeSettings);

            // Assert.
            Assert.Equal(ApiSettings.DefaultStratisApiPort, settings.ApiPort);
            Assert.Equal(new Uri($"{customApiUri}:{ApiSettings.DefaultStratisApiPort}"), settings.ApiUri);
        }
        public void CanHaveAllFullnodeServicesTest()
        {
            // This test is put in the mempool feature because the
            // mempool requires all the features to be a fullnode


            NodeSettings nodeSettings = new NodeSettings(args: new string[] {
                $"-datadir=Stratis.Bitcoin.Features.MemoryPool.Tests/TestData/FullNodeBuilderTest/CanHaveAllServicesTest"
            });
            var       fullNodeBuilder = new FullNodeBuilder(nodeSettings);
            IFullNode fullNode        = fullNodeBuilder
                                        .UseBlockStore()
                                        .UsePowConsensus()
                                        .UseMempool()
                                        .Build();

            IServiceProvider serviceProvider = fullNode.Services.ServiceProvider;
            var network           = serviceProvider.GetService <Network>();
            var settings          = serviceProvider.GetService <NodeSettings>();
            var consensusLoop     = serviceProvider.GetService <IConsensusLoop>() as ConsensusLoop;
            var chain             = serviceProvider.GetService <NBitcoin.ConcurrentChain>();
            var chainState        = serviceProvider.GetService <IChainState>() as ChainState;
            var blockStoreManager = serviceProvider.GetService <BlockStoreManager>();
            var consensusRules    = serviceProvider.GetService <IConsensusRules>();

            consensusRules.Register(serviceProvider.GetService <IRuleRegistration>());
            var mempoolManager    = serviceProvider.GetService <MempoolManager>();
            var connectionManager = serviceProvider.GetService <IConnectionManager>() as ConnectionManager;

            Assert.NotNull(fullNode);
            Assert.NotNull(network);
            Assert.NotNull(settings);
            Assert.NotNull(consensusLoop);
            Assert.NotNull(chain);
            Assert.NotNull(chainState);
            Assert.NotNull(blockStoreManager);
            Assert.NotNull(mempoolManager);
            Assert.NotNull(connectionManager);
        }
        public static async Task MainAsync(string[] args)
        {
            try
            {
                NodeSettings nodeSettings = new NodeSettings().LoadArguments(args);

                var node = new FullNodeBuilder()
                           .UseNodeSettings(nodeSettings)
                           .UseConsensus()
                           .UseBlockStore()
                           .UseMempool()
                           .AddMining()
                           .AddRPC()
                           .Build();

                await node.RunAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.Message);
            }
        }
Пример #14
0
        private static IFullNode GetSideChainFullNode(NodeSettings nodeSettings)
        {
            IFullNodeBuilder nodeBuilder = new FullNodeBuilder()
                                           .UseNodeSettings(nodeSettings)
                                           .UseBlockStore()
                                           .UseMempool()
                                           .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts();
            })
                                           .UseSmartContractPoAConsensus()
                                           .UseSmartContractPoAMining()
                                           .UseSmartContractWallet()
                                           .AddTicketboothApi()

                                           /** must wait for API changes to be merged (stratisproject/StratisBitcoinFullNode/pull/4126)
                                            * .UseApi()
                                            **/;

            return(nodeBuilder.Build());
        }
        public void BuildWithInitialServicesSetupConfiguresFullNodeUsingConfiguration()
        {
            string dataDir      = "TestData/FullNodeBuilder/BuildWithInitialServicesSetup";
            var    nodeSettings = new NodeSettings(KnownNetworks.StratisRegTest, args: new string[] { $"-datadir={dataDir}" });

            this.fullNodeBuilder = new FullNodeBuilder(nodeSettings, this.serviceCollectionDelegates, this.serviceProviderDelegates, this.featureCollectionDelegates, this.featureCollection);

            this.fullNodeBuilder.ConfigureServices(e =>
            {
                e.AddSingleton <FullNode>();
                e.AddSingleton(nodeSettings.LoggerFactory);
            });

            this.fullNodeBuilder.ConfigureFeature(e =>
            {
                e.AddFeature <DummyFeature>();
            });

            IFullNode result = this.fullNodeBuilder.UsePosConsensus().Build();

            Assert.NotNull(result);
        }
Пример #16
0
        private static IFullNode GetSideChainFullNode(NodeSettings nodeSettings)
        {
            IFullNodeBuilder nodeBuilder = new FullNodeBuilder()
                                           .UseNodeSettings(nodeSettings)
                                           .UseBlockStore()
                                           .UseMempool()
                                           .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts();
            })
                                           .UseSmartContractPoAConsensus()
                                           .UseSmartContractPoAMining()         // TODO: this needs to be refactored and removed as it does not make sense to call this for non-mining nodes.
                                           .CheckForPoAMembersCollateral(false) // This is a non-mining node so we will only check the commitment height data and not do the full set of collateral checks.
                                           .UseSmartContractWallet()
                                           .AddSQLiteWalletRepository()
                                           .UseApi()
                                           .AddRPC()
                                           .UseDiagnosticFeature();

            if (nodeSettings.EnableSignalR)
            {
                nodeBuilder.AddSignalR(options =>
                {
                    options.EventsToHandle = new[]
                    {
                        (IClientEvent) new BlockConnectedClientEvent(),
                        new TransactionReceivedClientEvent()
                    };

                    options.ClientEventBroadcasters = new[]
                    {
                        (Broadcaster: typeof(CirrusWalletInfoBroadcaster),
                         ClientEventBroadcasterSettings: new ClientEventBroadcasterSettings
                        {
                            BroadcastFrequencySeconds = 5
                        })
                    };
                });
Пример #17
0
        public override void BuildNode()
        {
            var settings = new NodeSettings(this.Network, ProtocolVersion.PROVEN_HEADER_VERSION, this.Agent, args: new string[] { "-conf=stratis.conf", "-datadir=" + this.DataFolder });

            var builder = new FullNodeBuilder()
                          .UseNodeSettings(settings)
                          .UseBlockStore()
                          .UsePosConsensus()
                          .UseMempool()
                          .UseWallet()
                          .AddPowPosMining()
                          .AddRPC()
                          .UseApi()
                          .UseTestChainedHeaderTree()
                          .MockIBD();

            if (this.OverrideDateTimeProvider)
            {
                builder.OverrideDateTimeProviderFor <MiningFeature>();
            }

            if (this.InterceptorDisconnect != null)
            {
                builder = builder.InterceptBlockDisconnected(this.InterceptorDisconnect);
            }

            if (this.InterceptorConnect != null)
            {
                builder = builder.InterceptBlockConnected(this.InterceptorConnect);
            }

            if (!this.EnablePeerDiscovery)
            {
                builder.RemoveImplementation <PeerConnectorDiscovery>();
                builder.ReplaceService <IPeerDiscovery>(new PeerDiscoveryDisabled());
            }

            this.FullNode = (FullNode)builder.Build();
        }
        public void CanHaveAllFullnodeServicesTest()
        {
            // This test is put in the mempool feature because the
            // mempool requires all the features to be a fullnode


            var nodeSettings = NodeSettings.Default();

            nodeSettings.DataDir = "Stratis.Bitcoin.Features.MemoryPool.Tests/TestData/FullNodeBuilderTest/CanHaveAllServicesTest";
            var       fullNodeBuilder = new FullNodeBuilder(nodeSettings);
            IFullNode fullNode        = fullNodeBuilder
                                        .UseConsensus()
                                        .UseBlockStore()
                                        .UseMempool()
                                        .Build();

            IServiceProvider serviceProvider = fullNode.Services.ServiceProvider;
            var network           = serviceProvider.GetService <Network>();
            var settings          = serviceProvider.GetService <NodeSettings>();
            var consensusLoop     = serviceProvider.GetService <IConsensusLoop>() as ConsensusLoop;
            var consensus         = serviceProvider.GetService <IPowConsensusValidator>() as PowConsensusValidator;
            var chain             = serviceProvider.GetService <NBitcoin.ConcurrentChain>();
            var chainState        = serviceProvider.GetService <IChainState>() as ChainState;
            var blockStoreManager = serviceProvider.GetService <BlockStoreManager>();
            var mempoolManager    = serviceProvider.GetService <MempoolManager>();
            var connectionManager = serviceProvider.GetService <IConnectionManager>() as ConnectionManager;

            Assert.NotNull(fullNode);
            Assert.NotNull(network);
            Assert.NotNull(settings);
            Assert.NotNull(consensusLoop);
            Assert.NotNull(consensus);
            Assert.NotNull(chain);
            Assert.NotNull(chainState);
            Assert.NotNull(blockStoreManager);
            Assert.NotNull(mempoolManager);
            Assert.NotNull(connectionManager);
        }
Пример #19
0
        public override void BuildNode()
        {
            var settings = new NodeSettings(this.Network, args: new string[] { "-conf=poa.conf", "-datadir=" + this.DataFolder });

            IFullNodeBuilder builder = new FullNodeBuilder()
                                       .UseNodeSettings(settings)
                                       .UseBlockStore()
                                       .SetCounterChainNetwork(this.counterChainNetwork)
                                       .AddPoAFeature()
                                       .UsePoAConsensus()
                                       .AddFederatedPeg()
                                       .AddPoACollateralMiningCapability <FederatedPegBlockDefinition>()
                                       .CheckCollateralCommitment()
                                       .UseTransactionNotification()
                                       .UseBlockNotification()
                                       .UseApi()
                                       .UseMempool()
                                       .AddRPC()
                                       .AddExternalApi()
                                       .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts();
            })
                                       .AddInteroperability()
                                       .UseSmartContractWallet()
                                       .AddSQLiteWalletRepository()
                                       .MockIBD()
                                       .ReplaceTimeProvider(this.timeProvider)
                                       .AddFastMiningCapability();

            if (!this.testingFederation)
            {
                builder.UseTestFedPegBlockDefinition();
            }

            this.FullNode = (FullNode)builder.Build();
        }
Пример #20
0
        /// <summary>
        /// The async entry point for the Stratis Dns process.
        /// </summary>
        /// <param name="args">Command line arguments.</param>
        /// <returns>A task used to await the operation.</returns>
        public static async Task MainAsync(string[] args)
        {
            try
            {
                var nodeSettings = new NodeSettings(networksSelector: FederatedPegNetwork.NetworksSelector, protocolVersion: ProtocolVersion.ALT_PROTOCOL_VERSION, args: args);

                var dnsSettings = new DnsSettings(nodeSettings);

                if (string.IsNullOrWhiteSpace(dnsSettings.DnsHostName) || string.IsNullOrWhiteSpace(dnsSettings.DnsNameServer) || string.IsNullOrWhiteSpace(dnsSettings.DnsMailBox))
                {
                    throw new ConfigurationException("When running as a DNS Seed service, the -dnshostname, -dnsnameserver and -dnsmailbox arguments must be specified on the command line.");
                }

                // Build the Dns full node.
                IFullNode node = new FullNodeBuilder()
                                 .UseNodeSettings(nodeSettings)
                                 .UseBlockStore()
                                 .AddSmartContracts()
                                 .UseSmartContractPoAConsensus()
                                 .UseSmartContractPoAMining()
                                 .UseSmartContractWallet()
                                 .UseReflectionExecutor()
                                 .UseMempool()
                                 .UseApi()
                                 .UseDns()
                                 .Build();

                // Run node.
                if (node != null)
                {
                    await node.RunAsync();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.ToString());
            }
        }
Пример #21
0
        private static IFullNode BuildDevCirrusMiningNode(string[] args)
        {
            string[] devModeArgs = new[] { "-bootstrap=1", "-defaultwalletname=cirrusdev", "-defaultwalletpassword=password" }.Concat(args).ToArray();
            var      network = new CirrusDev();

            var nodeSettings = new NodeSettings(network, protocolVersion: ProtocolVersion.CIRRUS_VERSION, args: devModeArgs)
            {
                MinProtocolVersion = ProtocolVersion.ALT_PROTOCOL_VERSION
            };

            DbType dbType = nodeSettings.GetDbType();

            IFullNode node = new FullNodeBuilder()
                             .UseNodeSettings(nodeSettings, dbType)
                             .UseBlockStore(dbType)
                             .AddPoAFeature()
                             .UsePoAConsensus(dbType)
                             .AddPoAMiningCapability <SmartContractPoABlockDefinition>()
                             .UseTransactionNotification()
                             .UseBlockNotification()
                             .UseApi()
                             .UseMempool()
                             .AddRPC()
                             .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts(true);
            })
                             .UseSmartContractWallet()
                             .AddSQLiteWalletRepository()
                             .AddSignalR(options =>
            {
                DaemonConfiguration.ConfigureSignalRForCirrus(options);
            })
                             .Build();

            return(node);
        }
Пример #22
0
        public static async Task Main(string[] args)
        {
            try
            {
                var nodeSettings = new NodeSettings(networksSelector: Blockcore.Networks.Xds.Networks.Xds, args: args);

                IFullNodeBuilder nodeBuilder = new FullNodeBuilder()
                                               .UseNodeSettings(nodeSettings)
                                               .UseBlockStore()
                                               .UsePosConsensus()
                                               .UseMempool()
                                               .UseColdStakingWallet()
                                               .AddPowPosMining()
                                               .UseNodeHost()
                                               .AddRPC();

                await nodeBuilder.Build().RunAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine("There was a problem initializing the node. Details: '{0}'", ex.ToString());
            }
        }
Пример #23
0
        private static IFullNode GetFederatedPegFullNode(NodeSettings nodeSettings)
        {
            IFullNode node = new FullNodeBuilder()
                             .UseNodeSettings(nodeSettings)
                             .UseBlockStore()
                             .UseMempool()
                             .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts();
            })
                             .UseSmartContractPoAConsensus()
                             .UseSmartContractPoAMining()         // TODO: this needs to be refactored and removed as it does not make sense to call this for non-mining nodes.
                             .CheckForPoAMembersCollateral(false) // This is a non-mining node so we will only check the commitment height data and not do the full set of collateral checks.
                             .UseSmartContractWallet()
                             .AddSQLiteWalletRepository()
                             .UseApi()
                             .AddRPC()
                             .UseDns()
                             .Build();

            return(node);
        }
Пример #24
0
        private static IFullNode GetSideChainFullNode(NodeSettings nodeSettings)
        {
            IFullNode node = new FullNodeBuilder()
                             .UseNodeSettings(nodeSettings)
                             .UseBlockStore()
                             .UseMempool()
                             .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
                options.UsePoAWhitelistedContracts();
            })
                             .AddPoAFeature()
                             .UsePoAConsensus()
                             .CheckCollateralCommitment()
                             .UseSmartContractWallet()
                             .AddSQLiteWalletRepository()
                             .UseApi()
                             .AddRPC()
                             .UseDns()
                             .Build();

            return(node);
        }
        public void DependencyCheckWithValidDependencies()
        {
            var settings = NodeSettings.Default(KnownNetworks.StratisRegTest);

            IFullNodeBuilder builder = new FullNodeBuilder()
                                       .UsePersistenceProviderMananger(new TestPersistenceProviderManager(settings))
                                       .UseNodeSettings(settings);

            builder.ConfigureFeature(features =>
            {
                features
                .AddFeature <FeatureB>();
            });

            builder.ConfigureFeature(features =>
            {
                features
                .AddFeature <FeatureA>()
                .DependOn <FeatureBase>();
            });

            builder.UsePosConsensus().Build();
        }
Пример #26
0
        public void CanSpecifyRPCSettings()
        {
            var dir = AssureEmptyDir("TestData/StoreSettingsTest/CanSpecifyRPCSettings");

            NodeSettings nodeSettings = NodeSettings.FromArguments(new string[] { $"-datadir={dir}" });

            var node = new FullNodeBuilder()
                       .UseNodeSettings(nodeSettings)
                       .AddRPC(x => {
                x.RpcUser     = "******";
                x.RpcPassword = "******";
                x.RPCPort     = 91;
            })
                       .Build();

            var settings = node.NodeService <RpcSettings>();

            settings.Load(nodeSettings);

            Assert.Equal("abc", settings.RpcUser);
            Assert.Equal("def", settings.RpcPassword);
            Assert.Equal(91, settings.RPCPort);
        }
Пример #27
0
        public static void Main(string[] args)
        {
            Network network = args.Contains("-testnet") ? Network.StratisTest : Network.StratisMain;

            if (NodeSettings.PrintHelp(args, network))
            {
                AzureIndexerSettings.PrintHelp(network);
                return;
            }

            NodeSettings nodeSettings = NodeSettings.FromArguments(args, "stratis", network, ProtocolVersion.ALT_PROTOCOL_VERSION);

            // NOTES: running BTC and STRAT side by side is not possible yet as the flags for serialization are static

            var node = new FullNodeBuilder()
                       .UseNodeSettings(nodeSettings)
                       .UseStratisConsensus()
                       .UseBlockStore()
                       .UseAzureIndexer()
                       .Build();

            node.Run();
        }
Пример #28
0
        public static void Main(string[] args)
        {
            if (NodeSettings.PrintHelp(args, Network.Main))
            {
                return;
            }

            NodeSettings nodeSettings = NodeSettings.FromArguments(args);

            var node = new FullNodeBuilder()
                       .UseNodeSettings(nodeSettings)
                       .UseConsensus()
                       .UseBlockStore()
                       .UseMempool()
                       .AddMining()
                       .AddRPC()
                       .Build();

            // start the miner (this is temporary a miner should be started using RPC.
            Task.Delay(TimeSpan.FromMinutes(1)).ContinueWith((t) => { TryStartMiner(args, node); });

            node.Run();
        }
Пример #29
0
        private static IFullNode GetSidechainFullNode(string[] args)
        {
            var nodeSettings = new NodeSettings(networksSelector: FederatedPegNetwork.NetworksSelector, protocolVersion: ProtocolVersion.ALT_PROTOCOL_VERSION, args: args)
            {
                MinProtocolVersion = ProtocolVersion.ALT_PROTOCOL_VERSION
            };

            var fedPegOptions = new FederatedPegOptions(
                counterChainNetwork: MainChainNetworks[nodeSettings.Network.NetworkType]()
                );

            IFullNode node = new FullNodeBuilder()
                             .AddCommonFeatures(nodeSettings, fedPegOptions)
                             .AddSmartContracts(options =>
            {
                options.UseReflectionExecutor();
            })
                             .UseSmartContractWallet()
                             .UseFederatedPegPoAMining()
                             .Build();

            return(node);
        }
Пример #30
0
        public void StartFullNode(string[] startParameters)
        {
            PosBlockHeader.CustomPoWHash = ObsidianHash.GetObsidianPoWHash;

            try
            {
                var nodeSettings = new NodeSettings(networksSelector: ObsidianNetworksSelector.Obsidian,
                                                    protocolVersion: ProtocolVersion.PROVEN_HEADER_VERSION, agent: $"{GetName()}, StratisNode", args: startParameters)
                {
                    MinProtocolVersion = ProtocolVersion.ALT_PROTOCOL_VERSION
                };

                IFullNodeBuilder builder = new FullNodeBuilder();

                builder = builder.UseNodeSettings(nodeSettings);
                builder = builder.UseBlockStore();
                builder = builder.UsePosConsensus();
                builder = builder.UseMempool();
                builder = builder.UseColdStakingWallet();
                builder = builder.AddPowPosMining();
                //.UseApi()
                builder   = builder.AddRPC();
                _fullNode = (FullNode)builder.Build();

                LogQueue = XamarinLogger.Queue;

                if (_fullNode != null)
                {
                    Task.Run(async() => await RunAsync(_fullNode));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(@"There was a problem initializing or running the node. Details: '{0}'", ex.Message);
                NodeCrashed?.Invoke(this, EventArgs.Empty);
            }
        }