intentkit 0.5.0__py3-none-any.whl → 0.5.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +17 -0
- intentkit/abstracts/__init__.py +0 -0
- intentkit/abstracts/agent.py +60 -0
- intentkit/abstracts/api.py +4 -0
- intentkit/abstracts/engine.py +38 -0
- intentkit/abstracts/exception.py +9 -0
- intentkit/abstracts/graph.py +25 -0
- intentkit/abstracts/skill.py +129 -0
- intentkit/abstracts/twitter.py +54 -0
- intentkit/clients/__init__.py +14 -0
- intentkit/clients/cdp.py +53 -0
- intentkit/clients/twitter.py +445 -0
- intentkit/config/__init__.py +0 -0
- intentkit/config/config.py +164 -0
- intentkit/core/__init__.py +0 -0
- intentkit/core/agent.py +191 -0
- intentkit/core/api.py +40 -0
- intentkit/core/client.py +45 -0
- intentkit/core/credit.py +1767 -0
- intentkit/core/engine.py +1018 -0
- intentkit/core/node.py +223 -0
- intentkit/core/prompt.py +58 -0
- intentkit/core/skill.py +124 -0
- intentkit/models/agent.py +1689 -0
- intentkit/models/agent_data.py +810 -0
- intentkit/models/agent_schema.json +733 -0
- intentkit/models/app_setting.py +156 -0
- intentkit/models/base.py +9 -0
- intentkit/models/chat.py +581 -0
- intentkit/models/conversation.py +286 -0
- intentkit/models/credit.py +1406 -0
- intentkit/models/db.py +120 -0
- intentkit/models/db_mig.py +102 -0
- intentkit/models/generator.py +347 -0
- intentkit/models/llm.py +746 -0
- intentkit/models/redis.py +132 -0
- intentkit/models/skill.py +466 -0
- intentkit/models/user.py +243 -0
- intentkit/skills/__init__.py +12 -0
- intentkit/skills/acolyt/__init__.py +83 -0
- intentkit/skills/acolyt/acolyt.jpg +0 -0
- intentkit/skills/acolyt/ask.py +128 -0
- intentkit/skills/acolyt/base.py +28 -0
- intentkit/skills/acolyt/schema.json +89 -0
- intentkit/skills/aixbt/README.md +71 -0
- intentkit/skills/aixbt/__init__.py +73 -0
- intentkit/skills/aixbt/aixbt.jpg +0 -0
- intentkit/skills/aixbt/base.py +21 -0
- intentkit/skills/aixbt/projects.py +153 -0
- intentkit/skills/aixbt/schema.json +99 -0
- intentkit/skills/allora/__init__.py +83 -0
- intentkit/skills/allora/allora.jpeg +0 -0
- intentkit/skills/allora/base.py +28 -0
- intentkit/skills/allora/price.py +130 -0
- intentkit/skills/allora/schema.json +89 -0
- intentkit/skills/base.py +174 -0
- intentkit/skills/carv/README.md +95 -0
- intentkit/skills/carv/__init__.py +121 -0
- intentkit/skills/carv/base.py +183 -0
- intentkit/skills/carv/carv.webp +0 -0
- intentkit/skills/carv/fetch_news.py +92 -0
- intentkit/skills/carv/onchain_query.py +164 -0
- intentkit/skills/carv/schema.json +137 -0
- intentkit/skills/carv/token_info_and_price.py +110 -0
- intentkit/skills/cdp/__init__.py +137 -0
- intentkit/skills/cdp/base.py +21 -0
- intentkit/skills/cdp/cdp.png +0 -0
- intentkit/skills/cdp/get_balance.py +81 -0
- intentkit/skills/cdp/schema.json +473 -0
- intentkit/skills/chainlist/README.md +38 -0
- intentkit/skills/chainlist/__init__.py +54 -0
- intentkit/skills/chainlist/base.py +21 -0
- intentkit/skills/chainlist/chain_lookup.py +208 -0
- intentkit/skills/chainlist/chainlist.png +0 -0
- intentkit/skills/chainlist/schema.json +47 -0
- intentkit/skills/common/__init__.py +82 -0
- intentkit/skills/common/base.py +21 -0
- intentkit/skills/common/common.jpg +0 -0
- intentkit/skills/common/current_time.py +84 -0
- intentkit/skills/common/schema.json +57 -0
- intentkit/skills/cookiefun/README.md +121 -0
- intentkit/skills/cookiefun/__init__.py +78 -0
- intentkit/skills/cookiefun/base.py +41 -0
- intentkit/skills/cookiefun/constants.py +18 -0
- intentkit/skills/cookiefun/cookiefun.png +0 -0
- intentkit/skills/cookiefun/get_account_details.py +171 -0
- intentkit/skills/cookiefun/get_account_feed.py +282 -0
- intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
- intentkit/skills/cookiefun/get_sectors.py +128 -0
- intentkit/skills/cookiefun/schema.json +155 -0
- intentkit/skills/cookiefun/search_accounts.py +225 -0
- intentkit/skills/cryptocompare/__init__.py +130 -0
- intentkit/skills/cryptocompare/api.py +159 -0
- intentkit/skills/cryptocompare/base.py +303 -0
- intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- intentkit/skills/cryptocompare/fetch_news.py +96 -0
- intentkit/skills/cryptocompare/fetch_price.py +99 -0
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
- intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
- intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
- intentkit/skills/cryptocompare/schema.json +168 -0
- intentkit/skills/cryptopanic/__init__.py +108 -0
- intentkit/skills/cryptopanic/base.py +51 -0
- intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
- intentkit/skills/cryptopanic/schema.json +103 -0
- intentkit/skills/dapplooker/README.md +92 -0
- intentkit/skills/dapplooker/__init__.py +83 -0
- intentkit/skills/dapplooker/base.py +26 -0
- intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
- intentkit/skills/dapplooker/schema.json +91 -0
- intentkit/skills/defillama/__init__.py +323 -0
- intentkit/skills/defillama/api.py +315 -0
- intentkit/skills/defillama/base.py +135 -0
- intentkit/skills/defillama/coins/__init__.py +0 -0
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
- intentkit/skills/defillama/coins/fetch_block.py +98 -0
- intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
- intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
- intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
- intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
- intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
- intentkit/skills/defillama/config/__init__.py +0 -0
- intentkit/skills/defillama/config/chains.py +433 -0
- intentkit/skills/defillama/defillama.jpeg +0 -0
- intentkit/skills/defillama/fees/__init__.py +0 -0
- intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
- intentkit/skills/defillama/schema.json +383 -0
- intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
- intentkit/skills/defillama/tests/__init__.py +0 -0
- intentkit/skills/defillama/tests/api_integration.test.py +192 -0
- intentkit/skills/defillama/tests/api_unit.test.py +583 -0
- intentkit/skills/defillama/tvl/__init__.py +0 -0
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
- intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
- intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
- intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
- intentkit/skills/defillama/volumes/__init__.py +0 -0
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
- intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
- intentkit/skills/defillama/yields/__init__.py +0 -0
- intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
- intentkit/skills/defillama/yields/fetch_pools.py +126 -0
- intentkit/skills/dexscreener/__init__.py +93 -0
- intentkit/skills/dexscreener/base.py +133 -0
- intentkit/skills/dexscreener/dexscreener.png +0 -0
- intentkit/skills/dexscreener/model/__init__.py +0 -0
- intentkit/skills/dexscreener/model/search_token_response.py +82 -0
- intentkit/skills/dexscreener/schema.json +48 -0
- intentkit/skills/dexscreener/search_token.py +321 -0
- intentkit/skills/dune_analytics/__init__.py +103 -0
- intentkit/skills/dune_analytics/base.py +46 -0
- intentkit/skills/dune_analytics/dune.png +0 -0
- intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
- intentkit/skills/dune_analytics/schema.json +99 -0
- intentkit/skills/elfa/README.md +100 -0
- intentkit/skills/elfa/__init__.py +123 -0
- intentkit/skills/elfa/base.py +28 -0
- intentkit/skills/elfa/elfa.jpg +0 -0
- intentkit/skills/elfa/mention.py +504 -0
- intentkit/skills/elfa/schema.json +153 -0
- intentkit/skills/elfa/stats.py +118 -0
- intentkit/skills/elfa/tokens.py +126 -0
- intentkit/skills/enso/README.md +75 -0
- intentkit/skills/enso/__init__.py +114 -0
- intentkit/skills/enso/abi/__init__.py +0 -0
- intentkit/skills/enso/abi/approval.py +279 -0
- intentkit/skills/enso/abi/erc20.py +14 -0
- intentkit/skills/enso/abi/route.py +129 -0
- intentkit/skills/enso/base.py +44 -0
- intentkit/skills/enso/best_yield.py +286 -0
- intentkit/skills/enso/enso.jpg +0 -0
- intentkit/skills/enso/networks.py +105 -0
- intentkit/skills/enso/prices.py +93 -0
- intentkit/skills/enso/route.py +300 -0
- intentkit/skills/enso/schema.json +212 -0
- intentkit/skills/enso/tokens.py +223 -0
- intentkit/skills/enso/wallet.py +381 -0
- intentkit/skills/github/README.md +63 -0
- intentkit/skills/github/__init__.py +54 -0
- intentkit/skills/github/base.py +21 -0
- intentkit/skills/github/github.jpg +0 -0
- intentkit/skills/github/github_search.py +183 -0
- intentkit/skills/github/schema.json +59 -0
- intentkit/skills/heurist/__init__.py +143 -0
- intentkit/skills/heurist/base.py +26 -0
- intentkit/skills/heurist/heurist.png +0 -0
- intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
- intentkit/skills/heurist/image_generation_braindance.py +162 -0
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
- intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
- intentkit/skills/heurist/image_generation_sdxl.py +161 -0
- intentkit/skills/heurist/schema.json +196 -0
- intentkit/skills/lifi/README.md +294 -0
- intentkit/skills/lifi/__init__.py +141 -0
- intentkit/skills/lifi/base.py +21 -0
- intentkit/skills/lifi/lifi.png +0 -0
- intentkit/skills/lifi/schema.json +89 -0
- intentkit/skills/lifi/token_execute.py +472 -0
- intentkit/skills/lifi/token_quote.py +190 -0
- intentkit/skills/lifi/utils.py +656 -0
- intentkit/skills/moralis/README.md +490 -0
- intentkit/skills/moralis/__init__.py +110 -0
- intentkit/skills/moralis/api.py +281 -0
- intentkit/skills/moralis/base.py +55 -0
- intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
- intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
- intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
- intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
- intentkit/skills/moralis/moralis.png +0 -0
- intentkit/skills/moralis/schema.json +156 -0
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +511 -0
- intentkit/skills/nation/__init__.py +62 -0
- intentkit/skills/nation/base.py +31 -0
- intentkit/skills/nation/nation.png +0 -0
- intentkit/skills/nation/nft_check.py +106 -0
- intentkit/skills/nation/schema.json +58 -0
- intentkit/skills/openai/__init__.py +107 -0
- intentkit/skills/openai/base.py +32 -0
- intentkit/skills/openai/dalle_image_generation.py +128 -0
- intentkit/skills/openai/gpt_image_generation.py +152 -0
- intentkit/skills/openai/gpt_image_to_image.py +186 -0
- intentkit/skills/openai/image_to_text.py +126 -0
- intentkit/skills/openai/openai.png +0 -0
- intentkit/skills/openai/schema.json +139 -0
- intentkit/skills/portfolio/README.md +55 -0
- intentkit/skills/portfolio/__init__.py +151 -0
- intentkit/skills/portfolio/base.py +107 -0
- intentkit/skills/portfolio/constants.py +9 -0
- intentkit/skills/portfolio/moralis.png +0 -0
- intentkit/skills/portfolio/schema.json +237 -0
- intentkit/skills/portfolio/token_balances.py +155 -0
- intentkit/skills/portfolio/wallet_approvals.py +102 -0
- intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
- intentkit/skills/portfolio/wallet_history.py +155 -0
- intentkit/skills/portfolio/wallet_net_worth.py +112 -0
- intentkit/skills/portfolio/wallet_nfts.py +139 -0
- intentkit/skills/portfolio/wallet_profitability.py +101 -0
- intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
- intentkit/skills/portfolio/wallet_stats.py +79 -0
- intentkit/skills/portfolio/wallet_swaps.py +147 -0
- intentkit/skills/skills.toml +103 -0
- intentkit/skills/slack/__init__.py +98 -0
- intentkit/skills/slack/base.py +55 -0
- intentkit/skills/slack/get_channel.py +109 -0
- intentkit/skills/slack/get_message.py +136 -0
- intentkit/skills/slack/schedule_message.py +92 -0
- intentkit/skills/slack/schema.json +135 -0
- intentkit/skills/slack/send_message.py +81 -0
- intentkit/skills/slack/slack.jpg +0 -0
- intentkit/skills/system/__init__.py +90 -0
- intentkit/skills/system/base.py +22 -0
- intentkit/skills/system/read_agent_api_key.py +87 -0
- intentkit/skills/system/regenerate_agent_api_key.py +77 -0
- intentkit/skills/system/schema.json +53 -0
- intentkit/skills/system/system.svg +76 -0
- intentkit/skills/tavily/README.md +86 -0
- intentkit/skills/tavily/__init__.py +91 -0
- intentkit/skills/tavily/base.py +27 -0
- intentkit/skills/tavily/schema.json +119 -0
- intentkit/skills/tavily/tavily.jpg +0 -0
- intentkit/skills/tavily/tavily_extract.py +147 -0
- intentkit/skills/tavily/tavily_search.py +139 -0
- intentkit/skills/token/README.md +89 -0
- intentkit/skills/token/__init__.py +107 -0
- intentkit/skills/token/base.py +154 -0
- intentkit/skills/token/constants.py +9 -0
- intentkit/skills/token/erc20_transfers.py +145 -0
- intentkit/skills/token/moralis.png +0 -0
- intentkit/skills/token/schema.json +141 -0
- intentkit/skills/token/token_analytics.py +81 -0
- intentkit/skills/token/token_price.py +132 -0
- intentkit/skills/token/token_search.py +121 -0
- intentkit/skills/twitter/__init__.py +146 -0
- intentkit/skills/twitter/base.py +68 -0
- intentkit/skills/twitter/follow_user.py +69 -0
- intentkit/skills/twitter/get_mentions.py +124 -0
- intentkit/skills/twitter/get_timeline.py +111 -0
- intentkit/skills/twitter/get_user_by_username.py +84 -0
- intentkit/skills/twitter/get_user_tweets.py +123 -0
- intentkit/skills/twitter/like_tweet.py +65 -0
- intentkit/skills/twitter/post_tweet.py +90 -0
- intentkit/skills/twitter/reply_tweet.py +98 -0
- intentkit/skills/twitter/retweet.py +76 -0
- intentkit/skills/twitter/schema.json +258 -0
- intentkit/skills/twitter/search_tweets.py +115 -0
- intentkit/skills/twitter/twitter.png +0 -0
- intentkit/skills/unrealspeech/__init__.py +55 -0
- intentkit/skills/unrealspeech/base.py +21 -0
- intentkit/skills/unrealspeech/schema.json +100 -0
- intentkit/skills/unrealspeech/text_to_speech.py +177 -0
- intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- intentkit/skills/venice_audio/__init__.py +106 -0
- intentkit/skills/venice_audio/base.py +119 -0
- intentkit/skills/venice_audio/input.py +41 -0
- intentkit/skills/venice_audio/schema.json +152 -0
- intentkit/skills/venice_audio/venice_audio.py +240 -0
- intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- intentkit/skills/venice_image/README.md +119 -0
- intentkit/skills/venice_image/__init__.py +154 -0
- intentkit/skills/venice_image/api.py +138 -0
- intentkit/skills/venice_image/base.py +188 -0
- intentkit/skills/venice_image/config.py +35 -0
- intentkit/skills/venice_image/image_enhance/README.md +119 -0
- intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
- intentkit/skills/venice_image/image_generation/README.md +144 -0
- intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
- intentkit/skills/venice_image/image_upscale/README.md +111 -0
- intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
- intentkit/skills/venice_image/image_vision/README.md +112 -0
- intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
- intentkit/skills/venice_image/schema.json +267 -0
- intentkit/skills/venice_image/utils.py +78 -0
- intentkit/skills/venice_image/venice_image.jpg +0 -0
- intentkit/skills/web_scraper/README.md +82 -0
- intentkit/skills/web_scraper/__init__.py +92 -0
- intentkit/skills/web_scraper/base.py +21 -0
- intentkit/skills/web_scraper/langchain.png +0 -0
- intentkit/skills/web_scraper/schema.json +115 -0
- intentkit/skills/web_scraper/scrape_and_index.py +327 -0
- intentkit/utils/__init__.py +1 -0
- intentkit/utils/chain.py +436 -0
- intentkit/utils/error.py +134 -0
- intentkit/utils/logging.py +70 -0
- intentkit/utils/middleware.py +61 -0
- intentkit/utils/random.py +16 -0
- intentkit/utils/s3.py +267 -0
- intentkit/utils/slack_alert.py +79 -0
- intentkit/utils/tx.py +37 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
- intentkit-0.5.2.dist-info/RECORD +365 -0
- intentkit-0.5.0.dist-info/RECORD +0 -4
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""Tool for fetching token price charts via DeFi Llama API."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Optional, Type
|
|
4
|
+
|
|
5
|
+
from langchain.schema.runnable import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.skills.defillama.api import fetch_price_chart
|
|
9
|
+
from intentkit.skills.defillama.base import DefiLlamaBaseTool
|
|
10
|
+
|
|
11
|
+
FETCH_PRICE_CHART_PROMPT = """
|
|
12
|
+
This tool fetches price chart data from DeFi Llama for multiple tokens.
|
|
13
|
+
Provide a list of token identifiers in the format:
|
|
14
|
+
- Ethereum tokens: 'ethereum:0x...'
|
|
15
|
+
- Other chains: 'chainname:0x...'
|
|
16
|
+
- CoinGecko IDs: 'coingecko:bitcoin'
|
|
17
|
+
Returns price chart data including:
|
|
18
|
+
- Historical price points for the last 24 hours
|
|
19
|
+
- Token symbol and metadata
|
|
20
|
+
- Confidence scores for price data
|
|
21
|
+
- Token decimals (if available)
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class PricePoint(BaseModel):
|
|
26
|
+
"""Model representing a single price point in the chart."""
|
|
27
|
+
|
|
28
|
+
timestamp: int = Field(..., description="Unix timestamp of the price data")
|
|
29
|
+
price: float = Field(..., description="Token price in USD at the timestamp")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class TokenPriceChart(BaseModel):
|
|
33
|
+
"""Model representing price chart data for a single token."""
|
|
34
|
+
|
|
35
|
+
symbol: str = Field(..., description="Token symbol")
|
|
36
|
+
confidence: float = Field(..., description="Confidence score for the price data")
|
|
37
|
+
decimals: Optional[int] = Field(None, description="Token decimals")
|
|
38
|
+
prices: List[PricePoint] = Field(..., description="List of historical price points")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class FetchPriceChartInput(BaseModel):
|
|
42
|
+
"""Input schema for fetching token price charts."""
|
|
43
|
+
|
|
44
|
+
coins: List[str] = Field(
|
|
45
|
+
..., description="List of token identifiers to fetch price charts for"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class FetchPriceChartResponse(BaseModel):
|
|
50
|
+
"""Response schema for token price charts."""
|
|
51
|
+
|
|
52
|
+
coins: Dict[str, TokenPriceChart] = Field(
|
|
53
|
+
default_factory=dict, description="Price chart data keyed by token identifier"
|
|
54
|
+
)
|
|
55
|
+
error: Optional[str] = Field(None, description="Error message if any")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
|
|
59
|
+
"""Tool for fetching token price charts from DeFi Llama.
|
|
60
|
+
|
|
61
|
+
This tool retrieves price chart data for multiple tokens over the last 24 hours,
|
|
62
|
+
including historical price points and token metadata.
|
|
63
|
+
|
|
64
|
+
Example:
|
|
65
|
+
chart_tool = DefiLlamaFetchPriceChart(
|
|
66
|
+
skill_store=store,
|
|
67
|
+
agent_id="agent_123",
|
|
68
|
+
agent_store=agent_store
|
|
69
|
+
)
|
|
70
|
+
result = await chart_tool._arun(
|
|
71
|
+
coins=["ethereum:0x...", "coingecko:ethereum"]
|
|
72
|
+
)
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
name: str = "defillama_fetch_price_chart"
|
|
76
|
+
description: str = FETCH_PRICE_CHART_PROMPT
|
|
77
|
+
args_schema: Type[BaseModel] = FetchPriceChartInput
|
|
78
|
+
|
|
79
|
+
async def _arun(
|
|
80
|
+
self, config: RunnableConfig, coins: List[str]
|
|
81
|
+
) -> FetchPriceChartResponse:
|
|
82
|
+
"""Fetch price charts for the given tokens.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
config: Runnable configuration
|
|
86
|
+
coins: List of token identifiers to fetch price charts for
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
FetchPriceChartResponse containing price chart data or error
|
|
90
|
+
"""
|
|
91
|
+
try:
|
|
92
|
+
# Check rate limiting
|
|
93
|
+
context = self.context_from_config(config)
|
|
94
|
+
is_rate_limited, error_msg = await self.check_rate_limit(context)
|
|
95
|
+
if is_rate_limited:
|
|
96
|
+
return FetchPriceChartResponse(error=error_msg)
|
|
97
|
+
|
|
98
|
+
# Fetch price chart data from API
|
|
99
|
+
result = await fetch_price_chart(coins=coins)
|
|
100
|
+
|
|
101
|
+
# Check for API errors
|
|
102
|
+
if isinstance(result, dict) and "error" in result:
|
|
103
|
+
return FetchPriceChartResponse(error=result["error"])
|
|
104
|
+
|
|
105
|
+
# Return the response matching the API structure
|
|
106
|
+
return FetchPriceChartResponse(coins=result["coins"])
|
|
107
|
+
|
|
108
|
+
except Exception as e:
|
|
109
|
+
return FetchPriceChartResponse(error=str(e))
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""Tool for fetching token price percentage changes via DeFi Llama API."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Optional, Type
|
|
4
|
+
|
|
5
|
+
from langchain.schema.runnable import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.skills.defillama.api import fetch_price_percentage
|
|
9
|
+
from intentkit.skills.defillama.base import DefiLlamaBaseTool
|
|
10
|
+
|
|
11
|
+
FETCH_PRICE_PERCENTAGE_PROMPT = """
|
|
12
|
+
This tool fetches 24-hour price percentage changes from DeFi Llama for multiple tokens.
|
|
13
|
+
Provide a list of token identifiers in the format:
|
|
14
|
+
- Ethereum tokens: 'ethereum:0x...'
|
|
15
|
+
- Other chains: 'chainname:0x...'
|
|
16
|
+
- CoinGecko IDs: 'coingecko:bitcoin'
|
|
17
|
+
Returns price percentage changes:
|
|
18
|
+
- Negative values indicate price decrease
|
|
19
|
+
- Positive values indicate price increase
|
|
20
|
+
- Changes are calculated from current time
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class FetchPricePercentageInput(BaseModel):
|
|
25
|
+
"""Input schema for fetching token price percentage changes."""
|
|
26
|
+
|
|
27
|
+
coins: List[str] = Field(
|
|
28
|
+
..., description="List of token identifiers to fetch price changes for"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class FetchPricePercentageResponse(BaseModel):
|
|
33
|
+
"""Response schema for token price percentage changes."""
|
|
34
|
+
|
|
35
|
+
coins: Dict[str, float] = Field(
|
|
36
|
+
default_factory=dict,
|
|
37
|
+
description="Price percentage changes keyed by token identifier",
|
|
38
|
+
)
|
|
39
|
+
error: Optional[str] = Field(None, description="Error message if any")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
|
|
43
|
+
"""Tool for fetching token price percentage changes from DeFi Llama.
|
|
44
|
+
|
|
45
|
+
This tool retrieves 24-hour price percentage changes for multiple tokens,
|
|
46
|
+
calculated from the current time.
|
|
47
|
+
|
|
48
|
+
Example:
|
|
49
|
+
percentage_tool = DefiLlamaFetchPricePercentage(
|
|
50
|
+
skill_store=store,
|
|
51
|
+
agent_id="agent_123",
|
|
52
|
+
agent_store=agent_store
|
|
53
|
+
)
|
|
54
|
+
result = await percentage_tool._arun(
|
|
55
|
+
coins=["ethereum:0x...", "coingecko:ethereum"]
|
|
56
|
+
)
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
name: str = "defillama_fetch_price_percentage"
|
|
60
|
+
description: str = FETCH_PRICE_PERCENTAGE_PROMPT
|
|
61
|
+
args_schema: Type[BaseModel] = FetchPricePercentageInput
|
|
62
|
+
|
|
63
|
+
async def _arun(
|
|
64
|
+
self, config: RunnableConfig, coins: List[str]
|
|
65
|
+
) -> FetchPricePercentageResponse:
|
|
66
|
+
"""Fetch price percentage changes for the given tokens.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
config: Runnable configuration
|
|
70
|
+
coins: List of token identifiers to fetch price changes for
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
FetchPricePercentageResponse containing price percentage changes or error
|
|
74
|
+
"""
|
|
75
|
+
try:
|
|
76
|
+
# Check rate limiting
|
|
77
|
+
context = self.context_from_config(config)
|
|
78
|
+
is_rate_limited, error_msg = await self.check_rate_limit(context)
|
|
79
|
+
if is_rate_limited:
|
|
80
|
+
return FetchPricePercentageResponse(error=error_msg)
|
|
81
|
+
|
|
82
|
+
# Fetch price percentage data from API
|
|
83
|
+
result = await fetch_price_percentage(coins=coins)
|
|
84
|
+
|
|
85
|
+
# Check for API errors
|
|
86
|
+
if isinstance(result, dict) and "error" in result:
|
|
87
|
+
return FetchPricePercentageResponse(error=result["error"])
|
|
88
|
+
|
|
89
|
+
# Return the response matching the API structure
|
|
90
|
+
return FetchPricePercentageResponse(coins=result["coins"])
|
|
91
|
+
|
|
92
|
+
except Exception as e:
|
|
93
|
+
return FetchPricePercentageResponse(error=str(e))
|
|
File without changes
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"""Chain configuration for DeFi Llama integration.
|
|
2
|
+
|
|
3
|
+
This module contains the valid chains and their aliases for use with the DeFi Llama API.
|
|
4
|
+
The VALID_CHAINS dictionary maps primary chain identifiers to their known aliases.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Dict, List
|
|
8
|
+
|
|
9
|
+
# Chain configuration with aliases
|
|
10
|
+
VALID_CHAINS: Dict[str, List[str]] = {
|
|
11
|
+
"ethereum": ["eth", "eth1", "eth2"],
|
|
12
|
+
"solana": ["sol"],
|
|
13
|
+
"bitcoin": ["btc"],
|
|
14
|
+
"bsc": ["bnb", "bsc"],
|
|
15
|
+
"tron": ["trx"],
|
|
16
|
+
"base": ["base"],
|
|
17
|
+
"berachain": ["bera"],
|
|
18
|
+
"arbitrum": ["arb"],
|
|
19
|
+
"sui": ["sui"],
|
|
20
|
+
"avalanche": ["avax", "ava"],
|
|
21
|
+
"aptos": ["apt"],
|
|
22
|
+
"polygon": ["matic", "polygon"],
|
|
23
|
+
"hyperliquid": ["hyper"],
|
|
24
|
+
"op_mainnet": ["op"],
|
|
25
|
+
"sonic": ["sonic"],
|
|
26
|
+
"core": ["core"],
|
|
27
|
+
"zircuit": ["zircuit"],
|
|
28
|
+
"cronos": ["cro"],
|
|
29
|
+
"bitlayer": ["bit"],
|
|
30
|
+
"cardano": ["ada"],
|
|
31
|
+
"bsquared": ["b2"],
|
|
32
|
+
"mantle": ["mntl"],
|
|
33
|
+
"pulsechain": ["pulse"],
|
|
34
|
+
"gnosis": ["gnosis"],
|
|
35
|
+
"dydx": ["dydx"],
|
|
36
|
+
"taiko": ["tk"],
|
|
37
|
+
"bob": ["bob"],
|
|
38
|
+
"zksync_era": ["zk", "zkSync"],
|
|
39
|
+
"linea": ["linea"],
|
|
40
|
+
"blast": ["blast"],
|
|
41
|
+
"rootstock": ["rs"],
|
|
42
|
+
"thorchain": ["thor"],
|
|
43
|
+
"ailayer": ["ai"],
|
|
44
|
+
"sei": ["sei"],
|
|
45
|
+
"eos": ["eos"],
|
|
46
|
+
"ton": ["ton"],
|
|
47
|
+
"near": ["near"],
|
|
48
|
+
"merlin": ["merlin"],
|
|
49
|
+
"kava": ["kava"],
|
|
50
|
+
"algorand": ["algo"],
|
|
51
|
+
"starknet": ["stark"],
|
|
52
|
+
"hedera": ["hbar"],
|
|
53
|
+
"mixin": ["mixin"],
|
|
54
|
+
"scroll": ["scroll"],
|
|
55
|
+
"kaia": ["kaia"],
|
|
56
|
+
"stacks": ["stx"],
|
|
57
|
+
"ronin": ["ronin"],
|
|
58
|
+
"osmosis": ["osmo"],
|
|
59
|
+
"verus": ["verus"],
|
|
60
|
+
"multiversx": ["x"],
|
|
61
|
+
"celo": ["celo"],
|
|
62
|
+
"xrpl": ["xrpl"],
|
|
63
|
+
"fraxtal": ["frax"],
|
|
64
|
+
"stellar": ["xlm"],
|
|
65
|
+
"bouncebit": ["bounce"],
|
|
66
|
+
"wemix3_0": ["wemix"],
|
|
67
|
+
"filecoin": ["fil"],
|
|
68
|
+
"hydration": ["hydra"],
|
|
69
|
+
"fantom": ["ftm"],
|
|
70
|
+
"iota_evm": ["iot"],
|
|
71
|
+
"manta": ["manta"],
|
|
72
|
+
"eclipse": ["eclp"],
|
|
73
|
+
"flow": ["flow"],
|
|
74
|
+
"injective": ["inj"],
|
|
75
|
+
"tezos": ["xtz"],
|
|
76
|
+
"soneium": ["son"],
|
|
77
|
+
"neutron": ["neut"],
|
|
78
|
+
"icp": ["icp"],
|
|
79
|
+
"iotex": ["iotex"],
|
|
80
|
+
"metis": ["metis"],
|
|
81
|
+
"opbnb": ["opbnb"],
|
|
82
|
+
"bifrost_network": ["bifrost"],
|
|
83
|
+
"flare": ["flare"],
|
|
84
|
+
"xdc": ["xdc"],
|
|
85
|
+
"morph": ["morph"],
|
|
86
|
+
"waves": ["waves"],
|
|
87
|
+
"conflux": ["conflux"],
|
|
88
|
+
"corn": ["corn"],
|
|
89
|
+
"reya_network": ["reya"],
|
|
90
|
+
"mode": ["mode"],
|
|
91
|
+
"cronos_zkevm": ["cronoszk"],
|
|
92
|
+
"telos": ["telos"],
|
|
93
|
+
"rollux": ["rollux"],
|
|
94
|
+
"zetachain": ["zeta"],
|
|
95
|
+
"chainflip": ["flip"],
|
|
96
|
+
"fuel_ignition": ["fuel"],
|
|
97
|
+
"aurora": ["aurora"],
|
|
98
|
+
"map_protocol": ["map"],
|
|
99
|
+
"kujira": ["kujira"],
|
|
100
|
+
"astar": ["astar"],
|
|
101
|
+
"moonbeam": ["moonbeam"],
|
|
102
|
+
"story": ["story"],
|
|
103
|
+
"abstract": ["abstract"],
|
|
104
|
+
"radix": ["radix"],
|
|
105
|
+
"zklink_nova": ["zklink"],
|
|
106
|
+
"duckchain": ["duck"],
|
|
107
|
+
"swellchain": ["swell"],
|
|
108
|
+
"apechain": ["ape"],
|
|
109
|
+
"icon": ["icx"],
|
|
110
|
+
"immutable_zkevm": ["immutable"],
|
|
111
|
+
"eos_evm": ["eosevm"],
|
|
112
|
+
"bifrost": ["bifrost"],
|
|
113
|
+
"k2": ["k2"],
|
|
114
|
+
"aelf": ["aelf"],
|
|
115
|
+
"fsc": ["fsc"],
|
|
116
|
+
"proton": ["proton"],
|
|
117
|
+
"secret": ["secret"],
|
|
118
|
+
"unichain": ["unichain"],
|
|
119
|
+
"neo": ["neo"],
|
|
120
|
+
"mayachain": ["maya"],
|
|
121
|
+
"canto": ["canto"],
|
|
122
|
+
"chiliz": ["chz"],
|
|
123
|
+
"x_layer": ["xlayer"],
|
|
124
|
+
"polynomial": ["poly"],
|
|
125
|
+
"ontology": ["ont"],
|
|
126
|
+
"onus": ["onus"],
|
|
127
|
+
"bitcoincash": ["bch"],
|
|
128
|
+
"terra2": ["terra2"],
|
|
129
|
+
"polygon_zkevm": ["polyzk"],
|
|
130
|
+
"ink": ["ink"],
|
|
131
|
+
"sophon": ["sophon"],
|
|
132
|
+
"venom": ["venom"],
|
|
133
|
+
"dexalot": ["dexalot"],
|
|
134
|
+
"bahamut": ["bahamut"],
|
|
135
|
+
"vite": ["vite"],
|
|
136
|
+
"dfs_network": ["dfs"],
|
|
137
|
+
"ergo": ["ergo"],
|
|
138
|
+
"wanchain": ["wan"],
|
|
139
|
+
"mantra": ["mantra"],
|
|
140
|
+
"doge": ["doge"],
|
|
141
|
+
"lisk": ["lisk"],
|
|
142
|
+
"alephium": ["alephium"],
|
|
143
|
+
"vision": ["vision"],
|
|
144
|
+
"dogechain": ["dogechain"],
|
|
145
|
+
"nuls": ["nuls"],
|
|
146
|
+
"agoric": ["agoric"],
|
|
147
|
+
"defichain": ["defi"],
|
|
148
|
+
"dymension": ["dym"],
|
|
149
|
+
"thundercore": ["tc"],
|
|
150
|
+
"godwokenv1": ["godwoken"],
|
|
151
|
+
"bevm": ["bevm"],
|
|
152
|
+
"litecoin": ["ltc"],
|
|
153
|
+
"ux": ["ux"],
|
|
154
|
+
"functionx": ["fx"],
|
|
155
|
+
"oraichain": ["oraichain"],
|
|
156
|
+
"dfk": ["dfk"],
|
|
157
|
+
"carbon": ["carbon"],
|
|
158
|
+
"beam": ["beam"],
|
|
159
|
+
"gravity": ["gravity"],
|
|
160
|
+
"horizen_eon": ["horizen"],
|
|
161
|
+
"moonriver": ["movr"],
|
|
162
|
+
"real": ["real"],
|
|
163
|
+
"oasys": ["oasys"],
|
|
164
|
+
"hydra": ["hydra"],
|
|
165
|
+
"oktchain": ["okt"],
|
|
166
|
+
"shibarium": ["shib"],
|
|
167
|
+
"world_chain": ["world"],
|
|
168
|
+
"interlay": ["interlay"],
|
|
169
|
+
"acala": ["acala"],
|
|
170
|
+
"elys": ["elys"],
|
|
171
|
+
"boba": ["boba"],
|
|
172
|
+
"vana": ["vana"],
|
|
173
|
+
"harmony": ["harmony"],
|
|
174
|
+
"lachain_network": ["lachain"],
|
|
175
|
+
"theta": ["theta"],
|
|
176
|
+
"ab": ["ab"],
|
|
177
|
+
"defiverse": ["defiverse"],
|
|
178
|
+
"kcc": ["kcc"],
|
|
179
|
+
"oasis_sapphire": ["oasis"],
|
|
180
|
+
"etherlink": ["etherlink"],
|
|
181
|
+
"wax": ["wax"],
|
|
182
|
+
"archway": ["archway"],
|
|
183
|
+
"redbelly": ["redbelly"],
|
|
184
|
+
"velas": ["velas"],
|
|
185
|
+
"equilibrium": ["equilibrium"],
|
|
186
|
+
"unit0": ["unit0"],
|
|
187
|
+
"ql1": ["ql1"],
|
|
188
|
+
"songbird": ["songbird"],
|
|
189
|
+
"zilliqa": ["zil"],
|
|
190
|
+
"rangers": ["rangers"],
|
|
191
|
+
"odyssey": ["odyssey"],
|
|
192
|
+
"terra_classic": ["terra"],
|
|
193
|
+
"kadena": ["kadena"],
|
|
194
|
+
"zero_network": ["zero"],
|
|
195
|
+
"elastos": ["elastos"],
|
|
196
|
+
"fluence": ["fluence"],
|
|
197
|
+
"idex": ["idex"],
|
|
198
|
+
"xpla": ["xpla"],
|
|
199
|
+
"milkomeda_c1": ["milkomeda"],
|
|
200
|
+
"taraxa": ["taraxa"],
|
|
201
|
+
"bitrock": ["bitrock"],
|
|
202
|
+
"persistence_one": ["persistence"],
|
|
203
|
+
"meter": ["meter"],
|
|
204
|
+
"arbitrum_nova": ["arbitrumnova"],
|
|
205
|
+
"everscale": ["everscale"],
|
|
206
|
+
"ultron": ["ultron"],
|
|
207
|
+
"fuse": ["fuse"],
|
|
208
|
+
"vechain": ["vet"],
|
|
209
|
+
"renec": ["renec"],
|
|
210
|
+
"shimmerevm": ["shimmer"],
|
|
211
|
+
"obyte": ["obyte"],
|
|
212
|
+
"nolus": ["nolus"],
|
|
213
|
+
"airdao": ["airdao"],
|
|
214
|
+
"elysium": ["elysium"],
|
|
215
|
+
"xai": ["xai"],
|
|
216
|
+
"starcoin": ["starcoin"],
|
|
217
|
+
"oasis_emerald": ["oasisem"],
|
|
218
|
+
"haqq": ["haqq"],
|
|
219
|
+
"nos": ["nos"],
|
|
220
|
+
"neon": ["neon"],
|
|
221
|
+
"bittorrent": ["btt"],
|
|
222
|
+
"csc": ["csc"],
|
|
223
|
+
"satoshivm": ["satv"],
|
|
224
|
+
"naka": ["naka"],
|
|
225
|
+
"edu_chain": ["edu"],
|
|
226
|
+
"kintsugi": ["kintsugi"],
|
|
227
|
+
"energi": ["energi"],
|
|
228
|
+
"rss3": ["rss3"],
|
|
229
|
+
"sx_rollup": ["sx"],
|
|
230
|
+
"cosmoshub": ["cosmos"],
|
|
231
|
+
"saakuru": ["saakuru"],
|
|
232
|
+
"boba_bnb": ["boba_bnb"],
|
|
233
|
+
"ethereumclassic": ["etc"],
|
|
234
|
+
"skale_europa": ["skale"],
|
|
235
|
+
"degen": ["degen"],
|
|
236
|
+
"mint": ["mint"],
|
|
237
|
+
"juno": ["juno"],
|
|
238
|
+
"viction": ["viction"],
|
|
239
|
+
"evmos": ["evmos"],
|
|
240
|
+
"enuls": ["enuls"],
|
|
241
|
+
"lightlink": ["lightlink"],
|
|
242
|
+
"sanko": ["sanko"],
|
|
243
|
+
"karura": ["karura"],
|
|
244
|
+
"kardia": ["kardia"],
|
|
245
|
+
"superposition": ["super"],
|
|
246
|
+
"crab": ["crab"],
|
|
247
|
+
"genesys": ["genesys"],
|
|
248
|
+
"matchain": ["matchain"],
|
|
249
|
+
"chihuahua": ["chihuahua"],
|
|
250
|
+
"massa": ["massa"],
|
|
251
|
+
"kroma": ["kroma"],
|
|
252
|
+
"tombchain": ["tomb"],
|
|
253
|
+
"smartbch": ["bchsmart"],
|
|
254
|
+
"ancient8": ["ancient8"],
|
|
255
|
+
"penumbra": ["penumbra"],
|
|
256
|
+
"ethpow": ["ethpow"],
|
|
257
|
+
"omax": ["omax"],
|
|
258
|
+
"migaloo": ["migaloo"],
|
|
259
|
+
"bostrom": ["bostrom"],
|
|
260
|
+
"energyweb": ["energyweb"],
|
|
261
|
+
"libre": ["libre"],
|
|
262
|
+
"defichain_evm": ["defievm"],
|
|
263
|
+
"artela": ["artela"],
|
|
264
|
+
"dash": ["dash"],
|
|
265
|
+
"sora": ["sora"],
|
|
266
|
+
"step": ["step"],
|
|
267
|
+
"nibiru": ["nibiru"],
|
|
268
|
+
"zkfair": ["zkfair"],
|
|
269
|
+
"hela": ["hela"],
|
|
270
|
+
"godwoken": ["godwoken"],
|
|
271
|
+
"shape": ["shape"],
|
|
272
|
+
"stargaze": ["stargaze"],
|
|
273
|
+
"crossfi": ["crossfi"],
|
|
274
|
+
"bitkub_chain": ["bitkub"],
|
|
275
|
+
"q_protocol": ["qprotocol"],
|
|
276
|
+
"loop": ["loop"],
|
|
277
|
+
"parex": ["parex"],
|
|
278
|
+
"alv": ["alv"],
|
|
279
|
+
"nahmii": ["nahmii"],
|
|
280
|
+
"shido": ["shido"],
|
|
281
|
+
"electroneum": ["etn"],
|
|
282
|
+
"zora": ["zora"],
|
|
283
|
+
"astar_zkevm": ["astark"],
|
|
284
|
+
"comdex": ["comdex"],
|
|
285
|
+
"stratis": ["stratis"],
|
|
286
|
+
"polkadex": ["polkadex"],
|
|
287
|
+
"meer": ["meer"],
|
|
288
|
+
"neo_x_mainnet": ["neo_x"],
|
|
289
|
+
"aura_network": ["aura"],
|
|
290
|
+
"findora": ["findora"],
|
|
291
|
+
"shiden": ["shiden"],
|
|
292
|
+
"swan": ["swan"],
|
|
293
|
+
"crescent": ["crescent"],
|
|
294
|
+
"rari": ["rari"],
|
|
295
|
+
"cyber": ["cyber"],
|
|
296
|
+
"redstone": ["redstone"],
|
|
297
|
+
"silicon_zkevm": ["silicon"],
|
|
298
|
+
"endurance": ["endurance"],
|
|
299
|
+
"inevm": ["inevm"],
|
|
300
|
+
"grove": ["grove"],
|
|
301
|
+
"areon_network": ["areon"],
|
|
302
|
+
"jbc": ["jbc"],
|
|
303
|
+
"planq": ["planq"],
|
|
304
|
+
"lachain": ["lachain"],
|
|
305
|
+
"rei": ["rei"],
|
|
306
|
+
"multivac": ["multivac"],
|
|
307
|
+
"cube": ["cube"],
|
|
308
|
+
"syscoin": ["syscoin"],
|
|
309
|
+
"vinuchain": ["vinuchain"],
|
|
310
|
+
"callisto": ["callisto"],
|
|
311
|
+
"hpb": ["hpb"],
|
|
312
|
+
"ham": ["ham"],
|
|
313
|
+
"ethf": ["ethf"],
|
|
314
|
+
"gochain": ["gochain"],
|
|
315
|
+
"darwinia": ["darwinia"],
|
|
316
|
+
"sx_network": ["sx"],
|
|
317
|
+
"manta_atlantic": ["atlantic"],
|
|
318
|
+
"ontologyevm": ["ontEvm"],
|
|
319
|
+
"mvc": ["mvc"],
|
|
320
|
+
"sifchain": ["sifchain"],
|
|
321
|
+
"plume": ["plume"],
|
|
322
|
+
"bitgert": ["bitgert"],
|
|
323
|
+
"reichain": ["reichain"],
|
|
324
|
+
"bitnet": ["bitnet"],
|
|
325
|
+
"tenet": ["tenet"],
|
|
326
|
+
"milkomeda_a1": ["milkomedaA1"],
|
|
327
|
+
"aeternity": ["aeternity"],
|
|
328
|
+
"palm": ["palm"],
|
|
329
|
+
"concordium": ["concordium"],
|
|
330
|
+
"kopi": ["kopi"],
|
|
331
|
+
"asset_chain": ["asset"],
|
|
332
|
+
"pego": ["pego"],
|
|
333
|
+
"waterfall": ["waterfall"],
|
|
334
|
+
"heco": ["heco"],
|
|
335
|
+
"exsat": ["exsat"],
|
|
336
|
+
"goerli": ["goerli"],
|
|
337
|
+
"celestia": ["celestia"],
|
|
338
|
+
"bandchain": ["band"],
|
|
339
|
+
"sommelier": ["sommelier"],
|
|
340
|
+
"stride": ["stride"],
|
|
341
|
+
"polkadot": ["dot"],
|
|
342
|
+
"kusama": ["kusama"],
|
|
343
|
+
"dexit": ["dexit"],
|
|
344
|
+
"fusion": ["fusion"],
|
|
345
|
+
"boba_avax": ["boba"],
|
|
346
|
+
"stafi": ["stafi"],
|
|
347
|
+
"empire": ["empire"],
|
|
348
|
+
"oxfun": ["oxfun"],
|
|
349
|
+
"pryzm": ["pryzm"],
|
|
350
|
+
"hoo": ["hoo"],
|
|
351
|
+
"echelon": ["echelon"],
|
|
352
|
+
"quicksilver": ["quick"],
|
|
353
|
+
"clv": ["clv"],
|
|
354
|
+
"pokt": ["pokt"],
|
|
355
|
+
"dsc": ["dsc"],
|
|
356
|
+
"zksync_lite": ["zkLite"],
|
|
357
|
+
"nova_network": ["nova"],
|
|
358
|
+
"cmp": ["cmp"],
|
|
359
|
+
"genshiro": ["genshiro"],
|
|
360
|
+
"lamden": ["lamden"],
|
|
361
|
+
"polis": ["polis"],
|
|
362
|
+
"zyx": ["zyx"],
|
|
363
|
+
"ubiq": ["ubiq"],
|
|
364
|
+
"heiko": ["heiko"],
|
|
365
|
+
"parallel": ["parallel"],
|
|
366
|
+
"coti": ["coti"],
|
|
367
|
+
"kekchain": ["kek"],
|
|
368
|
+
"muuchain": ["muuchain"],
|
|
369
|
+
"tlchain": ["tlchain"],
|
|
370
|
+
"zeniql": ["zeniql"],
|
|
371
|
+
"bitindi": ["bitindi"],
|
|
372
|
+
"lung": ["lung"],
|
|
373
|
+
"bone": ["bone"],
|
|
374
|
+
"lukso": ["lukso"],
|
|
375
|
+
"joltify": ["joltify"],
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
def get_chain_from_alias(alias: str) -> str | None:
|
|
380
|
+
"""Get the main chain identifier from an alias.
|
|
381
|
+
|
|
382
|
+
Args:
|
|
383
|
+
alias: The chain alias to look up
|
|
384
|
+
|
|
385
|
+
Returns:
|
|
386
|
+
The main chain identifier if found, None otherwise
|
|
387
|
+
"""
|
|
388
|
+
normalized_alias = alias.lower().strip()
|
|
389
|
+
|
|
390
|
+
# Check if it's a main chain name
|
|
391
|
+
if normalized_alias in VALID_CHAINS:
|
|
392
|
+
return normalized_alias
|
|
393
|
+
|
|
394
|
+
# Check aliases
|
|
395
|
+
for chain, aliases in VALID_CHAINS.items():
|
|
396
|
+
if normalized_alias in [a.lower() for a in aliases]:
|
|
397
|
+
return chain
|
|
398
|
+
|
|
399
|
+
return None
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def is_valid_chain(chain: str) -> bool:
|
|
403
|
+
"""Check if a chain identifier is valid.
|
|
404
|
+
|
|
405
|
+
Args:
|
|
406
|
+
chain: The chain identifier to validate
|
|
407
|
+
|
|
408
|
+
Returns:
|
|
409
|
+
True if the chain is valid, False otherwise
|
|
410
|
+
"""
|
|
411
|
+
return get_chain_from_alias(chain) is not None
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
def get_all_chains() -> list[str]:
|
|
415
|
+
"""Get a list of all valid main chain identifiers.
|
|
416
|
+
|
|
417
|
+
Returns:
|
|
418
|
+
List of all main chain identifiers
|
|
419
|
+
"""
|
|
420
|
+
return list(VALID_CHAINS.keys())
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def get_chain_aliases(chain: str) -> list[str]:
|
|
424
|
+
"""Get all aliases for a given chain.
|
|
425
|
+
|
|
426
|
+
Args:
|
|
427
|
+
chain: The main chain identifier
|
|
428
|
+
|
|
429
|
+
Returns:
|
|
430
|
+
List of aliases for the chain, empty list if chain not found
|
|
431
|
+
"""
|
|
432
|
+
normalized_chain = chain.lower().strip()
|
|
433
|
+
return VALID_CHAINS.get(normalized_chain, [])
|
|
Binary file
|
|
File without changes
|