Пример #1
0
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(),
        }
Пример #2
0
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),
    }
Пример #3
0
    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
Пример #4
0
    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,
        }
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 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),
     }
Пример #8
0
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),
    }
Пример #9
0
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,
    }
Пример #10
0
 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)]
Пример #11
0
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),
    }
Пример #12
0
    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
Пример #13
0
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(),
        }
Пример #14
0
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),
        },
    }
Пример #15
0
 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)
     ]
Пример #16
0
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