Esempio n. 1
0
        /// <summary>Creates a new block with mocked serialized size.</summary>
        public Block GenerateBlock(long size)
        {
            Block block = new StraxMain().Consensus.ConsensusFactory.CreateBlock();

            block.SetPrivatePropertyValue("BlockSize", size);

            return(block);
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        public void MaxReorgIsCalculatedProperly()
        {
            var btc = new BitcoinMain();

            int maxReorgBtc = AddressIndexer.GetMaxReorgOrFallbackMaxReorg(btc);

            Assert.Equal(maxReorgBtc, AddressIndexer.FallBackMaxReorg);

            var stratis = new StraxMain();

            int maxReorgStratis = AddressIndexer.GetMaxReorgOrFallbackMaxReorg(stratis);

            Assert.Equal(maxReorgStratis, (int)stratis.Consensus.MaxReorgLength);
        }
        public void GivenApiUriIsProvided_AndGivenStratisNetwork_ThenApiUriIsUsedWithDefaultStratisApiPort()
        {
            // Arrange.
            string  customApiUri = "http://0.0.0.0";
            Network network      = new StraxMain();
            var     nodeSettings = new NodeSettings(network, args: new[] { $"-apiuri={customApiUri}" });

            // Act.
            ApiSettings settings = FullNodeSetup(nodeSettings);

            // Assert.
            Assert.Equal(network.DefaultAPIPort, settings.ApiPort);
            Assert.Equal(new Uri($"{customApiUri}:{network.DefaultAPIPort}"), settings.ApiUri);
        }
        public void GivenNoApiSettingsAreProvided_AndOnStratisNetwork_ThenDefaultSettingAreUsed()
        {
            // Arrange.
            Network network      = new StraxMain();
            var     nodeSettings = new NodeSettings(network);

            // Act.
            ApiSettings settings = FullNodeSetup(nodeSettings);

            // Assert.
            Assert.Equal(network.DefaultAPIPort, settings.ApiPort);
            Assert.Equal(new Uri($"{ApiSettings.DefaultApiHost}:{network.DefaultAPIPort}"), settings.ApiUri);

            settings.HttpsCertificateFilePath.Should().BeNull();
            settings.UseHttps.Should().BeFalse();
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        public void Eight_Of_Fifteen_SufficientlyFunded()
        {
            var network = new StraxMain();

            const int n = 15;
            const int m = 8;

            Key[] keys = new Key[n];

            Key ultimateReceiver = new Key();

            for (int i = 0; i < n; i++)
            {
                keys[i] = new Key();
            }

            Script redeemScript = PayToMultiSigTemplate.Instance.GenerateScriptPubKey(m, keys.Select(x => x.PubKey).ToArray());

            const int     inputCount         = 50;
            const decimal fundingInputAmount = 100;
            const decimal fundingAmount      = 99; // Must be less than fundingInputAmount.

            var multiSigCoins = new List <ICoin>();

            for (int i = 0; i < inputCount; i++)
            {
                var builder = new TransactionBuilder(network);

                // Build transactions to fund the multisig
                Transaction funding = builder
                                      .AddCoins(GetCoinSource(keys[0], new[] { Money.Coins(fundingInputAmount) }))
                                      .AddKeys(keys[0])
                                      .Send(redeemScript.Hash, Money.Coins(fundingAmount))
                                      .SetChange(keys[0].PubKey.Hash)
                                      .SendFees(Money.Satoshis(5000))
                                      .BuildTransaction(true);

                multiSigCoins.Add(ScriptCoin.Create(network, funding, funding.Outputs.To(redeemScript.Hash).First(), redeemScript));
            }

            var fedPegSettings = new FederatedPegSettings(new NodeSettings(network, args: new string[]
            {
                "mainchain",
                "redeemscript=" + redeemScript.ToString(),
                "publickey=" + keys[0].PubKey.ToHex(),
                "federationips=0.0.0.0"
            }));

            // Construct the withdrawal tx
            var         txBuilder = new TransactionBuilder(network);
            Transaction tx        = txBuilder
                                    .AddCoins(multiSigCoins)
                                    .AddKeys(keys.Take(m).ToArray())
                                    .Send(ultimateReceiver.PubKey.Hash, Money.Coins(inputCount * fundingAmount - 1))
                                    .SetChange(redeemScript.Hash)
                                    .SendFees(fedPegSettings.GetWithdrawalTransactionFee(inputCount))
                                    .BuildTransaction(true);

            bool verify = txBuilder.Verify(tx, out TransactionPolicyError[] errors);

            Assert.True(verify);
        }