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_invalid_tamper(): message_name = "message" payload = b"\x00" magic = b"\xff\xff\xff\xff" msg = magic + add_headers(message_name, payload) tampered_msg = msg[:-1] + b"\x01" with pytest.raises(WrongChecksumError): verify_headers(tampered_msg)
def test_invalid_length(): message_name = "message" payload = b"\x00" magic = b"\xff\xff\xff\xff" msg = magic + add_headers(message_name, payload) short_msg = msg[:-1] with pytest.raises(ValueError): verify_headers(short_msg)
def test_valid(): message_name = "message" payload = b"\x00" magic = b"\xff\xff\xff\xff" msg = magic + add_headers(message_name, payload) verify_headers(msg) assert get_payload(msg)[0] == message_name assert get_payload(msg)[1] == payload
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): 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 = varint.encode(len(self.headers)) for header in self.headers: payload += header.serialize() payload += b"\x00" return add_headers("headers", payload)
def serialize(self): data = self.block.serialize() return add_headers("block", data)
def serialize(self): data = self.tx.serialize() return add_headers("tx", data)
def serialize(self): return add_headers("verack", b"")
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): return add_headers("getaddr", b"")
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): return add_headers("sendheaders", b"")
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)
def serialize(self): return add_headers("feefilter", b"")
def serialize(self): return add_headers("merkleblock", b"")
def serialize(self): return add_headers("filterclear", b"")
def serialize(self): return add_headers("filterload", b"")
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): return add_headers("mempool", b"")
def serialize(self): return add_headers("pong", self.nonce.to_bytes(8, "little"))
def serialize(self): payload = int(self.flag).to_bytes(1, "little") payload += self.version.to_bytes(8, "little") return add_headers("sendcmpt", payload)