public async Task CanMineVotingRequestTransactionAsync() { var network = new TestPoACollateralNetwork(true, Guid.NewGuid().ToString()); using (PoANodeBuilder builder = PoANodeBuilder.CreatePoANodeBuilder(this)) { string walletName = "mywallet"; string walletPassword = "******"; string walletAccount = "account 0"; Money transferAmount = Money.Coins(0.01m); Money feeAmount = Money.Coins(0.0001m); var counterchainNetwork = new StraxTest(); CoreNode nodeA = builder.CreatePoANodeWithCounterchain(network, counterchainNetwork, network.FederationKey1).WithWallet(walletPassword, walletName).Start(); CoreNode nodeB = builder.CreatePoANodeWithCounterchain(network, counterchainNetwork, network.FederationKey2).WithWallet(walletPassword, walletName).Start(); TestHelper.Connect(nodeA, nodeB); long toMineCount = network.Consensus.PremineHeight + network.Consensus.CoinbaseMaturity + 1 - nodeA.GetTip().Height; // Get coins on nodeA via the premine. await nodeA.MineBlocksAsync((int)toMineCount).ConfigureAwait(false); CoreNodePoAExtensions.WaitTillSynced(nodeA, nodeB); // Create voting-request transaction. var minerKey = new Key(); var collateralKey = new Key(); var request = new JoinFederationRequest(minerKey.PubKey, new Money(CollateralFederationMember.MinerCollateralAmount, MoneyUnit.BTC), collateralKey.PubKey.Hash); // In practice this signature will come from calling the counter-chain "signmessage" API. request.AddSignature(collateralKey.SignMessage(request.SignatureMessage)); var encoder = new JoinFederationRequestEncoder(nodeA.FullNode.NodeService <Microsoft.Extensions.Logging.ILoggerFactory>()); Transaction trx = JoinFederationRequestBuilder.BuildTransaction(nodeA.FullNode.WalletTransactionHandler(), this.network, request, encoder, walletName, walletAccount, walletPassword); await nodeA.FullNode.NodeController <WalletController>().SendTransaction(new SendTransactionRequest(trx.ToHex())); TestBase.WaitLoop(() => nodeA.CreateRPCClient().GetRawMempool().Length == 1 && nodeB.CreateRPCClient().GetRawMempool().Length == 1); await nodeB.MineBlocksAsync((int)toMineCount).ConfigureAwait(false); TestBase.WaitLoop(() => nodeA.CreateRPCClient().GetRawMempool().Length == 0 && nodeB.CreateRPCClient().GetRawMempool().Length == 0); IWalletManager walletManager = nodeB.FullNode.NodeService <IWalletManager>(); TestBase.WaitLoop(() => { long balance = walletManager.GetBalances(walletName, walletAccount).Sum(x => x.AmountConfirmed); return(balance == feeAmount); }); Assert.Single(nodeA.FullNode.NodeService <VotingManager>().GetPendingPolls()); Assert.Single(nodeB.FullNode.NodeService <VotingManager>().GetPendingPolls()); } }
static async Task Main(string[] args) { int stratisNetworkApiPort; int startBlock = 0; Network straxNetwork; string blockExplorerBaseUrl; if (args.Contains("-testnet")) { startBlock = 1528858; stratisNetworkApiPort = 38221; straxNetwork = new StraxTest(); blockExplorerBaseUrl = "https://stratistestindexer1.azurewebsites.net/api/v1/"; } else { startBlock = 1975500; stratisNetworkApiPort = 37221; straxNetwork = new StraxMain(); blockExplorerBaseUrl = "https://stratismainindexer1.azurewebsites.net/api/v1/"; } var arg = args.FirstOrDefault(a => a.StartsWith("-startfrom")); if (arg != null) { int.TryParse(arg.Split('=')[1], out startBlock); } if (args.Contains("-swap")) { var service = new SwapExtractionService(stratisNetworkApiPort, straxNetwork); await service.RunAsync(startBlock, true, false); } if (args.Contains("-swapvote") || args.Contains("-collateralvote")) { var blockExplorerClient = new BlockExplorerClient(blockExplorerBaseUrl); var service = new VoteExtractionService(stratisNetworkApiPort, straxNetwork, blockExplorerClient); if (args.Contains("-collateralvote")) { await service.RunAsync(VoteType.CollateralVote, startBlock); } if (args.Contains("-swapvote")) { await service.RunAsync(VoteType.SwapVote, startBlock); } } }
public void StraxConsensusRulesRegistrationTest() { Network network = new StraxTest(); //new FullNodeBuilderConsensusExtension.PosConsensusRulesRegistration().RegisterRules(network.Consensus); List <Type> headerValidationRules = network.Consensus.ConsensusRules.HeaderValidationRules; headerValidationRules.Count.Should().Be(7); headerValidationRules[0].FullName.Should().Be(typeof(HeaderTimeChecksRule).FullName); headerValidationRules[1].FullName.Should().Be(typeof(HeaderTimeChecksPosRule).FullName); headerValidationRules[2].FullName.Should().Be(typeof(PosFutureDriftRule).FullName); headerValidationRules[3].FullName.Should().Be(typeof(CheckDifficultyPosRule).FullName); headerValidationRules[4].FullName.Should().Be(typeof(StratisHeaderVersionRule).FullName); headerValidationRules[5].FullName.Should().Be(typeof(ProvenHeaderSizeRule).FullName); headerValidationRules[6].FullName.Should().Be(typeof(ProvenHeaderCoinstakeRule).FullName); List <Type> integrityValidationRules = network.Consensus.ConsensusRules.IntegrityValidationRules; integrityValidationRules.Count.Should().Be(3); integrityValidationRules[0].FullName.Should().Be(typeof(BlockMerkleRootRule).FullName); integrityValidationRules[1].FullName.Should().Be(typeof(PosBlockSignatureRepresentationRule).FullName); integrityValidationRules[2].FullName.Should().Be(typeof(PosBlockSignatureRule).FullName); List <Type> partialValidationRules = network.Consensus.ConsensusRules.PartialValidationRules; partialValidationRules.Count.Should().Be(11); partialValidationRules[0].FullName.Should().Be(typeof(SetActivationDeploymentsPartialValidationRule).FullName); partialValidationRules[1].FullName.Should().Be(typeof(PosTimeMaskRule).FullName); partialValidationRules[2].FullName.Should().Be(typeof(TransactionLocktimeActivationRule).FullName); partialValidationRules[3].FullName.Should().Be(typeof(CoinbaseHeightActivationRule).FullName); partialValidationRules[4].FullName.Should().Be(typeof(WitnessCommitmentsRule).FullName); partialValidationRules[5].FullName.Should().Be(typeof(BlockSizeRule).FullName); partialValidationRules[6].FullName.Should().Be(typeof(EnsureCoinbaseRule).FullName); partialValidationRules[7].FullName.Should().Be(typeof(CheckPowTransactionRule).FullName); partialValidationRules[8].FullName.Should().Be(typeof(CheckPosTransactionRule).FullName); partialValidationRules[9].FullName.Should().Be(typeof(CheckSigOpsRule).FullName); partialValidationRules[10].FullName.Should().Be(typeof(StraxCoinstakeRule).FullName); List <Type> fullValidationRules = network.Consensus.ConsensusRules.FullValidationRules; fullValidationRules.Count.Should().Be(7); fullValidationRules[0].FullName.Should().Be(typeof(SetActivationDeploymentsFullValidationRule).FullName); fullValidationRules[1].FullName.Should().Be(typeof(CheckDifficultyHybridRule).FullName); fullValidationRules[2].FullName.Should().Be(typeof(LoadCoinviewRule).FullName); fullValidationRules[3].FullName.Should().Be(typeof(TransactionDuplicationActivationRule).FullName); fullValidationRules[4].FullName.Should().Be(typeof(StraxCoinviewRule).FullName); fullValidationRules[5].FullName.Should().Be(typeof(StraxColdStakingRule).FullName); fullValidationRules[6].FullName.Should().Be(typeof(SaveCoinviewRule).FullName); }
public MaturedBlocksSyncManagerTests() { this.network = new StraxTest(); this.asyncProvider = Substitute.For <IAsyncProvider>(); this.chainIndexer = new ChainIndexer(this.network); this.crossChainTransferStore = Substitute.For <ICrossChainTransferStore>(); this.federationGatewayClient = Substitute.For <IFederationGatewayClient>(); this.federationWalletManager = Substitute.For <IFederationWalletManager>(); this.federationWalletManager.WalletTipHeight.Returns(0); this.initialBlockDownloadState = Substitute.For <IInitialBlockDownloadState>(); this.initialBlockDownloadState.IsInitialBlockDownload().Returns(false); this.syncManager = new TestOnlyMaturedBlocksSyncManager(this.asyncProvider, this.chainIndexer, this.crossChainTransferStore, this.federationGatewayClient, this.federationWalletManager, this.initialBlockDownloadState, new NodeLifetime()); }
static async Task Main(string[] args) { int stratisNetworkApiPort; int startBlock = 0; Network straxNetwork; if (args.Contains("-testnet")) { startBlock = 1_450_000; stratisNetworkApiPort = 38221; straxNetwork = new StraxTest(); } else { startBlock = 1_949_800; stratisNetworkApiPort = 37221; straxNetwork = new StraxMain(); } var service = new SwapExtractionService(stratisNetworkApiPort, straxNetwork); var arg = args.FirstOrDefault(a => a.StartsWith("-startfrom")); if (arg != null) { int.TryParse(arg.Split('=')[1], out startBlock); } if (args.Contains("-swap")) { await service.RunAsync(ExtractionType.Swap, startBlock); } if (args.Contains("-vote")) { await service.RunAsync(ExtractionType.Vote, startBlock); } }