Example #1
0
 def evilSendCommit(self, request):
     digest = "random"
     commit = Commit(self.instId, request.viewNo, request.ppSeqNo)
     logger.debug("EVIL: Creating commit message for request {}: {}".format(
         request, commit))
     self.send(commit, TPCStat.CommitSent)
     self.addToCommits(commit, self.name)
Example #2
0
def send_commit(view_no, pp_seq_no, nodes):
    commit = Commit(
        0,
        view_no,
        pp_seq_no)
    primary_node = getPrimaryReplica(nodes).node
    sendMessageToAll(nodes, primary_node, commit)
 def create(self, msg: Dict, **kwargs) -> Optional[Commit]:
     commit = Commit(**msg)
     if commit.instId != kwargs['inst_id'] \
             or commit.viewNo != kwargs['view_no'] \
             or commit.ppSeqNo != kwargs['pp_seq_no']:
         raise MismatchedMessageReplyException
     return commit
def test_accept_all_3PC_msgs(create_node_and_not_start, looper):
    node = create_node_and_not_start
    preprepare = PrePrepare(
        0,
        0,
        1,
        get_utc_epoch(),
        ['f99937241d4c891c08e92a3cc25966607315ca66b51827b170d492962d58a9be'],
        '[]',
        'f99937241d4c891c08e92a3cc25966607315ca66b51827b170d492962d58a9be',
        DOMAIN_LEDGER_ID,
        'CZecK1m7VYjSNCC7pGHj938DSW2tfbqoJp1bMJEtFqvG',
        '7WrAMboPTcMaQCU1raoj28vnhu2bPMMd2Lr9tEcsXeCJ',
        0,
        True
    )
    prepare = Prepare(
        0,
        0,
        1,
        get_utc_epoch(),
        'f99937241d4c891c08e92a3cc25966607315ca66b51827b170d492962d58a9be',
        'CZecK1m7VYjSNCC7pGHj938DSW2tfbqoJp1bMJEtFqvG',
        '7WrAMboPTcMaQCU1raoj28vnhu2bPMMd2Lr9tEcsXeCJ')
    commit = Commit(
        0,
        0,
        1
    )
    node.view_changer = node.newViewChanger()
    node.master_replica._consensus_data.view_no = 0
    node.master_replica.primaryName = 'Alpha'
    """Initiate view_change procedure"""
    node.master_replica.internal_bus.send(NodeNeedViewChange(1))
    # We don't use a view_change_strategy anymore
    assert len(node.nodeInBox) == 0
    """
    Imitate that nodestack.service was called and 
    those of next messages are put into nodeInBox queue
    """
    node.nodeInBox.append((preprepare, 'some_node'))
    node.nodeInBox.append((prepare, 'some_node'))
    node.nodeInBox.append((commit, 'some_node'))
    assert len(node.master_replica.inBox) == 0
    """Imitate looper's work"""
    looper.run(node.serviceReplicas(None))
    """
    Next looper's task must be processNodeInBox and 
    all of 3PC messages must be moved to replica's inBox queue
    """
    looper.run(node.processNodeInBox())
    """3 3PC msgs"""
    assert len(node.master_replica.inBox) == 3
    """Check the order of msgs"""
    m = node.master_replica.inBox.popleft()
    assert isinstance(m[0], PrePrepare)
    m = node.master_replica.inBox.popleft()
    assert isinstance(m[0], Prepare)
    m = node.master_replica.inBox.popleft()
    assert isinstance(m[0], Commit)
Example #5
0
 def create(self, msg: Dict, **kwargs) -> Optional[Commit]:
     commit = Commit(**msg)
     if commit.instId != kwargs['inst_id'] or commit.viewNo != kwargs[
             'view_no']:
         logger.warning(
             '{}{} found COMMIT {} not satisfying query criteria'.format(
                 THREE_PC_PREFIX, self, commit))
         return None
     return commit
