Source code for agora.webhook.create_account

import base64

from agora import solana
from agora.keys import PrivateKey
from agora.model import Creation
from agora.model.utils import parse_transaction


[docs]class CreateAccountRequest: """A create account request received from Agora. :param creation: The :class:`Creation <agora.model.creation.Creation>` an app client is requesting the server to verify. :param transaction: The :class:`Transaction <agora.solana.transaction.Transaction>` object. """ def __init__(self, creation: Creation, transaction: solana.Transaction): self.creation = creation self.transaction = transaction
[docs] @classmethod def from_json(cls, data: dict): kin_version = data.get('kin_version', 4) if kin_version != 4: raise ValueError(f'unsupported kin version {kin_version}') tx_string = data.get('solana_transaction', "") if not tx_string: raise ValueError('`solana_transaction` is required') tx = solana.Transaction.unmarshal(base64.b64decode(tx_string)) creations, payments = parse_transaction(tx) if len(payments) != 0: raise ValueError('unexpected payments present') if len(creations) != 1: raise ValueError(f'expected exactly 1 creation, got {len(creations)}') return cls(creations[0], tx)
[docs]class CreateAccountResponse: def __init__(self, transaction: solana.Transaction): self.rejected = False self.transaction = transaction
[docs] def sign(self, private_key: PrivateKey): if len(self.transaction.signatures) > len(self.transaction.message.accounts): raise ValueError('invalid transaction: more signers than accounts') # Check to see if our public key corresponds to a signer before signing if private_key.public_key == self.transaction.message.accounts[0]: self.transaction.sign([private_key])
[docs] def reject(self): self.rejected = True