Exemplo n.º 1
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     message = stream.read(varint.decode(stream)).decode()
     code = RejectCode.from_bytes(stream.read(1), "little")
     reason = stream.read(varint.decode(stream)).decode()
     data = stream.read(32).hex()
     return cls(message, code, reason, data)
Exemplo n.º 2
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     blockhash = stream.read(32)[::-1].hex()
     num_indexes = varint.decode(stream)
     indexes = []
     for x in range(num_indexes):
         indexes.append(varint.decode(stream))
     return cls(blockhash=blockhash, indexes=indexes)
Exemplo n.º 3
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     hash = stream.read(32).hex()
     to_add = []
     for x in range(varint.decode(stream)):
         out_point = OutPoint.deserialize(stream)
         tx_out = TxOut.deserialize(stream)
         to_add.append([out_point, tx_out])
     to_remove = []
     for x in range(varint.decode(stream)):
         out_point = OutPoint.deserialize(stream)
         to_remove.append(out_point)
     return cls(hash, to_add, to_remove)
Exemplo n.º 4
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     header = BlockHeader.deserialize(stream)
     index = varint.decode(stream)
     status = BlockStatus.from_bytes(stream.read(1), "little")
     downloaded = bool(int.from_bytes(stream.read(1), "little"))
     return cls(header, index, status, downloaded)
Exemplo n.º 5
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     len_addresses = varint.decode(stream)
     addresses = []
     for x in range(len_addresses):
         addresses.append(NetworkAddress.deserialize(stream))
     return cls(addresses=addresses)
Exemplo n.º 6
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     blockhash = stream.read(32)[::-1].hex()
     num_transactions = varint.decode(stream)
     transactions = []
     for x in range(num_transactions):
         transactions.append(TxData.deserialize(stream))
     return cls(blockhash=blockhash, transactions=transactions)
Exemplo n.º 7
0
    def test_conversion(self):

        i = 0xfc
        b = varint.encode(i)
        self.assertEqual(len(b), 1)
        self.assertEqual(varint.decode(b), i)

        i += 1
        b = varint.encode(i)
        self.assertEqual(len(b), 3)
        self.assertEqual(varint.decode(b), i)

        i = 0xffff
        b = varint.encode(i)
        self.assertEqual(len(b), 3)
        self.assertEqual(varint.decode(b), i)

        i += 1
        b = varint.encode(i)
        self.assertEqual(len(b), 5)
        self.assertEqual(varint.decode(b), i)

        i = 0xffffffff
        b = varint.encode(i)
        self.assertEqual(len(b), 5)
        self.assertEqual(varint.decode(b), i)

        i += 1
        b = varint.encode(i)
        self.assertEqual(len(b), 9)
        self.assertEqual(varint.decode(b), i)

        i = 0xffffffffffffffff
        b = varint.encode(i)
        self.assertEqual(len(b), 9)
        self.assertEqual(varint.decode(b), i)

        # integer too large (0x10000000000000000) for varint encoding
        i += 1
        self.assertRaises(ValueError, varint.encode, i)
        #varint.encode(i)

        self.assertEqual(varint.decode('6a'), 106)
        self.assertEqual(varint.decode('fd2602'), 550)
        self.assertEqual(varint.decode('fe703a0f00'), 998000)
Exemplo n.º 8
0
def test_varint_conversion():

    i = 0xFC
    b = varint.encode(i)
    assert len(b) == 1
    assert varint.decode(b) == i

    i += 1
    b = varint.encode(i)
    assert len(b) == 3
    assert varint.decode(b) == i

    i = 0xFFFF
    b = varint.encode(i)
    assert len(b) == 3
    assert varint.decode(b) == i

    i += 1
    b = varint.encode(i)
    assert len(b) == 5
    assert varint.decode(b) == i

    i = 0xFFFFFFFF
    b = varint.encode(i)
    assert len(b) == 5
    assert varint.decode(b) == i

    i += 1
    b = varint.encode(i)
    assert len(b) == 9
    assert varint.decode(b) == i

    i = 0xFFFFFFFFFFFFFFFF
    b = varint.encode(i)
    assert len(b) == 9
    assert varint.decode(b) == i

    i += 1
    with pytest.raises(ValueError,
                       match="integer too big for varint encoding: "):
        varint.encode(i)

    assert varint.decode("6a") == 106
    assert varint.decode("fd2602") == 550
    assert varint.decode("fe703a0f00") == 998000
Exemplo n.º 9
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     inventory_length = varint.decode(stream)
     inventory = []
     for x in range(inventory_length):
         item_type = int.from_bytes(stream.read(4), "little")
         item_hash = stream.read(32)[::-1].hex()
         inventory.append((item_type, item_hash))
     return cls(inventory)
Exemplo n.º 10
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     headers_num = varint.decode(stream)
     headers = []
     for x in range(headers_num):
         header = BlockHeader.deserialize(stream)
         stream.read(1)
         headers.append(header)
     return cls(headers)
Exemplo n.º 11
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     version = int.from_bytes(stream.read(4), "little")
     block_hashes = []
     for x in range(varint.decode(stream)):
         block_hash = stream.read(32)[::-1].hex()
         block_hashes.append(block_hash)
     hash_stop = stream.read(32)[::-1].hex()
     return cls(version=version,
                block_hashes=block_hashes,
                hash_stop=hash_stop)
Exemplo n.º 12
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     header = BlockHeader.deserialize(stream)
     nonce = int.from_bytes(stream.read(8), "little")
     short_ids = []
     short_ids_length = varint.decode(stream)
     for x in range(short_ids_length):
         short_ids.append(stream.read(6)[::-1].hex())
     prefilled_tx_list = []
     prefilled_tx_num = varint.decode(stream)
     for x in range(prefilled_tx_num):
         tx_index = varint.decode(stream)
         tx = Tx.deserialize(stream)
         prefilled_tx_list.append((tx_index, tx))
     return cls(
         header=header,
         nonce=nonce,
         short_ids=short_ids,
         prefilled_tx_list=prefilled_tx_list,
     )
Exemplo n.º 13
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     version = int.from_bytes(stream.read(4), "little")
     services = int.from_bytes(stream.read(8), "little")
     timestamp = int.from_bytes(stream.read(8), "little")
     addr_recv = NetworkAddress.deserialize(stream, version_msg=True)
     addr_from = NetworkAddress.deserialize(stream, version_msg=True)
     nonce = int.from_bytes(stream.read(8), "little")
     user_agent_len = varint.decode(stream)
     user_agent = stream.read(user_agent_len).decode()
     start_height = int.from_bytes(stream.read(4), "little")
     relay = bool(int.from_bytes(stream.read(1), "little"))
     return cls(
         version=version,
         services=services,
         timestamp=timestamp,
         addr_recv=addr_recv,
         addr_from=addr_from,
         nonce=nonce,
         user_agent=user_agent,
         start_height=start_height,
         relay=relay,
     )
Exemplo n.º 14
0
 def deserialize(cls, data):
     stream = bytesio_from_binarydata(data)
     filename = stream.read(10).decode()
     size = varint.decode(stream)
     return cls(filename, size)