Ejemplo n.º 1
0
        public void WalletCanRecoverOnStartup()
        {
            using (NodeBuilder builder = NodeBuilder.Create())
            {
                var xelsNodeSync = builder.CreateXelsPowNode();
                builder.StartAll();
                xelsNodeSync.NotInIBD();

                // get a key from the wallet
                var mnemonic = xelsNodeSync.FullNode.WalletManager().CreateWallet("123456", "mywallet");
                Assert.Equal(12, mnemonic.Words.Length);
                var addr   = xelsNodeSync.FullNode.WalletManager().GetUnusedAddress(new WalletAccountReference("mywallet", "account 0"));
                var wallet = xelsNodeSync.FullNode.WalletManager().GetWalletByName("mywallet");
                var key    = wallet.GetExtendedPrivateKeyForAddress("123456", addr).PrivateKey;

                xelsNodeSync.SetDummyMinerSecret(key.GetBitcoinSecret(xelsNodeSync.FullNode.Network));
                xelsNodeSync.GenerateXels(10);
                TestHelper.WaitLoop(() => TestHelper.IsNodeSynced(xelsNodeSync));

                // set the tip of best chain some blocks in the apst
                xelsNodeSync.FullNode.Chain.SetTip(xelsNodeSync.FullNode.Chain.GetBlock(xelsNodeSync.FullNode.Chain.Height - 5));

                // stop the node it will persist the chain with the reset tip
                xelsNodeSync.FullNode.Dispose();

                var newNodeInstance = builder.CloneXelsNode(xelsNodeSync);

                // load the node, this should hit the block store recover code
                newNodeInstance.Start();

                // check that store recovered to be the same as the best chain.
                Assert.Equal(newNodeInstance.FullNode.Chain.Tip.HashBlock, newNodeInstance.FullNode.WalletManager().WalletTipHash);
            }
        }
Ejemplo n.º 2
0
        public void BlockStoreCanRecoverOnStartup()
        {
            using (NodeBuilder builder = NodeBuilder.Create())
            {
                var xelsNodeSync = builder.CreateXelsPowNode();
                builder.StartAll();
                xelsNodeSync.NotInIBD();

                // generate blocks and wait for the downloader to pickup
                xelsNodeSync.SetDummyMinerSecret(new BitcoinSecret(new Key(), xelsNodeSync.FullNode.Network));

                xelsNodeSync.GenerateXelsWithMiner(10);
                TestHelper.WaitLoop(() => TestHelper.IsNodeSynced(xelsNodeSync));

                // set the tip of best chain some blocks in the apst
                xelsNodeSync.FullNode.Chain.SetTip(xelsNodeSync.FullNode.Chain.GetBlock(xelsNodeSync.FullNode.Chain.Height - 5));

                // stop the node it will persist the chain with the reset tip
                xelsNodeSync.FullNode.Dispose();

                var newNodeInstance = builder.CloneXelsNode(xelsNodeSync);

                // load the node, this should hit the block store recover code
                newNodeInstance.Start();

                // check that store recovered to be the same as the best chain.
                Assert.Equal(newNodeInstance.FullNode.Chain.Tip.HashBlock, newNodeInstance.FullNode.HighestPersistedBlock().HashBlock);
                //TestHelper.WaitLoop(() => TestHelper.IsNodeSynced(xelsNodeSync));
            }
        }