def miner_stats(wallet_address: str): m = miner.Miner.get(wallet_address=wallet_address) if m: last_work = pow.PowResult.get(miner_wallet=wallet_address, order="-finished_time") return { "wallet_address": m.wallet_address, "authorized": m.authorized, "nick_name": m.nick_name, "rewards": m.rewards, "join_date": utils.iso_format(m.join_date), "last_finished_time": utils.iso_format(last_work and last_work.finished_time), "hashrate": miner.HashRate.epoch_hashrate(wallet_address=m.wallet_address), "workers": m.workers_name, "works": m.works_stats(), }
def current_work(): latest_work = pow.PowWork.get_latest_work() block_num = 0 difficulty = 0 start_time = None if latest_work: block_num = latest_work.block_num start_time = latest_work.start_time difficulty = ethash.boundary_to_difficulty( crypto.hex_str_to_bytes(latest_work.boundary)) now = datetime.utcnow() secs_next_pow = pow.PowWork.calc_seconds_to_next_pow() next_pow_time = now + timedelta(seconds=secs_next_pow) return { "block_num": block_num, "difficulty": difficulty, "utc_time": utils.iso_format(now), "start_time": utils.iso_format(start_time), "next_pow_time": utils.iso_format(next_pow_time), "avg_hashrate": miner.HashRate.epoch_hashrate(block_num), "avg_pow_fee": pow.PowWork.avg_pow_fee(block_num), }
async def admin_rewards(request, visa: str, block_num=None): admin = get_admin_from_visa(request, visa) cur_block_num = PowWork.get_latest_block_num() blocks_list = utils.block_num_to_list(block_num) rewards = [] for block_num in blocks_list: if block_num is None: block_num = cur_block_num if block_num > cur_block_num: continue block_rewards = PowResult.rewards_by_miners(block_num) for r in block_rewards: r["date"] = utils.date_format(r["date"]) r["date_time"] = utils.iso_format(r["date_time"]) work = PowWork.get_one(block_num=block_num) rewards.append({ "block_num": block_num, "date": utils.date_format(work and work.start_time), "count": PowWork.count(block_num=block_num), "rewards": block_rewards, }) return rewards
async def admin_settings(request, visa: str, min_fee=None, max_dispatch=None, inc_expire=None, avg_block_time=None): admin = get_admin_from_visa(request, visa) new_setting = SiteSettings.update_setting( admin=admin.email, min_fee=min_fee, max_dispatch=max_dispatch, inc_expire=inc_expire, avg_block_time=avg_block_time) if not new_setting: return None return { "admin": new_setting.admin, "created": iso_format(new_setting.created), "min_fee": new_setting.min_fee, "max_dispatch": new_setting.max_dispatch, "inc_expire": new_setting.inc_expire, "avg_block_time": avg_block_time, }
async def register_miner(wallet_address: str, email: str, nick_name=""): new_miner = miner_register(config, wallet_address, email, nick_name) if not new_miner: return False resp = new_miner.to_mongo() resp.pop("_id", None) resp["join_date"] = utils.iso_format(resp["join_date"]) return resp
async def register_miner(request, wallet_address: str, email: str, pass_code: str): new_miner = miner_register(config, wallet_address, email, pass_code) if not new_miner: return False resp = new_miner.to_mongo() resp.pop("_id", None) resp["join_date"] = utils.iso_format(resp["join_date"]) return resp
async def admin_login(request, email: str, password: str): ip = get_client_ip(request) admin = login(request, email, password) assert admin, "wrong email/password" return { "email": admin.email, "visa": admin.visa_without_ext_data, "login_ip": ip, "expire_at": iso_format(admin.visa_expire_time), }
def current_work(config): latest_work = pow.PowWork.get_latest_work() block_num = 0 tx_block_num = None difficulty = [0, 0] start_time = None if latest_work: block_num = latest_work.block_num start_time = latest_work.start_time difficulty = sorted(pow.PowWork.epoch_difficulty()) now = datetime.utcnow() secs_next_pow = pow.PoWWindow.seconds_to_next_pow() if config["zilliqa"]["enabled"]: block_num = blockchain.Zilliqa.cur_ds_block tx_block_num = blockchain.Zilliqa.cur_tx_block difficulty = (blockchain.Zilliqa.shard_difficulty, blockchain.Zilliqa.ds_difficulty) difficulty = [ ethash.difficulty_to_hashpower_divided( d, n_divided=config["zilliqa"]["POW_BOUNDARY_N_DIVIDED"], n_divided_start=config["zilliqa"] ["POW_BOUNDARY_N_DIVIDED_START"]) for d in difficulty ] secs_next_pow = blockchain.Zilliqa.secs_to_next_pow() next_pow_time = now + timedelta(seconds=secs_next_pow) return { "block_num": block_num, "tx_block_num": tx_block_num, "difficulty": difficulty, "utc_time": utils.iso_format(now), "start_time": utils.iso_format(start_time), "next_pow_time": utils.iso_format(next_pow_time), "avg_hashrate": miner.HashRate.epoch_hashrate(None), "avg_pow_fee": pow.PowResult.avg_pow_fee(block_num), }
def reward_stats(start_block=None, end_block=None, wallet_address=None, worker_name=None): if start_block is None: start_block = pow.PowWork.get_first_block_num() if end_block is None: end_block = pow.PowWork.get_latest_block_num() rewards = pow.PowResult.epoch_rewards(block_num=(start_block, end_block), miner_wallet=wallet_address, worker_name=worker_name) rewards["first_work_at"] = utils.iso_format(rewards["first_work_at"]) rewards["last_work_at"] = utils.iso_format(rewards["last_work_at"]) return { "start_block": start_block, "end_block": end_block, "wallet_address": wallet_address, "worker_name": worker_name, "rewards": rewards, }
async def admin_list_miners(request, visa: str, page=0, per_page=50): admin = get_admin_from_visa(request, visa) return [{ "email": m.email, "nick_name": m.nick_name, "authorized": m.authorized, "email_verified": m.email_verified, "wallet_address": m.wallet_address, "join_date": iso_format(m.join_date), "rewards": m.rewards, "paid": m.paid, "workers": m.workers_name, "works": m.works_stats(), } for m in Miner.paginate(page=page, per_page=per_page)]
def current_work(): latest_work = pow.PowWork.get_latest_work() block_num = 0 difficulty = [0, 0] start_time = None if latest_work: block_num = latest_work.block_num start_time = latest_work.start_time difficulty = sorted(pow.PowWork.epoch_difficulty()) now = datetime.utcnow() secs_next_pow = pow.PoWWindow.seconds_to_next_pow() next_pow_time = now + timedelta(seconds=secs_next_pow) return { "block_num": block_num, "difficulty": difficulty, "utc_time": utils.iso_format(now), "start_time": utils.iso_format(start_time), "next_pow_time": utils.iso_format(next_pow_time), "avg_hashrate": miner.HashRate.epoch_hashrate(block_num), "avg_pow_fee": pow.PowWork.avg_pow_fee(block_num), }
async def admin_settings(request, visa: str, new_settings=None): admin = get_admin_from_visa(request, visa) if new_settings is None: site_setting = SiteSettings.get_setting() else: site_setting = SiteSettings.update_setting( admin=admin.email, **new_settings ) if not site_setting: site_setting = SiteSettings.get_setting() resp = site_setting.to_mongo().to_dict() resp.pop("_id", None) resp["created"] = utils.iso_format(resp["created"]) return resp
def worker_stats(wallet_address: str, worker_name: str): worker = miner.Worker.get(wallet_address=wallet_address, worker_name=worker_name) if worker: last_work = pow.PowResult.get(miner_wallet=wallet_address, worker_name=worker_name, order="-finished_time") return { "miner": wallet_address, "worker_name": worker.worker_name, "last_finished_time": utils.iso_format(last_work and last_work.finished_time), "hashrate": miner.HashRate.epoch_hashrate( wallet_address=wallet_address, worker_name=worker.worker_name ), "works": worker.works_stats(), }
def summary(): working_q = Q(expire_time__gte=datetime.utcnow()) & Q(finished=False) return { "version": zilpool.version, "utc_time": utils.iso_format(datetime.utcnow()), "nodes": { "all": zilnode.ZilNode.count(), "active": zilnode.ZilNode.active_count(), }, "miners": miner.Miner.count(), "workers": { "all": miner.Worker.count(), "active": miner.Worker.active_count(), }, "works": { "all": pow.PowWork.count(), "working": pow.PowWork.count(working_q), "finished": pow.PowWork.count(finished=True), "verified": pow.PowResult.count(verified=True), }, }
async def admin_list_miners(request, visa: str, page=0, per_page=50, order_by=None, filters=None): admin = get_admin_from_visa(request, visa) if order_by is None: order_by = "-work_finished" if filters is None: filters = {} return [ { "email": m.email, "nick_name": m.nick_name, "authorized": m.authorized, "email_verified": m.email_verified, "wallet_address": m.wallet_address, "join_date": iso_format(m.join_date), "rewards": m.rewards, "paid": m.paid, "workers": m.workers_name, "works": m.works_stats(), } for m in Miner.paginate(page=page, per_page=per_page, order_by=order_by, **filters) ]
def get_rewards(blocks_list): cur_block_num = PowWork.get_latest_block_num() rewards = [] for block_num in blocks_list: if block_num is None: block_num = cur_block_num if block_num > cur_block_num: continue block_rewards = PowResult.rewards_by_miners(block_num) for r in block_rewards: r["date"] = utils.date_format(r["date"]) r["date_time"] = utils.iso_format(r["date_time"]) work = PowWork.get_one(block_num=block_num) rewards.append({ "block_num": block_num, "date": utils.date_format(work and work.start_time), "count": PowWork.count(block_num=block_num), "rewards": block_rewards, }) return rewards