def test_send_receive_block_decrypted(self): self.node1.opts.encrypt_blocks = False send_block = btc_block(int(time.time())) self._populate_transaction_services(send_block) # propagate block helpers.receive_node_message(self.node1, self.blockchain_fileno, send_block.rawbytes()) relayed_block = self.node1.get_bytes_to_send(self.relay_fileno) self.assertIn(BroadcastMessage.MESSAGE_TYPE, relayed_block.tobytes()) self.node1.on_bytes_sent(self.relay_fileno, len(relayed_block)) # block directly propagated helpers.receive_node_message(self.node2, self.relay_fileno, relayed_block) bytes_to_blockchain = self.node2.get_bytes_to_send( self.blockchain_fileno) self.assertEqual(len(send_block.rawbytes()), len(bytes_to_blockchain)) received_block = BlockBtcMessage(buf=bytearray(bytes_to_blockchain)) self.assertEqual(send_block.magic(), received_block.magic()) self.assertEqual(send_block.version(), received_block.version()) self.assertEqual(send_block.timestamp(), received_block.timestamp()) self.assertEqual(send_block.bits(), received_block.bits()) self.assertEqual(send_block.nonce(), received_block.nonce())
def on_block_sent(self, block_hash: Sha256Hash, block_message: BlockBtcMessage): # After sending block message to Bitcoin node sending INV message for the same block to the node # This is needed to update Synced Headers value of the gateway peer on the Bitcoin node # If Synced Headers is not up-to-date than Bitcoin node does not push compact blocks to the gateway inv_msg = InvBtcMessage( magic=block_message.magic(), inv_vects=[(InventoryType.MSG_BLOCK, block_hash)], ) self.node.send_msg_to_node(inv_msg)
def build_block_header_message( self, block_hash: Sha256Hash, block_message: BlockBtcMessage) -> InvBtcMessage: return InvBtcMessage(block_message.magic(), [(InventoryType.MSG_BLOCK, block_hash)])