def handle_block(self, source, message: xrdlegacy_pb2.LegacyMessage): # block received """ Block This function processes any new block received. :return: """ P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.BK) try: block = Block(message.block) except Exception as e: logger.error( 'block rejected - unable to decode serialised data %s', source.peer) logger.exception(e) return logger.info('>>>Received block from %s %s %s', source.peer.full_address, block.block_number, bin2hstr(block.headerhash)) if not source.factory.master_mr.isRequested(block.headerhash, source, block): return source.factory.pow.pre_block_logic( block) # FIXME: Ignores return value source.factory.master_mr.register(xrdlegacy_pb2.LegacyMessage.BK, block.headerhash, message.block)
def handle_fetch_block( self, source, message: xrdlegacy_pb2.LegacyMessage): # Fetch Request for block """ Fetch Block Sends the request for the block. :return: """ P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.FB) block_number = message.fbData.index logger.info(' Request for %s by %s', block_number, source.peer) if 0 < block_number <= source.factory.chain_height: block = source.factory.get_block_by_number(block_number) msg = xrdlegacy_pb2.LegacyMessage( func_name=xrdlegacy_pb2.LegacyMessage.PB, pbData=xrdlegacy_pb2.PBData(block=block.pbdata)) source.send(msg)
def handle_multi_sig_vote(source, message: xrdlegacy_pb2.LegacyMessage): """ Handles Multi Sig Transaction :param source: :param message: :return: """ P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.MV) try: tx = Transaction.from_pbdata(message.mvData) except Exception as e: logger.error( 'multi_sig_vote txn rejected - unable to decode serialised data - closing connection' ) logger.exception(e) source.loseConnection() return if source.factory.master_mr.isRequested(tx.get_message_hash(), source): source.factory.add_unprocessed_txn(tx, source.peer.ip)
def handle_lattice(source, message: xrdlegacy_pb2.LegacyMessage): """ Receives Lattice Public Key Transaction :param source: :param message: :return: """ P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.LT) try: tx = Transaction.from_pbdata(message.ltData) except Exception as e: logger.error( 'lattice_public_key rejected - unable to decode serialised data - closing connection' ) logger.exception(e) source.loseConnection() return if source.factory.master_mr.isRequested(tx.get_message_hash(), source): source.factory.add_unprocessed_txn(tx, source.peer.ip)
def handle_token_transaction(source, message: xrdlegacy_pb2.LegacyMessage): """ Token Transaction This function processes whenever a Transaction having subtype TOKEN is received. :return: """ P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.TK) try: tx = Transaction.from_pbdata(message.tkData) except Exception as e: logger.error( 'Token Txn rejected - unable to decode serialised data - closing connection' ) logger.exception(e) source.loseConnection() return if source.factory.master_mr.isRequested(tx.get_message_hash(), source): source.factory.add_unprocessed_txn(tx, source.peer.ip)
def handle_tx(source, message: xrdlegacy_pb2.LegacyMessage): """ Transaction Executed whenever a new TX type message is received. :return: """ P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.TX) try: tx = Transaction.from_pbdata(message.txData) except Exception as e: logger.error( 'Message Txn rejected - unable to decode serialised data - closing connection' ) logger.exception(e) source.loseConnection() return # NOTE: Connects to MR if source.factory.master_mr.isRequested(tx.get_message_hash(), source): source.factory.add_unprocessed_txn(tx, source.peer.ip)
def handle_push_block(self, source, message: xrdlegacy_pb2.LegacyMessage): """ Push Block This function processes requested blocks received while syncing. Block received under this function are directly added to the main chain i.e. chain.blockchain It is expected to receive only one block for a given blocknumber. :return: """ # FIXME: Later rename P2PBaseObserver._validate_message(message, xrdlegacy_pb2.LegacyMessage.PB) if message.pbData is None: return try: block = Block(message.pbData.block) source.factory.block_received(source, block) except Exception as e: logger.error( 'block rejected - unable to decode serialised data %s', source.peer) logger.exception(e)