Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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