Source code for common.receipts

import struct
import pyzbase32
from binascii import unhexlify

from common.tools import is_compressed_pk, is_u4int
from common.exceptions import InvalidParameter


[docs]def create_registration_receipt(user_id, available_slots, subscription_expiry): """ Creates a registration receipt. The receipt has the following format: ``user_id (33-byte) | available_slots (4-byte) | subscription_expiry (4-byte)`` All values are big endian. Args: user_id(:obj:`str`): the public key that identifies the user (33-bytes hex str). available_slots (:obj:`int`): the number of slots assigned to a user subscription (4-byte unsigned int). subscription_expiry (:obj:`int`): the expiry assigned to a user subscription (4-byte unsigned int). Returns: :obj:`bytes`: The serialized data to be signed. """ if not is_compressed_pk(user_id): raise InvalidParameter("Provided public key does not match expected format (33-byte hex string)") elif not is_u4int(available_slots): raise InvalidParameter("Provided available_slots must be a 4-byte unsigned integer") elif not is_u4int(subscription_expiry): raise InvalidParameter("Provided subscription_expiry must be a 4-byte unsigned integer") return unhexlify(user_id) + struct.pack(">I", available_slots) + struct.pack(">I", subscription_expiry)
[docs]def create_appointment_receipt(user_signature, start_block): """ Creates an appointment receipt. The receipt has the following format: ``user_signature | start_block (4-byte)`` All values are big endian. Args: user_signature (:obj:`str`): the signature of the appointment by the user. start_block (:obj:`int`): the block height at which the tower will start watching for the appointment. Returns: :obj:`bytes`: The serialized data to be signed. """ if not isinstance(user_signature, str): raise InvalidParameter("Provided user_signature is invalid") elif not is_u4int(start_block): raise InvalidParameter("Provided start_block must be a 4-byte unsigned integer") return pyzbase32.decode_bytes(user_signature) + struct.pack(">I", start_block)