Module pydena.api

Expand source code
from pydena.exceptions import RPCError
from pydena.models.dna import CeremonyIntervals, Epoch, Profile, ProfileTxn, RandomInviteTxn
from requests import Session
from pydena.models import AddressTxns, Block, Mempool, Sync, Transaction, BurntCoins, FlipKeyword, Identity, State, Accounts

class API(object):
    def __init__(self, host="http://localhost:9009", apikey=""):
        self.host = host
        if not host.startswith('http://'):
            self.host = 'http://' + host
        self.apikey = apikey
        self.session = Session()
        self.base_payload = {
            'params': [],
            'id': 1,
            'key': apikey,
            'method': ''
        }
        self.current_id = 1
    
    def _request(self, method, params=[]):
        payload = self.base_payload.copy()
        payload['id'] = self.current_id
        payload['params'] = params
        payload['method'] = method
        res = self.session.get(self.host, json=payload, timeout=30)
        self.current_id += 1
        if res.get('error'):
            raise RPCError(res.json())
        return res

    def getLastBlock(self, raw=False):
        """Returns last block from node

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            block(Block): A block model holding block info
        
        """
        res = self._request('bcn_lastBlock')
        if raw:
            return res.json()
        return Block(**res.json().get('result'))
    
    def getBlockByHeight(self, height: int, raw=False):
        """Returns block by height

        Parameters:
            height(int): Height of block to search for
            raw(bool): Return in JSON format. Default: false

        Returns:
            block(Block): A block model holding block info
        
        """
        res = self._request('bcn_blockAt', [height])
        if raw:
            return res.json()
        return Block(**res.json().get('result'))

    def getBlockByHash(self, hash: str, raw=False):
        """Returns block by hash

        Parameters:
            hash(int): Hash of block to search for
            raw(bool): Return in JSON format. Default: false

        Returns:
            block(Block): A block model holding block info
        
        """
        res = self._request('bcn_block', [hash])
        if raw:
            return res.json()
        return Block(**res.json().get('result'))

    def getTransaction(self, hash: str, raw=False):
        """Gets transacation by txn hash

        Parameters:
            hash(int): Hash of txn to search for
            raw(bool): Return in JSON format. Default: false

        Returns:
            txn(Transaction): A transaction model holding transaction info
        
        """
        res = self._request('bcn_transaction', [hash])
        if raw:
            return res.json()
        return Transaction(**res.json().get('result'))

    def getMempool(self, raw=False):
        """Gets mempool information

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            txn(Transaction): A mempool model holding mempool info
        
        """
        res = self._request('bcn_mempool')
        if raw:
            return res.json()
        return Mempool(**res.json().get('result'))

    def checkSync(self, raw=False):
        """Gets syncronization information

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            sync(Sync): A sync model holding sync info
        
        """
        res = self._request('bcn_syncing')
        if raw:
            return res.json()
        return Sync(**res.json().get('result'))

    def getAddressTxns(self, address: str, count: int =1, token: str =None, raw=False):
        """Gets transactions for a certain address

        Parameters:
            address(str): Address to query by
            count(int): Count of transacations to return. Default: 1
            token(str1): Token to query by. Default: None
            raw(bool): Return in JSON format. Default: false

        Returns:
            txns(AddressTxns): A AddressTxns model holding txn info by address
        
        """
        params = {'address': address, 'count': count}
        if token:
            params['token'] = token
        res = self._request('bcn_transactions', [params])
        if raw:
            return res.json()
        return AddressTxns(**res.json().get('result'))

    def getPendingAddressTxns(self, address: str, raw=False):
        """Gets pending address transactions

        Parameters:
            address(str): Address to query by
            raw(bool): Return in JSON format. Default: false

        Returns:
            txns(AddressTxns): A AddressTxns model holding txn info by address
        
        """
        res = self._request('bcn_pendingTransactions', [{'address': address}])
        if raw:
            return res.json()
        return AddressTxns(**res.json().get('result'))

    def getBurntCoins(self, raw=False):
        """Gets burnt coins for your coinbase address

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            burntcoins(BurntCoins): A BurntCoins model holding burntcoin info
        
        """
        res = self._request('bcn_burntCoins')
        if raw:
            return res.json()
        return BurntCoins(**res.json().get('result'))

    def getFlipKeyword(self, index: int, raw=False):
        """Gets flip keywords by index

        Parameters:
            index(int): Index of flip keyword
            raw(bool): Return in JSON format. Default: false

        Returns:
            fkw(FlipKeyword): A FlipKeyword model holding keyword info
        
        """
        res = self._request('bcn_keyWord', [index])
        if raw:
            return res.json()
        return FlipKeyword(**res.json().get('result'))

    def getIdentities(self, raw=False):
        """Gets DNA Identities

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            identities(List[Identity]): A list of Identity models
        
        """
        res = self._request('dna_identities')
        if raw:
            return res.json()
        return [Identity(**r) for r in res.json().get('result')]

    def getIdentity(self, address: str, raw=False):
        """Gets an address' identity

        Parameters:
            address(str): Address to query by
            raw(bool): Return in JSON format. Default: false

        Returns:
            identity(Identity): Address' Identity model
        
        """
        res = self._request('dna_identity', [address])
        if raw:
            return res.json()
        return Identity(**res.json().get('result'))

    def getCurrentProcess(self, raw=False):
        """Gets flip keywords by index

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            state(State): A State model holding state information
        
        """
        res = self._request('dna_state')
        if raw:
            return res.json()
        return State(**res.json().get('result'))
    
    def getCoinbaseAddress(self, raw=False):
        """Gets coinbase address

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            addr(str): Your coinbase address
        
        """
        res = self._request('dna_getCoinbaseAddr')
        if raw:
            return res.json()
        return res.json().get('result')

    def calculateIpfsCid(self, data: str, raw=False):
        """Calculate IPFS CID

        Parameters:
            data(str): Data to calcualte IPFS CID for
            raw(bool): Return in JSON format. Default: false

        Returns:
            data(dict): CID of calculated data
        
        """
        res = self._request('ipfs_cid', [data])
        if raw:
            return res.json()
        return res.json().get('result')
    
    def addDataToIpfs(self, data: str, pin: bool = False, raw=False):
        """Add IPFS Data

        Parameters:
            data(str): Data to add to IPFS
            pin(bool): Pin to IPFS or not. Default: false
            raw(bool1): Return in JSON format. Default: false

        Returns:
            data(dict): CID of posted data
        
        """
        res = self._request('ipfs_add', [data, pin])
        if raw:
            return res.json()
        return res.json().get('result')

    def getIpfsData(self, cid: str, raw=False):
        """Gets IPFS data

        Parameters:
            cid(str): CID of IPFS data
            raw(bool): Return in JSON format. Default: false

        Returns:
            data(dict): A dictionary holding ipfs data
        
        """
        res = self._request('ipfs_get', [cid])
        if raw:
            return res.json()
        return res.json().get('result')

    def getAccounts(self, raw=False):
        """Gets your unlocked accounts

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            accounts(Accounts): An accounts model holding account data
        
        """
        res = self._request('account_list')
        if raw:
            return res.json()
        return Accounts(**res.json())
    
    def unlockAccount(self, address: str, password: str=None, time: int=None, raw=False):
        """Unlock an account

        Parameters:
            address(str): Address to unlock
            password(str1): Password of address
            time(int): Time to unlock
            raw(bool): Return in JSON format. Default: false

        Returns:
            account(str): An account string
        
        """
        params = [address]
        if password:
            params.append(password)
        if time:
            params.append(time)
        res = self._request('account_unlock', params)
        if raw:
            return res.json()
        return res.json().get('result')
    
    def addAccount(self, password: str, raw=False):
        """Add an account

        Parameters:
            password(str): Password of account
            raw(bool): Return in JSON format. Default: false

        Returns:
            account(str): An account string
        
        """
        res = self._request('account_create', [password])
        if raw:
            return res.json()
        return res.json().get('result')

    def lockAccount(self, address: str, raw=False):
        """Lock an account

        Parameters:
            address(str): Address of account
            raw(bool): Return in JSON format. Default: false

        Returns:
            account(str): An account string
        
        """
        res = self._request('account_lock', [address])
        if raw:
            return res.json()
        return res.json().get('result')

    def sendDna(self, from_: str, to: str, amount: float, max_fee: float, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'from': from_,
            'to': to,
            'maxFee': max_fee,
            'amount': str(amount)
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_sendTransaction', [params])
        return res.json().get('result')

    def sendInvite(self, to: str, amount: int, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to,
            'amount': amount
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_sendInvite', [params])
        return res.json().get('result')
    
    def activateInvite(self, to: str, key: str = None, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to
        }
        if key:
            params['key'] = key
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_activateInvite', [params])
        return res.json().get('result')

    def becomeOnline(self, nonce: int = None, epoch: int = None, raw=False):
        params = {}
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_becomeOnline', [params])
        return res.json().get('result')

    def becomeOffline(self, nonce: int = None, epoch: int = None, raw=False):
        params = {}
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_becomeOffline', [params])
        return res.json().get('result')

    def delegate(self, to: str, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_delegate', [params])
        return res.json().get('result')

    def undelegate(self,nonce: int = None, epoch: int = None, raw=False):
        params = {}
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_delegate', [params])
        return res.json().get('result')
    
    def killDelegator(self, to: str, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_killDelegator', [params])
        return res.json().get('result')

    def changeGodAddress(self, from_: str, to: str, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'from': from_,
            'to': to,
            'maxFee': max_fee,
            'type': 11
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_sendTransaction', [params])
        return res.json().get('result')

    def getEpoch(self, raw=False):
        res = self._request('dna_epoch')
        if raw:
            return res.json()
        return Epoch(**res.json().get('result'))

    def getCeremonyIntervals(self, raw=False):
        res = self._request('dna_ceremonyIntervals')
        if raw:
            return res.json()
        return CeremonyIntervals(**res.json().get('result'))
    
    def exportKey(self, password, raw=False):
        res = self._request('dna_exportKey', [password])
        if raw:
            return res.json()
        return CeremonyIntervals(**res.json().get('result'))
    
    def burnDna(self, from_: str, amount: float, key: str = None, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'from': from_,
            'amount': amount,
            'key': key,
            'max_fee': max_fee,
            'nonce': nonce,
            'epoch': epoch
        }
        res = self._request('dna_burn', [params])
        if raw:
            return res.json()
        return res.json().get('result')
    
    def changeProfile(self, info: str = None, nickname: str = None, max_fee: float = None, raw=False):
        params = {
            'info': info,
            'nickname': nickname,
            'max_fee': max_fee
        }
        res = self._request('dna_changeProfile', [params])
        if raw:
            return res.json()
        return ProfileTxn(**res.json().get('result'))
    
    def getProfile(self, address: str, raw = False):
        res = self._request('dna_profile', [address])
        if raw:
            return res.json()
        return Profile(**res.json().get('result'))

    def activateRandomInvite(self, key: str, nonce: int = None, epoch: int = None, raw = False):
        res = self._request('dna_activateInviteToRandAddr', [{'key': key, 'nonce': nonce, 'epoch': epoch}])
        if raw:
            return res.json()
        return RandomInviteTxn(**res.json().get('result'))

    def storeToIpfs(self, cid: str, nonce: int = None, epoch: int = None, raw=False):
        res = self._request('dna_storeToIpfs', [{'cid': cid, 'nonce': nonce, 'epoch': epoch}])
        if raw:
            return res.json()
        return res.json().get('result')

Classes

class API (host='http://localhost:9009', apikey='')
Expand source code
class API(object):
    def __init__(self, host="http://localhost:9009", apikey=""):
        self.host = host
        if not host.startswith('http://'):
            self.host = 'http://' + host
        self.apikey = apikey
        self.session = Session()
        self.base_payload = {
            'params': [],
            'id': 1,
            'key': apikey,
            'method': ''
        }
        self.current_id = 1
    
    def _request(self, method, params=[]):
        payload = self.base_payload.copy()
        payload['id'] = self.current_id
        payload['params'] = params
        payload['method'] = method
        res = self.session.get(self.host, json=payload, timeout=30)
        self.current_id += 1
        if res.get('error'):
            raise RPCError(res.json())
        return res

    def getLastBlock(self, raw=False):
        """Returns last block from node

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            block(Block): A block model holding block info
        
        """
        res = self._request('bcn_lastBlock')
        if raw:
            return res.json()
        return Block(**res.json().get('result'))
    
    def getBlockByHeight(self, height: int, raw=False):
        """Returns block by height

        Parameters:
            height(int): Height of block to search for
            raw(bool): Return in JSON format. Default: false

        Returns:
            block(Block): A block model holding block info
        
        """
        res = self._request('bcn_blockAt', [height])
        if raw:
            return res.json()
        return Block(**res.json().get('result'))

    def getBlockByHash(self, hash: str, raw=False):
        """Returns block by hash

        Parameters:
            hash(int): Hash of block to search for
            raw(bool): Return in JSON format. Default: false

        Returns:
            block(Block): A block model holding block info
        
        """
        res = self._request('bcn_block', [hash])
        if raw:
            return res.json()
        return Block(**res.json().get('result'))

    def getTransaction(self, hash: str, raw=False):
        """Gets transacation by txn hash

        Parameters:
            hash(int): Hash of txn to search for
            raw(bool): Return in JSON format. Default: false

        Returns:
            txn(Transaction): A transaction model holding transaction info
        
        """
        res = self._request('bcn_transaction', [hash])
        if raw:
            return res.json()
        return Transaction(**res.json().get('result'))

    def getMempool(self, raw=False):
        """Gets mempool information

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            txn(Transaction): A mempool model holding mempool info
        
        """
        res = self._request('bcn_mempool')
        if raw:
            return res.json()
        return Mempool(**res.json().get('result'))

    def checkSync(self, raw=False):
        """Gets syncronization information

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            sync(Sync): A sync model holding sync info
        
        """
        res = self._request('bcn_syncing')
        if raw:
            return res.json()
        return Sync(**res.json().get('result'))

    def getAddressTxns(self, address: str, count: int =1, token: str =None, raw=False):
        """Gets transactions for a certain address

        Parameters:
            address(str): Address to query by
            count(int): Count of transacations to return. Default: 1
            token(str1): Token to query by. Default: None
            raw(bool): Return in JSON format. Default: false

        Returns:
            txns(AddressTxns): A AddressTxns model holding txn info by address
        
        """
        params = {'address': address, 'count': count}
        if token:
            params['token'] = token
        res = self._request('bcn_transactions', [params])
        if raw:
            return res.json()
        return AddressTxns(**res.json().get('result'))

    def getPendingAddressTxns(self, address: str, raw=False):
        """Gets pending address transactions

        Parameters:
            address(str): Address to query by
            raw(bool): Return in JSON format. Default: false

        Returns:
            txns(AddressTxns): A AddressTxns model holding txn info by address
        
        """
        res = self._request('bcn_pendingTransactions', [{'address': address}])
        if raw:
            return res.json()
        return AddressTxns(**res.json().get('result'))

    def getBurntCoins(self, raw=False):
        """Gets burnt coins for your coinbase address

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            burntcoins(BurntCoins): A BurntCoins model holding burntcoin info
        
        """
        res = self._request('bcn_burntCoins')
        if raw:
            return res.json()
        return BurntCoins(**res.json().get('result'))

    def getFlipKeyword(self, index: int, raw=False):
        """Gets flip keywords by index

        Parameters:
            index(int): Index of flip keyword
            raw(bool): Return in JSON format. Default: false

        Returns:
            fkw(FlipKeyword): A FlipKeyword model holding keyword info
        
        """
        res = self._request('bcn_keyWord', [index])
        if raw:
            return res.json()
        return FlipKeyword(**res.json().get('result'))

    def getIdentities(self, raw=False):
        """Gets DNA Identities

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            identities(List[Identity]): A list of Identity models
        
        """
        res = self._request('dna_identities')
        if raw:
            return res.json()
        return [Identity(**r) for r in res.json().get('result')]

    def getIdentity(self, address: str, raw=False):
        """Gets an address' identity

        Parameters:
            address(str): Address to query by
            raw(bool): Return in JSON format. Default: false

        Returns:
            identity(Identity): Address' Identity model
        
        """
        res = self._request('dna_identity', [address])
        if raw:
            return res.json()
        return Identity(**res.json().get('result'))

    def getCurrentProcess(self, raw=False):
        """Gets flip keywords by index

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            state(State): A State model holding state information
        
        """
        res = self._request('dna_state')
        if raw:
            return res.json()
        return State(**res.json().get('result'))
    
    def getCoinbaseAddress(self, raw=False):
        """Gets coinbase address

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            addr(str): Your coinbase address
        
        """
        res = self._request('dna_getCoinbaseAddr')
        if raw:
            return res.json()
        return res.json().get('result')

    def calculateIpfsCid(self, data: str, raw=False):
        """Calculate IPFS CID

        Parameters:
            data(str): Data to calcualte IPFS CID for
            raw(bool): Return in JSON format. Default: false

        Returns:
            data(dict): CID of calculated data
        
        """
        res = self._request('ipfs_cid', [data])
        if raw:
            return res.json()
        return res.json().get('result')
    
    def addDataToIpfs(self, data: str, pin: bool = False, raw=False):
        """Add IPFS Data

        Parameters:
            data(str): Data to add to IPFS
            pin(bool): Pin to IPFS or not. Default: false
            raw(bool1): Return in JSON format. Default: false

        Returns:
            data(dict): CID of posted data
        
        """
        res = self._request('ipfs_add', [data, pin])
        if raw:
            return res.json()
        return res.json().get('result')

    def getIpfsData(self, cid: str, raw=False):
        """Gets IPFS data

        Parameters:
            cid(str): CID of IPFS data
            raw(bool): Return in JSON format. Default: false

        Returns:
            data(dict): A dictionary holding ipfs data
        
        """
        res = self._request('ipfs_get', [cid])
        if raw:
            return res.json()
        return res.json().get('result')

    def getAccounts(self, raw=False):
        """Gets your unlocked accounts

        Parameters:
            raw(bool): Return in JSON format. Default: false

        Returns:
            accounts(Accounts): An accounts model holding account data
        
        """
        res = self._request('account_list')
        if raw:
            return res.json()
        return Accounts(**res.json())
    
    def unlockAccount(self, address: str, password: str=None, time: int=None, raw=False):
        """Unlock an account

        Parameters:
            address(str): Address to unlock
            password(str1): Password of address
            time(int): Time to unlock
            raw(bool): Return in JSON format. Default: false

        Returns:
            account(str): An account string
        
        """
        params = [address]
        if password:
            params.append(password)
        if time:
            params.append(time)
        res = self._request('account_unlock', params)
        if raw:
            return res.json()
        return res.json().get('result')
    
    def addAccount(self, password: str, raw=False):
        """Add an account

        Parameters:
            password(str): Password of account
            raw(bool): Return in JSON format. Default: false

        Returns:
            account(str): An account string
        
        """
        res = self._request('account_create', [password])
        if raw:
            return res.json()
        return res.json().get('result')

    def lockAccount(self, address: str, raw=False):
        """Lock an account

        Parameters:
            address(str): Address of account
            raw(bool): Return in JSON format. Default: false

        Returns:
            account(str): An account string
        
        """
        res = self._request('account_lock', [address])
        if raw:
            return res.json()
        return res.json().get('result')

    def sendDna(self, from_: str, to: str, amount: float, max_fee: float, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'from': from_,
            'to': to,
            'maxFee': max_fee,
            'amount': str(amount)
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_sendTransaction', [params])
        return res.json().get('result')

    def sendInvite(self, to: str, amount: int, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to,
            'amount': amount
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_sendInvite', [params])
        return res.json().get('result')
    
    def activateInvite(self, to: str, key: str = None, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to
        }
        if key:
            params['key'] = key
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_activateInvite', [params])
        return res.json().get('result')

    def becomeOnline(self, nonce: int = None, epoch: int = None, raw=False):
        params = {}
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_becomeOnline', [params])
        return res.json().get('result')

    def becomeOffline(self, nonce: int = None, epoch: int = None, raw=False):
        params = {}
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_becomeOffline', [params])
        return res.json().get('result')

    def delegate(self, to: str, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_delegate', [params])
        return res.json().get('result')

    def undelegate(self,nonce: int = None, epoch: int = None, raw=False):
        params = {}
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_delegate', [params])
        return res.json().get('result')
    
    def killDelegator(self, to: str, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'to': to
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_killDelegator', [params])
        return res.json().get('result')

    def changeGodAddress(self, from_: str, to: str, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'from': from_,
            'to': to,
            'maxFee': max_fee,
            'type': 11
        }
        if nonce:
            params['nonce'] = nonce
        if epoch:
            params['epoch'] = epoch
        res = self._request('dna_sendTransaction', [params])
        return res.json().get('result')

    def getEpoch(self, raw=False):
        res = self._request('dna_epoch')
        if raw:
            return res.json()
        return Epoch(**res.json().get('result'))

    def getCeremonyIntervals(self, raw=False):
        res = self._request('dna_ceremonyIntervals')
        if raw:
            return res.json()
        return CeremonyIntervals(**res.json().get('result'))
    
    def exportKey(self, password, raw=False):
        res = self._request('dna_exportKey', [password])
        if raw:
            return res.json()
        return CeremonyIntervals(**res.json().get('result'))
    
    def burnDna(self, from_: str, amount: float, key: str = None, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False):
        params = {
            'from': from_,
            'amount': amount,
            'key': key,
            'max_fee': max_fee,
            'nonce': nonce,
            'epoch': epoch
        }
        res = self._request('dna_burn', [params])
        if raw:
            return res.json()
        return res.json().get('result')
    
    def changeProfile(self, info: str = None, nickname: str = None, max_fee: float = None, raw=False):
        params = {
            'info': info,
            'nickname': nickname,
            'max_fee': max_fee
        }
        res = self._request('dna_changeProfile', [params])
        if raw:
            return res.json()
        return ProfileTxn(**res.json().get('result'))
    
    def getProfile(self, address: str, raw = False):
        res = self._request('dna_profile', [address])
        if raw:
            return res.json()
        return Profile(**res.json().get('result'))

    def activateRandomInvite(self, key: str, nonce: int = None, epoch: int = None, raw = False):
        res = self._request('dna_activateInviteToRandAddr', [{'key': key, 'nonce': nonce, 'epoch': epoch}])
        if raw:
            return res.json()
        return RandomInviteTxn(**res.json().get('result'))

    def storeToIpfs(self, cid: str, nonce: int = None, epoch: int = None, raw=False):
        res = self._request('dna_storeToIpfs', [{'cid': cid, 'nonce': nonce, 'epoch': epoch}])
        if raw:
            return res.json()
        return res.json().get('result')

Methods

def activateInvite(self, to: str, key: str = None, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def activateInvite(self, to: str, key: str = None, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'to': to
    }
    if key:
        params['key'] = key
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_activateInvite', [params])
    return res.json().get('result')
def activateRandomInvite(self, key: str, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def activateRandomInvite(self, key: str, nonce: int = None, epoch: int = None, raw = False):
    res = self._request('dna_activateInviteToRandAddr', [{'key': key, 'nonce': nonce, 'epoch': epoch}])
    if raw:
        return res.json()
    return RandomInviteTxn(**res.json().get('result'))
def addAccount(self, password: str, raw=False)

Add an account

Parameters

password(str): Password of account raw(bool): Return in JSON format. Default: false

Returns

account(str): An account string

Expand source code
def addAccount(self, password: str, raw=False):
    """Add an account

    Parameters:
        password(str): Password of account
        raw(bool): Return in JSON format. Default: false

    Returns:
        account(str): An account string
    
    """
    res = self._request('account_create', [password])
    if raw:
        return res.json()
    return res.json().get('result')
def addDataToIpfs(self, data: str, pin: bool = False, raw=False)

Add IPFS Data

Parameters

data(str): Data to add to IPFS pin(bool): Pin to IPFS or not. Default: false raw(bool1): Return in JSON format. Default: false

Returns

data(dict): CID of posted data

Expand source code
def addDataToIpfs(self, data: str, pin: bool = False, raw=False):
    """Add IPFS Data

    Parameters:
        data(str): Data to add to IPFS
        pin(bool): Pin to IPFS or not. Default: false
        raw(bool1): Return in JSON format. Default: false

    Returns:
        data(dict): CID of posted data
    
    """
    res = self._request('ipfs_add', [data, pin])
    if raw:
        return res.json()
    return res.json().get('result')
def becomeOffline(self, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def becomeOffline(self, nonce: int = None, epoch: int = None, raw=False):
    params = {}
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_becomeOffline', [params])
    return res.json().get('result')
def becomeOnline(self, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def becomeOnline(self, nonce: int = None, epoch: int = None, raw=False):
    params = {}
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_becomeOnline', [params])
    return res.json().get('result')
def burnDna(self, from_: str, amount: float, key: str = None, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def burnDna(self, from_: str, amount: float, key: str = None, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'from': from_,
        'amount': amount,
        'key': key,
        'max_fee': max_fee,
        'nonce': nonce,
        'epoch': epoch
    }
    res = self._request('dna_burn', [params])
    if raw:
        return res.json()
    return res.json().get('result')
def calculateIpfsCid(self, data: str, raw=False)

Calculate IPFS CID

Parameters

data(str): Data to calcualte IPFS CID for raw(bool): Return in JSON format. Default: false

Returns

data(dict): CID of calculated data

Expand source code
def calculateIpfsCid(self, data: str, raw=False):
    """Calculate IPFS CID

    Parameters:
        data(str): Data to calcualte IPFS CID for
        raw(bool): Return in JSON format. Default: false

    Returns:
        data(dict): CID of calculated data
    
    """
    res = self._request('ipfs_cid', [data])
    if raw:
        return res.json()
    return res.json().get('result')
def changeGodAddress(self, from_: str, to: str, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def changeGodAddress(self, from_: str, to: str, max_fee: float = None, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'from': from_,
        'to': to,
        'maxFee': max_fee,
        'type': 11
    }
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_sendTransaction', [params])
    return res.json().get('result')
def changeProfile(self, info: str = None, nickname: str = None, max_fee: float = None, raw=False)
Expand source code
def changeProfile(self, info: str = None, nickname: str = None, max_fee: float = None, raw=False):
    params = {
        'info': info,
        'nickname': nickname,
        'max_fee': max_fee
    }
    res = self._request('dna_changeProfile', [params])
    if raw:
        return res.json()
    return ProfileTxn(**res.json().get('result'))
def checkSync(self, raw=False)

Gets syncronization information

Parameters

raw(bool): Return in JSON format. Default: false

Returns

sync(Sync): A sync model holding sync info

Expand source code
def checkSync(self, raw=False):
    """Gets syncronization information

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        sync(Sync): A sync model holding sync info
    
    """
    res = self._request('bcn_syncing')
    if raw:
        return res.json()
    return Sync(**res.json().get('result'))
def delegate(self, to: str, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def delegate(self, to: str, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'to': to
    }
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_delegate', [params])
    return res.json().get('result')
def exportKey(self, password, raw=False)
Expand source code
def exportKey(self, password, raw=False):
    res = self._request('dna_exportKey', [password])
    if raw:
        return res.json()
    return CeremonyIntervals(**res.json().get('result'))
def getAccounts(self, raw=False)

Gets your unlocked accounts

Parameters

raw(bool): Return in JSON format. Default: false

Returns

accounts(Accounts): An accounts model holding account data

Expand source code
def getAccounts(self, raw=False):
    """Gets your unlocked accounts

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        accounts(Accounts): An accounts model holding account data
    
    """
    res = self._request('account_list')
    if raw:
        return res.json()
    return Accounts(**res.json())
def getAddressTxns(self, address: str, count: int = 1, token: str = None, raw=False)

Gets transactions for a certain address

Parameters

address(str): Address to query by count(int): Count of transacations to return. Default: 1 token(str1): Token to query by. Default: None raw(bool): Return in JSON format. Default: false

Returns

txns(AddressTxns): A AddressTxns model holding txn info by address

Expand source code
def getAddressTxns(self, address: str, count: int =1, token: str =None, raw=False):
    """Gets transactions for a certain address

    Parameters:
        address(str): Address to query by
        count(int): Count of transacations to return. Default: 1
        token(str1): Token to query by. Default: None
        raw(bool): Return in JSON format. Default: false

    Returns:
        txns(AddressTxns): A AddressTxns model holding txn info by address
    
    """
    params = {'address': address, 'count': count}
    if token:
        params['token'] = token
    res = self._request('bcn_transactions', [params])
    if raw:
        return res.json()
    return AddressTxns(**res.json().get('result'))
def getBlockByHash(self, hash: str, raw=False)

Returns block by hash

Parameters

hash(int): Hash of block to search for raw(bool): Return in JSON format. Default: false

Returns

block(Block): A block model holding block info

Expand source code
def getBlockByHash(self, hash: str, raw=False):
    """Returns block by hash

    Parameters:
        hash(int): Hash of block to search for
        raw(bool): Return in JSON format. Default: false

    Returns:
        block(Block): A block model holding block info
    
    """
    res = self._request('bcn_block', [hash])
    if raw:
        return res.json()
    return Block(**res.json().get('result'))
def getBlockByHeight(self, height: int, raw=False)

Returns block by height

Parameters

height(int): Height of block to search for raw(bool): Return in JSON format. Default: false

Returns

block(Block): A block model holding block info

Expand source code
def getBlockByHeight(self, height: int, raw=False):
    """Returns block by height

    Parameters:
        height(int): Height of block to search for
        raw(bool): Return in JSON format. Default: false

    Returns:
        block(Block): A block model holding block info
    
    """
    res = self._request('bcn_blockAt', [height])
    if raw:
        return res.json()
    return Block(**res.json().get('result'))
def getBurntCoins(self, raw=False)

Gets burnt coins for your coinbase address

Parameters

raw(bool): Return in JSON format. Default: false

Returns

burntcoins(BurntCoins): A BurntCoins model holding burntcoin info

Expand source code
def getBurntCoins(self, raw=False):
    """Gets burnt coins for your coinbase address

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        burntcoins(BurntCoins): A BurntCoins model holding burntcoin info
    
    """
    res = self._request('bcn_burntCoins')
    if raw:
        return res.json()
    return BurntCoins(**res.json().get('result'))
def getCeremonyIntervals(self, raw=False)
Expand source code
def getCeremonyIntervals(self, raw=False):
    res = self._request('dna_ceremonyIntervals')
    if raw:
        return res.json()
    return CeremonyIntervals(**res.json().get('result'))
def getCoinbaseAddress(self, raw=False)

Gets coinbase address

Parameters

raw(bool): Return in JSON format. Default: false

Returns

addr(str): Your coinbase address

Expand source code
def getCoinbaseAddress(self, raw=False):
    """Gets coinbase address

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        addr(str): Your coinbase address
    
    """
    res = self._request('dna_getCoinbaseAddr')
    if raw:
        return res.json()
    return res.json().get('result')
def getCurrentProcess(self, raw=False)

Gets flip keywords by index

Parameters

raw(bool): Return in JSON format. Default: false

Returns

state(State): A State model holding state information

Expand source code
def getCurrentProcess(self, raw=False):
    """Gets flip keywords by index

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        state(State): A State model holding state information
    
    """
    res = self._request('dna_state')
    if raw:
        return res.json()
    return State(**res.json().get('result'))
def getEpoch(self, raw=False)
Expand source code
def getEpoch(self, raw=False):
    res = self._request('dna_epoch')
    if raw:
        return res.json()
    return Epoch(**res.json().get('result'))
def getFlipKeyword(self, index: int, raw=False)

Gets flip keywords by index

Parameters

index(int): Index of flip keyword raw(bool): Return in JSON format. Default: false

Returns

fkw(FlipKeyword): A FlipKeyword model holding keyword info

Expand source code
def getFlipKeyword(self, index: int, raw=False):
    """Gets flip keywords by index

    Parameters:
        index(int): Index of flip keyword
        raw(bool): Return in JSON format. Default: false

    Returns:
        fkw(FlipKeyword): A FlipKeyword model holding keyword info
    
    """
    res = self._request('bcn_keyWord', [index])
    if raw:
        return res.json()
    return FlipKeyword(**res.json().get('result'))
def getIdentities(self, raw=False)

Gets DNA Identities

Parameters

raw(bool): Return in JSON format. Default: false

Returns

identities(List[Identity]): A list of Identity models

Expand source code
def getIdentities(self, raw=False):
    """Gets DNA Identities

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        identities(List[Identity]): A list of Identity models
    
    """
    res = self._request('dna_identities')
    if raw:
        return res.json()
    return [Identity(**r) for r in res.json().get('result')]
def getIdentity(self, address: str, raw=False)

Gets an address' identity

Parameters

address(str): Address to query by raw(bool): Return in JSON format. Default: false

Returns

identity(Identity): Address' Identity model

Expand source code
def getIdentity(self, address: str, raw=False):
    """Gets an address' identity

    Parameters:
        address(str): Address to query by
        raw(bool): Return in JSON format. Default: false

    Returns:
        identity(Identity): Address' Identity model
    
    """
    res = self._request('dna_identity', [address])
    if raw:
        return res.json()
    return Identity(**res.json().get('result'))
def getIpfsData(self, cid: str, raw=False)

Gets IPFS data

Parameters

cid(str): CID of IPFS data raw(bool): Return in JSON format. Default: false

Returns

data(dict): A dictionary holding ipfs data

Expand source code
def getIpfsData(self, cid: str, raw=False):
    """Gets IPFS data

    Parameters:
        cid(str): CID of IPFS data
        raw(bool): Return in JSON format. Default: false

    Returns:
        data(dict): A dictionary holding ipfs data
    
    """
    res = self._request('ipfs_get', [cid])
    if raw:
        return res.json()
    return res.json().get('result')
def getLastBlock(self, raw=False)

Returns last block from node

Parameters

raw(bool): Return in JSON format. Default: false

Returns

block(Block): A block model holding block info

Expand source code
def getLastBlock(self, raw=False):
    """Returns last block from node

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        block(Block): A block model holding block info
    
    """
    res = self._request('bcn_lastBlock')
    if raw:
        return res.json()
    return Block(**res.json().get('result'))
def getMempool(self, raw=False)

Gets mempool information

Parameters

raw(bool): Return in JSON format. Default: false

Returns

txn(Transaction): A mempool model holding mempool info

Expand source code
def getMempool(self, raw=False):
    """Gets mempool information

    Parameters:
        raw(bool): Return in JSON format. Default: false

    Returns:
        txn(Transaction): A mempool model holding mempool info
    
    """
    res = self._request('bcn_mempool')
    if raw:
        return res.json()
    return Mempool(**res.json().get('result'))
def getPendingAddressTxns(self, address: str, raw=False)

Gets pending address transactions

Parameters

address(str): Address to query by raw(bool): Return in JSON format. Default: false

Returns

txns(AddressTxns): A AddressTxns model holding txn info by address

Expand source code
def getPendingAddressTxns(self, address: str, raw=False):
    """Gets pending address transactions

    Parameters:
        address(str): Address to query by
        raw(bool): Return in JSON format. Default: false

    Returns:
        txns(AddressTxns): A AddressTxns model holding txn info by address
    
    """
    res = self._request('bcn_pendingTransactions', [{'address': address}])
    if raw:
        return res.json()
    return AddressTxns(**res.json().get('result'))
def getProfile(self, address: str, raw=False)
Expand source code
def getProfile(self, address: str, raw = False):
    res = self._request('dna_profile', [address])
    if raw:
        return res.json()
    return Profile(**res.json().get('result'))
def getTransaction(self, hash: str, raw=False)

Gets transacation by txn hash

Parameters

hash(int): Hash of txn to search for raw(bool): Return in JSON format. Default: false

Returns

txn(Transaction): A transaction model holding transaction info

Expand source code
def getTransaction(self, hash: str, raw=False):
    """Gets transacation by txn hash

    Parameters:
        hash(int): Hash of txn to search for
        raw(bool): Return in JSON format. Default: false

    Returns:
        txn(Transaction): A transaction model holding transaction info
    
    """
    res = self._request('bcn_transaction', [hash])
    if raw:
        return res.json()
    return Transaction(**res.json().get('result'))
def killDelegator(self, to: str, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def killDelegator(self, to: str, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'to': to
    }
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_killDelegator', [params])
    return res.json().get('result')
def lockAccount(self, address: str, raw=False)

Lock an account

Parameters

address(str): Address of account raw(bool): Return in JSON format. Default: false

Returns

account(str): An account string

Expand source code
def lockAccount(self, address: str, raw=False):
    """Lock an account

    Parameters:
        address(str): Address of account
        raw(bool): Return in JSON format. Default: false

    Returns:
        account(str): An account string
    
    """
    res = self._request('account_lock', [address])
    if raw:
        return res.json()
    return res.json().get('result')
def sendDna(self, from_: str, to: str, amount: float, max_fee: float, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def sendDna(self, from_: str, to: str, amount: float, max_fee: float, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'from': from_,
        'to': to,
        'maxFee': max_fee,
        'amount': str(amount)
    }
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_sendTransaction', [params])
    return res.json().get('result')
def sendInvite(self, to: str, amount: int, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def sendInvite(self, to: str, amount: int, nonce: int = None, epoch: int = None, raw=False):
    params = {
        'to': to,
        'amount': amount
    }
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_sendInvite', [params])
    return res.json().get('result')
def storeToIpfs(self, cid: str, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def storeToIpfs(self, cid: str, nonce: int = None, epoch: int = None, raw=False):
    res = self._request('dna_storeToIpfs', [{'cid': cid, 'nonce': nonce, 'epoch': epoch}])
    if raw:
        return res.json()
    return res.json().get('result')
def undelegate(self, nonce: int = None, epoch: int = None, raw=False)
Expand source code
def undelegate(self,nonce: int = None, epoch: int = None, raw=False):
    params = {}
    if nonce:
        params['nonce'] = nonce
    if epoch:
        params['epoch'] = epoch
    res = self._request('dna_delegate', [params])
    return res.json().get('result')
def unlockAccount(self, address: str, password: str = None, time: int = None, raw=False)

Unlock an account

Parameters

address(str): Address to unlock password(str1): Password of address time(int): Time to unlock raw(bool): Return in JSON format. Default: false

Returns

account(str): An account string

Expand source code
def unlockAccount(self, address: str, password: str=None, time: int=None, raw=False):
    """Unlock an account

    Parameters:
        address(str): Address to unlock
        password(str1): Password of address
        time(int): Time to unlock
        raw(bool): Return in JSON format. Default: false

    Returns:
        account(str): An account string
    
    """
    params = [address]
    if password:
        params.append(password)
    if time:
        params.append(time)
    res = self._request('account_unlock', params)
    if raw:
        return res.json()
    return res.json().get('result')