class BlockheaderSerializer(Serializer): def __init__(self, flags=0): self.BLOCKHEADER = Structure([ Field("<I", "version"), Uint256Serializer("hash_prev"), Uint256Serializer("hash_merkle"), Field("<I", "time"), Field("<I", "bits"), Field("<I", "nonce") ], "txindex") def get_size(self, blockheader): return (self.BLOCKHEADER.get_size([ blockheader.version, blockheader.hash_prev, blockheader.hash_merkle, blockheader.time, blockheader.bits, blockheader.nonce ])) def serialize(self, blockheader): return (self.BLOCKHEADER.serialize([ blockheader.version, blockheader.hash_prev, blockheader.hash_merkle, blockheader.time, blockheader.bits, blockheader.nonce ])) def deserialize(self, data, cursor=0): (version, hash_prev, hash_merkle, time, bits, nonce), new_cursor = self.BLOCKHEADER.deserialize(data, cursor) blockheader = BlockHeader(version, hash_prev, hash_merkle, time, bits, nonce) blockheader.rawdata = data[cursor:new_cursor] return (blockheader, new_cursor)
class BlockheaderSerializer(Serializer): def __init__(self, flags=0): self.BLOCKHEADER = Structure([Field("<I", "version"), Uint256Serializer("hash_prev"), Uint256Serializer("hash_merkle"), Field("<I", "time"), Field("<I", "bits"), Field("<I", "nonce")], "txindex") def get_size(self, blockheader): return (self.BLOCKHEADER.get_size([blockheader.version, blockheader.hash_prev, blockheader.hash_merkle, blockheader.time, blockheader.bits, blockheader.nonce])) def serialize(self, blockheader): return (self.BLOCKHEADER.serialize([blockheader.version, blockheader.hash_prev, blockheader.hash_merkle, blockheader.time, blockheader.bits, blockheader.nonce])) def deserialize(self, data, cursor=0): (version, hash_prev, hash_merkle, time, bits, nonce), new_cursor = self.BLOCKHEADER.deserialize(data, cursor) blockheader = BlockHeader(version, hash_prev, hash_merkle, time, bits, nonce) blockheader.rawdata = data[cursor:new_cursor] return (blockheader, new_cursor)
class NetAddrSerializer(Serializer): def __init__(self, desc=""): self.NETADDR = Structure([Field("<Q", "services"), IPAddrSerializer("ip"), Field(">H", "port")], "netaddr") def serialize(self, a_netaddr): data = self.NETADDR.serialize([a_netaddr.services, a_netaddr.ip, a_netaddr.port]) return (data) def deserialize(self, data, cursor=0): (services, ip, port), cursor = self.NETADDR.deserialize(data, cursor) return (Netaddr(services, ip, port), cursor)
class NetAddrSerializer(Serializer): def __init__(self, desc=""): self.NETADDR = Structure([ Field("<Q", "services"), IPAddrSerializer("ip"), Field(">H", "port") ], "netaddr") def serialize(self, a_netaddr): data = self.NETADDR.serialize( [a_netaddr.services, a_netaddr.ip, a_netaddr.port]) return (data) def deserialize(self, data, cursor=0): (services, ip, port), cursor = self.NETADDR.deserialize(data, cursor) return (Netaddr(services, ip, port), cursor)
class BlockLocatorSerializer(Serializer): def __init__(self, flags=0): self.BLOCKLOCATOR = Structure([Field("<I", "version"), VarsizelistSerializer(VarintSerializer("count"), Uint256Serializer("locator"))]) def get_size(self, blocklocator): return (self.BLOCKLOCATOR.get_size([blocklocator.version, blocklocator.blockhashlist])) def serialize(self, blocklocator): return (self.BLOCKLOCATOR.serialize([blocklocator.version, blocklocator.blockhashlist])) def deserialize(self, data, cursor=0): (version, blockhashlist), cursor = self.BLOCKLOCATOR.deserialize(data, cursor) return (BlockLocator(version, blockhashlist), cursor)
class BlockSerializer(Serializer): def __init__(self, flags=0): self.BLOCK = Structure([BlockheaderSerializer(flags), VarsizelistSerializer(VarintSerializer("txn_count"), TxSerializer())], "block") def get_size(self, block): return (self.BLOCK.get_size([block.blockheader, block.transactions])) def serialize(self, block): return (self.BLOCK.serialize([block.blockheader, block.transactions])) def deserialize(self, data, cursor=0): (blockheader, transactions), new_cursor = self.BLOCK.deserialize(data, cursor) block = Block(blockheader, transactions) block.rawdata = data[cursor:new_cursor] return (block, new_cursor)
class BlockSerializer(Serializer): def __init__(self, flags=0): self.BLOCK = Structure([ BlockheaderSerializer(flags), VarsizelistSerializer(VarintSerializer("txn_count"), TxSerializer()) ], "block") def get_size(self, block): return (self.BLOCK.get_size([block.blockheader, block.transactions])) def serialize(self, block): return (self.BLOCK.serialize([block.blockheader, block.transactions])) def deserialize(self, data, cursor=0): (blockheader, transactions), new_cursor = self.BLOCK.deserialize(data, cursor) block = Block(blockheader, transactions) block.rawdata = data[cursor:new_cursor] return (block, new_cursor)