예제 #1
0
    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())
예제 #2
0
 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)
예제 #3
0
 def build_block_header_message(
         self, block_hash: Sha256Hash,
         block_message: BlockBtcMessage) -> InvBtcMessage:
     return InvBtcMessage(block_message.magic(),
                          [(InventoryType.MSG_BLOCK, block_hash)])