def main(num_nodes=10, sim_duration=10, timeout=0.5, base_latency=0.05, latency_sigma_factor=0.5, num_faulty_nodes=3, num_slow_nodes=0): sim_duration = sim_duration # secs # initial timeout RoundManager.timeout = timeout # secs Transport.base_latency = base_latency # 0.05 is half the globe one way # validators num_validators = num_nodes LockSet.eligible_votes = num_validators validators = range(num_validators) genesis = mk_genesis(validators) assert genesis.lockset.is_valid env = simpy.Environment() network = SimNetwork(env) nodes = [] for a in validators: n = Node(network, validators, a, genesis) nodes.append(n) for n in nodes: # connect all nodes for now for nn in nodes: n.add_peer(nn) normvariate_base_latencies(nodes, sigma_factor=latency_sigma_factor) assert num_faulty_nodes + num_slow_nodes <= num_nodes add_faulty_nodes(nodes, num_faulty_nodes) add_slow_nodes(nodes, num_slow_nodes) for n in nodes: n.start() env.run(until=sim_duration) if False: print '\n' * 3 print int(env.now), 'resetting one node' # reset one node and have it sync up n = nodes[0] n.consensus_protocol.reset(to_genesis=True) n.env.send = n.env._send env.run(until=sim_duration * 4) if False: # run w/ stopped nodes to check sync print '\n' * 3 print int(env.now), 'stopping proposals and timeouts' for n in nodes: n.consensus_protocol.stopped = True # fix faulty(hope they sync up) for n in nodes: if n.env.send == n.env.wont_send: n.env.send = n.env._send env.run(until=sim_duration * 10) check_consistency(nodes) return nodes
def test_Block(): genesis = mk_genesis(range(10)) b1 = Block(1, 2, 3, genesis.hash, genesis.lockset) b2 = Block(1, 2, 3, genesis.hash, genesis.lockset) assert b1 == b2