diff --git a/README.md b/README.md index 2176af8..8af823b 100644 --- a/README.md +++ b/README.md @@ -50,17 +50,20 @@ A comprehensive RESTful API service for NEAR blockchain interactions, treasury m ## Installation 1. **Clone the repository:** + ```bash git clone https://github.com/your-username/ref-sdk-api.git cd ref-sdk-api ``` 2. **Install dependencies:** + ```bash yarn install ``` 3. **Setup environment variables:** + ```bash cp .env.example .env # Edit .env with your configuration @@ -107,6 +110,7 @@ Server runs on `http://127.0.0.1:3000` by default. ### Token Operations #### Get Whitelist Tokens + - **Endpoint:** `GET /api/whitelist-tokens` - **Description:** Returns whitelisted tokens with balances and prices for a specific account - **Query Parameters:** @@ -118,12 +122,13 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Token Swap + - **Endpoint:** `GET /api/swap` - **Description:** Generate swap transactions for token exchanges - **Query Parameters:** - `accountId` (string, required): Account executing the swap - `tokenIn` (string, required): Input token contract ID - - `tokenOut` (string, required): Output token contract ID + - `tokenOut` (string, required): Output token contract ID - `amountIn` (string, required): Amount of input token (in smallest units) - `slippage` (string, optional): Slippage tolerance (default: "0.01" for 1%) - **Response:** Swap transaction details and estimated output @@ -133,6 +138,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get NEAR Price + - **Endpoint:** `GET /api/near-price` - **Description:** Current NEAR token price in USD with database fallback - **Response:** Number (price in USD) @@ -142,6 +148,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get FT Token Price + - **Endpoint:** `GET /api/ft-token-price` - **Description:** Get price for a specific fungible token - **Query Parameters:** @@ -153,6 +160,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get FT Token Metadata + - **Endpoint:** `GET /api/ft-token-metadata` - **Description:** Fetch metadata for a fungible token - **Query Parameters:** @@ -164,6 +172,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get FT Tokens + - **Endpoint:** `GET /api/ft-tokens` - **Description:** Get all fungible tokens held by an account with metadata and USD values - **Query Parameters:** @@ -174,9 +183,29 @@ Server runs on `http://127.0.0.1:3000` by default. GET /api/ft-tokens?account_id=example.near ``` +#### Get Token by Defuse Asset ID + +- **GET** `/api/token-by-defuse-asset-id?defuseAssetId={id}` +- **Description**: Fetch token data by defuse asset ID. Supports multiple IDs separated by commas. +- **Query Parameters**: + - `defuseAssetId` (required): Single ID or comma-separated list of defuse asset IDs +- **Response**: Array of token objects with metadata, prices, and icons +- **Example**: `/api/token-by-defuse-asset-id?defuseAssetId=nep141:wrap.near,0x123...` + +#### Get Blockchain by Network + +- **GET** `/api/blockchain-by-network?network={network}&theme={theme}` +- **Description**: Fetch blockchain information by network identifier. Supports multiple networks separated by commas. +- **Query Parameters**: + - `network` (required): Single network or comma-separated list of networks (e.g., "near", "eth", "btc") + - `theme` (optional): "light" or "dark" for icon theme (default: "light") +- **Response**: Array of blockchain objects with name, icon, and network identifier +- **Example**: `/api/blockchain-by-network?network=near,eth&theme=dark` + ### Balance & History #### Get Token Balance History + - **Endpoint:** `GET /api/all-token-balance-history` - **Description:** Historical balance data for a specific token across multiple time periods - **Query Parameters:** @@ -189,6 +218,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get Intents Balance History + - **Endpoint:** `GET /api/intents-balance-history` - **Description:** Historical balance data for tokens held through intents contracts - **Query Parameters:** @@ -202,6 +232,7 @@ Server runs on `http://127.0.0.1:3000` by default. ### Treasury Management #### Get Transactions Transfer History + - **Endpoint:** `GET /api/transactions-transfer-history` - **Description:** Transfer transaction history for a treasury DAO - **Query Parameters:** @@ -213,22 +244,26 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Store Treasuries + - **Endpoint:** `GET /db/store-treasuries` - **Description:** Fetch and store treasury data from factory contract - **Response:** Success message with operation results #### Insert Treasury + - **Endpoint:** `POST /db/insert-treasury` - **Description:** Manually insert treasury data - **Body:** Treasury object or array of treasury objects - **Response:** Operation results for each treasury #### Treasuries Report + - **Endpoint:** `GET /db/treasuries-report` - **Description:** Generate comprehensive treasury analytics report - **Response:** Treasury metrics and Google Sheets update status #### Treasuries Transactions Report + - **Endpoint:** `GET /db/treasuries-transactions-report` - **Description:** Generate treasury transaction analytics report - **Response:** Transaction metrics and Google Sheets update status @@ -236,6 +271,7 @@ Server runs on `http://127.0.0.1:3000` by default. ### Validator Information #### Get Validators + - **Endpoint:** `GET /api/validators` - **Description:** List of current NEAR validators with formatted fee information - **Response:** Array of validator objects with pool_id and fee percentage @@ -245,6 +281,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get Validator Details + - **Endpoint:** `GET /api/validator-details` - **Description:** Detailed information for a specific validator - **Query Parameters:** @@ -258,6 +295,7 @@ Server runs on `http://127.0.0.1:3000` by default. ### Search & Discovery #### Search FT Tokens + - **Endpoint:** `GET /api/search-ft` - **Description:** Search for fungible tokens by name or symbol - **Query Parameters:** @@ -269,6 +307,7 @@ Server runs on `http://127.0.0.1:3000` by default. ``` #### Get User DAOs + - **Endpoint:** `GET /api/user-daos` - **Description:** List of DAOs that a user is a member of - **Query Parameters:** @@ -282,21 +321,23 @@ Server runs on `http://127.0.0.1:3000` by default. ### OneClick Treasury #### OneClick Quote + - **Endpoint:** `POST /api/treasury/oneclick-quote` - **Description:** Generate treasury proposal for cross-chain token operations - **Body Parameters:** - `treasuryDaoID` (string, required): Treasury DAO contract ID (must end with .sputnik-dao.near) - `inputToken` (object, required): Input token details - - `outputToken` (object, required): Output token details + - `outputToken` (object, required): Output token details - `amountIn` (string, required): Input amount - `slippageTolerance` (string, required): Slippage tolerance - `networkOut` (string, optional): Output network - **Response:** Formatted proposal payload for DAO submission - **Example:** + ```http POST /api/treasury/oneclick-quote Content-Type: application/json - + { "treasuryDaoID": "example.sputnik-dao.near", "inputToken": {"id": "wrap.near", "symbol": "WNEAR"}, @@ -311,11 +352,13 @@ Server runs on `http://127.0.0.1:3000` by default. ## Caching & Rate Limiting ### Caching + - **NodeCache:** 2-minute TTL for most endpoints - **Specialized caching:** Longer TTL for validator data (7 days) and search results (1 day) - **RPC caching:** Request-based caching with error handling for rate limits ### Rate Limiting + - **Limit:** 180 requests per 30 seconds per IP - **Scope:** All `/api/*` endpoints - **Headers:** Standard rate limit headers included in responses diff --git a/src/constants/intents-chains.ts b/src/constants/intents-chains.ts new file mode 100644 index 0000000..7d1b43b --- /dev/null +++ b/src/constants/intents-chains.ts @@ -0,0 +1,304 @@ +export type BlockchainOption = { + name: string; + icon: string; + network: string; +}; + +const prefix = "https://near-intents.org/static/icons/network/"; + +export const chainIcons: Record = { + eth: { + dark: `${prefix}ethereum_white.svg`, + light: `${prefix}ethereum.svg`, + }, + near: { + dark: `${prefix}near.svg`, + light: `${prefix}near_dark.svg`, + }, + base: { + dark: `${prefix}base.svg`, + light: `${prefix}base.svg`, + }, + arbitrum: { + dark: `${prefix}arbitrum.svg`, + light: `${prefix}arbitrum.svg`, + }, + bitcoin: { + dark: `${prefix}btc.svg`, + light: `${prefix}btc.svg`, + }, + + solana: { + dark: `${prefix}solana.svg`, + light: `${prefix}solana.svg`, + }, + + dogecoin: { + dark: `${prefix}dogecoin.svg`, + light: `${prefix}dogecoin.svg`, + }, + + turbochain: { + dark: `${prefix}turbochain.png`, + light: `${prefix}turbochain.png`, + }, + tuxappchain: { + dark: `${prefix}tuxappchain.svg`, + light: `${prefix}tuxappchain.svg`, + }, + vertex: { + dark: `${prefix}vertex.svg`, + light: `${prefix}vertex.svg`, + }, + optima: { + dark: `${prefix}optima.svg`, + light: `${prefix}optima.svg`, + }, + easychain: { + dark: `${prefix}easychain.svg`, + light: `${prefix}easychain.svg`, + }, + aurora: { + dark: `${prefix}aurora.svg`, + light: `${prefix}aurora.svg`, + }, + aurora_devnet: { + dark: `${prefix}aurora_devnet.svg`, + light: `${prefix}aurora_devnet.svg`, + }, + xrpledger: { + dark: `${prefix}xrpledger_white.svg`, + light: `${prefix}xrpledger.svg`, + }, + zcash: { + dark: `${prefix}zcash.svg`, + light: `${prefix}zcash-icon-black.svg`, + }, + gnosis: { + dark: `${prefix}gnosis_white.svg`, + light: `${prefix}gnosis.svg`, + }, + berachain: { + dark: `${prefix}berachain.svg`, + light: `${prefix}berachain.svg`, + }, + tron: { + dark: `${prefix}tron.svg`, + light: `${prefix}tron.svg`, + }, + polygon: { + dark: `${prefix}polygon.svg`, + light: `${prefix}polygon.svg`, + }, + bsc: { + dark: `${prefix}bsc.svg`, + light: `${prefix}bsc.svg`, + }, + hyperliquid: { + dark: `${prefix}hyperliquid.svg`, + light: `${prefix}hyperliquid.svg`, + }, + ton: { + dark: `${prefix}ton.svg`, + light: `${prefix}ton.svg`, + }, + optimism: { + dark: `${prefix}optimism.svg`, + light: `${prefix}optimism_dark.svg`, + }, + avalanche: { + dark: `${prefix}avalanche.svg`, + light: `${prefix}avalanche.svg`, + }, + sui: { + dark: `${prefix}sui.svg`, + light: `${prefix}sui_dark.svg`, + }, + stellar: { + dark: `${prefix}stellar_white.svg`, + light: `${prefix}stellar.svg`, + }, + aptos: { + dark: `${prefix}aptos_white.svg`, + light: `${prefix}aptos.svg`, + }, + cardano: { + dark: `${prefix}cardano.svg`, + light: `${prefix}cardano.svg`, + }, +}; + +export function getBlockchainsOptions(theme: "light" | "dark" = "light") { + return [ + { + name: "Near", + icon: chainIcons.near[theme], + network: "near", + }, + { + name: "Ethereum", + icon: chainIcons.eth[theme], + network: "eth", + }, + { + name: "Base", + icon: chainIcons.base[theme], + network: "base", + }, + { + name: "Arbitrum", + icon: chainIcons.arbitrum[theme], + network: "arbitrum", + }, + { + name: "Bitcoin", + icon: chainIcons.bitcoin[theme], + network: "bitcoin", + }, + { + name: "Bitcoin", + icon: chainIcons.bitcoin[theme], + network: "btc", + }, + { + name: "Solana", + icon: chainIcons.solana[theme], + network: "solana", + }, + { + name: "Solana", + icon: chainIcons.solana[theme], + network: "sol", + }, + { + name: "Dogecoin", + icon: chainIcons.dogecoin[theme], + network: "dogecoin", + }, + { + name: "Dogecoin", + icon: chainIcons.dogecoin[theme], + network: "doge", + }, + { + name: "TurboChain", + icon: chainIcons.turbochain[theme], + network: "turbochain", + }, + { + name: "Aurora", + icon: chainIcons.aurora[theme], + network: "aurora", + }, + { + name: "Aurora Devnet", + icon: chainIcons.aurora[theme], + network: "aurora_devnet", + }, + { + name: "XRP Ledger", + icon: chainIcons.xrpledger[theme], + network: "xrpledger", + }, + { + name: "XRP Ledger", + icon: chainIcons.xrpledger[theme], + network: "xrp", + }, + { + name: "Zcash", + icon: chainIcons.zcash[theme], + network: "zcash", + }, + { + name: "Zcash", + icon: chainIcons.zcash[theme], + network: "zec", + }, + { + name: "Gnosis", + icon: chainIcons.gnosis[theme], + network: "gnosis", + }, + { + name: "BeraChain", + icon: chainIcons.berachain[theme], + network: "berachain", + }, + { + name: "Tron", + icon: chainIcons.tron[theme], + network: "tron", + }, + { + name: "TuxaChain", + icon: chainIcons.tuxappchain[theme], + network: "tuxappchain", + }, + { + name: "Vertex", + icon: chainIcons.vertex[theme], + network: "vertex", + }, + { + name: "Optima", + icon: chainIcons.optima[theme], + network: "optima", + }, + { + name: "EasyChain", + icon: chainIcons.easychain[theme], + network: "easychain", + }, + { + name: "Polygon", + icon: chainIcons.polygon[theme], + network: "polygon", + }, + { + name: "BNB Smart Chain", + icon: chainIcons.bsc[theme], + network: "bsc", + }, + { + name: "Hyperliquid", + icon: chainIcons.hyperliquid[theme], + network: "hyperliquid", + }, + { + name: "TON", + icon: chainIcons.ton[theme], + network: "ton", + }, + { + name: "Optimism", + icon: chainIcons.optimism[theme], + network: "optimism", + }, + { + name: "Avalanche", + icon: chainIcons.avalanche[theme], + network: "avalanche", + }, + { + name: "Sui", + icon: chainIcons.sui[theme], + network: "sui", + }, + { + name: "Stellar", + icon: chainIcons.stellar[theme], + network: "stellar", + }, + { + name: "Aptos", + icon: chainIcons.aptos[theme], + network: "aptos", + }, + { + name: "Cardano", + icon: chainIcons.cardano[theme], + network: "cardano", + }, + ]; +} diff --git a/src/constants/intents-tokens.ts b/src/constants/intents-tokens.ts new file mode 100644 index 0000000..c9ba45e --- /dev/null +++ b/src/constants/intents-tokens.ts @@ -0,0 +1,1862 @@ +export type SupportedChainName = + | "eth" + | "near" + | "base" + | "arbitrum" + | "bitcoin" + | "solana" + | "dogecoin" + | "xrpledger" + | "zcash" + | "gnosis" + | "berachain" + | "tron" + | "polygon" + | "bsc" + | "ton" + | "optimism" + | "avalanche" + | "sui" + | "stellar" + | "aptos" + | "cardano" + | VirtualChains + | MockedChains; + +export type VirtualChains = + | "turbochain" + | "tuxappchain" + | "vertex" + | "optima" + | "easychain" + | "aurora" + | "aurora_devnet"; + +export type MockedChains = "hyperliquid"; + +export type SupportedBridge = + | "direct" + | "poa" + | "aurora_engine" + | "hot_omni" + | "near_omni"; + +export interface FungibleTokenInfo { + defuseAssetId: string; + address: string; + symbol: string; + name: string; + decimals: number; + icon: string; + chainName: SupportedChainName; + bridge: SupportedBridge; + tags?: string[]; +} + +export interface NativeTokenInfo { + defuseAssetId: string; + type: "native"; + symbol: string; + name: string; + decimals: number; + icon: string; + chainName: SupportedChainName; + bridge: SupportedBridge; + tags?: string[]; +} + +export interface UnifiedTokenInfo { + unifiedAssetId: string; + symbol: string; + name: string; + icon: string; + groupedTokens: BaseTokenInfo[]; + tags?: string[]; +} + +export type BaseTokenInfo = FungibleTokenInfo | NativeTokenInfo; + +export type TokenInfo = BaseTokenInfo | UnifiedTokenInfo; + +export const NATIVE_NEAR: TokenInfo = { + defuseAssetId: "nep141:wrap.near", + address: "wrap.near", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "near", + bridge: "direct", + symbol: "NEAR", + name: "Near", +}; + +export const LIST_TOKENS: TokenInfo[] = [ + { + unifiedAssetId: "usdc", + symbol: "USDC", + name: "USD Coin", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near", + address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "eth", + bridge: "poa", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: + "17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "near", + bridge: "direct", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "turbochain", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "aurora", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near", + address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "base", + bridge: "poa", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:arb-0xaf88d065e77c8cc2239327c5edb3a432268e5831.omft.near", + address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "arbitrum", + bridge: "poa", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:sol-5ce3bf3a31af18be40ba30f721101b4341690186.omft.near", + address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "solana", + bridge: "poa", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:gnosis-0x2a22f9c3b484c3629090feed35f17ff8f88f76f0.omft.near", + address: "0x2a22f9c3b484c3629090feed35f17ff8f88f76f0", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "gnosis", + bridge: "poa", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "aurora_devnet", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "tuxappchain", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "vertex", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "easychain", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1", + address: "0x368ebb46aca6b8d0787c96b2b20bd3cc3f2c45f7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "optima", + bridge: "aurora_engine", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:137_qiStmoQJDQPTebaPjgx5VBxZv6L", + address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "polygon", + bridge: "hot_omni", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:56_2w93GqMcEmQFDru84j3HZZWt557r", + address: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "bsc", + bridge: "hot_omni", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep141:sui-c1b81ecaf27933252d31a963bc5e9458f13c18ce.omft.near", + address: + "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "sui", + bridge: "poa", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:1100_111bzQBB65GxAPAVoxqmMcgYo5oS3txhqs1Uh1cgahKQUeTUq1TJu", + address: "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN", + decimals: 7, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "stellar", + bridge: "hot_omni", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:10_A2ewyUyDp6qsue1jqZsGypkCxRJ", + address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "optimism", + bridge: "hot_omni", + symbol: "USDC", + name: "USD Coin", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:43114_3atVJH3r5c4GqiSYmg9fECvjc47o", + address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3408.png", + chainName: "avalanche", + bridge: "hot_omni", + symbol: "USDC", + name: "USD Coin", + }, + ], + tags: ["mc:7", "type:stablecoin", "tvol:4", "aid:usdc"], + }, + { + defuseAssetId: + "nep141:sol-c58e6539c2f2e097c251f8edf11f9c03e581f8d4.omft.near", + address: "6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/35336.png", + chainName: "solana", + bridge: "poa", + symbol: "TRUMP", + name: "OFFICIAL TRUMP", + tags: ["mc:39", "type:meme"], + }, + { + defuseAssetId: + "nep141:sol-d600e625449a4d9380eaf5e3265e54c90d34e260.omft.near", + address: "FUAfBo2jgks6gB4Z4LfZkqSZgzNucisEHqnNebaRxM1P", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/35347.png", + chainName: "solana", + bridge: "poa", + symbol: "MELANIA", + name: "Official Melania Meme", + tags: ["mc:96", "type:meme"], + }, + { + defuseAssetId: "nep141:bera.omft.near", + type: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24647.png", + chainName: "berachain", + bridge: "poa", + symbol: "BERA", + name: "BERA", + tags: ["mc:104", "tvol:10"], + }, + { + unifiedAssetId: "zcash", + symbol: "ZEC", + name: "Zcash", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1437.png", + groupedTokens: [ + { + defuseAssetId: "nep141:zec.omft.near", + type: "native", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1437.png", + chainName: "zcash", + bridge: "poa", + symbol: "ZEC", + name: "Zcash", + }, + { + defuseAssetId: "nep141:zec.omft.near", + address: "zec.omft.near", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1437.png", + chainName: "near", + bridge: "direct", + symbol: "ZEC", + name: "Zcash", + }, + ], + tags: ["mc:120", "tvol:1", "aid:zec"], + }, + { + unifiedAssetId: "near", + symbol: "NEAR", + name: "Near", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + groupedTokens: [ + NATIVE_NEAR, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "turbochain", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "aurora", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "aurora_devnet", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "tuxappchain", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "vertex", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "easychain", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + { + defuseAssetId: "nep141:wrap.near", + address: "0xC42C30aC6Cc15faC9bD938618BcaA1a1FaE8501d", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/6535.png", + chainName: "optima", + bridge: "aurora_engine", + symbol: "NEAR", + name: "Near", + }, + ], + tags: ["mc:31", "tvol:2", "aid:near"], + }, + { + unifiedAssetId: "usdt", + symbol: "USDT", + name: "Tether USD", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:eth-0xdac17f958d2ee523a2206206994597c13d831ec7.omft.near", + address: "0xdAC17F958D2ee523a2206206994597C13D831ec7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "eth", + bridge: "poa", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "usdt.tether-token.near", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "near", + bridge: "direct", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "turbochain", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "aurora", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep141:arb-0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9.omft.near", + address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "arbitrum", + bridge: "poa", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep141:sol-c800a4bd850783ccb82c2b2c7e84175443606352.omft.near", + address: "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "solana", + bridge: "poa", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep141:tron-d28a265909efecdcee7c5028585214ea0b96f015.omft.near", + address: "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "tron", + bridge: "poa", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "aurora_devnet", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "tuxappchain", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "vertex", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "easychain", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: "nep141:usdt.tether-token.near", + address: "0x80Da25Da4D783E57d2FCdA0436873A193a4BEccF", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "optima", + bridge: "aurora_engine", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:137_3hpYoaLtt8MP1Z2GH1U473DMRKgr", + address: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "polygon", + bridge: "hot_omni", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:56_2CMMyVTGZkeyNZTSvS5sarzfir6g", + address: "0x55d398326f99059fF775485246999027B3197955", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "bsc", + bridge: "hot_omni", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:1117_3tsdfyziyc7EJbP2aULWSKU4toBaAcN4FdTgfm5W1mC4ouR", + address: "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "ton", + bridge: "hot_omni", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:43114_372BeH7ENZieCaabwkbWkBiTTgXp", + address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "avalanche", + bridge: "hot_omni", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep141:sui-349a5b23674603c086ceac1fa9f139c4bbc30cf8.omft.near", + address: + "0x375f70cf2ae4c00bf37117d0c85a2c71545e6ee05c4a5c7d282cd66a4504b068::usdt::USDT", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "sui", + bridge: "poa", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:10_359RPSJVdTxwTJT9TyGssr2rFoWo", + address: "0x94b008aA00579c1307B0EF2c499aD98a8ce58e58", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "optimism", + bridge: "hot_omni", + symbol: "USDT", + name: "Tether USD", + }, + { + defuseAssetId: + "nep141:aptos-88cb7619440a914fe6400149a12b443c3ac21d59.omft.near", + address: + "0x357b0b74bc833e95a115ad22604854d6b0fca151cecd94111770e5d6ffc9dc2b", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/825.png", + chainName: "aptos", + bridge: "poa", + symbol: "USDT", + name: "Tether USD", + }, + ], + tags: ["mc:3", "type:stablecoin", "tvol:3", "aid:usdt"], + }, + + { + unifiedAssetId: "dai", + symbol: "DAI", + name: "DAI", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/4943.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:eth-0x6b175474e89094c44da98b954eedeac495271d0f.omft.near", + address: "0x6b175474e89094c44da98b954eedeac495271d0f", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/4943.png", + chainName: "eth", + bridge: "poa", + symbol: "DAI", + name: "DAI", + }, + { + defuseAssetId: "nep141:gnosis.omft.near", + type: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/8635.png", + chainName: "gnosis", + bridge: "poa", + symbol: "xDAI", + name: "xDAI", + }, + ], + tags: ["mc:25", "type:stablecoin", "aid:dai"], + }, + { + unifiedAssetId: "eth", + symbol: "ETH", + name: "ETH", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + groupedTokens: [ + { + defuseAssetId: "nep141:eth.omft.near", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "eth", + bridge: "poa", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "eth.bridge.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "near", + bridge: "direct", + symbol: "ETH", + name: "ETH", + }, + // Token eth "aurora" ramains for backward capability for executed OTC and Gifts + { + defuseAssetId: "nep141:aurora", + address: "aurora", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "near", + bridge: "direct", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "0x5a524251df27A25AC6b9964a93E1c23AD692688D", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "turbochain", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "aurora", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:base.omft.near", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "base", + bridge: "poa", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:arb.omft.near", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "arbitrum", + bridge: "poa", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: + "nep141:gnosis-0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1.omft.near", + address: "0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "gnosis", + bridge: "poa", + symbol: "wETH", + name: "wETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "0x5a524251df27A25AC6b9964a93E1c23AD692688D", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "aurora_devnet", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "0x5a524251df27A25AC6b9964a93E1c23AD692688D", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "tuxappchain", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "0x5a524251df27A25AC6b9964a93E1c23AD692688D", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "vertex", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "0x5a524251df27A25AC6b9964a93E1c23AD692688D", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "easychain", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.bridge.near", + address: "0x5a524251df27A25AC6b9964a93E1c23AD692688D", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "optima", + bridge: "aurora_engine", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep141:eth.omft.near", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "hyperliquid", + bridge: "poa", + symbol: "ETH", + name: "ETH", + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:10_11111111111111111111", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1027.png", + chainName: "optimism", + bridge: "hot_omni", + symbol: "ETH", + name: "ETH", + }, + ], + tags: ["mc:2", "tvol:7", "aid:eth"], + }, + { + unifiedAssetId: "aurora", + symbol: "AURORA", + name: "Aurora", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "near", + bridge: "direct", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "turbochain", + bridge: "aurora_engine", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "aurora", + bridge: "aurora_engine", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:eth-0xaaaaaa20d9e0e2461697782ef11675f668207961.omft.near", + address: "0xAaAAAA20D9E0e2461697782ef11675f668207961", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "eth", + bridge: "poa", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "tuxappchain", + bridge: "aurora_engine", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "vertex", + bridge: "aurora_engine", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "easychain", + bridge: "aurora_engine", + symbol: "AURORA", + name: "Aurora", + }, + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0x8BEc47865aDe3B172A928df8f990Bc7f2A3b9f79", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "optima", + bridge: "aurora_engine", + symbol: "AURORA", + name: "Aurora", + }, + ], + tags: ["mc:462", "tvol:12", "aid:aurora"], + }, + { + unifiedAssetId: "btc", + symbol: "BTC", + name: "Bitcoin", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1.png", + groupedTokens: [ + { + defuseAssetId: "nep141:btc.omft.near", + type: "native", + address: "native", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1.png", + chainName: "bitcoin", + bridge: "poa", + symbol: "BTC", + name: "Bitcoin", + }, + { + defuseAssetId: "nep141:nbtc.bridge.near", + address: "nbtc.bridge.near", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1.png", + chainName: "near", + bridge: "direct", + symbol: "nBTC", + name: "Bitcoin", + }, + { + defuseAssetId: "nep141:btc.omft.near", + address: "native", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1.png", + chainName: "hyperliquid", + bridge: "poa", + symbol: "BTC", + name: "Bitcoin", + }, + ], + tags: ["mc:1", "tvol:6", "aid:btc"], + }, + { + defuseAssetId: + "nep141:eth-0x6982508145454ce325ddbe47a25d4ec3d2311933.omft.near", + address: "0x6982508145454Ce325dDbE47a25d4ec3d2311933", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24478.png", + chainName: "eth", + bridge: "poa", + symbol: "PEPE", + name: "Pepe", + tags: ["mc:30", "type:meme"], + }, + { + defuseAssetId: + "nep141:eth-0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce.omft.near", + address: "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/5994.png", + chainName: "eth", + bridge: "poa", + symbol: "SHIB", + name: "Shiba Inu", + tags: ["mc:15", "type:meme"], + }, + { + defuseAssetId: + "nep141:eth-0x514910771af9ca656af840dff83e8264ecf986ca.omft.near", + address: "0x514910771AF9Ca656af840dff83E8264EcF986CA", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1975.png", + chainName: "eth", + bridge: "poa", + symbol: "LINK", + name: "Chainlink", + tags: ["mc:11"], + }, + { + defuseAssetId: + "nep141:eth-0x1f9840a85d5af5bf1d1762f925bdaddc4201f984.omft.near", + address: "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/7083.png", + chainName: "eth", + bridge: "poa", + symbol: "UNI", + name: "Uniswap", + tags: ["mc:25"], + }, + { + defuseAssetId: + "nep141:arb-0x912ce59144191c1204e64559fe8253a0e49e6548.omft.near", + address: "0x912CE59144191C1204E64559FE8253a0e49E6548", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/11841.png", + chainName: "arbitrum", + bridge: "poa", + symbol: "ARB", + name: "Arbitrum", + tags: ["mc:49", "tvol:14"], + }, + { + defuseAssetId: + "nep141:eth-0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.omft.near", + address: "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/7278.png", + chainName: "eth", + bridge: "poa", + symbol: "AAVE", + name: "Aave", + tags: ["mc:32"], + }, + { + defuseAssetId: + "nep141:arb-0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a.omft.near", + address: "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/11857.png", + chainName: "arbitrum", + bridge: "poa", + symbol: "GMX", + name: "GMX", + tags: ["mc:183"], + }, + { + defuseAssetId: + "nep141:eth-0xaaee1a9723aadb7afa2810263653a34ba2c21c7a.omft.near", + address: "0xaaeE1A9723aaDB7afA2810263653A34bA2C21C7a", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/27659.png", + chainName: "eth", + bridge: "poa", + symbol: "MOG", + name: "Mog Coin", + tags: ["mc:160", "type:meme"], + }, + { + defuseAssetId: + "nep141:base-0x532f27101965dd16442e59d40670faf5ebb142e4.omft.near", + address: "0x532f27101965dd16442E59d40670FaF5eBB142E4", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/29743.png", + chainName: "base", + bridge: "poa", + symbol: "BRETT", + name: "Brett", + tags: ["mc:139", "type:meme"], + }, + { + unifiedAssetId: "sweat", + symbol: "SWEAT", + name: "Sweat Economy", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21351.png", + groupedTokens: [ + { + defuseAssetId: "nep141:token.sweat", + address: "token.sweat", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21351.png", + chainName: "near", + bridge: "direct", + symbol: "SWEAT", + name: "Sweat Economy", + }, + { + defuseAssetId: + "nep141:arb-0xca7dec8550f43a5e46e3dfb95801f64280e75b27.omft.near", + address: "0xca7dec8550f43a5e46e3dfb95801f64280e75b27", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21351.png", + chainName: "arbitrum", + bridge: "poa", + symbol: "SWEAT", + name: "Sweat Economy", + }, + { + defuseAssetId: + "nep141:base-0x227d920e20ebac8a40e7d6431b7d724bb64d7245.omft.near", + address: "0x227d920e20ebac8a40e7d6431b7d724bb64d7245", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21351.png", + chainName: "base", + bridge: "poa", + symbol: "SWEAT", + name: "Sweat Economy", + }, + { + defuseAssetId: + "nep141:eth-0xb4b9dc1c77bdbb135ea907fd5a08094d98883a35.omft.near", + address: "0xb4b9dc1c77bdbb135ea907fd5a08094d98883a35", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21351.png", + chainName: "eth", + bridge: "poa", + symbol: "SWEAT", + name: "Sweat Economy", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:56_28V9BijGeZDBFEEtkAcnJo4tPRH4", + address: "0x510Ad22d8C956dCC20f68932861f54A591001283", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21351.png", + chainName: "bsc", + bridge: "hot_omni", + symbol: "SWEAT", + name: "Sweat Economy", + }, + ], + tags: ["mc:571", "aid:sweat"], + }, + { + unifiedAssetId: "sol", + symbol: "SOL", + name: "Solana", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/5426.png", + groupedTokens: [ + { + defuseAssetId: "nep141:sol.omft.near", + type: "native", + address: "native", + decimals: 9, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/5426.png", + chainName: "solana", + bridge: "poa", + symbol: "SOL", + name: "Solana", + }, + { + defuseAssetId: "nep141:sol.omft.near", + address: "native", + decimals: 9, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/5426.png", + chainName: "hyperliquid", + bridge: "poa", + symbol: "SOL", + name: "Solana", + }, + ], + tags: ["mc:6", "tvol:5", "aid:sol"], + }, + { + defuseAssetId: "nep141:doge.omft.near", + type: "native", + address: "native", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/74.png", + chainName: "dogecoin", + bridge: "poa", + symbol: "DOGE", + name: "Dogecoin", + tags: ["mc:8", "type:meme", "tvol:8"], + }, + { + unifiedAssetId: "turbo", + symbol: "TURBO", + name: "Turbo", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:eth-0xa35923162c49cf95e6bf26623385eb431ad920d3.omft.near", + address: "0xA35923162C49cF95e6BF26623385eb431ad920D3", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + chainName: "eth", + bridge: "poa", + symbol: "TURBO", + name: "Turbo", + }, + { + defuseAssetId: + "nep141:a35923162c49cf95e6bf26623385eb431ad920d3.factory.bridge.near", + type: "native", + address: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + chainName: "turbochain", + bridge: "aurora_engine", + symbol: "TURBO", + name: "Turbo", + }, + { + defuseAssetId: + "nep141:a35923162c49cf95e6bf26623385eb431ad920d3.factory.bridge.near", + address: "a35923162c49cf95e6bf26623385eb431ad920d3.factory.bridge.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + chainName: "vertex", + bridge: "aurora_engine", + symbol: "TURBO", + name: "Turbo", + }, + { + defuseAssetId: + "nep141:a35923162c49cf95e6bf26623385eb431ad920d3.factory.bridge.near", + address: "a35923162c49cf95e6bf26623385eb431ad920d3.factory.bridge.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + chainName: "near", + bridge: "direct", + symbol: "TURBO", + name: "Turbo", + }, + { + defuseAssetId: + "nep141:sol-df27d7abcc1c656d4ac3b1399bbfbba1994e6d8c.omft.near", + address: "2Dyzu65QA9zdX1UeE7Gx71k7fiwyUK6sZdrvJ7auq5wm", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + chainName: "solana", + bridge: "poa", + symbol: "TURBO", + name: "Turbo", + }, + ], + tags: ["mc:183", "type:meme", "aid:turbo"], + }, + { + unifiedAssetId: "xrp", + symbol: "XRP", + name: "XRP", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/52.png", + groupedTokens: [ + { + defuseAssetId: "nep141:xrp.omft.near", + type: "native", + address: "native", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/52.png", + chainName: "xrpledger", + bridge: "poa", + symbol: "XRP", + name: "XRP", + }, + { + defuseAssetId: "nep141:xrp.omft.near", + address: "xrp.omft.near", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/52.png", + chainName: "near", + bridge: "direct", + symbol: "XRP", + name: "XRP", + }, + ], + tags: ["mc:4", "tvol:11", "aid:xrp"], + }, + { + defuseAssetId: + "nep141:sol-b9c68f94ec8fd160137af8cdfe5e61cd68e2afba.omft.near", + address: "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/28752.png", + chainName: "solana", + bridge: "poa", + symbol: "WIF", + name: "dogwifhat", + tags: ["mc:112", "type:meme"], + }, + { + defuseAssetId: + "nep141:sol-57d087fd8c460f612f8701f5499ad8b2eec5ab68.omft.near", + address: "ukHH6c7mMyiWCf1b9pnWe25TSpkDDt3H5pQZgZ74J82", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/29870.png", + chainName: "solana", + bridge: "poa", + symbol: "BOME", + name: "BOOK OF MEME", + tags: ["mc:305", "type:meme"], + }, + { + defuseAssetId: "nep141:blackdragon.tkn.near", + address: "blackdragon.tkn.near", + decimals: 24, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/29627.png", + chainName: "near", + bridge: "direct", + symbol: "BLACKDRAGON", + name: "Black Dragon", + tags: ["mc:4666", "type:meme"], + }, + { + defuseAssetId: "nep141:token.0xshitzu.near", + address: "token.0xshitzu.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/19354.png", + chainName: "near", + bridge: "direct", + symbol: "SHITZU", + name: "Shitzu", + tags: ["mc:999999", "type:meme"], + }, + { + defuseAssetId: "nep141:purge-558.meme-cooking.near", + address: "purge-558.meme-cooking.near", + decimals: 18, + icon: "data:image/png;base64,UklGRrIDAABXRUJQVlA4IKYDAAAwGACdASpgAGAAP7G6zmc8ryknvH94A5A2CWoAzkCCqaGFPaS9yv83xxkQvw+Konsv/3wkCUUQ1Oq2Qz9qOOkUY1hDSymYmVqiZagBtpTgBjSXnvmiIWVEkKtAewltk9gBFQ6x5KBAnSChG+08xYO4vyI2YizvPlNVV2Z5ypjEyb8YWAHmL/fHe4LBHR7y8u6lcrQ9v7tj92poQcgjyrtb8Ejwv0VtC51uD3geQjzhIi2RVOM2qzWb+DyZ6RPRrMkJKdLFKUDPMJNAAPJv5vhOy7BgcCIMMJ1XglA8W3PstAv/VFDmqQSf03x6lmEw7drRJkAkEZS1o1Zxi7vuxWme5dlaFsep8L93ni75ZuC1ac5zBIXVzqkwXj1Y5rAah85aVfbUVN0ZSqv5RroDzs1MpiZ33/eqXG+udld11eDn4vxkjCDziWOa0JwTTpXYpwRGIFwGCwka81dIvk1w8SM7BbS0ad83FcM32tBX9CfS1CIu3xkT8UFENC9BpdZiosh6aLBBNFZJRAEcFBF9cuV2vMxzzmDEDm8nzZ76nyZSVgD+r2CP6DwWqABDqUwX48V2tpjvD7BgGSwsCjKCTTzYdBuWTXOMwz53jD2M6kN6bUr4e6ICJgv4GygYwCTs4lWdn5LXyMaDEQiUGn2V3T/KTMlzGpd9sRQyguh6RuYArudcezBDrN8lbmTrFFe2eGR7qEdySQn/lJg5Z5gkphPICr1KkZSepuAeF21pT5jAcB6MS/0KU7N/ahGT3od/0TGzW+0GGpoVWmbaxupLdGFAHfHhvrLl8T3XyuxUkl8mkFv6JFvPVwomr4yv0GVgg7CcOxBHhJKMbRl7VqWORgeyfEzPpSiv87l6326/Txg/emIFICrtnOcXcr46GBT/jNdDgdlsMOHD6QiArvwtrUrcJTyv3gzyrO4MfSuwJTgeTYSDud8rH+Fyh2qDhKumJjVcI3kS5r1tTMi/9XF8y1uFGYLPkG/Ra/eYEGug5YFR+9hIlnHTmusGOyPdhCSnO4eXz3hDtGLTIpaqhaMmhopxRNdneBhSnPSIGgL1r4B1jG760bJqMCCcNNNNl6Hh6cuNQaoGnwlZ6vsXe26i89ALMz4TZk/R6MvVbGAP/6tdGIPdB7WQa8bBg3/CxmnfKnMGwjbk/iXNOSsmjGYkKWEmsY9RIrKaGTAibzrCnC32H3Y9HedSxq67ACnzFPVEbKP2O/2Z5p4S+ro6rLuHAdETfSIGcAAA", + chainName: "near", + bridge: "direct", + symbol: "PURGE", + name: "Forgive Me Father", + tags: ["mc:999999", "type:meme"], + }, + { + defuseAssetId: "nep141:token.burrow.near", + address: "token.burrow.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/20604.png", + chainName: "near", + bridge: "direct", + symbol: "BRRR", + name: "Burrow", + tags: ["mc:6091"], + }, + { + defuseAssetId: "nep141:abg-966.meme-cooking.near", + address: "abg-966.meme-cooking.near", + decimals: 18, + icon: "data:image/png;base64,UklGRvQAAABXRUJQVlA4IOgAAADQCgCdASpgAGAAP9Hg622/tjKqKdRqO/A6CWcA1Er9hfpalM0KjtQ3QolBZ0DnFkdZsShp72kk1LVeIHWCpNrbxil8dJpNCM9b1CZa4mOf7XgxcsJKQUYldLsGu2kW8AD+59NNqUjGXZSNo958Qn3F8SUFLm4pjEffyYQfmDlTwNDx2xo5ikBuCess5ZsoPg8R5Ah37d1DNsfg8BvWhgVSLFDX+dLKBbuT9bzxz5Z4nil4PnUAbh5Iasayl/ia08ZjHQj0KhYntw4l4TrPWkp0njlSWPg2xwoZ564qYl13AGAjvunKR5AA", + chainName: "near", + bridge: "direct", + symbol: "ABG", + name: "Asian Girl Boss", + tags: ["mc:999999", "type:meme"], + }, + { + defuseAssetId: "nep141:noear-324.meme-cooking.near", + address: "noear-324.meme-cooking.near", + decimals: 18, + icon: "data:image/png;base64,UklGRngCAABXRUJQVlA4IGwCAABQEgCdASpgAGAAP83U22c/tCunsPycO/A5iWwAyRGrVKi/U7KnSqpEPDSRCDGcwAaoinEHq7dsJf0zolbSY81ZE7ONfKGLcStEMwiyGADz9rGhOo+63MUC/qPniOnANlHdRKDsejjCqUj0Up7z3zrQkfDbrgtTSW236t7K1sYpqNzqwWJRv3VW+1RDAagReGZSzxMHNfFqucIhoAD+6SiwWMdyfpdWWgixevAFIGXl/gL15AHcPU1/6t9inv65LQ1Q3X/Fr2+i1AyW6NmIlu1ZdBdg2YRRQscvLMBkj43Is/Xl8BthEhMn3i7bg9YekHrVGvVY0NxDRpAXz0JyK18tuaXRLp/pcjWxWz9We1fh6HXhC95EPRdSTjQWu+5SaraUI52YC9GQY9en1LpE4YcuVDL3rR3FSnr/0uS5pWdszjhuCciOFRuD0tNSnhLTbvCscTDUqlkc30f0jqN25O+JsFwloOsJRp2P60J/KUundPUzKUP2G7GxaOwUVlq/v5oSRxmZlVG6ZVy3043WHjTfnAlBPcTxREaQsTOjcg4S25EgudiBhWr3GYmttx0CKru7Lsfn80PhyqgWgEbIvLZjBftaj7wb9UodqeJ47OCM/DFrPR3/t2JAv7H+dIIvwKbUI/YSTiMg4V7rb9hNPZ06OZskoWd5RbYj7y16zqS3U8/O2DRclC5tdT66/iE6xofHOwAlNZP2wi5XdtmWUA6zV/qsS99+jAvNu2G4/u0dRGD3RU5mvY06KqOeoWEuaSrgEjn266CEWhJwNRrIqmovWEgYZn+7HSzyGzGeo94ZolZ/IDIuZ+fE8I0AAA==", + chainName: "near", + bridge: "direct", + symbol: "NOEAR", + name: "NOEAR", + tags: ["mc:999999", "type:meme"], + }, + { + defuseAssetId: "nep141:token.v2.ref-finance.near", + address: "token.v2.ref-finance.near", + decimals: 18, + icon: "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A", + chainName: "near", + bridge: "direct", + symbol: "REF", + name: "Ref Finance", + tags: ["mc:1452"], + }, + { + defuseAssetId: "nep141:mpdao-token.near", + address: "mpdao-token.near", + decimals: 6, + icon: "data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e", + chainName: "near", + bridge: "direct", + symbol: "mpDAO", + name: "Meta DAO Governance Token", + tags: ["mc:999999"], + }, + { + defuseAssetId: "nep141:gnear-229.meme-cooking.near", + address: "gnear-229.meme-cooking.near", + decimals: 18, + icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNiAzNiI+PHBhdGggZmlsbD0iIzNFNzIxRCIgZD0iTTEyLjQzNCAyOS44MzNjLjYyNi02LjcwOC00LjQxNy03LjU0Mi02LjQxNy02LjA4My0xLjA5Ny44LTEuMzUzIDIuMzIzLS40NzkgMS41MjEgMS41NDItMS40MTYgMi4wODMtLjM3NS45MTcuMzc1cy0xLjM3NSAyLjE0NS0uMDgzIDEuMTg4YzEuMjkyLS45NTggMS42NDYtLjMzNC42NDYuODk1LS42MDUuNzQ0LjA0MiAxLjQzOCAxLjE2Ny0uMDYyLjkzOC0xLjI1MSAzLjItMS4yOTQgMi42NjIgMi45OS0uMjIyIDEuNzU2IDEuNDUzLjYwOCAxLjU4Ny0uODI0em03Ljk0MS0yMS4wMjJjLS41ODMtMy41LTEuMTI1LTUuMjQ4LTQuNjI1LTUuODMycy02LjQxNyAxLjc1LTYuNDE3IDEuNzUuNTgzLTMuNSAyLjMzMy00LjY2N2MuNjg2LS40NTggMS4xNjcgMS43NSAxLjc1IDEuNzVzMS4xNjctMS43NSAyLjkxNy0xLjc1Yy41ODMgMCAuNTgzIDEuNzUgMS4xNjcgMS43NS41ODMgMCAyLjI0My0uNTc3IDIuMzMzIDAgLjEyNi44MTItLjE2NyAxLjcyOS4yOTIgMi4xMDRzMS41NTMtLjE0OCAxLjkwMS40ODljLjM0OS42MzYtLjYxIDEuNTUzLS41MjYgMS45N3MuNzE5LjU4My41MjYgMS4zNzUtLjY1LjgzMy0uNjkyIDEuNDE3Ljg4NSAxLjA4MS42OTIgMS42ODZjLS4xOTIuNjA2LS42NTEuNjg4LS44NTkgMS40NTktLjIwOC43NzEuNTQxLjY0OS4zMzMgMS40MzktLjIwOC43OS0uOTU4Ljk5MS0xLjIwOCAxLjc2Ni0uMjUuNzc0LjY2Ni45NDEuMjA4IDEuNjkxcy0xLjI5MS44NzUtMS4zMzMgMS4zMzMuMjA5LjgxOC4wNDIgMS41NTVjLS4xNjcuNzM2LTEuMTI2LjM2Mi0xLjIwOS45NDVzLjIwOS44NzUuMjA5IDEuNTgzLS43MDkuODM0LS42MjUgMS41NDIuNzUuMTY3IDEuMTY3IDEtLjI0OSAxLjU4My4yMDkgMi4wODMgMS4wODMtLjY2NyAxLjcwOC0uMjVjLjYyNS40MTcuNjc3IDEuMjUgMS4zNTkgMS4zNzVzLjg5MS0xLjI5MiAxLjM5MS0xLjI1IDEuNjI1LjcwOSAyLjIwOC40MTcuNTQxLTEuNDU5IDEtMS45NTkgMS4wNDItLjA0MSAxLjQ1OC0uNTgzLS4xNDUtMS4xNzUtLjA2Mi0xLjk2Ny44NTQtMS4yNDEuODEyLTEuODY2LS42NjctLjYyNS0uOTE3LTEuMjkyLjQ1OC0xLjI1LjIwOC0xLjg3NS0xLjMzMi0uODMzLTEuMjkxLTEuNDU4LjQ1OS0xLjMzMy4yNS0yLjA0Mi0xLjA4NC0xLjE2Ni0xLjA0Mi0xLjcwNy40OTktMS4yNS41ODMtMS42NDYtLjc0OS0uODEyLS42NjYtMS40NzkuNjI0LS42MjEuODMyLTEuMjIzYy4yMDgtLjYwMi0uNzQ5LS45MDEtLjI0OS0xLjY3MnMuNzUxLS4yNyAxLjE2Ny0uNjg4Yy40MTYtLjQxNy0uMDAxLTEuMzM0LjQxNi0xLjU0Mi40MTctLjIwOCAxLjI1LS4wNDIgMS42NjctLjMzM3MuNDE3LS43MDguODc1LS44NzVjLjQ1OC0uMTY3IDEuMDQyLjU0MiAxLjQxNy41NDJzMS4wNDEtLjcwOCAxLjU0MS0uNTQyYy41LjE2NyAxLjU4NCAxLjMzMy45MTcgMS42ODhzLTUuNzUxLjYwNS01Ljc5MiAyLjkzOCAyLjc5MyAxMi45MTcgMS45NTkgMTUuNTgzLTQuMjkxIDguMzM0LTguMjUgNy4yNWMtMy45NTktMS4wODQtOC42NjctMy41MDEtNy41NDItNy4yMDkgMS4xMjUtMy43MDkgNC43NDktMTEuMjk2IDUuNDU4LTE0Ljc3M3oiLz48cGF0aCBmaWxsPSIjNzdCMjU1IiBkPSJNMjEgNy44OTdjMCAzLjk3OC0yLjM4MiA4LjE0NC01LjgzMyA3LjU2Ni01LjMyMy0uODktNS42MDYtMi41ODctNi40MTctMS41NDYtMi45MTcgMy43NDMtNC42NDQtLjQ4NS01LjMwNy0xLjE4NkMzLjI3NiAxMi41NTUgMCAxMS41OSAwIDkuNzQ0YzAtMS4xOTcgMS43NS0yLjQxOCAyLjkxNy0xLjIzMSAxLjcyMi0uMDQzIDguMTY3LTYuMTU2IDEyLjI1LTYuMTU2QzE5LjI1IDIuMzU2IDIxIDUuNDM1IDIxIDcuODk3eiIvPjxwYXRoIGZpbGw9IiMyOTJGMzMiIGQ9Ik0xNC41ODMgNy4wNjJjMCAuNjQ0LS41MjMgMS4xNjctMS4xNjcgMS4xNjdzLTEuMTY3LS41MjMtMS4xNjctMS4xNjcuNTIzLTEuMTY3IDEuMTY3LTEuMTY3Yy42NDUuMDAxIDEuMTY3LjUyMyAxLjE2NyAxLjE2N3oiLz48cGF0aCBmaWxsPSIjM0U3MjFEIiBkPSJNMi45MTcgMTAuMjcxYzAgLjQ4My0uMzkyLjI5Mi0uODc1LjI5MnMtLjg3NS4xOTEtLjg3NS0uMjkyLjM5Mi0uODc1Ljg3NS0uODc1Ljg3NS4zOTIuODc1Ljg3NXoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNMTEuMDgzIDExLjE0NGMwIC42NDUtLjM5Mi41ODMtLjg3NS41ODNzLS44NzUuMDYxLS44NzUtLjU4M2MwLS42NDQuMzkyLTIuMzMzLjg3NS0yLjMzM3MuODc1IDEuNjg5Ljg3NSAyLjMzM3ptLTIuMzMzLjU4M2MwIC42NDUtLjM5Mi41ODMtLjg3NS41ODMtLjQ4My4wMDEtLjg3NS4wNjItLjg3NS0uNTgzIDAtLjY0NC4zOTItMi4zMzMuODc1LTIuMzMzcy44NzUgMS42ODkuODc1IDIuMzMzeiIvPjxwYXRoIGZpbGw9IiMzRTcyMUQiIGQ9Ik0xMS4wMDEgMTEuMTUyYy0zLjA5NS40NDItNi4yMTUgMS4yMjQtNy41NTggMS41NzkuMTY3LjE3Ny40MDMuNTc5LjcwOSAxLjAyMSAxLjQ3Mi0uMzggNC4yNTMtMS4wNTEgNy4wMTUtMS40NDQuMzE5LS4wNDYuNTQtLjM0Mi40OTUtLjY2MS0uMDQ3LS4zMi0uMzQ0LS41NDItLjY2MS0uNDk1eiIvPjxwYXRoIGZpbGw9IiM3N0IyNTUiIGQ9Ik0yMC45NDYgOC45MzdjMCA0LjM3NS0xLjcxNCA4LjIwMS0yLjk0NiAxMS4xNy0xLjMzMyAzLjIxMi0xIDkgNCA5czYuNTExLTMuMTkxIDctNWMxLjM1OC01LjAyMS0yLTgtMi0xMyAwLTkgOC03IDgtNnMtNi45MzQgMS4zNzQtMyA5UzM2IDM2IDIyIDM2IDggMjcuMTA3IDEwIDIzLjEwN2MxLjQxNi0yLjgzMiA0LTcuMTA3LjUtOS4wNDUtMi4yODItMS4yNjMgMTAuNDQ2LTUuMTI1IDEwLjQ0Ni01LjEyNXoiLz48cGF0aCBmaWxsPSIjM0U3MjFEIiBkPSJNMTEuMzM1IDcuNzcxYy0uMjU2IDAtLjUxMi0uMDk4LS43MDctLjI5My0uMzkxLS4zOTEtLjM5MS0xLjAyMyAwLTEuNDE0LjA4My0uMDgzIDIuMDgxLTIuMDQzIDUuMzc0LTIuMDQzLjU1MiAwIDEgLjQ0OCAxIDFzLS40NDggMS0xIDFjLTIuNDM1IDAtMy45NDUgMS40NDItMy45NiAxLjQ1Ny0uMTk1LjE5NS0uNDUxLjI5My0uNzA3LjI5M3oiLz48cGF0aCBmaWxsPSIjNUM5MTNCIiBkPSJNMTAuNzA4IDI1LjMzM2MuNjI3LTYuNzA4LTUuNDE3LTcuNTQyLTcuNDE3LTYuMDgzLTEuMDk3LjgtMS4zNTMgMi4zMjMtLjQ3OSAxLjUyMSAxLjU0Mi0xLjQxNiAyLjA4My0uMzc1LjkxNy4zNzUtMS4xNjcuNzUtMS4zNzUgMi4xNDYtLjA4MyAxLjE4OHMxLjY0Ni0uMzM0LjY0Ni44OTVjLS42MDUuNzQ0LjA0MiAxLjQzOCAxLjE2Ny0uMDYyLjkzOC0xLjI1MSA0LjItMS4yOTQgMy42NjIgMi45OS0uMjIyIDEuNzU2IDEuNDU0LjYwOCAxLjU4Ny0uODI0eiIvPjwvc3ZnPg==", + chainName: "near", + bridge: "direct", + symbol: "GNEAR", + name: "gnear", + tags: ["mc:999999", "type:meme"], + }, + { + defuseAssetId: + "nep141:gnosis-0x9c58bacc331c9aa871afd802db6379a98e80cedb.omft.near", + address: "0x9c58bacc331c9aa871afd802db6379a98e80cedb", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1659.png", + chainName: "gnosis", + bridge: "poa", + symbol: "GNO", + name: "Gnosis", + tags: ["mc:133", "tvol:9"], + }, + { + defuseAssetId: + "nep141:gnosis-0x177127622c4a00f3d409b75571e12cb3c8973d3c.omft.near", + address: "0x177127622c4a00f3d409b75571e12cb3c8973d3c", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/19269.png", + chainName: "gnosis", + bridge: "poa", + symbol: "COW", + name: "CoW Protocol", + tags: ["mc:266"], + }, + { + defuseAssetId: + "nep141:gnosis-0x4d18815d14fe5c3304e87b3fa18318baa5c23820.omft.near", + address: "0x4d18815d14fe5c3304e87b3fa18318baa5c23820", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21585.png", + chainName: "gnosis", + bridge: "poa", + symbol: "SAFE", + name: "Safe", + tags: ["mc:168"], + }, + { + unifiedAssetId: "hapi", + symbol: "HAPI", + name: "HAPI Protocol", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/8567.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:eth-0xd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.omft.near", + address: "0xD9c2D319Cd7e6177336b0a9c93c21cb48d84Fb54", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/8567.png", + chainName: "eth", + bridge: "poa", + symbol: "HAPI", + name: "HAPI Protocol", + }, + { + defuseAssetId: + "nep141:d9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near", + address: "d9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/8567.png", + chainName: "near", + bridge: "direct", + symbol: "HAPI", + name: "HAPI Protocol", + }, + ], + tags: ["mc:1539", "aid:hapi"], + }, + { + defuseAssetId: "nep141:score.aidols.near", + address: "score.aidols.near", + decimals: 24, + icon: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/wAARCABAAEADAREAAhEBAxEB/9sAQwAOCgsNCwkODQwNEA8OERYkFxYUFBYsICEaJDQuNzYzLjIyOkFTRjo9Tj4yMkhiSU5WWF1eXThFZm1lWmxTW11Z/9sAQwEPEBAWExYqFxcqWTsyO1lZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZ/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzagC1Z2El3ufKxwp9+V+FX/E+1ZVKqhpu+xcYOWvQuCSxteLe3+0OP+Ws/T8FH9c1nyVJ/G7eS/zHzRjsrj/7Yvl4jm8oekShR+go+q0uqv6h7WXcP7ZvjxJN5q+kqhx+oo+q0uit6aB7SXVjTJYXfFxb/ZnP/LWDp+Kn+mKOSrD4Hfyf+YXi91Yp3thLabXyssD/AHJU5Vv8D7GtKdVT02fYmUWipWpJa0+0+1THe2yGMbpH9B/jWVWpyLTd7FwjzPXYsXd15+2ONfLt4+I4x0HufU+9FOlyavVvdhKXNotivWpAUAFABQBZs7v7OWjkXzbaTiSI9CPUeh96xq0ufVaNbMqMrehX1Gz+yTjY2+CQb4n/ALy/4joadKpzrXdbhKNmWpB9l02CAcPN++k+n8I/Ln8aiHv1HPtov1Ll7sVHvqVK6DI3/DmhJqW6e5JECnaFHBY15uOxjo+5Dc6qFD2nvPY6geG9J/59R/323+NeQ8fiP5jr+r0+xVufC1iLy2khiPlb9sseSQRg8+3NbQzGrySjJ69GZSw8bporeJ9F0+x0dp7a3CSB1GdxNaYDF1qtZRm7ozrUoxjdI4uvfOMuxD7XpVxbnl4P38X06MPy5/Cuap7lVT76P9DSOsWg1fjUpkHSMhB9AMf0p4b+En31HW+NopV0GR2vg+6jbT2t9wEqOTj1B714GZ0pKpz9Gepg5Jw5eo/UNO1me+lktb7yoWI2rvIxx9KmjXw0YJThdiqUqrk3F6ENpBrdjqEMt5cSz2qk79jFuMenWrqTwtWm400lL7jNRqwknJ3QvifWrG90l7eCYtLvU7ShHT6ijAYSrSqqcloTXqxlGyOMr3jiL+ic6tAh6Skxn6MCP61zYr+E321+40pfEkM1fnUpnHSQhx9CM/1qsN/CS7Dr/wARsp1uZHT+H9ItrqyS5dpVl3EZR8V4+NxU6dRwVrHo4bDxnDne5Pcapqen30sMUEl1AuNpdCT09RUQw9CtTUpPlY51atObildFvTdcv7m+ihm08xRueXw3HFYV8HRhByjO7HCtOUknGxH4ysoWsVu1ULMjBSQPvA+tXllaSqezexOLprl5jiq9884vaJxqsDnpGTIfooJ/pXNiv4Ul30+80pfGiOQ/adPgnHLRDyZP/ZT+XH4U4e5Uce+q/UqXvQUu2hVroMTrPDt/a2+mLHNPHG+4nDGvFxtCpOreKuj1sJVpxp2ky7b69afap4pZ1Chso/8ACRgd6wngqnIpRXqXHEw5mmy6NZ08dbyH/vquf6pW/lZbr0v5jm/EuuRX0a2tqS0Qbcz4xuPtXq4HBypPnnuefia6n7sdjna9Q4y5EfsumXFweHmHkx/+zH8uPxrmqe/UUO2r/Q0j7sXIp2N0LaUh13wyDbIvqP8AEVpUhzLTdbBTnyvXZk91bGAqyt5kL8pIOjD/AB9qdOpz6PRhOHL6EFaGYUAFABQBYtLUzlmdvLgTmSQ9FH+PtWVSpyKy1b2RcIc3oQahdi6mURrsgjG2NPQe/uetFKnyLXd7hOV3psVK1ILVpevbAoVEsLfejboff2PvWU6alrs+5pCo46botCO0uebecRMf+Wc3H5N0/PFTzzh8av5r/IrkhL4Xb1Hf2Xe9VgaQeqYYfpR9ZpdXYPYVOwDSr3q1u0Y9Xwo/Wj6zS6O4vY1Owhjs7bm5uBMw/wCWUHP5t0/LNLnqT+BW83/kHLGPxO/oVLy+kuQsYVYoF+7EnQe/uferp0lDXd9yZTctOhVrUg//2Q==", + chainName: "near", + bridge: "direct", + symbol: "SCORE", + name: "Trust Score", + tags: [], + }, + { + defuseAssetId: + "nep141:base-0x98d0baa52b2d063e780de12f615f963fe8537553.omft.near", + address: "0x98d0baa52b2D063E780DE12F615f963Fe8537553", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/64x64/35763.png", + chainName: "base", + bridge: "poa", + symbol: "KAITO", + name: "KAITO", + tags: ["mc:158"], + }, + { + defuseAssetId: "nep141:tron.omft.near", + type: "native", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/64x64/1958.png", + chainName: "tron", + bridge: "poa", + symbol: "TRX", + name: "TRX", + tags: ["mc:9"], + }, + { + unifiedAssetId: "cbbtc", + symbol: "cbBTC", + name: "Coinbase Wrapped BTC", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/32994.png", + groupedTokens: [ + { + defuseAssetId: + "nep141:eth-0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf.omft.near", + address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/32994.png", + chainName: "eth", + bridge: "poa", + symbol: "cbBTC", + name: "Coinbase Wrapped BTC", + }, + { + defuseAssetId: + "nep141:base-0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf.omft.near", + address: "0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/32994.png", + chainName: "base", + bridge: "poa", + symbol: "cbBTC", + name: "Coinbase Wrapped BTC", + }, + ], + tags: ["mc:10", "aid:cbbtc"], + }, + { + defuseAssetId: + "nep141:eth-0xfa2b947eec368f42195f24f36d2af29f7c24cec2.omft.near", + address: "0xfa2b947eec368f42195f24f36d2af29f7c24cec2", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/35721.png", + chainName: "eth", + bridge: "poa", + symbol: "USDf", + name: "Falcon USD", + tags: ["mc:221", "type:stablecoin"], + }, + { + defuseAssetId: + "nep141:eth-0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d.omft.near", + address: "0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/36148.png", + chainName: "eth", + bridge: "poa", + symbol: "USD1", + name: "World Liberty Financial USD", + tags: ["mc:47", "type:stablecoin"], + }, + { + defuseAssetId: + "nep141:sol-91914f13d3b54f8126a2824d71632d4b078d7403.omft.near", + address: "CtzPWv73Sn1dMGVU3ZtLv9yWSyUAanBni19YWDaznnkn", + decimals: 8, + icon: "https://near-intents.org/static/icons/token/xbtc.png", + chainName: "solana", + bridge: "poa", + symbol: "xBTC", + name: "OKX Wrapped BTC", + tags: ["mc:159"], // put it after KAITO, so the marketcap might not be correct + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:137_11111111111111111111", + type: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/28321.png", + chainName: "polygon", + bridge: "hot_omni", + symbol: "POL", + name: "POL", + tags: ["mc:43"], + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:56_11111111111111111111", + type: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/1839.png", + chainName: "bsc", + bridge: "hot_omni", + symbol: "BNB", + name: "BNB", + tags: ["mc:4"], + }, + { + defuseAssetId: + "nep141:sol-bb27241c87aa401cc963c360c175dd7ca7035873.omft.near", + address: "EJZJpNa4tDZ3kYdcRZgaAtaKm3fLJ5akmyPkCaKmfWvd", + decimals: 6, + icon: "https://dd.dexscreener.com/ds-data/tokens/solana/EJZJpNa4tDZ3kYdcRZgaAtaKm3fLJ5akmyPkCaKmfWvd.png?size=lg&key=9f72fc", + chainName: "solana", + bridge: "poa", + symbol: "LOUD", + name: "Loud", + tags: ["tvol:6"], + }, + { + defuseAssetId: + "nep141:eth-0xdefa4e8a7bcba345f687a2f1456f5edd9ce97202.omft.near", + address: "0xdeFA4e8a7bcBA345F687a2f1456F5Edd9CE97202", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/64x64/9444.png", + chainName: "eth", + bridge: "poa", + symbol: "KNC", + name: "Kyber Network Crystal v2", + tags: ["mc:461"], + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:1117_", + type: "native", + decimals: 9, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/11419.png", + chainName: "ton", + bridge: "hot_omni", + symbol: "TON", + name: "TON", + tags: ["mc:18"], + }, + { + defuseAssetId: + "nep141:eth-0x2260fac5e5542a773aa44fbcfedf7c193bc2c599.omft.near", + address: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/3717.png", + chainName: "eth", + bridge: "poa", + symbol: "WBTC", + name: "Wrapped Bitcoin", + tags: ["mc:3"], + }, + { + defuseAssetId: "nep141:sui.omft.near", + type: "native", + decimals: 9, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/20947.png", + chainName: "sui", + bridge: "poa", + symbol: "SUI", + name: "SUI", + tags: ["mc:13"], + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:1100_111bzQBB5v7AhLyPMDwS8uJgQV24KaAPXtwyVWu2KXbbfQU6NXRCz", + type: "native", + decimals: 7, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/512.png", + chainName: "stellar", + bridge: "hot_omni", + symbol: "XLM", + name: "Stellar Lumens", + tags: ["mc:3"], + }, + { + unifiedAssetId: "rhea", + symbol: "RHEA", + name: "Rhea", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/37529.png", + groupedTokens: [ + { + defuseAssetId: "nep141:token.rhealab.near", + address: "token.rhealab.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/37529.png", + chainName: "near", + bridge: "direct", + symbol: "RHEA", + name: "Rhea", + }, + { + defuseAssetId: + "nep245:v2_1.omni.hot.tg:56_24S22V8GMmQN8t6PbCdRb3mBewAd", + address: "0x4c067DE26475E1CeFee8b8d1f6E2266b33a2372E", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/37529.png", + chainName: "bsc", + bridge: "hot_omni", + symbol: "RHEA", + name: "Rhea", + }, + ], + tags: ["mc:1452", "aid:rhea"], + }, + { + defuseAssetId: "nep141:cardano.omft.near", + type: "native", + decimals: 6, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/2010.png", + chainName: "cardano", + bridge: "poa", + symbol: "ADA", + name: "ADA", + tags: ["mc:10", "feature:ada"], + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:10_vLAiSt9KfUGKpw5cD3vsSyNYBo7", + address: "0x4200000000000000000000000000000000000042", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/11840.png", + chainName: "optimism", + bridge: "hot_omni", + symbol: "OP", + name: "OP", + tags: ["mc:72"], + }, + { + defuseAssetId: "nep245:v2_1.omni.hot.tg:43114_11111111111111111111", + type: "native", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/5805.png", + chainName: "avalanche", + bridge: "hot_omni", + symbol: "AVAX", + name: "AVAX", + tags: ["mc:16"], + }, + { + unifiedAssetId: "public", + symbol: "PUBLIC", + name: "PublicAI", + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/37728.png", + groupedTokens: [ + { + defuseAssetId: "nep141:token.publicailab.near", + address: "token.publicailab.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/37728.png", + chainName: "near", + bridge: "direct", + symbol: "PUBLIC", + name: "PublicAI", + }, + { + defuseAssetId: + "nep141:sol-1f00bb36e75cfc8e1274c1507cc3054f5b3f3ce1.omft.near", + address: "AXCp86262ZPfpcV9bmtmtnzmJSL5sD99mCVJD4GR9vS", + decimals: 9, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/37728.png", + chainName: "solana", + bridge: "poa", + symbol: "PUBLIC", + name: "PublicAI", + }, + ], + tags: ["aid:public"], + }, + + /** Omni bridgable tokens */ + { + defuseAssetId: + "nep141:aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near", + address: "0xAaAAAA20D9E0e2461697782ef11675f668207961", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/14803.png", + chainName: "eth", + bridge: "near_omni", + symbol: "AURORA (omni)", + name: "Aurora", + tags: ["feature:omni"], + }, + { + defuseAssetId: + "nep141:a35923162c49cf95e6bf26623385eb431ad920d3.factory.bridge.near", + address: "0xA35923162C49cF95e6BF26623385eb431ad920D3", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/24911.png", + chainName: "eth", + bridge: "near_omni", + symbol: "TURBO (omni)", + name: "Turbo", + tags: ["feature:omni"], + }, + { + defuseAssetId: + "nep141:d9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near", + address: "0xD9c2D319Cd7e6177336b0a9c93c21cb48d84Fb54", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/8567.png", + chainName: "eth", + bridge: "near_omni", + symbol: "HAPI (omni)", + name: "HAPI Protocol", + tags: ["feature:omni"], + }, + { + defuseAssetId: "nep141:jambo-1679.meme-cooking.near", + address: "jambo-1679.meme-cooking.near", + decimals: 18, + icon: "data:image/png;base64,UklGRkQBAABXRUJQVlA4IDgBAAAQCwCdASpgAGAAP9Hm7G+/uDGrJXK6a/A6CUAaCoYIhLv0ee1oBKM5x42N42dKobLDTsCYhGUNkfwDk7QAl88U6nWfZL9Hkpc7IvWpxgrLJU+EnNVkjtdJ0YG297yfkBngAP6uEC0f+KHNncCpfEeBQna1Lmy5IgEMdrIk7crLPNuoYsr/1YQNC0PUUqXW2Co1uRyNcwt6n+b1Ebn1H/DYcSwiUdEaGYZESbbXPbsNff2w8CH5nQeZoccZvUg+8+r4kEuBXXr3/NQFKO8dL9mAcys9Gi8Onp0G7LfrIBb2zpz/cS8zXJQiq1GgYlhjE29ixbMEQ/or5FVV6BduaWxGfHVxoCaF46gYWBBmzIfo3AXWkMnNJETVdxe3j1U4aItDFadMunrOpgGCXuabXV5kpEIEJ4RvgAA=", + chainName: "near", + bridge: "direct", + symbol: "JAMBO", + name: "JAMBO", + tags: [], + }, + { + defuseAssetId: "nep141:kat.token0.near", + address: "kat.token0.near", + decimals: 18, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/34150.png", + chainName: "near", + bridge: "direct", + symbol: "KAT", + name: "NEARKAT", + tags: [], + }, + { + defuseAssetId: "nep141:aptos.omft.near", + type: "native", + decimals: 8, + icon: "https://s2.coinmarketcap.com/static/img/coins/128x128/21794.png", + chainName: "aptos", + bridge: "poa", + symbol: "APT", + name: "Aptos", + tags: ["mc:34"], + }, +]; + +export const DEPRECATED_TOKENS: Record = { + "nep141:aurora": true, +}; diff --git a/src/server.ts b/src/server.ts index bb9f73c..ab80080 100644 --- a/src/server.ts +++ b/src/server.ts @@ -15,11 +15,12 @@ import { TransferHistoryParams, } from "./transactions-transfer-history"; import prisma from "./prisma"; -import { tokens } from "./constants/tokens"; +import { LIST_TOKENS, BaseTokenInfo } from "./constants/intents-tokens"; import axios from "axios"; import treasuryRoutes from "./routes/metrics"; import oneclickTreasuryRoutes from "./routes/oneclick-treasury"; import cron from "node-cron"; +import { getBlockchainsOptions } from "./constants/intents-chains"; dotenv.config(); @@ -426,6 +427,132 @@ app.get("/api/search-ft", async (req: Request, res: Response) => { } }); +// Helper function to find token by defuseAssetId +function findTokenByDefuseAssetId(defuseAssetId: string): BaseTokenInfo | null { + for (const token of LIST_TOKENS) { + if ("defuseAssetId" in token && token.defuseAssetId === defuseAssetId) { + return token; + } + if ("groupedTokens" in token) { + const foundToken = token.groupedTokens.find( + (t) => t.defuseAssetId === defuseAssetId + ); + if (foundToken) { + return foundToken; + } + } + } + return null; +} + +app.get( + "/api/token-by-defuse-asset-id", + async (req: Request, res: Response) => { + try { + const { defuseAssetId } = req.query; + + if (!defuseAssetId || typeof defuseAssetId !== "string") { + return res.status(400).json({ error: "defuseAssetId is required" }); + } + + // Split by comma and trim whitespace + const defuseAssetIds = defuseAssetId.split(",").map((id) => id.trim()); + const results = []; + + // Fetch tokens from external API as it has prices + const cacheKey = "intents-chaindefuser-tokens"; + let externalTokens = cache.get(cacheKey); + + if (!externalTokens) { + try { + const response = await axios.get( + "https://api-mng-console.chaindefuser.com/api/tokens", + { timeout: 10000 } + ); + externalTokens = response.data?.items || []; + cache.set(cacheKey, externalTokens, 5 * 60); + console.log( + `Cached ${externalTokens.length} tokens from external API` + ); + } catch (apiError) { + console.warn("External API failed:", apiError); + externalTokens = []; + } + } + + for (const id of defuseAssetIds) { + // Search in external tokens + let token = externalTokens?.find((t: any) => t.defuse_asset_id === id); + + if (token) { + // Get icon from local tokens since external API doesn't provide it + const localToken = findTokenByDefuseAssetId(id); + if (localToken) { + token = { + ...token, + ...localToken, + }; + } + } else { + // Fallback to local tokens list + const localToken = findTokenByDefuseAssetId(id); + if (localToken) { + token = { + ...localToken, + defuse_asset_id: localToken.defuseAssetId, + contract_address: + "address" in localToken ? localToken.address : "native", + decimals: localToken.decimals, + blockchain: localToken.chainName, + symbol: localToken.symbol, + price: null, + price_updated_at: null, + icon: localToken.icon || "", + }; + } + } + + results.push( + token ? token : { error: "Token not found", defuse_asset_id: id } + ); + } + + return res.json(results); + } catch (error) { + console.error("Error fetching tokens by defuseAssetId:", error); + return res.status(500).json({ error: "Internal server error" }); + } + } +); + +app.get("/api/blockchain-by-network", async (req: Request, res: Response) => { + try { + const { network, theme } = req.query; + + if (!network || typeof network !== "string") { + return res.status(400).json({ error: "network is required" }); + } + + // Split by comma and trim whitespace + const networks = network.split(",").map((n) => n.trim()); + const themeParam = (theme as "light" | "dark") || "light"; + const blockchains = getBlockchainsOptions(themeParam); + const results = []; + + for (const net of networks) { + const blockchain = blockchains.find((b) => b.network === net); + results.push( + blockchain || { error: "Blockchain not found", network: net } + ); + } + + return res.json(results); + } catch (error) { + console.error("Error fetching blockchains by network:", error); + return res.status(500).json({ error: "Internal server error" }); + } +}); + app.get("/headers", (req, res) => { res.json({ headers: req.headers }); }); diff --git a/test/server.test.ts b/test/server.test.ts index 24a11b2..aa505df 100644 --- a/test/server.test.ts +++ b/test/server.test.ts @@ -748,4 +748,207 @@ describe("API Endpoints", () => { expect(response.body).toEqual({}); // API returns empty object when no results }); }); + + describe("GET /api/token-by-defuse-asset-id", () => { + it("should return token data for valid defuse asset ID", async () => { + const mockToken = { + defuse_asset_id: "nep141:some-other-token.near", + contract_address: "some-other-token.near", + decimals: 18, + blockchain: "near", + symbol: "SOT", + price: "1.50", + price_updated_at: "2025-09-21T10:36:30.252Z", + icon: "https://example.com/icon.png", + }; + + // Mock the external API response + axios.get = jest.fn().mockResolvedValue({ + data: { items: [mockToken] }, + }); + + const response = await request(app).get( + "/api/token-by-defuse-asset-id?defuseAssetId=nep141:some-other-token.near" + ); + + expect(response.status).toBe(200); + expect(response.body).toHaveLength(1); + expect(response.body[0]).toMatchObject({ + defuse_asset_id: "nep141:some-other-token.near", + contract_address: "some-other-token.near", + decimals: 18, + blockchain: "near", + symbol: "SOT", // External API data preserved since no local token exists + price: "1.50", + price_updated_at: "2025-09-21T10:36:30.252Z", + }); + // Should not have local token properties since this token doesn't exist locally + expect(response.body[0]).not.toHaveProperty("address"); + expect(response.body[0]).not.toHaveProperty("bridge"); + expect(response.body[0]).not.toHaveProperty("chainName"); + expect(response.body[0]).not.toHaveProperty("defuseAssetId"); + expect(response.body[0]).not.toHaveProperty("name"); + }); + + it("should return multiple tokens for comma-separated IDs", async () => { + const mockTokens = [ + { + defuse_asset_id: "nep141:token1.near", + contract_address: "token1.near", + decimals: 18, + blockchain: "near", + symbol: "T1", + price: "2.00", + price_updated_at: "2025-09-21T10:36:30.252Z", + }, + { + defuse_asset_id: "nep141:token2.near", + contract_address: "token2.near", + decimals: 6, + blockchain: "near", + symbol: "T2", + price: "0.50", + price_updated_at: "2025-09-21T10:36:30.252Z", + }, + ]; + + axios.get = jest.fn().mockResolvedValue({ + data: { items: mockTokens }, + }); + + const response = await request(app).get( + "/api/token-by-defuse-asset-id?defuseAssetId=nep141:token1.near,nep141:token2.near" + ); + + expect(response.status).toBe(200); + expect(response.body).toHaveLength(2); + expect(response.body[0]).toMatchObject({ + defuse_asset_id: "nep141:token1.near", + contract_address: "token1.near", + decimals: 18, + blockchain: "near", + symbol: "T1", + price: "2.00", + price_updated_at: "2025-09-21T10:36:30.252Z", + }); + expect(response.body[1]).toMatchObject({ + defuse_asset_id: "nep141:token2.near", + contract_address: "token2.near", + decimals: 6, + blockchain: "near", + symbol: "T2", + price: "0.50", + price_updated_at: "2025-09-21T10:36:30.252Z", + }); + }); + + it("should return 400 when defuseAssetId is missing", async () => { + const response = await request(app).get("/api/token-by-defuse-asset-id"); + + expect(response.status).toBe(400); + expect(response.body).toEqual({ error: "defuseAssetId is required" }); + }); + + it("should return error for tokens not found", async () => { + axios.get = jest.fn().mockResolvedValue({ + data: { items: [] }, + }); + + const response = await request(app).get( + "/api/token-by-defuse-asset-id?defuseAssetId=invalid-id" + ); + + expect(response.status).toBe(200); + expect(response.body).toEqual([ + { error: "Token not found", defuse_asset_id: "invalid-id" }, + ]); + }); + + it("should handle external API failure gracefully", async () => { + axios.get = jest.fn().mockRejectedValue(new Error("API Error")); + + const response = await request(app).get( + "/api/token-by-defuse-asset-id?defuseAssetId=nep141:some-unknown-token.near" + ); + + expect(response.status).toBe(200); + expect(response.body).toEqual([ + { + error: "Token not found", + defuse_asset_id: "nep141:some-unknown-token.near", + }, + ]); + }); + }); + + describe("GET /api/blockchain-by-network", () => { + it("should return blockchain data for valid network", async () => { + const response = await request(app).get( + "/api/blockchain-by-network?network=near" + ); + + expect(response.status).toBe(200); + expect(response.body).toHaveLength(1); + expect(response.body[0]).toMatchObject({ + name: "Near", + network: "near", + icon: expect.any(String), + }); + }); + + it("should return multiple blockchains for comma-separated networks", async () => { + const response = await request(app).get( + "/api/blockchain-by-network?network=near,eth" + ); + + expect(response.status).toBe(200); + expect(response.body).toHaveLength(2); + expect(response.body[0]).toMatchObject({ network: "near" }); + expect(response.body[1]).toMatchObject({ network: "eth" }); + }); + + it("should return 400 when network is missing", async () => { + const response = await request(app).get("/api/blockchain-by-network"); + + expect(response.status).toBe(400); + expect(response.body).toEqual({ error: "network is required" }); + }); + + it("should return error for networks not found", async () => { + const response = await request(app).get( + "/api/blockchain-by-network?network=invalid-network" + ); + + expect(response.status).toBe(200); + expect(response.body).toEqual([ + { error: "Blockchain not found", network: "invalid-network" }, + ]); + }); + + it("should use dark theme when specified", async () => { + const response = await request(app).get( + "/api/blockchain-by-network?network=near&theme=dark" + ); + + expect(response.status).toBe(200); + expect(response.body[0]).toMatchObject({ + name: "Near", + network: "near", + icon: expect.any(String), + }); + }); + + it("should default to light theme when theme not specified", async () => { + const response = await request(app).get( + "/api/blockchain-by-network?network=near" + ); + + expect(response.status).toBe(200); + expect(response.body[0]).toMatchObject({ + name: "Near", + network: "near", + icon: expect.any(String), + }); + }); + }); });