agnt_dashboard / app.py
Trireme's picture
Upload folder using huggingface_hub
5fccf53 verified
Raw
History Blame Contribute Delete
4.18 kB
import requests
import json
import pandas as pd
import gradio as gr
def return_df():
response1 = requests.post(
"https://api.g.alchemy.com/data/v1/yhe6L3PXmiENzS1sP9Fu4_T5E3l0QyeB/assets/tokens/by-address",
headers={},
json={
"addresses": [
{
"address": "0x7743960B4305f9eAF4d412322B5fAb736DB51D4C",
"networks": [
"base-mainnet"
]
},
{
"address": "0x3a6Cf81996b208f3167335f7075aB46e895382b1",
"networks": [
"base-mainnet"
]
},
{
"address": "0xE040654071DC563a864Bb9EB56d592118CfCD468",
"networks": [
"base-mainnet"
]
}
],
"withMetadata": True,
"withPrices": True,
"includeNativeTokens": True
},
)
response2 = requests.post(
"https://api.g.alchemy.com/data/v1/yhe6L3PXmiENzS1sP9Fu4_T5E3l0QyeB/assets/tokens/by-address",
headers={},
json={
"addresses": [
{
"address": "0x6f648Cd40Abe3aCc21a9141Fb9C7074bcf939285",
"networks": [
"base-mainnet"
]
},
{
"address": "0xd58Fc0D2a4Fe66FE9be63BeDDC8866fDdE50ce0e",
"networks": [
"base-mainnet"
]
},
{
"address": "0x7D8A95508caedF57E853F81F49FB1714d75dE750",
"networks": [
"base-mainnet"
]
}
],
"withMetadata": True,
"withPrices": True,
"includeNativeTokens": True
},
)
response3 = requests.post(
"https://api.g.alchemy.com/data/v1/yhe6L3PXmiENzS1sP9Fu4_T5E3l0QyeB/assets/tokens/by-address",
headers={},
json={
"addresses": [
{
"address": "0x422473C72F19b0bdCA74d360CEDB72594C1b4Efa",
"networks": [
"base-mainnet"
]
},
{
"address": "0x7743960B4305f9eAF4d412322B5fAb736DB51D4C",
"networks": [
"base-mainnet"
]
}
],
"withMetadata": True,
"withPrices": True,
"includeNativeTokens": True
},
)
response1 = response1.json()['data']['tokens']
response2 = response2.json()['data']['tokens']
response3 = response3.json()['data']['tokens']
# Extract the prioritized items
priority_items = response2[:3] + response3[:2]
# Remove those items from their original lists to avoid duplication
remaining_items = response2[3:] + response3[2:] + response1
# Combine priority items with the rest
response = priority_items + remaining_items
df = pd.DataFrame(response)
for i in range(8):
df.at[i,'tokenMetadata'] = {}
df['tokenBalance'] = df['tokenBalance'].apply(lambda x : int(x,16))
df['decimals'] = df['tokenMetadata'].apply(lambda x : x.get('decimals',0))
df['tokenBalance'] = df['tokenBalance']/(10**df['decimals'])
for i in range(8):
df.at[i, 'tokenBalance'] = df.at[i, 'tokenBalance'] / (10**18)
df['symbol'] = df['tokenMetadata'].apply(lambda x : x.get('symbol',''))
for i in range(8):
df.at[i,'symbol'] = 'ETH'
df['currentPrice'] = df['tokenPrices'].apply(lambda x : x[0].get('value',None) if len(x) > 0 else None)
df.drop(columns=['tokenPrices','tokenMetadata','network','tokenAddress'], inplace=True)
df = df.dropna()
df['tokenBalance'] = pd.to_numeric(df['tokenBalance'], errors='coerce')
df = df[df['tokenBalance'] != 0]
df['tokenBalance'] = pd.to_numeric(df['tokenBalance'], errors='coerce')
df['currentPrice'] = pd.to_numeric(df['currentPrice'], errors='coerce')
df['value'] = df['tokenBalance'] * df['currentPrice']
df.drop(columns=['address','decimals'],inplace=True)
df = df[df['symbol'].isin(['AGNT', 'ETH', 'USDT'])]
df= df[['symbol','tokenBalance','value']]
df = df.groupby("symbol", as_index=False).sum()
return df, df['value'].sum()
with gr.Blocks() as demo:
gr.Markdown("## AGNT Balances and PnL")
df0_out = gr.Dataframe(label="Current Balances")
txt0_out = gr.Textbox(label="Total Value")
# Load from MongoDB on app load (sync function)
demo.load(
fn=return_df,
inputs=[],
outputs=[
df0_out,txt0_out
]
)
demo.launch(debug=True, share=True)