Hush Full Node software. We were censored from Github, this is where all development happens now. https://hush.is
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

85 lines
3.3 KiB

#!/usr/bin/env python2
# Copyright (c) 2018 The Zcash developers
# Distributed under the GPLv3 software license, see the accompanying
# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal, initialize_chain_clean, \
start_nodes, start_node, connect_nodes_bi, bitcoind_processes
import time
class RewindBlockIndexTest (BitcoinTestFramework):
def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 3)
def setup_network(self, split=False):
# Node 0 - Overwinter, then Sprout, then Overwinter again
# Node 1 - Sprout
# Node 2 - Overwinter
self.nodes = start_nodes(3, self.options.tmpdir, extra_args=[['-nuparams=5ba81b19:10'], [], ['-nuparams=5ba81b19:10']])
connect_nodes_bi(self.nodes,0,1)
connect_nodes_bi(self.nodes,1,2)
connect_nodes_bi(self.nodes,0,2)
self.is_network_split=False
self.sync_all()
def run_test (self):
# Bring all nodes to just before the activation block
print("Mining blocks...")
self.nodes[0].generate(8)
block9 = self.nodes[0].generate(1)[0]
self.sync_all()
assert_equal(self.nodes[0].getbestblockhash(), block9)
assert_equal(self.nodes[1].getbestblockhash(), block9)
print("Mining diverging blocks")
block10s = self.nodes[1].generate(1)[0]
block10o = self.nodes[2].generate(1)[0]
self.sync_all()
assert_equal(self.nodes[0].getbestblockhash(), block10o)
assert_equal(self.nodes[1].getbestblockhash(), block10s)
assert_equal(self.nodes[2].getbestblockhash(), block10o)
# Restart node 0 using Sprout instead of Overwinter
print("Switching node 0 from Overwinter to Sprout")
self.nodes[0].stop()
bitcoind_processes[0].wait()
self.nodes[0] = start_node(0,self.options.tmpdir)
connect_nodes_bi(self.nodes,0,1)
connect_nodes_bi(self.nodes,1,2)
connect_nodes_bi(self.nodes,0,2)
# Assume node 1 will send block10s to node 0 quickly
# (if we used self.sync_all() here and there was a bug, the test would hang)
time.sleep(2)
# Node 0 has rewound and is now on the Sprout chain
assert_equal(self.nodes[0].getblockcount(), 10)
assert_equal(self.nodes[0].getbestblockhash(), block10s)
# Restart node 0 using Overwinter instead of Sprout
print("Switching node 0 from Sprout to Overwinter")
self.nodes[0].stop()
bitcoind_processes[0].wait()
self.nodes[0] = start_node(0,self.options.tmpdir, extra_args=['-nuparams=5ba81b19:10'])
connect_nodes_bi(self.nodes,0,1)
connect_nodes_bi(self.nodes,1,2)
connect_nodes_bi(self.nodes,0,2)
# Assume node 2 will send block10o to node 0 quickly
# (if we used self.sync_all() here and there was a bug, the test would hang)
time.sleep(2)
# Node 0 has rewound and is now on the Overwinter chain again
assert_equal(self.nodes[0].getblockcount(), 10)
assert_equal(self.nodes[0].getbestblockhash(), block10o)
if __name__ == '__main__':
RewindBlockIndexTest().main()