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); } }
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)); } }