def read_distribution(): supply = Address.select(fn.SUM(Address.balance)).execute()[0].sum res = {} sq = Address.select(Address.balance).order_by(Address.balance.desc()).limit(25) q = Address.select(fn.SUM(sq.c.balance)).from_(sq) res['0_24'] = { 'percent': (q[0].sum / supply) * 100, 'total': q[0].sum } sq = Address.select(Address.balance).order_by(Address.balance.desc()).offset(25).limit(25) q = Address.select(fn.SUM(sq.c.balance)).from_(sq) res['25_49'] = { 'percent': (q[0].sum / supply) * 100, 'total': q[0].sum } sq = Address.select(Address.balance).order_by(Address.balance.desc()).offset(50).limit(25) q = Address.select(fn.SUM(sq.c.balance)).from_(sq) res['50_99'] = { 'percent': (q[0].sum / supply) * 100, 'total': q[0].sum } sq = Address.select(Address.balance).order_by(Address.balance.desc()).offset(100) q = Address.select(fn.SUM(sq.c.balance)).from_(sq) res['remain'] = { 'percent': (q[0].sum / supply) * 100, 'total': q[0].sum } return res
def read_richlist(order=None): q = Address.select() if order == 'sent': q = q.order_by(Address.sent.desc()) elif order == 'received': q = q.order_by(Address.received.desc()) else: q = q.order_by(Address.balance.desc()) res = q.limit(100) return list(map(lambda addr : addr.to_dict(), res))
async def read_address(address : str): try: record = Address.get(address=address) except: return HTMLResponse(status_code=404) res = record.to_dict() unconfirmed = 0 utxos = Utxo.select().where((Utxo.address == address) & (Utxo.spent == True)).execute() for utxo in utxos: unconfirmed += utxo.amount res['balance'] -= unconfirmed res['unconfirmed'] = unconfirmed return res
def read_misc(): supply = Address.select(fn.SUM(Address.balance)).execute()[0].sum return { 'supply': int(supply), }