Source code for pycoin.message.InvItem

import functools

from pycoin.encoding.hexbytes import b2h_rev
from pycoin.satoshi.satoshi_struct import parse_struct, stream_struct

ITEM_TYPE_TX = 1
ITEM_TYPE_BLOCK = 2
ITEM_TYPE_MERKLEBLOCK = 3
INV_CMPCT_BLOCK = 4

INV_WITNESS_FLAG = 1 << 30
INV_TYPE_MASK = 0xffffffff >> 2


[docs]@functools.total_ordering class InvItem(object): def __init__(self, item_type, data, dont_check=False): if not dont_check: assert item_type in (ITEM_TYPE_TX, ITEM_TYPE_BLOCK, ITEM_TYPE_MERKLEBLOCK) self.item_type = item_type assert isinstance(data, bytes) assert len(data) == 32 self.data = data def __str__(self): INV_TYPES = ["?", "Tx", "Block", "Merkle"] idx = self.item_type if not 0 < idx < 4: idx = 0 return "InvItem %s [%s]" % (INV_TYPES[idx], b2h_rev(self.data)) def __repr__(self): return str(self) def __hash__(self): return hash((self.item_type, self.data)) def __eq__(self, other): if isinstance(other, self.__class__): return self.item_type == other.item_type and self.data == other.data return False def __lt__(self, other): return (self.item_type, self.data) < (other.item_type, other.data)
[docs] def stream(self, f): stream_struct("L#", f, self.item_type, self.data)
[docs] @classmethod def parse(self, f): return self(*parse_struct("L#", f), dont_check=True)