Пример #1
0
def asset_circulating(assetname):
    if assetname == 'ASP':
        supply = int(100000000000000000)
        premine_addys = [
            'GRCfdMktqPs6RyF7ZrN8LY2MYW5ejZG1yQ',
            'GLRN2PBSpjzrnk3zNkZv5Y3GpmK3cVThZm',
            'GW1VzXDG1TjxFeUDBvbWoLhC8DELwUAU4x',
            'GKuMfFwjQoyGy8Bm15pGhM7ZWkSLNqSEvf'
        ]
        premine_balances = aspire.aspired('get_balances',
                                          params={
                                              "filters": [{
                                                  'field':
                                                  'address',
                                                  'op':
                                                  'IN',
                                                  'value':
                                                  premine_addys
                                              }, {
                                                  'field': 'asset',
                                                  'op': '==',
                                                  'value': assetname
                                              }],
                                              "filterop":
                                              "and"
                                          })
        total = sum([b['quantity'] for b in premine_balances['result']])
        return str(int(supply - total) / 100000000)
    return str(
        int(
            aspire.aspired('get_asset_info', params={
                "assets": [assetname]
            })['result'][0]['supply']) / 100000000)
Пример #2
0
def transaction(thash):
    thash = thash.strip()
    tx = aspire.aspired('getrawtransaction',
                        params={
                            "tx_hash": thash,
                            'verbose': True
                        })
    tx = tx['result']
    # tx_info = aspire.aspired('get_tx_info', params={'tx_hex': tx['result']['hex']})

    if 'blockhash' in tx:
        block = aspire.gasp('getblock', params=[tx['blockhash']])
        if 'data' in block:
            if 'height' in block['data']:
                tx['blockheight'] = block['data']['height']
                blockheight = aspire.gasp('getblockcount')
                tx['confirmations'] = blockheight['data'] - tx['blockheight']

    new_assets = aspire.aspired(
        'get_issuances',
        params={"filters": [{
            'field': 'tx_hash',
            'op': '==',
            'value': thash
        }]})
    sends = aspire.aspired(
        'get_sends',
        params={"filters": [{
            'field': 'tx_hash',
            'op': '==',
            'value': thash
        }]})
    dividends = aspire.aspired(
        'get_dividends',
        params={"filters": [{
            'field': 'tx_hash',
            'op': '==',
            'value': thash
        }]})
    broadcasts = aspire.aspired(
        'get_broadcasts',
        params={"filters": [{
            'field': 'tx_hash',
            'op': '==',
            'value': thash
        }]})

    return render_template('transaction.html',
                           thash=thash,
                           tx=tx,
                           new_assets=new_assets,
                           sends=sends,
                           dividends=dividends,
                           broadcasts=broadcasts)
Пример #3
0
def address_broadcasts(address):
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    broadcasts = aspire.aspired('get_broadcasts',
                                params={
                                    'order_by':
                                    'block_index',
                                    'order_dir':
                                    'DESC',
                                    'limit':
                                    limit,
                                    'offset':
                                    page * limit,
                                    "filters": [{
                                        'field': 'source',
                                        'op': '==',
                                        'value': address
                                    }]
                                })
    if 'result' in broadcasts:
        broadcasts = broadcasts['result']
    else:
        broadcasts = []
    return {'data': broadcasts, 'last_page': page + 1}
Пример #4
0
def asset_holers(asset):
    events = aspire.aspired('get_holders', {'asset': asset})
    if 'result' in events:
        events = events['result']
    else:
        events = []
    return {'data': events, 'last_page': 1}
Пример #5
0
def block(bindex):
    bindex = bindex.strip()
    try:
        bindex = int(bindex)
        bhash = aspire.gasp('getblockhash', [bindex])
        if 'data' not in bhash:
            raise Exception(bhash)
        bhash = bhash['data']
    except ValueError:
        bhash = bindex

    block = aspire.gasp('getblock', [bhash])
    bindex = block['data']['height']
    transactions = block['data']['tx']

    block_info = aspire.aspired('get_blocks', {'block_indexes': [bindex]})
    if block_info.get('message', '') == 'Server error':
        flash('A server error occured!', 'danger')
        if block_info.get('data'):
            flash(block_info.get('data'), 'warning')
        return render_template('index.html')
    block_info = block_info['result'][0]

    return render_template('block.html',
                           bindex=bindex,
                           block_info=block_info,
                           block=block)
