Ejemplo n.º 1
0
 def serialize(self):
     payload = varint.encode(len(self.message))
     payload += self.message.encode()
     payload += self.code.to_bytes(1, "little")
     payload += varint.encode(len(self.reason))
     payload += self.reason.encode()
     payload += bytes.fromhex(self.data)[::-1]
     return add_headers("reject", payload)
Ejemplo n.º 2
0
 def serialize(self):
     out = bytes.fromhex(self.hash)
     out += varint.encode(len(self.to_add))
     for out_point, tx_out in self.to_add:
         out += out_point.serialize()
         out += tx_out.serialize()
     out += varint.encode(len(self.to_remove))
     for out_point in self.to_remove:
         out += out_point.serialize()
     return out
Ejemplo n.º 3
0
 def serialize(self):
     payload = self.header.serialize()
     payload += self.nonce.to_bytes(8, "little")
     payload += varint.encode(len(self.short_ids))
     for short_id in self.short_ids:
         payload += bytes.fromhex(short_id)[::-1]
     payload += varint.encode(len(self.prefilled_tx_list))
     for tx_index, tx in self.prefilled_tx_list:
         payload += varint.encode(tx_index)
         payload += tx.serialize()
     return add_headers("cmptblock", payload)
Ejemplo n.º 4
0
 def serialize(self):
     payload = self.version.to_bytes(4, "little")
     payload += self.services.to_bytes(8, "little")
     payload += self.timestamp.to_bytes(8, "little")
     payload += self.addr_recv.serialize(version_msg=True)
     payload += self.addr_from.serialize(version_msg=True)
     payload += self.nonce.to_bytes(8, "little")
     if self.user_agent:
         payload += varint.encode(len(self.user_agent))
         payload += self.user_agent.encode()
     else:
         payload += varint.encode(0)
     payload += self.start_height.to_bytes(4, "little")
     payload += self.relay.to_bytes(1, "little")
     return add_headers("version", payload)
Ejemplo n.º 5
0
 def serialize(self):
     payload = self.version.to_bytes(4, "little")
     payload += varint.encode(len(self.block_hashes))
     for hash in self.block_hashes:
         payload += bytes.fromhex(hash)[::-1]
     payload += bytes.fromhex(self.hash_stop)[::-1]
     return add_headers("getheaders", payload)
Ejemplo n.º 6
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
Ejemplo 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)
Ejemplo n.º 8
0
 def serialize(self):
     payload = varint.encode(len(self.inventory))
     for item in self.inventory:
         payload += item[0].to_bytes(4, "little")
         payload += bytes.fromhex(item[1])[::-1]
     return add_headers("notfound", payload)
Ejemplo n.º 9
0
 def serialize(self):
     payload = bytes.fromhex(self.blockhash)[::-1]
     payload += varint.encode(len(self.transactions))
     for tx in self.transactions:
         payload += tx.serialize()
     return add_headers("blocktxn", payload)
Ejemplo n.º 10
0
 def serialize(self):
     payload = varint.encode(len(self.headers))
     for header in self.headers:
         payload += header.serialize()
         payload += b"\x00"
     return add_headers("headers", payload)
Ejemplo n.º 11
0
 def serialize(self):
     out = self.header.serialize()
     out += varint.encode(self.index)
     out += self.status.to_bytes(1, "little")
     out += int(self.downloaded).to_bytes(1, "little")
     return out
Ejemplo n.º 12
0
 def serialize(self):
     payload = varint.encode(len(self.addresses))
     for address in self.addresses:
         payload += address.serialize()
     return add_headers("addr", payload)
Ejemplo n.º 13
0
 def serialize(self):
     out = self.filename.encode()
     out += varint.encode(self.size)
     return out
Ejemplo n.º 14
0
 def serialize(self):
     payload = bytes.fromhex(self.blockhash)[::-1]
     payload += varint.encode(len(self.indexes))
     for id in self.indexes:
         payload += varint.encode(id)
     return add_headers("getblocktxn", payload)