class TxSerializer(Serializer): """The transaction serializer.""" model_class = Tx version = fields.UInt32LEField() tx_in = fields.ListField(TxInSerializer) tx_out = fields.ListField(TxOutSerializer) lock_time = fields.UInt32LEField()
class BlockSerializer(Serializer): """The deserializer for the blocks.""" model_class = Block version = fields.UInt32LEField() prev_block = fields.Hash() merkle_root = fields.Hash() timestamp = fields.UInt32LEField() bits = fields.UInt32LEField() nonce = fields.UInt32LEField() txns = fields.ListField(TxSerializer)
class BlockHeaderSerializer(Serializer): """The serializer for the block header.""" model_class = BlockHeader version = fields.UInt32LEField() prev_block = fields.Hash() merkle_root = fields.Hash() timestamp = fields.UInt32LEField() bits = fields.UInt32LEField() nonce = fields.UInt32LEField() txns_count = fields.VariableIntegerField()
class IPv4AddressTimestampSerializer(Serializer): """Serializer for the IPv4AddressTimestamp.""" model_class = IPv4AddressTimestamp timestamp = fields.UInt32LEField() services = fields.UInt64LEField() ip_address = fields.IPv4AddressField() port = fields.UInt16BEField()
class MessageHeaderSerializer(Serializer): """Serializer for the MessageHeader.""" model_class = MessageHeader magic = fields.UInt32LEField() command = fields.FixedStringField(12) length = fields.UInt32LEField() checksum = fields.UInt32LEField() @staticmethod def calcsize(): return struct.calcsize("i12sii") @staticmethod def calc_checksum(payload): """Calculate the checksum of the specified payload. :param payload: The binary data payload. """ sha256hash = hashlib.sha256(payload) sha256hash = hashlib.sha256(sha256hash.digest()) checksum = sha256hash.digest()[:4] return struct.unpack("<I", checksum)[0]
class GetBlocksSerializer(Serializer): model_class = GetBlocks version = fields.UInt32LEField() hash_count = fields.VariableIntegerField() block_hashes = fields.BlockLocator() hash_stop = fields.Hash()
class TxInSerializer(Serializer): """The transaction input serializer.""" model_class = TxIn previous_output = fields.NestedField(OutPointSerializer) signature_script = fields.VariableStringField() sequence = fields.UInt32LEField()
class OutPointSerializer(Serializer): """The OutPoint representation serializer.""" model_class = OutPoint out_hash = fields.Hash() index = fields.UInt32LEField()
class InventorySerializer(Serializer): """The serializer for the Inventory.""" model_class = Inventory inv_type = fields.UInt32LEField() inv_hash = fields.Hash()