Пример #6
0
def assets():
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    assets = aspire.aspired('get_assets',
                            params={
                                'order_by': 'block_index',
                                'order_dir': 'DESC',
                                'limit': limit,
                                'offset': page * limit
                            })
    if 'result' in assets:
        assets = list(reversed(assets['result']))
    else:
        assets = []
    nassets = []
    for asset in assets:
        if asset['asset_name'] not in ['GASP', 'ASP']:
            nassets.append(asset['asset_name'])
    assets_infos = {}
    if len(assets) > 0:
        assets_infos = aspire.aspireblock('get_assets_info',
                                          {'assetsList': nassets})
    result = []
    if 'result' in assets_infos:
        result = assets_infos['result']
    return {'data': result, 'last_page': page + 1}
Пример #7
0
def transfers():
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    sends = aspire.aspired('get_sends',
                           params={
                               'order_by': 'block_index',
                               'order_dir': 'DESC',
                               'limit': limit,
                               'offset': page * limit
                           })
    if 'result' in sends:
        sends = sends['result']
    else:
        sends = []
    for send in sends:
        txdata = aspire.gasp('getrawtransaction',
                             params=[send['tx_hash'], True])
        send['time'] = txdata['data']['blocktime']
    return {'data': add_asset_info(sends), 'last_page': page + 1}
Пример #8
0
def asset_supply(assetname):
    if assetname == 'ASP':
        return '1000000000.0'  # This is just faster
    return str(
        int(
            aspire.aspired('get_asset_info', params={
                "assets": [assetname]
            })['result'][0]['supply']) / 100000000)
Пример #9
0
    def inject_running_info():

        search_form = SearchForm()
        if request.method == 'POST' and request.form.get('is_search', False):
            if search_form.validate():
                flash('Searched', 'danger')
                return redirect('index')

        return {
            'running_info': aspire.aspired('get_running_info'),
            'search_form': search_form
        }
Пример #10
0
def events(bindex):
    events = aspire.aspired('get_messages', {'block_index': int(bindex)})
    if 'result' in events:
        events = events['result']
    else:
        events = []

    def yielder():
        for event in events:
            if event.get('category', '') in ['credits', 'debits']:
                continue
            yield event

    return {'data': list(yielder()), 'last_page': 1}
Пример #11
0
def asset(assetname):
    assetname = assetname.strip()
    issuance = aspire.aspired('get_issuances',
                              params={
                                  "filters": [{
                                      'field': 'asset',
                                      'op': '==',
                                      'value': assetname
                                  }, {
                                      'field': 'asset_longname',
                                      'op': '==',
                                      'value': assetname
                                  }],
                                  "filterop":
                                  'OR'
                              })

    if 'result' not in issuance or len(issuance['result']) == 0:
        return index()

    assetinfo = aspire.aspired('get_asset_info',
                               params={"assets": [assetname]})
    sends = aspire.aspired('get_sends',
                           params={
                               "filters": [{
                                   'field': 'asset',
                                   'op': '==',
                                   'value': assetname
                               }]
                           })

    return render_template('asset.html',
                           assetname=assetname,
                           issuance=issuance['result'][0],
                           assetinfo=assetinfo['result'][0],
                           sends=sends['result'])
Пример #12
0
def address(addy):
    addy = addy.strip()
    credits = aspire.aspired('get_credits',
                             params={
                                 "filters": [{
                                     'field': 'address',
                                     'op': '==',
                                     'value': addy
                                 }, {
                                     'field': 'calling_function',
                                     'op': '==',
                                     'value': 'issuance fee'
                                 }]
                             })
    return render_template('address.html', addy=addy, credits=credits)
Пример #13
0
def add_asset_info(sends):
    res = list(set(dic['asset'] for dic in sends))
    assetinfos = aspire.aspired('get_asset_info', params={"assets": res})
    for i in range(len(sends)):
        assetname = sends[i]['asset']
        for asset in assetinfos['result']:
            if asset['asset'] == assetname:
                sends[i]['asset_info'] = asset
                break
        if sends[i].get('asset_info') is not None:
            if sends[i]['asset_info']['asset'] == 'ASP':
                # ASP name defaults to null for some reason
                sends[i]['asset'] = 'ASP'
            elif sends[i]['asset'][:3] == 'ASP':
                # Fix subasset names, they are stored as asset ids and not the longname..
                sends[i]['asset'] = sends[i]['asset_info']['asset_longname']
    return sends
Пример #14
0
def asset_richlist(asset):
    events = aspire.aspired('get_holders', {'asset': asset})
    if 'result' in events:
        events = events['result']
    else:
        events = []
    rich = []
    i = 1
    for event in sorted(events,
                        key=lambda t: t['address_quantity'],
                        reverse=True):
        rich.append({
            'pos': i,
            'address': event['address'],
            'balance': float(event['address_quantity']) / 100000000
        })
        i += 1
    return {'data': rich}
