Source code for helium_py.transactions.payment
"""Payment helper class for use in building payloads for the Payment V2 transaction."""
from dataclasses import dataclass
from typing import List, Optional
from helium_py import proto
from helium_py.crypto.address import Address
[docs]@dataclass
class Payment:
"""Payment Class providing protocol buffer serialization and deserialization of Payments."""
payee: Address
amount: int
memo: Optional[bytes]
[docs] @staticmethod
def deserialize_payment_list(protocol_buffer_payment_list: List[proto.Payment]) -> List['Payment']:
"""Deserialize a list of Protocol Buffer Payment objects into a list of this Payment Dataclass."""
payments = []
for payment in protocol_buffer_payment_list:
payee = Address.from_bin(payment.payee)
if payee is not None:
payments.append(Payment(
payee=payee,
amount=payment.amount,
memo=payment.memo.to_bytes(
(payment.memo.bit_length() + 7) // 8, 'little', signed=False)
if payment.memo else None
))
return payments
[docs] @staticmethod
def payment_list_to_proto(payment_list: List['Payment']) -> List[proto.Payment]:
"""Serialize a list of this Payment Dataclass into a list of Protocol Buffer Payment objects."""
payments = []
for payment in payment_list:
if payment.memo and len(payment.memo) > 8:
raise ValueError('Memo cannot contain more than 8 bytes.')
kwargs = {}
if payment.memo:
kwargs['memo'] = int.from_bytes(payment.memo, byteorder='little', signed=False)
payments.append(
proto.Payment(
payee=payment.payee.bin,
amount=payment.amount,
**kwargs
))
return payments