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)
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)
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
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
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)
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)
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)
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)
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
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)