Пример #15
0
def address_sends(address):
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    sends = aspire.aspired('get_sends',
                           params={
                               'order_by':
                               'block_index',
                               'order_dir':
                               'DESC',
                               'limit':
                               limit,
                               'offset':
                               page * limit,
                               "filters": [{
                                   'field': 'destination',
                                   'op': '==',
                                   'value': address
                               }, {
                                   'field': 'source',
                                   'op': '==',
                                   'value': address
                               }],
                               "filterop":
                               "or"
                           })
    if 'result' in sends:
        sends = sends['result']
    else:
        sends = []

    for send in sends:
        txdata = aspire.gasp('getrawtransaction',
                             params=[send['tx_hash'], True])
        send['time'] = txdata['data']['blocktime']

    return {'data': add_asset_info(sends), 'last_page': page + 1}
Пример #16
0
def blocks(bindex):
    # bindex = starting index
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    bindex = int(bindex) - (page * limit)
    block_info = aspire.aspired(
        'get_blocks',
        {'block_indexes': [bindex] + [bindex - x for x in range(limit)]})
    if 'result' in block_info:
        block_info = list(reversed(block_info['result']))
    else:
        block_info = []
    return {'data': block_info, 'last_page': int(bindex / limit) + 1}
Пример #17
0
    def validate(self):
        term = str(self.search_term.data).strip()

        # Check for block number
        try:
            block_id = int(term)
            block_data = aspire.gasp('getblockhash', params=[block_id])
            if block_data.get('success', False):
                self.is_block = True
                return True
        except ValueError:
            pass

        # Check for block hash
        block_data = aspire.gasp('getblock', params=[term])
        if block_data.get('success', False):
            self.is_block = True
            return True

        # Check for txid
        txid = aspire.gasp('getrawtransaction', params=[term])
        if txid.get('success', False):
            self.is_transaction = True
            return True

        # Check for address
        address = aspire.gasp('validateaddress', params=[term])
        if address.get('success', False) and address.get('data', {}).get('isvalid', False):
            self.is_address = True
            return True

        # Check for asset
        assetinfo = aspire.aspired('get_asset_info', params={"assets": [term]})
        if 'result' in assetinfo and len(assetinfo['result']) > 0:
            self.is_asset = True
            return True

        return True
Пример #18
0
def address_issuances(address):
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    issuances = aspire.aspired('get_issuances',
                               params={
                                   'order_by':
                                   'block_index',
                                   'order_dir':
                                   'DESC',
                                   'limit':
                                   limit,
                                   'offset':
                                   page * limit,
                                   "filters": [{
                                       'field': 'issuer',
                                       'op': '==',
                                       'value': address
                                   }]
                               })
    if 'result' in issuances:
        issuances = issuances['result']
    else:
        issuances = []

    for send in issuances:
        txdata = aspire.gasp('getrawtransaction',
                             params=[send['tx_hash'], True])
        send['time'] = txdata['data']['blocktime']

    return {'data': issuances, 'last_page': page + 1}
Пример #19
0
def broadcasts():
    try:
        page = int(request.args.get('page', 1)) - 1
    except ValueError:
        page = 0
    try:
        limit = int(request.args.get('size', 15))
        if limit > 15:
            limit = 15
    except ValueError:
        limit = 15
    broadcasts = aspire.aspired('get_broadcasts',
                                params={
                                    'order_by': 'block_index',
                                    'order_dir': 'DESC',
                                    'limit': limit,
                                    'offset': page * limit
                                })
    if 'result' in broadcasts:
        broadcasts = broadcasts['result']
    else:
        broadcasts = []
    return {'data': broadcasts, 'last_page': page + 1}
Пример #20
0
def address_balances(address):
    gasp_balance = aspire.aspireblock('get_chain_address_info',
                                      params={
                                          "addresses": [address],
                                          "with_uxtos": False,
                                          "with_last_txn_hashes": False
                                      })
    balances = aspire.aspired('get_balances',
                              params={
                                  "filters": [{
                                      'field': 'address',
                                      'op': '==',
                                      'value': address
                                  }]
                              })
    if 'result' in balances:
        balances = balances['result']
    else:
        balances = []
    for bal in balances:
        if 'asset' in bal and 'GASP' == bal['asset']:
            break
    else:
        balances.insert(
            0, {
                'asset':
                'GASP',
                'quantity':
                int(
                    float(gasp_balance['result'][0]['info']
                          ['balanceSat'].split('.')[0])),
                'address':
                address
            })

    return {'data': add_asset_info(balances), 'last_page': 1}
Пример #21
0
 def wrapper(*args, **kwds):
     running = aspire.aspired('get_running_info')
     if 'result' in running:
         return func(*args, **kwds)
     else:
         return index()