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)
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
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)
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)
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)
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
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)
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)
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)
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)
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
def serialize(self): payload = varint.encode(len(self.addresses)) for address in self.addresses: payload += address.serialize() return add_headers("addr", payload)
def serialize(self): out = self.filename.encode() out += varint.encode(self.size) return out
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)