afght12's picture
Create app.py
714cdab verified
raw
history blame
2.18 kB
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()