def dashboard(): info = client.chain_get_info() head_block_num = info['head_block_num'] transaction = client.chain_get_block(head_block_num) get_producers = client.chain_get_producers() producers = sorted(get_producers['rows'], key=lambda k: k['total_votes']) for idx in range(1, len(producers) + 1): accnt_name = producers[idx - 1]['owner'] info = Producer.query.filter_by(accnt_name=accnt_name).first() if info is not None: producers[idx - 1]['team'] = info.name total_vote = get_producers['total_producer_vote_weight'] blocks = [client.chain_get_block(head_block_num)] for block in reversed(range(head_block_num - 3, head_block_num)): blocks.append(client.chain_get_block(block)) # Accounts last_account = Account.query.order_by(Account.idx.desc()).first() if last_account is None: accounts = [] else: rows_first = last_account.idx - 8 accounts = Account.query.filter(Account.idx>=rows_first).\ filter(Account.idx<=last_account.idx).order_by(Account.idx.desc()).all() # Actions last_action = Action.query.order_by(Action.idx.desc()).first() if last_action is None: actions = [] else: rows_first = last_action.idx - 8 actions = Action.query.filter(Action.idx>=rows_first).\ filter(Action.idx<=last_action.idx).order_by(Action.idx.desc()).all() count = {} count['trx_cnt'] = Transaction.query.count() count['action'] = Action.query.count() count['account'] = Account.query.count() return render_template('dashboard/index.html', block_num=head_block_num, producers=producers, total_vote=total_vote, blocks=blocks, accounts=accounts, actions=actions, count=count)
def block_info_from_hash(block_hash): if len(block_hash) != 64: abort(404) block = client.chain_get_block(block_hash) if block is None: abort(404) return render_template('block/block.html', block_num=block_hash, block=block)
def block_info_from_id(block_num): if block_num.isnumeric() is False: abort(404) block = client.chain_get_block(block_num) if block is None: abort(404) return render_template('block/block.html', block_num=block_num, block=block)
def block_parse(): try: while True: loc_last_block = Block.query.order_by(Block.block_num.asc()).all() if len(loc_last_block) == 0: current_block = 0 else: current_block = loc_last_block[-1].block_num parse_last_block = client.chain_get_info()['head_block_num'] sync_count = 0 while current_block < parse_last_block and sync_count < 100: current_block += 1 block_info = client.chain_get_block(current_block) block_num = block_info['block_num'] block_id = block_info['id'] timestamp = block_info['timestamp'] transactions = len(block_info['transactions']) producer = block_info['producer'] block = Block(block_num, block_id, timestamp, transactions, producer) db.session.add(block) if transactions != 0: # Block info in transactions information, add transactions for transaction in block_info['transactions']: txn_id = transaction['trx']['id'] expiration = transaction['trx']['transaction'][ 'expiration'] actions = transaction['trx']['transaction']['actions'] trx = Transaction(txn_id, timestamp, len(actions), block_num) db.session.add(trx) if len(actions) != 0: acts, accounts = action_parse(txn_id) for act in acts: db.session.add(act) for account in accounts: db.session.add(account) db.session.commit() sync_count += 1 # Sleep for node chain performance time.sleep(0.5) if sync_count < 100: time.sleep(10) else: time.sleep(5) except Exception as e: print(e)