Spaces:
Sleeping
Sleeping
| 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) |