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); }
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); }
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}'"); } }
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(); }
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); }
#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(); }
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); } }
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); }
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 }) }; });
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); }
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(); }
/// <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()); } }
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); }
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()); } }
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); }
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(); }
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); }
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(); }
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(); }
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); }
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); } }