Spaces:
Runtime error
Runtime error
import gradio as gr | |
import requests | |
import time | |
from typing import Any | |
from communex.client import CommuneClient | |
from communex.balance import from_nano | |
import json | |
netuid = 0 | |
node_url = "wss://commune.api.onfinality.io/public-ws" | |
def get_com_price() -> Any: | |
retries = 5 | |
for i in range(0, retries): | |
try: | |
return float(requests.get("https://api.mexc.com/api/v3/avgPrice?symbol=COMAIUSDT").json()["price"]) | |
except Exception as e: | |
print(e) | |
if i == retries - 1: | |
raise | |
time.sleep(retries) | |
raise RuntimeError() | |
def get_score(): | |
com_price = get_com_price() | |
blocks_in_day = 10_800 | |
client = CommuneClient(node_url) | |
emission = client.query("Emission", params=[netuid]) | |
distribution_dict: dict[int, float] = {} | |
for uid, emi in enumerate(emission): | |
distribution_dict[uid] = ((emi / 10**11) * blocks_in_day) * com_price | |
return distribution_dict | |
def load_leaderboard(): | |
with open("leaderboard.json", "r") as f: | |
leaderboard_data = json.load(f) | |
return leaderboard_data | |
def save_leaderboard(): | |
scores = get_score() | |
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) | |
leaderboard_data = [] | |
for rank, (uid, score) in enumerate(sorted_scores, start=1): | |
leaderboard_data.append({"rank": rank, "uid": uid, "score": score}) | |
with open("leaderboard.json", "w") as f: | |
json.dump(leaderboard_data, f) | |
with gr.Blocks() as demo: | |
gr.Markdown("# Commune Leaderboard") | |
leaderboard_data = load_leaderboard() | |
leaderboard_table = gr.components.DataFrame( | |
value=leaderboard_data, | |
headers=["rank", "uid", "score"], | |
datatype=["number", "number", "number"], | |
interactive=False, | |
visible=True | |
) | |
refresh_button = gr.Button("Refresh Leaderboard") | |
def refresh_leaderboard(): | |
save_leaderboard() | |
updated_data = load_leaderboard() | |
return gr.components.DataFrame.update(value=updated_data) | |
refresh_button.click(fn=refresh_leaderboard, outputs=leaderboard_table) | |
if __name__ == "__main__": | |
demo.launch() |