public void CanStratisSyncFromCore() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(); CoreNode coreNode = builder.CreateBitcoinCoreNode(); builder.StartAll(); stratisNode.NotInIBD(); Block tip = coreNode.FindBlock(10).Last(); RPCClient stratisNodeRpcClient = stratisNode.CreateRPCClient(); stratisNodeRpcClient.AddNode(coreNode.Endpoint, true); RPCClient coreNodeRpcClient = coreNode.CreateRPCClient(); TestHelper.WaitLoop(() => stratisNodeRpcClient.GetBestBlockHash() == coreNodeRpcClient.GetBestBlockHash()); uint256 bestBlockHash = stratisNodeRpcClient.GetBestBlockHash(); Assert.Equal(tip.GetHash(), bestBlockHash); stratisNodeRpcClient.RemoveNode(coreNode.Endpoint); TestHelper.WaitLoop(() => coreNodeRpcClient.GetPeersInfo() .All(pi => pi.Address.MapToIpv6().ToString() != coreNode.Endpoint.MapToIpv6().ToString())); tip = coreNode.FindBlock(10).Last(); coreNodeRpcClient.AddNode(stratisNode.Endpoint, true); TestHelper.WaitLoop(() => stratisNodeRpcClient.GetBestBlockHash() == coreNodeRpcClient.GetBestBlockHash()); bestBlockHash = stratisNodeRpcClient.GetBestBlockHash(); Assert.Equal(tip.GetHash(), bestBlockHash); } }
public void CanHandleReorgs() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(this.regTest).Start(); CoreNode coreNode1 = builder.CreateBitcoinCoreNode().Start(); CoreNode coreNode2 = builder.CreateBitcoinCoreNode().Start(); //Core1 discovers 10 blocks, sends to stratis coreNode1.FindBlock(10).Last(); TestHelper.ConnectAndSync(stratisNode, coreNode1); TestHelper.Disconnect(stratisNode, coreNode1); //Core2 discovers 20 blocks, sends to stratis coreNode2.FindBlock(20).Last(); TestHelper.ConnectAndSync(stratisNode, coreNode2); TestHelper.Disconnect(stratisNode, coreNode2); ((CachedCoinView)stratisNode.FullNode.CoinView()).FlushAsync().Wait(); //Core1 discovers 30 blocks, sends to stratis coreNode1.FindBlock(30).Last(); TestHelper.ConnectAndSync(stratisNode, coreNode1); TestHelper.Disconnect(stratisNode, coreNode1); //Core2 discovers 50 blocks, sends to stratis coreNode2.FindBlock(50).Last(); TestHelper.ConnectAndSync(stratisNode, coreNode2); TestHelper.Disconnect(stratisNode, coreNode2); ((CachedCoinView)stratisNode.FullNode.CoinView()).FlushAsync().Wait(); TestHelper.WaitLoop(() => TestHelper.AreNodesSynced(stratisNode, coreNode2)); } }
public void CanStratisSyncFromCore() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(); CoreNode coreNode = builder.CreateBitcoinCoreNode(); builder.StartAll(); stratisNode.NotInIBD(); Block tip = coreNode.FindBlock(10).Last(); stratisNode.CreateRPCClient().AddNode(coreNode.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode.CreateRPCClient().GetBestBlockHash()); uint256 bestBlockHash = stratisNode.CreateRPCClient().GetBestBlockHash(); Assert.Equal(tip.GetHash(), bestBlockHash); //Now check if Core connect to stratis stratisNode.CreateRPCClient().RemoveNode(coreNode.Endpoint); TestHelper.WaitLoop(() => coreNode.CreateRPCClient().GetPeersInfo().Length == 0); tip = coreNode.FindBlock(10).Last(); coreNode.CreateRPCClient().AddNode(stratisNode.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode.CreateRPCClient().GetBestBlockHash()); bestBlockHash = stratisNode.CreateRPCClient().GetBestBlockHash(); Assert.Equal(tip.GetHash(), bestBlockHash); } }
public void CanStratisSyncFromStratis() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(); CoreNode stratisNodeSync = builder.CreateStratisPowNode(); CoreNode coreCreateNode = builder.CreateBitcoinCoreNode(); builder.StartAll(); stratisNode.NotInIBD(); stratisNodeSync.NotInIBD(); // first seed a core node with blocks and sync them to a stratis node // and wait till the stratis node is fully synced Block tip = coreCreateNode.FindBlock(5).Last(); stratisNode.CreateRPCClient().AddNode(coreCreateNode.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreCreateNode.CreateRPCClient().GetBestBlockHash()); uint256 bestBlockHash = stratisNode.CreateRPCClient().GetBestBlockHash(); Assert.Equal(tip.GetHash(), bestBlockHash); // add a new stratis node which will download // the blocks using the GetData payload stratisNodeSync.CreateRPCClient().AddNode(stratisNode.Endpoint, true); // wait for download and assert TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == stratisNodeSync.CreateRPCClient().GetBestBlockHash()); bestBlockHash = stratisNodeSync.CreateRPCClient().GetBestBlockHash(); Assert.Equal(tip.GetHash(), bestBlockHash); } }
public void CanStratisSyncFromCore() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(this.powNetwork).Start(); CoreNode coreNode = builder.CreateBitcoinCoreNode().Start(); Block tip = coreNode.FindBlock(10).Last(); TestHelper.ConnectAndSync(stratisNode, coreNode); TestHelper.Disconnect(stratisNode, coreNode); coreNode.FindBlock(10).Last(); TestHelper.ConnectAndSync(coreNode, stratisNode); } }
public void CanHandleReorgs() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(); CoreNode coreNode1 = builder.CreateBitcoinCoreNode(); CoreNode coreNode2 = builder.CreateBitcoinCoreNode(); builder.StartAll(); //Core1 discovers 10 blocks, sends to stratis Block tip = coreNode1.FindBlock(10).Last(); stratisNode.CreateRPCClient().AddNode(coreNode1.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode1.CreateRPCClient().GetBestBlockHash()); stratisNode.CreateRPCClient().RemoveNode(coreNode1.Endpoint); //Core2 discovers 20 blocks, sends to stratis tip = coreNode2.FindBlock(20).Last(); stratisNode.CreateRPCClient().AddNode(coreNode2.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode2.CreateRPCClient().GetBestBlockHash()); stratisNode.CreateRPCClient().RemoveNode(coreNode2.Endpoint); ((CachedCoinView)stratisNode.FullNode.CoinView()).FlushAsync().Wait(); //Core1 discovers 30 blocks, sends to stratis tip = coreNode1.FindBlock(30).Last(); stratisNode.CreateRPCClient().AddNode(coreNode1.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode1.CreateRPCClient().GetBestBlockHash()); stratisNode.CreateRPCClient().RemoveNode(coreNode1.Endpoint); //Core2 discovers 50 blocks, sends to stratis tip = coreNode2.FindBlock(50).Last(); stratisNode.CreateRPCClient().AddNode(coreNode2.Endpoint, true); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode2.CreateRPCClient().GetBestBlockHash()); stratisNode.CreateRPCClient().RemoveNode(coreNode2.Endpoint); ((CachedCoinView)stratisNode.FullNode.CoinView()).FlushAsync().Wait(); TestHelper.WaitLoop(() => stratisNode.CreateRPCClient().GetBestBlockHash() == coreNode2.CreateRPCClient().GetBestBlockHash()); } }
public void CanCoreSyncFromStratis() { using (NodeBuilder builder = NodeBuilder.Create(this)) { CoreNode stratisNode = builder.CreateStratisPowNode(this.powNetwork).Start(); CoreNode coreNodeSync = builder.CreateBitcoinCoreNode().Start(); CoreNode coreCreateNode = builder.CreateBitcoinCoreNode().Start(); // first seed a core node with blocks and sync them to a stratis node // and wait till the stratis node is fully synced Block tip = coreCreateNode.FindBlock(5).Last(); TestHelper.ConnectAndSync(stratisNode, coreCreateNode); TestHelper.WaitLoop(() => stratisNode.FullNode.ConsensusManager().Tip.Block.GetHash() == tip.GetHash()); // add a new stratis node which will download // the blocks using the GetData payload TestHelper.ConnectAndSync(coreNodeSync, stratisNode); } }