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)
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)
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}
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}
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)
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}
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}
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)
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 }
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}
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'])
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)
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
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}
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}
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}
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
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}
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}
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}
def wrapper(*args, **kwds): running = aspire.aspired('get_running_info') if 'result' in running: return func(*args, **kwds) else: return index()