Example #6
0
def test_send_master_reordered_for_already_ordered(orderer, view_pp, is_master):
    (view_no, pp_seq_no), should_be_sent = view_pp
    orderer._data.is_master = is_master
    orderer._data.prev_view_prepare_cert = PREV_VIEW_PP_CERT
    orderer._data.last_ordered_3pc = (view_no, 10000)

    commit = Commit(0, view_no, pp_seq_no)
    orderer._add_to_commits(commit, "Alpha")
    if should_be_sent and is_master:
        assert len(orderer._bus.sent_messages) == 1
        assert isinstance(orderer._bus.sent_messages[0], MasterReorderedAfterVC)
    else:
        assert len(orderer._bus.sent_messages) == 0
Example #7
0
def create_commit_bls_sig(bls_bft, req_key, pre_prepare):
    view_no, pp_seq_no = req_key
    params = create_commit_params(view_no, pp_seq_no)
    params = bls_bft.update_commit(params, pre_prepare)
    return Commit(*params)
Example #8
0
def create_commit_with_bls_sig(req_key, bls_sig):
    view_no, pp_seq_no = req_key
    params = create_commit_params(view_no, pp_seq_no)
    params.append(bls_sig)
    return Commit(*params)
Example #9
0
def create_commit_no_bls_sig(req_key, inst_id=0):
    view_no, pp_seq_no = req_key
    params = create_commit_params(view_no, pp_seq_no, inst_id=inst_id)
    return Commit(*params)
Example #10
0
def create_commit_no_bls_sig(req_key):
    view_no, pp_seq_no = req_key
    params = create_commit_params(view_no, pp_seq_no)
    return Commit(*params)
Example #11
0
 def evilSendCommit(self, request):
     commit = Commit(self.instId, request.viewNo, request.ppSeqNo)
     logger.debug("EVIL: Creating commit message for request {}: {}".format(
         request, commit))
     self.send(commit)
     self._ordering_service._add_to_commits(commit, self.name)
    'CZecK1m7VYjSNCC7pGHj938DSW2tfbqoJp1bMJEtFqvG',
    '7WrAMboPTcMaQCU1raoj28vnhu2bPMMd2Lr9tEcsXeCJ', 0, True)

prepare_msg = Prepare(
    0,
    1,
    3,
    get_utc_epoch(),
    'f99937241d4c891c08e92a3cc25966607315ca66b51827b170d492962d58a9be',
    'CZecK1m7VYjSNCC7pGHj938DSW2tfbqoJp1bMJEtFqvG',
    '7WrAMboPTcMaQCU1raoj28vnhu2bPMMd2Lr9tEcsXeCJ',
)

commit_msg = Commit(
    0,
    1,
    3,
)

propagate_msg = Propagate(
    **{
        'request': {
            'identifier': '5rArie7XKukPCaEwq5XGQJnM9Fc5aZE3M9HAPVfMU2xC',
            'signature':
            'ZbZG68WiaK67eU3CsgpVi85jpgCztW9Yqe7D5ezDUfWbKdiPPVbWq4Tb5m4Ur3jcR5wJ8zmBUZXZudjvMN63Aa9',
            'operation': {
                'amount': 62,
                'type': 'buy'
            },
            'reqId': 1499782864169193,
            'protocolVersion': CURRENT_PROTOCOL_VERSION
Example #13
0
def create_commit_bls_sig(bls_bft, req_key, state_root_hash):
    view_no, pp_seq_no = req_key
    params = create_commit_params(view_no, pp_seq_no)
    params = bls_bft.update_commit(params, state_root_hash, DOMAIN_LEDGER_ID)
    return Commit(*params)
def test_correct_message():
    validator = MessageField(Commit)
    message = Commit(1, 2, 3)
    assert not validator.validate(message)
def test_incorrect_message():
    validator = MessageField(ViewChange)
    message = Commit(1, 2, 3)
    assert validator.validate(message)