Source code for graphenecommon.aio.genesisbalance

# -*- coding: utf-8 -*-
from .blockchainobject import BlockchainObject
from ..exceptions import GenesisBalanceDoesNotExistsException, MissingKeyError
from ..genesisbalance import (
    GenesisBalance as SyncGenesisBalance,
    GenesisBalances as SyncGenesisBalances,
)


class GenesisBalance(BlockchainObject, SyncGenesisBalance):
    """ Deals with Assets of the network.

        :param str Asset: Symbol name or object id of an asset
        :param bool lazy: Lazy loading
        :param bool full: Also obtain bitasset-data and dynamic asset data
        :param instance blockchain_instance: instance to use when accesing a RPC
        :returns: All data of an asset
        :rtype: dict

        .. note:: This class comes with its own caching function to reduce the
                  load on the API server. Instances of this class can be
                  refreshed with ``Asset.refresh()``.
    """

    async def __init__(self, *args, **kwargs):
        self.define_classes()
        assert self.type_id
        assert self.account_class
        assert self.operations
        assert self.address_class
        assert self.publickey_class

        self.full = kwargs.pop("full", False)
        await BlockchainObject.__init__(self, *args, **kwargs)

[docs] async def refresh(self): balance = await self.blockchain.rpc.get_object(self.identifier) if not balance: raise GenesisBalanceDoesNotExistsException await super(GenesisBalance, self).__init__( balance, blockchain_instance=self.blockchain )
[docs] async def claim(self, account=None, **kwargs): """ Claim a balance from the genesis block :param str balance_id: The identifier that identifies the balance to claim (1.15.x) :param str account: (optional) the account that owns the bet (defaults to ``default_account``) """ if not account: if "default_account" in self.blockchain.config: account = self.blockchain.config["default_account"] if not account: raise ValueError("You need to provide an account") account = await self.account_class(account, blockchain_instance=self.blockchain) pubkeys = self.blockchain.wallet.getPublicKeys() addresses = dict() for p in pubkeys: if p[: len(self.blockchain.prefix)] != self.blockchain.prefix: continue pubkey = self.publickey_class(p, prefix=self.blockchain.prefix) addresses[ str( self.address_class.from_pubkey( pubkey, compressed=False, version=0, prefix=self.blockchain.prefix, ) ) ] = pubkey addresses[ str( self.address_class.from_pubkey( pubkey, compressed=True, version=0, prefix=self.blockchain.prefix, ) ) ] = pubkey addresses[ str( self.address_class.from_pubkey( pubkey, compressed=False, version=56, prefix=self.blockchain.prefix, ) ) ] = pubkey addresses[ str( self.address_class.from_pubkey( pubkey, compressed=True, version=56, prefix=self.blockchain.prefix, ) ) ] = pubkey if self["owner"] not in addresses.keys(): raise MissingKeyError("Need key for address {}".format(self["owner"])) op = self.operations.Balance_claim( **{ "fee": {"amount": 0, "asset_id": "1.3.0"}, "deposit_to_account": account["id"], "balance_to_claim": self["id"], "balance_owner_key": addresses[self["owner"]], "total_claimed": self["balance"], "prefix": self.blockchain.prefix, } ) signers = [ account["name"], # The fee payer and receiver account addresses.get(self["owner"]), # The genesis balance! ] return await self.blockchain.finalizeOp(op, signers, "active", **kwargs)
class GenesisBalances(SyncGenesisBalances): """ List genesis balances that can be claimed from the keys in the wallet """ async def __init__(self, **kwargs): self.define_classes() assert self.genesisbalance_class assert self.publickey_class assert self.address_class pubkeys = self.blockchain.wallet.getPublicKeys() addresses = list() for p in pubkeys: if p[: len(self.blockchain.prefix)] != self.blockchain.prefix: continue pubkey = self.publickey_class(p, prefix=self.blockchain.prefix) addresses.append( str( self.address_class.from_pubkey( pubkey, compressed=False, version=0, prefix=self.blockchain.prefix, ) ) ) addresses.append( str( self.address_class.from_pubkey( pubkey, compressed=True, version=0, prefix=self.blockchain.prefix, ) ) ) addresses.append( str( self.address_class.from_pubkey( pubkey, compressed=False, version=56, prefix=self.blockchain.prefix, ) ) ) addresses.append( str( self.address_class.from_pubkey( pubkey, compressed=True, version=56, prefix=self.blockchain.prefix, ) ) ) balancess = await self.blockchain.rpc.get_balance_objects(addresses) await super(GenesisBalances, self).__init__( [ await self.genesisbalance_class( x, **kwargs, blockchain_instance=self.blockchain ) for x in balancess ] )