示例#1
0
    def phase_1_broadcast(self, block_info, phase_type):
        """ sends phase_1 information for phase_2 execution """
        phase_1_msg = thrift_converter.get_p1_message(block_info)
        ver_ids = []

        for node in self.peer_dict[phase_type]:
            try:
                ver_ids += node.client.phase_1_message(phase_1_msg)
                vrs = self.get_vrs(node, ver_ids)
                record = message_types.VerificationRecord()
                record.p1 = phase_1_msg
                vrs.append(record)
                self.resolve_data(vrs, 1)
            except Exception as ex:
                template = "An exception of type {0} occurred. Arguments:\n{1!r}"
                message = template.format(type(ex).__name__, ex.args)
                logger().warning(message)
示例#2
0
    def public_broadcast(self, block_info, phase):
        """ broadcast to phase 5 nodes for public transmission """
        if block_info and phase <= PHASE_5_NODE:
            # being asked for public broadcast, connect to known phase 5 nodes at this point
            try:
                if self.phases:
                    self.connect_nodes(PHASE_5_NODE)
            except Exception as ex:
                template = "An exception of type {0} occured. Arguments:\n{1!r}"
                message = template.format(type(ex).__name__, ex.args)
                logger().warning(message)

            phase_msg = None
            verification_record = message_types.VerificationRecord()
            phase_5_msg = message_types.Phase_5_msg()

            if phase == 1:
                phase_msg = thrift_converter.get_p1_message(block_info)
                verification_record.p1 = phase_msg
            elif phase == 2:
                phase_msg = thrift_converter.get_p2_message(block_info)
                verification_record.p2 = phase_msg
            elif phase == 3:
                phase_msg = thrift_converter.get_p3_message(block_info)
                verification_record.p3 = phase_msg
            elif phase == 4:
                pass

            phase_5_msg.verification_record = verification_record

            # send block to all known phase 5 nodes
            if phase_msg:
                for node in self.peer_dict[PHASE_5_NODE]:
                    try:
                        node.client.phase_5_message(phase_5_msg)
                        logger().info('block sent for public transmission...')
                    except:
                        logger().warning('failed to submit to node %s',
                                         node.node_id)
                        continue