diff --git a/.env b/.env index 859d961f7c0..496c12d667c 100644 --- a/.env +++ b/.env @@ -123,6 +123,7 @@ VITE_ABSOLUTE_URL_PREFIX=https://app.shapeshift.com # Dev tools VITE_FEATURE_PERFORMANCE_PROFILER=false +VITE_FEATURE_ROBINHOOD=false # chat woot VITE_CHATWOOT_TOKEN=jmoXp9BPMSPEYHeJX5YKT15Q @@ -218,13 +219,14 @@ VITE_NEAR_NODE_URL_FALLBACK_1=https://near.lava.build VITE_NEAR_NODE_URL_FALLBACK_2=https://rpc.fastnear.com VITE_PLASMA_NODE_URL=https://rpc.plasma.to VITE_PLUME_NODE_URL=https://rpc.plume.org +VITE_ROBINHOOD_NODE_URL=https://rpc.mainnet.chain.robinhood.com VITE_SCROLL_NODE_URL=https://rpc.scroll.io VITE_SEI_NODE_URL=https://evm-rpc.sei-apis.com VITE_SONEIUM_NODE_URL=https://rpc.soneium.org VITE_SONIC_NODE_URL=https://rpc.soniclabs.com VITE_STARKNET_NODE_URL=https://rpc.starknet.lava.build VITE_STORY_NODE_URL=https://mainnet.storyrpc.io -VITE_SUI_NODE_URL=https://fullnode.mainnet.sui.io:443 +VITE_SUI_NODE_URL=https://sui-rpc.publicnode.com VITE_TON_NODE_URL=https://toncenter.com/api/v2/jsonRPC VITE_TRON_GRID_API_KEY=17430894-392e-44e8-b015-4a9c4fe17546 VITE_TRON_NODE_URL=https://api.trongrid.io @@ -328,6 +330,7 @@ VITE_JITO_BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf # relay VITE_RELAY_API_URL=https://api.relay.link +VITE_RELAY_API_KEY=d62274fb-1edd-481a-b952-632896ebf830 # affiliate revenue VITE_AFFILIATE_REVENUE_URL=https://api.revenue.shapeshift.com @@ -352,7 +355,8 @@ VITE_YIELD_XYZ_API_KEY=06903960-e442-4870-81eb-03ff3ad4c035 # Across Protocol VITE_ACROSS_API_URL=https://app.across.to/api -VITE_ACROSS_INTEGRATOR_ID= +VITE_ACROSS_INTEGRATOR_ID=0x021c +VITE_ACROSS_API_KEY=acx_UsQJEgNekMMkqXP9KMD3Ol7hqRrP8Yrf # deBridge DLN VITE_DEBRIDGE_API_URL=https://dln.debridge.finance/v1.0 diff --git a/.env.development b/.env.development index 9f5bd818cf2..dd24b286503 100644 --- a/.env.development +++ b/.env.development @@ -38,6 +38,7 @@ VITE_FEATURE_YIELD_MULTI_ACCOUNT=true VITE_FEATURE_AGENTIC_CHAT=true VITE_FEATURE_MM_NATIVE_MULTICHAIN=true VITE_FEATURE_NOTIFICATIONS_WEBSERVICES=true +VITE_FEATURE_ROBINHOOD=true # mixpanel VITE_MIXPANEL_TOKEN=a867ce40912a6b7d01d088cf62b0e1ff diff --git a/chains/robinhood.json b/chains/robinhood.json new file mode 100644 index 00000000000..8da302e3391 --- /dev/null +++ b/chains/robinhood.json @@ -0,0 +1,30 @@ +{ + "camelName": "robinhood", + "pascalName": "Robinhood", + "upperName": "ROBINHOOD", + "chainId": 4663, + "viemChainName": "robinhood", + "nativeSymbol": "ETH", + "nativeName": "Ethereum", + "nativePrecision": 18, + "isNativeEth": true, + "color": "#00C805", + "networkIconUrl": "https://assets.relay.link/icons/4663/light.png", + "nativeIconUrl": "https://assets.coingecko.com/coins/images/279/large/ethereum.png", + "explorerUrl": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "rpcUrl": "https://rpc.mainnet.chain.robinhood.com", + "publicRpcUrls": ["https://rpc.mainnet.chain.robinhood.com", "https://robinhood-rpc.publicnode.com"], + "coingeckoPlatform": "robinhood", + "wrappedNativeAddress": "0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73", + "relatedAssetKey": "eip155:1/slip44:60", + "shortName": "RH", + "swappers": { + "relay": { "supported": true, "relayChainId": 4663 }, + "across": { "supported": true }, + "portals": { "supported": false }, + "zerion": { "supported": false }, + "yieldxyz": { "supported": false } + } +} diff --git a/headers/csps/chains/robinhood.ts b/headers/csps/chains/robinhood.ts new file mode 100644 index 00000000000..16ab51fcfb9 --- /dev/null +++ b/headers/csps/chains/robinhood.ts @@ -0,0 +1,11 @@ +import { loadEnv } from 'vite' + +import { PUBLIC_RPC_URLS } from '../../../packages/contracts/src/publicRpcUrls' +import type { Csp } from '../../types' + +const mode = process.env.MODE ?? process.env.NODE_ENV ?? 'development' +const env = loadEnv(mode, process.cwd(), '') + +export const csp: Csp = { + 'connect-src': [env.VITE_ROBINHOOD_NODE_URL, ...PUBLIC_RPC_URLS.robinhood], +} diff --git a/headers/csps/chains/sui.ts b/headers/csps/chains/sui.ts index 7d668c2a1f2..d5459cd7944 100644 --- a/headers/csps/chains/sui.ts +++ b/headers/csps/chains/sui.ts @@ -10,6 +10,6 @@ export const csp: Csp = { env.VITE_SUI_NODE_URL, 'https://mainnet.suiet.app/', 'https://api-sui.cetus.zone', - 'https://fullnode.mainnet.sui.io/', + 'https://sui-rpc.publicnode.com/', ], } diff --git a/headers/csps/index.ts b/headers/csps/index.ts index 7213d29df57..6f42cc75171 100644 --- a/headers/csps/index.ts +++ b/headers/csps/index.ts @@ -37,6 +37,7 @@ import { csp as optimism } from './chains/optimism' import { csp as plasma } from './chains/plasma' import { csp as plume } from './chains/plume' import { csp as polygon } from './chains/polygon' +import { csp as robinhood } from './chains/robinhood' import { csp as scroll } from './chains/scroll' import { csp as sei } from './chains/sei' import { csp as solana } from './chains/solana' @@ -208,4 +209,5 @@ export const csps = [ railway, discord, yieldxyz, + robinhood, ] diff --git a/package.json b/package.json index c02700bc844..bcf7d10ea59 100644 --- a/package.json +++ b/package.json @@ -239,7 +239,7 @@ "use-long-press": "^3.3.0", "uuid": "^9.0.0", "vaul": "^1.1.2", - "viem": "2.43.5", + "viem": "2.55.11", "wagmi": "^2.9.2", "web-vitals": "^2.1.4", "wouter": "^3.6.0", @@ -382,7 +382,7 @@ "react": "19.2.4", "react-dom": "19.2.4", "@testing-library/dom": "8.20.1", - "viem": "2.43.5", + "viem": "2.55.11", "msw": "*", "ethers": "*", "starknet": "9.4.0", diff --git a/packages/caip/src/adapters/coingecko/generated/eip155_4663/adapter.json b/packages/caip/src/adapters/coingecko/generated/eip155_4663/adapter.json new file mode 100644 index 00000000000..f31448a0abc --- /dev/null +++ b/packages/caip/src/adapters/coingecko/generated/eip155_4663/adapter.json @@ -0,0 +1 @@ +{"eip155:4663/slip44:60":"ethereum","eip155:4663/erc20:0x6365fd27ddefc42f50895994b67b04fab5f08d5e":"1-is-all-you-need-2","eip155:4663/erc20:0xd4052415613b34af236024b895574c467f65b6dd":"4663-token","eip155:4663/erc20:0xf82119ebd01eb6ab67105c9536a713d61a25cf9f":"adex","eip155:4663/erc20:0x6eda83fc299c10d474068a7e69771c809bcbbba3":"agentos","eip155:4663/erc20:0x1e0aaaf3fdb5c0de3574d215e7081177ec0f96a3":"ai-pin","eip155:4663/erc20:0xad25ac6c84d497db898fa1e8387bf6af3532a1c4":"alibaba-robinhood-tokenized-stock","eip155:4663/erc20:0x2e0847e8910a9732eb3fb1bb4b70a580adad4fe3":"alphabet-class-a-robinhood-tokenized-stock","eip155:4663/erc20:0x12f190a9f9d7d37a250758b26824b97ce941bf54":"amazon-robinhood-tokenized-stock","eip155:4663/erc20:0x86923f96303d656e4aa86d9d42d1e57ad2023fdc":"amd-robinhood-tokenized-stock","eip155:4663/erc20:0x9727b500ac8726c716f018e5d3ca871481245065":"ansem-cat","eip155:4663/erc20:0xaf3d76f1834a1d425780943c99ea8a608f8a93f9":"apple-robinhood-tokenized-stock","eip155:4663/erc20:0xb8dbf92f9741c9ac1c32115e78581f23509916fd":"applied-digital-robinhood-tokenized-stock","eip155:4663/erc20:0x36046893810a7e7fce501229d57dc3fc8c8716d0":"applied-materials-robinhood-tokenized-stock","eip155:4663/erc20:0x521cf887e6531c6f667b5bc4d896e5d9bfe8eb2e":"applied-optoelectronics-robinhood-tokenized-stock","eip155:4663/erc20:0x3d0a2e4763eee58a7c631acf7ff13ad6398a5141":"archerautomates","eip155:4663/erc20:0xf2915d1e3c1b0c769d0c756ec43f1c1f6c99cd03":"arrow-2","eip155:4663/erc20:0x47f93d52cbec7c6d2cfc080e154002370a60daea":"asml-holding-nv-robinhood-tokenized-stock","eip155:4663/erc20:0x1af6446f07eb1d97c546afc8c9544cbdf3ad5137":"ast-spacemobile-robinhood-tokenized-stock","eip155:4663/erc20:0x57a1ab439e8c24b90ecc6534c05621d6e68ed35a":"baby-cash-cat","eip155:4663/erc20:0x7168563b0e70124f0c7c0cf2f13a8d1861baf4a5":"backed","eip155:4663/erc20:0x178e54df3d091ee4d0b2534742ef9e3692b76526":"bankercoin-2","eip155:4663/erc20:0x822cc93ffd030293e9842c30bbd678f530701867":"bloom-energy-robinhood-tokenized-stock","eip155:4663/erc20:0x8b7daf8ca650ab30df4c686e1e3689e9248732c6":"boardwalk","eip155:4663/erc20:0xbd8e0244791b67547b4ae8cfc9463ab19f6e9c08":"boe-2","eip155:4663/erc20:0x4d21483a44bf67a86b77e3da301411880797d452":"boeing-robinhood-tokenized-stock","eip155:4663/erc20:0x839b8bd8ed3d2f1be5a709ce99144337296681c7":"booh","eip155:4663/erc20:0x9fb101579e716b2571ab069c2718cd06b69ffdd7":"bow-2","eip155:4663/erc20:0xc23d7218512c672ba6e87b7f8bcce53355f55931":"bowline-by-virtuals","eip155:4663/erc20:0xaf4c10fef50059d1e3e8ab1c80e46db6a76098b4":"bowyer-app-by-virtuals","eip155:4663/erc20:0x156e175dd063a8ce274c50654ef40e0032b3fbcf":"broadcom-robinhood-tokenized-stock","eip155:4663/erc20:0xe555853720737512e3f8ccf64159a087b4da51db":"bull-in-hood","eip155:4663/erc20:0x15e8b90d9444d1a5e9b39f5c9547a104ae69ba11":"buy-and-retire-3","eip155:4663/erc20:0x0e8720b8cd84f95b4b6696adbfa8063c4b8b94f2":"buy-button","eip155:4663/erc20:0xc79d46d716b33b463b3a6574d6ee26009abf4e9a":"bycocket-2","eip155:4663/erc20:0x9651342cea770ae9a2969ba2a52611523146aef9":"carnival-corporation-robinhood-tokenized-stock","eip155:4663/erc20:0x020bfc650a365f8bb26819deaabf3e21291018b4":"cash-cat","eip155:4663/erc20:0xa3bfbccd4aeec8ac56b17fee3e02dd2c60722ccc":"cashcat-strategy","eip155:4663/erc20:0x9e93ea35be23ab0e1e20ed6b62d3b1cbd5234a83":"cash-dog","eip155:4663/erc20:0xe0cc2751249b797871b694ad3779755b7d4b1111":"cashdog-2","eip155:4663/erc20:0x5a283986b204326344a1cc04b52b37f1af54ef72":"cash-dog-in-hood","eip155:4663/erc20:0x8bada99332848483995ef9c61f4bffced1bafeed":"catcoin-5","eip155:4663/erc20:0xc0b57404486bae3decd0f47c49406214a303dac8":"catwifcap-2","eip155:4663/erc20:0x8cf07c5a878945185d327aaa6e33faa95f95e7bf":"celsius-robinhood-tokenized-stock","eip155:4663/erc20:0x5c90450bbb4273d7b2f17cf6917aeb237a569679":"cerebras-systems-robinhood-tokenized-stock","eip155:4663/erc20:0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5":"circle-internet-group-robinhood-tokenized-stock","eip155:4663/erc20:0x65b445518b1ad0d9c597731494f5bd2991b7ec08":"clawbank","eip155:4663/erc20:0xcbb95bbf36099d34da091dc6fa6f49efa257cee3":"cleanspark-robinhood-tokenized-stock","eip155:4663/erc20:0x3aaa874b93612bf3f683b85e2739e81eab38321e":"coco-4","eip155:4663/erc20:0x6330d8c3178a418788df01a47479c0ce7ccf450b":"coinbase-robinhood-tokenized-stock","eip155:4663/erc20:0xdcc34bdd5d3c30237303b95d2f59cc29437b5c74":"copper-pot-of-wealth","eip155:4663/erc20:0x5f10a1c971b69e47e059e1dc91901b59b3fb49c3":"coreweave-robinhood-tokenized-stock","eip155:4663/erc20:0x7c04e6a3368f2a1de3874f0e80d2e0a1a9915da6":"corning-robinhood-tokenized-stock","eip155:4663/erc20:0x4ea005168d7f09a7a0ba9d1def21a479950e44c2":"costco-robinhood-tokenized-stock","eip155:4663/erc20:0xcf8b02128d2803b3df114e277094cc1096294b5c":"crash-cat","eip155:4663/erc20:0xea72ecca2d0f6bfa1394dbbcff85b52cd4233931":"crowdstrike-holdings-robinhood-tokenized-stock","eip155:4663/erc20:0xd1d4bbe54fdeafc83693420c5ade4a2abe6a90da":"dark-arena","eip155:4663/erc20:0x90079857237da767c38d1d261a39848ea424319e":"data-bear","eip155:4663/erc20:0x27c99fbde9d0d2aa4f4bfb4943f237843ddf6958":"datadog-robinhood-tokenized-stock","eip155:4663/erc20:0x0830a9dd26a04e959657ab6788d45f5725590c32":"degen-base","eip155:4663/erc20:0x941ae714ec6d8130c7b75d67160ca08f1e7d11dd":"dell-robinhood-tokenized-stock","eip155:4663/erc20:0xaa730f8cca8a22600f92d854322c560390fcff87":"delphic-arena","eip155:4663/erc20:0xf4c450c1570c2dbda91de1ed2e39995a15028c97":"diamond-hands-6","eip155:4663/erc20:0xeaa9abb805db03b6859662354abfe0c2a30902ae":"dog-in-a-suit-2","eip155:4663/erc20:0x17bb0c898254406b1ea2e8e99b0c263e26c9e4a4":"dog-in-hood","eip155:4663/erc20:0xb66d83f0a7eae1bed80df1e049a5d6aefa90eb66":"doonlygoodeveryday","eip155:4663/erc20:0x7331991062f3b1e4eb0fd0506bf1ff0779e08b91":"dopehood","eip155:4663/erc20:0x4c9d9527c4e3cf9faf70f0df8429d2cced157492":"dumb-money-4","eip155:4663/erc20:0xc583c60aef9dc401da72cec1b404743a93cea1cc":"d-wave-quantum-robinhood-tokenized-stock","eip155:4663/erc20:0xca0da673a451c84917d7dd0362109efff0f8825a":"ebess","eip155:4663/erc20:0x95052ddcd5dc25641657424a8cf04834997e1730":"echostar-robinhood-tokenized-stock","eip155:4663/erc20:0x39ec44bee4f6a116c6f9b8de566848a985c53c60":"e-l-f-beauty-robinhood-tokenized-stock","eip155:4663/erc20:0x8005d266423c7ea827372c9c864491e5786600ea":"eli-lilly-robinhood-tokenized-stock","eip155:4663/erc20:0x636358c682843ca3976b32cb4dd5fb13fb407777":"escape-the-fed","eip155:4663/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34":"ethena-usde","eip155:4663/erc20:0x1cdad396db64bda184d5182a97dd9b3c62100b7d":"everpure-robinhood-tokenized-stock","eip155:4663/erc20:0x32758ae8e02b0a2cb6b802b6aaeaf74158c169f7":"exterminate-all-humans","eip155:4663/erc20:0xf9b46d3d1b22199d4d1025a9cedb540a33f1a2d5":"exxon-mobil-robinhood-tokenized-stock","eip155:4663/erc20:0xa870f8c7cae9705194a141b0c2964b6c79ee3742":"feather-2","eip155:4663/erc20:0xdca6da2adcebe397c15f348f6ee38ee0ebe6b867":"fidel","eip155:4663/erc20:0xa56605e4c65e702f72830bf6880e821588bab836":"finance-bro","eip155:4663/erc20:0x5f18b02b8320ef1c5b7d7a5a8bad482a767f4716":"fletcher-by-virtuals","eip155:4663/erc20:0x3450598e419abb5609f60e4b2fda127ff0897777":"fletch-finance","eip155:4663/erc20:0x31ef2f4e678b3640a380c5882ae1a73763d138e9":"flowr","eip155:4663/erc20:0x282e87451e10fa6679bc7d76c69be44cd3fc777c":"fluence-energy-robinhood-tokenized-stock","eip155:4663/erc20:0x1abf16f660ccbaa22ce8646deb1b63635d582228":"fonz-on-pons","eip155:4663/erc20:0x25c288e6d899b9bc30160965ad9644c67e73be0c":"ford-motor-robinhood-tokenized-stock","eip155:4663/erc20:0x3f5e952b29be5d70846fc2ba472bea05761a769e":"foreskin","eip155:4663/erc20:0xa79e6db2549c541b6cae25e99021728425b9d0e9":"frog-cat","eip155:4663/erc20:0xeb30663bdff0622ef4e4e5cbb4e975f19f33f51d":"futu-holdings-robinhood-tokenized-stock","eip155:4663/erc20:0x7e86381a763f0ecca2bdf27c54eac403ddd48123":"gamestop-3","eip155:4663/erc20:0x1b0e319c6a659f002271b69db8a7df2f911c153e":"gamestop-robinhood-tokenized-stock","eip155:4663/erc20:0x0188da44dcc9b6c9d0d80de904c633c5ff227777":"givest","eip155:4663/erc20:0x5fc5360d0400a0fd4f2af552add042d716f1d168":"global-dollar","eip155:4663/erc20:0x912136b5ce6063591e6ae47edc76cde98235860e":"greenbow","eip155:4663/erc20:0x727701f88f09fed71eb217bcea88b3f314cf7079":"grid-by-virtuals","eip155:4663/erc20:0xbfc3a980b78b007ef0cde9625e52dbb66c51a1a7":"hold-2","eip155:4663/erc20:0x25824447ed0e26b0741858b67065bb6bd0017b15":"hood6900","eip155:4663/erc20:0x84ad72f6fd6bccab5b5aa4f3c9ab86863bd2bcda":"hoodagent","eip155:4663/erc20:0x0acb834130d284bfffa1c697f02dddafd8f50335":"hoodbird","eip155:4663/erc20:0x97e39393a9afc4f21b1e74209ee0522e91ef028c":"hoodclaw-by-virtuals","eip155:4663/erc20:0x47ee684e52e5d92de0b24d4e00ad45c7af7db9a3":"hooddomains","eip155:4663/erc20:0xc72c01aab5f5678dc1d6f5c6d2b417d91d402ba3":"hoodie","eip155:4663/erc20:0x5788116f4fe1820bf499c26fc7203630bf2d020f":"hood-morning","eip155:4663/erc20:0xdb0c60375be0031b2817fd0c9d178ba3a85b6666":"hood-of-meme","eip155:4663/erc20:0x2b10d89ba75cfe18f2678a66e4c18c1005b03afa":"hoodperp","eip155:4663/erc20:0x8e62f281f282686fca6dcb39288069a93fc23f1c":"hoodrat-4","eip155:4663/erc20:0x834b31164b5e5f4a08b441d796abb85f714bb7c1":"hoppy-3","eip155:4663/erc20:0x3746a5ebca295dee695dd1bcba50a8626df3099c":"humanoid-network-by-virtuals","eip155:4663/erc20:0xf1953dab6fad537488d5a022361ffaa8b4c95ec6":"innodata-robinhood-tokenized-stock","eip155:4663/erc20:0xc72b96e0e48ecd4dc75e1e45396e26300bc39681":"intel-robinhood-tokenized-stock","eip155:4663/erc20:0xa5d4968421ba94814be3b136b15cf422101ac1a3":"intuitive-machines-robinhood-tokenized-stock","eip155:4663/erc20:0x56d23bee5f41a7120170b0c603dae30128e460e9":"intuit-robinhood-tokenized-stock","eip155:4663/erc20:0xd5f3879160bc7c32ebb4dc785f8a4f505888de68":"invesco-qqq-robinhood-tokenized-stock","eip155:4663/erc20:0xad622320e520de39e72d41ef07438c3fd3354875":"invesco-s-p-500-momentum-etf-robinhood-tokenized-stock","eip155:4663/erc20:0x558378e000d634a36593e338ebacdd6207640efe":"ionq-robinhood-tokenized-stock","eip155:4663/erc20:0xf0ab0c93be6f41369d302e55db1a96b3c430212d":"iren-limited-robinhood-tokenized-stock","eip155:4663/erc20:0x92fd66527192e3e61d4ddd13322aa222de86f9b5":"ishares-0-3-month-treasury-bond-etf-robinhood-tokenized-stock","eip155:4663/erc20:0x7f0abef0c07280f82c6a08ead09ded6bae2c13fc":"ishares-msci-south-korea-fund-robinhood-tokenized-stock","eip155:4663/erc20:0x75742c18bc1f1c5c5f448f4c9d9c6f66dafaaa38":"ishares-semiconductor-etf-robinhood-tokenized-stock","eip155:4663/erc20:0x411efb0e7f985935daec3d4c3ebaea0d0ad7d89f":"ishares-silver-trust-robinhood-tokenized-stock","eip155:4663/erc20:0xc5ac3b7664ba1ac915145cc58f50b89ec3a2970d":"kairune-by-virtuals","eip155:4663/erc20:0x6689ab375aaaa9aed78aaaba2e8edcc547478cf1":"kaleido-2","eip155:4663/erc20:0xab26d5b48bd07f1248a66fd817036f785078b51d":"kansoku-labs","eip155:4663/erc20:0xb47f4702deb124cb4eb6286be83c9d84277c6239":"karma-by-virtuals","eip155:4663/erc20:0xe44951407d2ed8e73dce4b7002908732bc0d0bc3":"kindra-by-virtuals","eip155:4663/erc20:0x8d4dfaaa4198b6486e0293fec914c2b6a821d4dc":"kitsu-2","eip155:4663/erc20:0x01637b14b7378b99de75a64d50656d98488d9a4d":"lady-marian","eip155:4663/erc20:0x23f88eda2b24a0d45d4c3e2ad05edff30f860697":"leavehood","eip155:4663/erc20:0xb1d46eff0e3d1a4169a4d4159b46c5783b4f7a05":"lemon-protocol","eip155:4663/erc20:0xe170dc96ca10103e0d4c5d9293c5a3a72ee365a5":"little-john","eip155:4663/erc20:0x218eec7d0c6a26ba119063b3228b8d04085545d3":"lmeow-4","eip155:4663/erc20:0x4e62068525ab11fe768e29dfd00ef909b9803016":"lululemon-robinhood-tokenized-stock","eip155:4663/erc20:0x8ef20885f94e3d9bc7eb3080279188bd5ed7c08c":"lumentum-robinhood-tokenized-stock","eip155:4663/erc20:0x62fd0668e10d8b72339be2dcf7643001688ff13b":"marvell-technology-robinhood-tokenized-stock","eip155:4663/erc20:0x48961813349333209994750ffa89b3c5c22ec969":"maxlinear-robinhood-tokenized-stock","eip155:4663/erc20:0x75c8258eaa6d0f94b82951194191ca3efb0bcbe2":"meow-6","eip155:4663/erc20:0x3018e275da8d1acd16e7b803e74fca9c251fd60f":"meowood","eip155:4663/erc20:0xc0d6457c16cc70d6790dd43521c899c87ce02f35":"meta-platforms-robinhood-tokenized-stock","eip155:4663/erc20:0xff080c8ce2e5feadaca0da81314ae59d232d4afd":"micron-technology-robinhood-tokenized-stock","eip155:4663/erc20:0xe93237c50d904957cf27e7b1133b510c669c2e74":"microsoft-robinhood-tokenized-stock","eip155:4663/erc20:0x84b7515081a7ac5adc26179b77a8b18a8c6725c0":"mintly","eip155:4663/erc20:0x407470f85e0b342a52aae2f191e135cef2947777":"mizukara","eip155:4663/erc20:0xf55f03ea76c4e21f263631b1860b55e255acb339":"mog-cat","eip155:4663/erc20:0xddf2266b79abf0b48898959b0ed6e6adf512be74":"mongodb-robinhood-tokenized-stock","eip155:4663/erc20:0x7541872e32bb529d7ff11d6c59832269ce33a6ff":"monvera-by-virtuals","eip155:4663/erc20:0x343a9c531acf28c4d9f4cd8ef2d6413ceba3c2df":"mr-goxx","eip155:4663/erc20:0xa5bac17a919a10ba0628cda5bcf273681e1a8d4e":"mystery-5","eip155:4663/erc20:0xbef75684c43c4ea7bd18dd532a2244674ee8b926":"nano-nuclear-energy-robinhood-tokenized-stock","eip155:4663/erc20:0xac9bba3f724dfbd6ec677684783d2de2aae05ad3":"nasdog","eip155:4663/erc20:0xeafa804083a4886a9460b5b19557334a652beba8":"naven-network","eip155:4663/erc20:0xbe6702d7b70315376dc48a3293f24f0982f86386":"navitas-semiconductor-robinhood-tokenized-stock","eip155:4663/erc20:0x9d9c6684f596f66a64c030b93a886d51fd4d7931":"nebius-group-robinhood-tokenized-stock","eip155:4663/erc20:0xace3c5adc456de444501d91c12b0b03f902eb250":"nerve-2","eip155:4663/erc20:0xe0444ef8bf4ed74f74fd73686e2ddf4c1c5591e8":"netflix-robinhood-tokenized-stock","eip155:4663/erc20:0x01397109534e47d3742e794d3a610fa1c3158888":"ninehood","eip155:4663/erc20:0x241f3caad03db31137f641bef005a32176530024":"non-playable-coin","eip155:4663/erc20:0x880b852316d430741c5b693aa53f22871e42ee77":"novara","eip155:4663/erc20:0x8ed8ab093d29e9ccbc26bb38df09910ae1d69125":"nuggies","eip155:4663/erc20:0x408c14038a04f7bd235329e26d2bf569ee20e250":"nu-robinhood-tokenized-stock","eip155:4663/erc20:0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec":"nvidia-robinhood-tokenized-stock","eip155:4663/erc20:0xfb1bcb6817f7b8fa86896d3253b16aeb7bd6a5a8":"one-life-its-worth-an-attempt-2","eip155:4663/erc20:0xb0992820e760d836549ba69bc7598b4af75dee03":"oracle-robinhood-tokenized-stock","eip155:4663/erc20:0xec51b6e5d99487ac5646f3311c109714b54f6ed8":"outlaw","eip155:4663/erc20:0xe59e2953334cc1664181976d79c4b5d39eab7777":"packs","eip155:4663/erc20:0x894e1ec2d74ffe5aef8dc8a9e84686accb964f2a":"palantir-technologies-robinhood-tokenized-stock","eip155:4663/erc20:0x9b23573b156b52565012f5ce02cdf60afbaa70be":"penguin-solutions-robinhood-tokenized-stock","eip155:4663/erc20:0x0684e19528ccfd570fb00f0ca626dac4bdab17cf":"pension","eip155:4663/erc20:0x2ea05472e1b7289004e5a1f6d959f6f2f3a6fecb":"pepe-token","eip155:4663/erc20:0xa4bd8def4b887fd1851defe10acdcf7a84437a88":"pepewifhood","eip155:4663/erc20:0x4189f0c66ebbb0bfef1c31f763131361ef32f77c":"permian-resources-robinhood-tokenized-stock","eip155:4663/erc20:0xd69845e0589c8d59de25e7a885f9dcecaec95b69":"piptrade-by-virtuals","eip155:4663/erc20:0x02cf91de4e80d3dd104e5ad6fc23eb15a9b6f8e2":"pleb-index","eip155:4663/erc20:0xcf6b2d875361be807eafa57458c80f28521f9333":"poet-technologies-robinhood-tokenized-stock","eip155:4663/erc20:0x39dbed3a2bd333467115de45665cc57f813c4571":"pons","eip155:4663/erc20:0xa737df5de18e3aa6b0bf8c2e9846ed699f6f2aeb":"ponstar","eip155:4663/erc20:0xfe2112b4569d3a131e7964dcf45c155d7907534e":"pooch-2","eip155:4663/erc20:0x63e0ca3841bff47a191949417ab64f82cfa3314b":"poo-coin","eip155:4663/erc20:0x26c41b10527de2dc870fa5c9d5f4a8dbaa966cdf":"privacy-hood-by-virtuals","eip155:4663/erc20:0x8ff92566f2e81bdd68edfaa8cde73942a723796b":"projectvex","eip155:4663/erc20:0x83d37c1c2c3ed4e6536a01fd92c2a75453b57cc2":"prometheus-4","eip155:4663/erc20:0x6a4baa1927f37256017342dbd8fec0c12831b8e3":"pulse-pastures-by-virtuals","eip155:4663/erc20:0x0f17206447090e464c277571124dd2688e48aea9":"qualcomm-robinhood-tokenized-stock","eip155:4663/erc20:0x59818904ab4ce163b3ce4ffb64f2d6ca02c434b4":"quantum-computing-robinhood-tokenized-stock","eip155:4663/erc20:0x364d9f23ede3ada0f5e3f41df10f0a0d01c57777":"quiver-money","eip155:4663/erc20:0xe013e34f03f42d49e836d59cf6353b897c337777":"ramencoin","eip155:4663/erc20:0x7f3d6b93809fd4534bf3c5b25deeaec0aab5a1d8":"randy","eip155:4663/erc20:0xf132bd1d1770d42cf4ec8659b9077d0d1c197cc1":"ranger-ai","eip155:4663/erc20:0x96765066f6a040a21eb027167d2315b707c82633":"ravenhood","eip155:4663/erc20:0xf44702b17d9abd53815f703e772f35e9c71a53af":"raxol","eip155:4663/erc20:0x05b37fb53a299a1b874a619e1c4c404d52c36f4c":"reddit-robinhood-tokenized-stock","eip155:4663/erc20:0x92ef19e82bd8ff36661de838d5eae7e5cef0effe":"redwire-robinhood-tokenized-stock","eip155:4663/erc20:0xf314aedeaadcb02f33a13eae471fe06d13aa7777":"retirement-plan","eip155:4663/erc20:0x284358abc07f9359f19f4b5b4ac91901be2597ba":"rigetti-computing-robinhood-tokenized-stock","eip155:4663/erc20:0xb1bf26c1d20ff267a4f93550d1e0d06ac40a114b":"rivian-automotive-robinhood-tokenized-stock","eip155:4663/erc20:0x84f210f9fa42613e5f5bc89ee4978afbd1e90f11":"rob","eip155:4663/erc20:0x55796b27aa48444fa2caef2bf902e12e9c280dc9":"robin","eip155:4663/erc20:0xfb4729659eef22bfc1c2b680f6f873f8147aaaab":"robin-2","eip155:4663/erc20:0xe59eccb15ea07a755eb9587eefda7929559e1fa6":"robinflow","eip155:4663/erc20:0x56a98db16cf501b686c14ba00a5dec02e87083fa":"robinfun","eip155:4663/erc20:0x2103faa9d1762e27a716c61718b3acf3ec1f9bf1":"robin-hood-2","eip155:4663/erc20:0x53d2e1225aace4551194ecbb6bbe5c44d94aa5fa":"robinhood-2","eip155:4663/erc20:0x8f100e99ddf699320724e37cb866770381d47382":"robinhood-3","eip155:4663/erc20:0x8fde2c15d44eb7cc1a889bc74633e226f91d3295":"robinhoodies","eip155:4663/erc20:0x94fef3763ed87051267dcd7ffc5df416b6c03a7e":"robinhood-payments-protocol","eip155:4663/erc20:0x5266eeaff092d6136ab63d18b975a60a0cc0c8f7":"robinhood-pepe","eip155:4663/erc20:0x0bd7d308f8e1639fab988df18a8011f41eacad73":"robinhood-wrapped-eth-robinhood-chain","eip155:4663/erc20:0x0856f71c65268da154da4413d961cb348dc6119d":"robin-the-hoodini","eip155:4663/erc20:0xc35968c7f5475bb03a43c7382526f4118e01c0de":"robinvista","eip155:4663/erc20:0xe49a1c3033ecc6b804bc423021d3f71f1a3e0f9b":"robinwifhat","eip155:4663/erc20:0xf0c4bf4c582cb3836e98394b1d4e7b7281101be8":"roblox-robinhood-tokenized-stock","eip155:4663/erc20:0x3b14c39e89d60d627b42a1a4ca45b5bb45fc12e2":"rocket-lab-corporation-robinhood-tokenized-stock","eip155:4663/erc20:0x516c0878acca15e7eb2f6a401b5b6cd2a0f9f455":"run-your-money","eip155:4663/erc20:0xe77d354898a44808ff3999947002785cd727bed5":"saffron-finance","eip155:4663/erc20:0xb90a19ff0af67f7779aff50a882a9cff42446400":"sandisk-corporation-robinhood-tokenized-stock","eip155:4663/erc20:0x38bb87cf3e7344a82be7cd671c191f015b97eee6":"santahood","eip155:4663/erc20:0x46cf2ca61505902a4410b3b4242d787cd4737777":"senkai","eip155:4663/erc20:0x0c3260af4b8f13a69c4c2dfb84fd667890cdfa14":"servicenow-robinhood-tokenized-stock","eip155:4663/erc20:0xb1cb27f78b7335df8c3d8ebf0881a15bed6beb60":"sherwood-exchange","eip155:4663/erc20:0xf8bc08092c06db6148114dcf82af881f1085f92b":"sherwood-protocol","eip155:4663/erc20:0xf53f66751b1eff985311b693531e3290f600c410":"shopify-robinhood-tokenized-stock","eip155:4663/erc20:0x98e75885157c80992a8d41b696d8c9c6fb30a926":"sofi-technologies-robinhood-tokenized-stock","eip155:4663/erc20:0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea":"spacex-robinhood-tokenized-stock","eip155:4663/erc20:0x1dae71a215ee5c696cb644f030597ae4f32831c0":"sparkleware","eip155:4663/erc20:0x117cc2133c37b721f49de2a7a74833232b3b4c0c":"spdr-s-p-500-etf-trust-robinhood-tokenized-stock","eip155:4663/erc20:0x0172fd20b8e89cb577a6edd3b800ee7b2a5b00c1":"stargazer-ai","eip155:4663/erc20:0x15cd20759ce7f3285c29a319de2d1a2e098c6f43":"state-street-technology-select-sector-spdr-etf-robinhood-tokenized-stock","eip155:4663/erc20:0x0af77e27f535256965944e617a386570f5c0432a":"steel-2","eip155:4663/erc20:0x5bd252b4d7aa573813d1c6a4888f778790583667":"stockcoin-2","eip155:4663/erc20:0xaab3d2e25869dd9661e7a886b9a51c02ee6c7777":"stockpackz","eip155:4663/erc20:0xe934e36a439c94017b64a3fece66af12099abf50":"stonkbroker","eip155:4663/erc20:0xbf72347bacefe747eaf48b8a66e38babad3020a0":"stonks-8","eip155:4663/erc20:0xec262a75e413fafd0df80480274532c79d42da09":"strategy-inc-robinhood-tokenized-stock","eip155:4663/erc20:0xc01aa1fecec0605b13bc84874ff7256c0f5f562a":"super-micro-computer-robinhood-tokenized-stock","eip155:4663/erc20:0xaa4b6a79df257e50e0079cd812a92262ee3951b0":"sushi-cat","eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7":"syrup-usdg","eip155:4663/erc20:0x58ffe4a942d3885baa22d7520691f611ef09e7aa":"taiwan-semiconductor-manufacturing-robinhood-tokenized-stock","eip155:4663/erc20:0x5e81213613b6b86eab4c6c50d718d34359459786":"take-two-interactive-software-robinhood-tokenized-stock","eip155:4663/erc20:0x45242320dbb855eea8fd36804c6487e10e97fcf9":"tendies-2","eip155:4663/erc20:0x322f0929c4625ed5bad873c95208d54e1c003b2d":"tesla-robinhood-tokenized-stock","eip155:4663/erc20:0xa80ba06f0a0327e68da6bede67eb35ac023d6e62":"the-floor","eip155:4663/erc20:0xf444f3c77c77a33f7c8d8fcab8a1e88afb843da5":"the-great-squeeze","eip155:4663/erc20:0x31be8f7485e36928c9de86566c62da82d4b6bf81":"the-green-bull-2","eip155:4663/erc20:0x79d2234ed4ee24880835f261df9a98fcefc7600e":"the-hood","eip155:4663/erc20:0x281079a7832b15238ed9c6ec1e787f3ed9db6ad1":"the-hoodies","eip155:4663/erc20:0xd7321801caae694090694ff55a9323139f043b88":"the-juggernaut","eip155:4663/erc20:0x51b57d1157975756c156ee28e3e167718792b665":"the-little-guy","eip155:4663/erc20:0x7817c85e4390bc83a58a47a71f0a5fa83a4e16d4":"the-office-dog","eip155:4663/erc20:0x7fe995a80075df3dc8ae11a9b82c7fe4202cd87f":"thinking-cat","eip155:4663/erc20:0xe8fb470e0685437d7739bd2aacba60b228800335":"throbbin","eip155:4663/erc20:0x2e9c3b1c6e7703d1784b2b8f80ef4e99d76b3e56":"tiger-inc","eip155:4663/erc20:0x89776d4cd68193597a2fc132cfac1fde36ccea8a":"tower-semiconductor-robinhood-tokenized-stock","eip155:4663/erc20:0x0e6e67ba88e7b5d9b67636a215c76779b948de79":"united-microelectronics-robinhood-tokenized-stock","eip155:4663/erc20:0xa30fa36db767ad9ed3f7a60fc79526fb4d56d344":"united-states-oil-fund-robinhood-tokenized-stock","eip155:4663/erc20:0x745c1c97551204f10cd5eb51c1b6902fece13b0e":"unknown0","eip155:4663/erc20:0x57c0e45cb534413d1c20a4240955d6bb250bb4f1":"up-2","eip155:4663/erc20:0xf23250dac154d05bb671cb0d0ebef3c635c79ce2":"ups-robinhood-tokenized-stock","eip155:4663/erc20:0x970078468807853bc316432e745165eb34398ba3":"urizen","eip155:4663/erc20:0xd917b029c761d264c6a312bbbcda868658ef86a6":"usa-rare-earth-robinhood-tokenized-stock","eip155:4663/erc20:0x164d9da79722c5294369e79807980e0bff257777":"utopiadet","eip155:4663/erc20:0xfbd1bf9d354cd8197ab54f80778c03cc468adaaf":"vena-protocol","eip155:4663/erc20:0x2355431b83b1a8e40172d099d90243d8d666b56b":"vibing-cat-2","eip155:4663/erc20:0x43e7cb9984ad95aa808ac21998cc8d5f909e47af":"vimen-by-virtuals","eip155:4663/erc20:0xc6911796042b15d7fa4f6cde69e245ddcd3d9c31":"virtual-protocol","eip155:4663/erc20:0xa4874f62c8826e19cf8691bcabd02fe1a0b7401f":"vladdog","eip155:4663/erc20:0xa9038d2c4e798d10dd46c2fdb1f72c9b397bbdad":"vladdy","eip155:4663/erc20:0x66cef844f82a461444621f1fcb53efa9ed6dee18":"vled-tenov","eip155:4663/erc20:0xe81dc008231035c91f09633c541394b9ddf53673":"vortano","eip155:4663/erc20:0xd8d1c08a8ba4fc64bac744f74290b89adcb6bf25":"watch-it-grow","eip155:4663/erc20:0xa80eb66b3e0cf66ccb46f8b8c9e7ff5803eeb820":"wen-lambo-2","eip155:4663/erc20:0x8ecea3d0e648db646d824aa51eedeb16ac3d6878":"wire-bot","eip155:4663/erc20:0x77581054581b9c525e7dd7a0155de43867532d03":"wishbone","eip155:4663/erc20:0x82da4646242e1d962e96e932269dc644c94a9caa":"workday-robinhood-tokenized-stock","eip155:4663/erc20:0xa3054f28c48b387d4825be8f3b79ed161abc5405":"wrapped-besc-2","eip155:4663/erc20:0xbec416ac3e36a8ca0571cef5a104edaef2a31a89":"wrkr-by-virtuals","eip155:4663/erc20:0xa8eb3bccbf2017ee7cbfb652eb51cf2e1b153289":"xanadu-quantum-robinhood-tokenized-stock","eip155:4663/erc20:0x5d6fa71583e40d6a40ab09cd071f24f6603b0970":"yarrow","eip155:4663/erc20:0xa2718f80f1fe0cdec69c9023ee006807dd487a8c":"yoink-4","eip155:4663/erc20:0x62c71cd34a52c30d894419cbcc55db2afa8032ea":"yolo-2","eip155:4663/erc20:0x64abfc878dc340bbf33bae4aaf39ed33fb1828c0":"yorozu","eip155:4663/erc20:0xbd433ecab074ae6a740959fb5e7bf1d02f6f57f6":"your-hood","eip155:4663/erc20:0x44c4f142009036cf477ed2d09932051843137cf1":"zoom-robinhood-tokenized-stock","eip155:4663/erc20:0x7dc013eb55e436f30d7ed1afe4e36d6e45e3c3f7":"zscaler-robinhood-tokenized-stock"} \ No newline at end of file diff --git a/packages/caip/src/adapters/coingecko/generated/index.ts b/packages/caip/src/adapters/coingecko/generated/index.ts index e8e5bb68b88..67850953d59 100644 --- a/packages/caip/src/adapters/coingecko/generated/index.ts +++ b/packages/caip/src/adapters/coingecko/generated/index.ts @@ -36,6 +36,7 @@ import flowevm from "./eip155_747/adapter.json"; import celo from "./eip155_42220/adapter.json"; import sei from "./eip155_1329/adapter.json"; import abstract from "./eip155_2741/adapter.json"; +import robinhood from "./eip155_4663/adapter.json"; import cosmos from "./cosmos_cosmoshub-4/adapter.json"; import thorchain from "./cosmos_thorchain-1/adapter.json"; import mayachain from "./cosmos_mayachain-mainnet-v1/adapter.json"; @@ -86,6 +87,7 @@ export { celo, sei, abstract, + robinhood, cosmos, thorchain, mayachain, diff --git a/packages/caip/src/adapters/coingecko/index.test.ts b/packages/caip/src/adapters/coingecko/index.test.ts index 7f56fee6f0d..6ffc05abd1a 100644 --- a/packages/caip/src/adapters/coingecko/index.test.ts +++ b/packages/caip/src/adapters/coingecko/index.test.ts @@ -137,6 +137,12 @@ describe('adapters:coingecko', () => { assetNamespace: 'slip44', assetReference: ASSET_REFERENCE.Soneium, }) + const ethOnRobinhood = toAssetId({ + chainNamespace, + chainReference: CHAIN_REFERENCE.RobinhoodMainnet, + assetNamespace: 'slip44', + assetReference: ASSET_REFERENCE.Robinhood, + }) expect(coingeckoToAssetIds('ethereum')).toEqual([ ethOnEthereum, ethOnOptimism, @@ -155,6 +161,7 @@ describe('adapters:coingecko', () => { ethOnUnichain, ethOnSoneium, ethOnAbstract, + ethOnRobinhood, ]) }) diff --git a/packages/caip/src/adapters/coingecko/index.ts b/packages/caip/src/adapters/coingecko/index.ts index 59983dcca4e..c2df085c96b 100644 --- a/packages/caip/src/adapters/coingecko/index.ts +++ b/packages/caip/src/adapters/coingecko/index.ts @@ -36,6 +36,7 @@ import { plasmaChainId, plumeChainId, polygonChainId, + robinhoodChainId, scrollChainId, seiChainId, solanaChainId, @@ -100,6 +101,7 @@ export enum CoingeckoAssetPlatform { Ton = 'the-open-network', Near = 'near-protocol', Abstract = 'abstract', + Robinhood = 'robinhood', } type CoinGeckoId = string @@ -198,6 +200,8 @@ export const chainIdToCoingeckoAssetPlatform = (chainId: ChainId): string => { return CoingeckoAssetPlatform.Soneium case CHAIN_REFERENCE.SeiMainnet: return CoingeckoAssetPlatform.Sei + case CHAIN_REFERENCE.RobinhoodMainnet: + return CoingeckoAssetPlatform.Robinhood default: throw new Error( `chainNamespace ${chainNamespace}, chainReference ${chainReference} not supported.`, @@ -367,6 +371,8 @@ export const coingeckoAssetPlatformToChainId = ( return tonChainId case CoingeckoAssetPlatform.Near: return nearChainId + case CoingeckoAssetPlatform.Robinhood: + return robinhoodChainId default: return undefined } diff --git a/packages/caip/src/adapters/coingecko/utils.test.ts b/packages/caip/src/adapters/coingecko/utils.test.ts index 48222cf85f9..293ef1dd63e 100644 --- a/packages/caip/src/adapters/coingecko/utils.test.ts +++ b/packages/caip/src/adapters/coingecko/utils.test.ts @@ -243,6 +243,9 @@ describe('adapters:coingecko:utils', () => { 'eip155:2741': { 'eip155:2741/slip44:60': 'ethereum', }, + 'eip155:4663': { + 'eip155:4663/slip44:60': 'ethereum', + }, 'near:mainnet': { 'near:mainnet/slip44:397': 'near', }, diff --git a/packages/caip/src/adapters/coingecko/utils.ts b/packages/caip/src/adapters/coingecko/utils.ts index 25d131a7dac..1d365a965b5 100644 --- a/packages/caip/src/adapters/coingecko/utils.ts +++ b/packages/caip/src/adapters/coingecko/utils.ts @@ -67,6 +67,8 @@ import { plumeChainId, polygonAssetId, polygonChainId, + robinhoodAssetId, + robinhoodChainId, scrollAssetId, scrollChainId, solanaChainId, @@ -664,6 +666,20 @@ export const parseData = (coins: CoingeckoCoin[]): AssetMap => { } } + if (Object.keys(platforms).includes(CoingeckoAssetPlatform.Robinhood)) { + try { + const assetId = toAssetId({ + chainNamespace: CHAIN_NAMESPACE.Evm, + chainReference: CHAIN_REFERENCE.RobinhoodMainnet, + assetNamespace: 'erc20', + assetReference: platforms[CoingeckoAssetPlatform.Robinhood], + }) + prev[robinhoodChainId][assetId] = id + } catch { + // unable to create assetId, skip token + } + } + return prev }, { @@ -706,6 +722,7 @@ export const parseData = (coins: CoingeckoCoin[]): AssetMap => { [suiChainId]: { [suiAssetId]: 'sui' }, [nearChainId]: { [nearAssetId]: 'near' }, [tonChainId]: { [tonAssetId]: 'the-open-network' }, + [robinhoodChainId]: { [robinhoodAssetId]: 'ethereum' }, }, ) diff --git a/packages/caip/src/constants.ts b/packages/caip/src/constants.ts index d8c5f9f0e3a..ba3998703c5 100644 --- a/packages/caip/src/constants.ts +++ b/packages/caip/src/constants.ts @@ -8,6 +8,7 @@ export const ltcAssetId: AssetId = 'bip122:12a765e31ffd4059bada1e25190f6e98/slip export const zecAssetId: AssetId = 'bip122:00040fe8ec8471911baa1db1266ea15d/slip44:133' export const ethAssetId: AssetId = 'eip155:1/slip44:60' +export const robinhoodAssetId: AssetId = 'eip155:4663/slip44:60' export const abstractAssetId: AssetId = 'eip155:2741/slip44:60' export const avalancheAssetId: AssetId = 'eip155:43114/slip44:60' export const optimismAssetId: AssetId = 'eip155:10/slip44:60' @@ -97,6 +98,7 @@ export const ltcChainId: ChainId = 'bip122:12a765e31ffd4059bada1e25190f6e98' export const zecChainId: ChainId = 'bip122:00040fe8ec8471911baa1db1266ea15d' export const ethChainId: ChainId = 'eip155:1' +export const robinhoodChainId: ChainId = 'eip155:4663' export const abstractChainId: ChainId = 'eip155:2741' export const avalancheChainId: ChainId = 'eip155:43114' export const optimismChainId: ChainId = 'eip155:10' @@ -211,6 +213,7 @@ export const CHAIN_REFERENCE = { StarknetMainnet: 'SN_MAIN', // https://namespaces.chainagnostic.org/starknet/caip2 TonMainnet: 'mainnet', // TON Mainnet AbstractMainnet: '2741', // https://abscan.org + RobinhoodMainnet: '4663', // https://chainlist.org/chain/4663 } as const export const ASSET_NAMESPACE = { @@ -278,6 +281,7 @@ export const ASSET_REFERENCE = { Starknet: '9004', Ton: '607', Abstract: '60', // evm chain which uses ethereum derivation path as common practice + Robinhood: '60', // evm chain which uses ethereum derivation path as common practice } as const export const VALID_CHAIN_IDS: ValidChainMap = Object.freeze({ @@ -324,6 +328,7 @@ export const VALID_CHAIN_IDS: ValidChainMap = Object.freeze({ CHAIN_REFERENCE.SeiMainnet, CHAIN_REFERENCE.CeloMainnet, CHAIN_REFERENCE.AbstractMainnet, + CHAIN_REFERENCE.RobinhoodMainnet, ], [CHAIN_NAMESPACE.CosmosSdk]: [ CHAIN_REFERENCE.CosmosHubMainnet, diff --git a/packages/chain-adapters/package.json b/packages/chain-adapters/package.json index 70dd8fa76b6..0190993c351 100644 --- a/packages/chain-adapters/package.json +++ b/packages/chain-adapters/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/chain-adapters", - "version": "11.5.0", + "version": "11.5.1", "repository": "https://github.com/shapeshift/web", "license": "MIT", "type": "module", @@ -54,7 +54,7 @@ "multicoin-address-validator": "^0.5.12", "node-polyglot": "^2.4.0", "p-queue": "^8.0.1", - "viem": "2.43.5" + "viem": "2.55.11" }, "devDependencies": { "@types/bs58check": "^2.1.0", diff --git a/packages/chain-adapters/src/evm/EvmBaseAdapter.ts b/packages/chain-adapters/src/evm/EvmBaseAdapter.ts index a70277d76f7..61a884f4029 100644 --- a/packages/chain-adapters/src/evm/EvmBaseAdapter.ts +++ b/packages/chain-adapters/src/evm/EvmBaseAdapter.ts @@ -36,6 +36,7 @@ import { supportsPlasma, supportsPlume, supportsPolygon, + supportsRobinhood, supportsScroll, supportsSei, supportsSoneium, @@ -135,6 +136,7 @@ export const evmChainIds = [ KnownChainIds.SoneiumMainnet, KnownChainIds.SeiMainnet, KnownChainIds.AbstractMainnet, + KnownChainIds.RobinhoodMainnet, ] as const export type EvmChainAdapter = EvmBaseAdapter @@ -283,6 +285,8 @@ export abstract class EvmBaseAdapter implements IChainAdap return supportsSoneium(wallet) case Number(fromChainId(KnownChainIds.SeiMainnet).chainReference): return supportsSei(wallet) + case Number(fromChainId(KnownChainIds.RobinhoodMainnet).chainReference): + return supportsRobinhood(wallet) default: return false } @@ -490,6 +494,11 @@ export abstract class EvmBaseAdapter implements IChainAdap symbol: 'ETH', explorer: 'https://abscan.org', }, + [KnownChainIds.RobinhoodMainnet]: { + name: 'Ethereum', + symbol: 'ETH', + explorer: 'https://robinhoodchain.blockscout.com', + }, }[this.chainId] try { diff --git a/packages/chain-adapters/src/evm/SecondClassEvmAdapter.ts b/packages/chain-adapters/src/evm/SecondClassEvmAdapter.ts index ead8e8412a4..cfd6a762581 100644 --- a/packages/chain-adapters/src/evm/SecondClassEvmAdapter.ts +++ b/packages/chain-adapters/src/evm/SecondClassEvmAdapter.ts @@ -12,6 +12,7 @@ import { mantleChainId, modeChainId, plumeChainId, + robinhoodChainId, seiChainId, soneiumChainId, sonicChainId, @@ -75,6 +76,7 @@ const WRAPPED_NATIVE_CONTRACT_BY_CHAIN_ID: Partial> = { [storyChainId]: '0x1514000000000000000000000000000000000000', [plumeChainId]: '0xea237441c92cae6fc17caaf9a7acb3f953be4bd1', [seiChainId]: '0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7', + [robinhoodChainId]: '0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73', } const BATCH_SIZE = 500 diff --git a/packages/chain-adapters/src/evm/index.ts b/packages/chain-adapters/src/evm/index.ts index defef25e97d..813bc0264f6 100644 --- a/packages/chain-adapters/src/evm/index.ts +++ b/packages/chain-adapters/src/evm/index.ts @@ -40,3 +40,4 @@ export * as bob from './bob' export * as mode from './mode' export * as soneium from './soneium' export * as sei from './sei' +export * as robinhood from './robinhood' diff --git a/packages/chain-adapters/src/evm/robinhood/RobinhoodChainAdapter.ts b/packages/chain-adapters/src/evm/robinhood/RobinhoodChainAdapter.ts new file mode 100644 index 00000000000..78ad0a40c33 --- /dev/null +++ b/packages/chain-adapters/src/evm/robinhood/RobinhoodChainAdapter.ts @@ -0,0 +1,57 @@ +import type { AssetId } from '@shapeshiftoss/caip' +import { ASSET_REFERENCE, robinhoodAssetId } from '@shapeshiftoss/caip' +import type { RootBip44Params } from '@shapeshiftoss/types' +import { KnownChainIds } from '@shapeshiftoss/types' + +import { ChainAdapterDisplayName } from '../../types' +import type { TokenInfo } from '../SecondClassEvmAdapter' +import { SecondClassEvmAdapter } from '../SecondClassEvmAdapter' + +const SUPPORTED_CHAIN_IDS = [KnownChainIds.RobinhoodMainnet] +const DEFAULT_CHAIN_ID = KnownChainIds.RobinhoodMainnet + +export type ChainAdapterArgs = { + rpcUrl: string + getKnownTokens: () => TokenInfo[] +} + +export const isRobinhoodChainAdapter = (adapter: unknown): adapter is ChainAdapter => { + return (adapter as ChainAdapter).getType() === KnownChainIds.RobinhoodMainnet +} + +export class ChainAdapter extends SecondClassEvmAdapter { + public static readonly rootBip44Params: RootBip44Params = { + purpose: 44, + coinType: Number(ASSET_REFERENCE.Robinhood), + accountNumber: 0, + } + + constructor(args: ChainAdapterArgs) { + super({ + assetId: robinhoodAssetId, + chainId: DEFAULT_CHAIN_ID, + rootBip44Params: ChainAdapter.rootBip44Params, + supportedChainIds: SUPPORTED_CHAIN_IDS, + rpcUrl: args.rpcUrl, + getKnownTokens: args.getKnownTokens, + }) + } + + getDisplayName() { + return ChainAdapterDisplayName.Robinhood + } + + getName() { + return 'Robinhood' + } + + getType(): KnownChainIds.RobinhoodMainnet { + return KnownChainIds.RobinhoodMainnet + } + + getFeeAssetId(): AssetId { + return this.assetId + } +} + +export type { TokenInfo } diff --git a/packages/chain-adapters/src/evm/robinhood/index.ts b/packages/chain-adapters/src/evm/robinhood/index.ts new file mode 100644 index 00000000000..36ae1cb3feb --- /dev/null +++ b/packages/chain-adapters/src/evm/robinhood/index.ts @@ -0,0 +1 @@ +export * from './RobinhoodChainAdapter' diff --git a/packages/chain-adapters/src/near/NearChainAdapter.ts b/packages/chain-adapters/src/near/NearChainAdapter.ts index 35bfde89e7a..42572779227 100644 --- a/packages/chain-adapters/src/near/NearChainAdapter.ts +++ b/packages/chain-adapters/src/near/NearChainAdapter.ts @@ -96,6 +96,7 @@ type NearFullTxResult = { receipts_outcome: { id: string outcome: { + executor_id?: string tokens_burnt: string logs: string[] } @@ -760,25 +761,13 @@ export class ChainAdapter implements IChainAdapter { value: string }[] = [] - let tokenContractId = result.transaction.receiver_id - for (const action of result.transaction.actions) { - if ('FunctionCall' in action) { - const method = action.FunctionCall.method_name - if (method === 'ft_transfer' || method === 'ft_transfer_call') { - break - } - } - if ('Delegate' in action) { - const delegateAction = action.Delegate as { - delegate_action?: { receiver_id?: string; actions?: unknown[] } - } - if (delegateAction.delegate_action?.receiver_id) { - tokenContractId = delegateAction.delegate_action.receiver_id - } - } - } - for (const receipt of result.receipts_outcome) { + // The nep141 event is emitted by the token contract executing the receipt, so the + // executor is the authoritative contract for every event in it - the transaction's + // receiver is whatever contract was called first (e.g. intents.near for swap settlements) + const tokenContractId = receipt.outcome.executor_id + if (!tokenContractId) continue + for (const log of receipt.outcome.logs) { if (!log.startsWith('EVENT_JSON:')) continue diff --git a/packages/chain-adapters/src/ton/TonChainAdapter.test.ts b/packages/chain-adapters/src/ton/TonChainAdapter.test.ts index 65c3ff9a635..8d06f58af5a 100644 --- a/packages/chain-adapters/src/ton/TonChainAdapter.test.ts +++ b/packages/chain-adapters/src/ton/TonChainAdapter.test.ts @@ -3,16 +3,10 @@ import { TransferType, TxStatus } from '@shapeshiftoss/unchained-client' import { base64ToHex, hexToBase64 } from '@shapeshiftoss/utils' import { describe, expect, it } from 'vitest' -import { - addressesMatch, - buildJettonTransfers, - ChainAdapter, - isHexHash, - isProxyTon, - parseTonTx, - resolveAddresses, -} from './TonChainAdapter' +import { buildJettonTransfers, parseTonTx } from './parser' +import { ChainAdapter } from './TonChainAdapter' import type { TonTx } from './types' +import { addressesMatch, isHexHash, isProxyTon, resolveAddresses } from './utils' const USER_BOUNCEABLE = 'EQBcJJt0qGjd4ts1kqFNfLro72PH2PnmXouQ3KIyTacvqAug' const USER_NON_BOUNCEABLE = 'UQBcJJt0qGjd4ts1kqFNfLro72PH2PnmXouQ3KIyTacvqFZl' diff --git a/packages/chain-adapters/src/ton/TonChainAdapter.ts b/packages/chain-adapters/src/ton/TonChainAdapter.ts index 1626f7223b5..cb88eb0d6a8 100644 --- a/packages/chain-adapters/src/ton/TonChainAdapter.ts +++ b/packages/chain-adapters/src/ton/TonChainAdapter.ts @@ -1,5 +1,5 @@ import type { AssetId, ChainId } from '@shapeshiftoss/caip' -import { ASSET_REFERENCE, toAssetId, tonAssetId, tonChainId } from '@shapeshiftoss/caip' +import { ASSET_REFERENCE, tonAssetId, tonChainId } from '@shapeshiftoss/caip' import type { HDWallet, TonWallet } from '@shapeshiftoss/hdwallet-core' import type { Bip44Params, RootBip44Params } from '@shapeshiftoss/types' import { KnownChainIds } from '@shapeshiftoss/types' @@ -24,254 +24,51 @@ import type { Transaction, TxHistoryInput, TxHistoryResponse, - TxTransfer, ValidAddressResult, } from '../types' import { ChainAdapterDisplayName, ValidAddressResultType } from '../types' import { toAddressNList, verifyLedgerAppOpen } from '../utils' +import { + PARSE_TX_CACHE_TTL_MS, + TON_REQUEST_QUEUE_INTERVAL_MS, + TRACE_BATCH_SIZE, + TRACE_COMPLETION_LT_SPAN, + TRACE_LT_SEARCH_RANGE, +} from './constants' +import { buildTonTokens, buildTraceTransfers, ownTraceTxs, parseTonTx } from './parser' import type { - JettonTransferRecord, + ChainAdapterArgs, + TonAccountInfo, TonApiTxResponse, + TonConfigParamResult, TonFeeData, + TonJettonTransfersResponse, + TonJettonWalletsResponse, + TonMessagesResponse, + TonRpcResponse, + TonRunGetMethodResult, + TonSendBocResult, TonSignTx, TonToken, + TonTracesResponse, TonTx, } from './types' +import { + addressesMatch, + formatTonError, + getTraceOwnerTxid, + isHexHash, + isRetryableError, + resolveAddresses, +} from './utils' const supportsTon = (wallet: HDWallet): wallet is TonWallet => { return '_supportsTon' in wallet && (wallet as TonWallet)._supportsTon === true } -export type ChainAdapterArgs = { - rpcUrl: string -} - -type TonRpcResponse = { - ok: boolean - result?: T - error?: string -} - -type TonAccountInfo = { - balance: string - state: 'active' | 'uninitialized' | 'frozen' - code?: string - data?: string -} - -const PROXY_TON_CONTRACTS = new Set([ - 'EQCM3B12QK1e4yZSf8GtBRT0aLMNyEsBc_DhVfRRtOEffLez', - 'EQBnGWMCf3-FZZq1W4IWcWiGAc3PHuZ0_H-7sad2oY00o83S', -]) - -const TRACE_LT_SEARCH_RANGE = 1000n -const TON_HASH_HEX_LENGTH = 64 -export const isHexHash = (str: string): boolean => { - return str.length === TON_HASH_HEX_LENGTH && /^[0-9a-f]+$/i.test(str) -} - -export const addressesMatch = (addr1: string, addr2: string): boolean => { - if (!addr1 || !addr2) return false - if (addr1 === addr2) return true - try { - return Address.parse(addr1).equals(Address.parse(addr2)) - } catch { - const normalize = (a: string) => a.replace(/^0:/, '').toLowerCase() - return normalize(addr1) === normalize(addr2) - } -} - -export const isProxyTon = (jettonMaster: string): boolean => { - if (PROXY_TON_CONTRACTS.has(jettonMaster)) return true - try { - const parsed = Address.parse(jettonMaster) - for (const known of PROXY_TON_CONTRACTS) { - try { - if (parsed.equals(Address.parse(known))) return true - } catch { - continue - } - } - } catch {} - return false -} - -export const resolveAddresses = ( - tx: TonTx, - addressBook: Record, -): TonTx => { - const resolve = (addr: string | undefined): string | undefined => - addr ? addressBook[addr]?.user_friendly ?? addr : addr - - return { - ...tx, - in_msg: tx.in_msg - ? { - ...tx.in_msg, - source: resolve(tx.in_msg.source), - destination: resolve(tx.in_msg.destination), - } - : tx.in_msg, - out_msgs: tx.out_msgs?.map(msg => ({ - ...msg, - source: resolve(msg.source), - destination: resolve(msg.destination), - })), - } -} - -export const buildJettonTransfers = ( - jettonTransfers: JettonTransferRecord[], - traceId: string, - pubkey: string, - addressBook: Record, - chainId: ChainId, -): TxTransfer[] => { - const transfers: TxTransfer[] = [] - - const matching = jettonTransfers.filter(jt => jt.trace_id === traceId) - if (matching.length === 0) return transfers - - const friendly = (addr: string) => addressBook[addr]?.user_friendly ?? addr - - for (const transfer of matching) { - if (!transfer.source || !transfer.destination || !transfer.amount || !transfer.jetton_master) - continue - - const sourceUserFriendly = friendly(transfer.source) - const destUserFriendly = friendly(transfer.destination) - const jettonUserFriendly = friendly(transfer.jetton_master) - - if (isProxyTon(jettonUserFriendly)) continue - - const isSend = addressesMatch(sourceUserFriendly, pubkey) - const isReceive = addressesMatch(destUserFriendly, pubkey) - - if (!isSend && !isReceive) continue - - const assetId = toAssetId({ - chainId, - assetNamespace: 'jetton', - assetReference: jettonUserFriendly, - }) - - if (isSend) { - transfers.push({ - assetId, - from: [sourceUserFriendly], - to: [destUserFriendly], - type: TransferType.Send, - value: transfer.amount, - }) - } - - if (isReceive) { - transfers.push({ - assetId, - from: [sourceUserFriendly], - to: [destUserFriendly], - type: TransferType.Receive, - value: transfer.amount, - }) - } - } - - return transfers -} - -export const parseTonTx = ( - tx: TonTx, - pubkey: string, - txid: string, - assetId: AssetId, - chainId: ChainId, -): Transaction => { - const isAborted = tx.description?.aborted ?? false - const actionSuccess = tx.description?.action?.success ?? true - const status = isAborted || !actionSuccess ? TxStatus.Failed : TxStatus.Confirmed - - const transfers: TxTransfer[] = [] - - if (tx.in_msg?.value && tx.in_msg.source && tx.in_msg.destination) { - const inMsgDecodedType = tx.in_msg.message_content?.decoded?.['@type'] - const isExcess = inMsgDecodedType === 'excess' - const value = tx.in_msg.value - if (BigInt(value) > 0n && !isExcess) { - const isReceive = addressesMatch(tx.in_msg.destination, pubkey) - const isSend = addressesMatch(tx.in_msg.source, pubkey) - - if (isSend) { - transfers.push({ - assetId, - from: [tx.in_msg.source], - to: [tx.in_msg.destination], - type: TransferType.Send, - value, - }) - } - if (isReceive) { - transfers.push({ - assetId, - from: [tx.in_msg.source], - to: [tx.in_msg.destination], - type: TransferType.Receive, - value, - }) - } - } - } - - if (tx.out_msgs) { - for (const outMsg of tx.out_msgs) { - if (outMsg.value && outMsg.source && outMsg.destination) { - const decodedType = outMsg.message_content?.decoded?.['@type'] - const value = - decodedType === 'pton_ton_transfer' && - outMsg.message_content?.decoded?.ton_amount?.amount?.value - ? outMsg.message_content.decoded.ton_amount.amount.value - : outMsg.value - if (BigInt(value) > 0n) { - const isSend = addressesMatch(outMsg.source, pubkey) - const isReceive = addressesMatch(outMsg.destination, pubkey) - - if (isSend) { - transfers.push({ - assetId, - from: [outMsg.source], - to: [outMsg.destination], - type: TransferType.Send, - value, - }) - } - if (isReceive) { - transfers.push({ - assetId, - from: [outMsg.source], - to: [outMsg.destination], - type: TransferType.Receive, - value, - }) - } - } - } - } - } - - const isSend = transfers.some(transfer => transfer.type === TransferType.Send) - - return { - txid, - blockHeight: Number(tx.lt) || 0, - blockTime: tx.now || 0, - blockHash: undefined, - chainId, - confirmations: status === TxStatus.Confirmed ? 1 : 0, - status, - transfers, - pubkey, - ...(isSend && tx.total_fees && { fee: { assetId, value: tx.total_fees } }), - } -} +// TTL starts at resolution - pending parses are reused as-is so a queue backlog can't +// trigger duplicate network runs for the same hash +type ParseTxCacheEntry = { resolvedAt?: number; promise: Promise } export class ChainAdapter implements IChainAdapter { static readonly rootBip44Params: RootBip44Params = { @@ -284,13 +81,14 @@ export class ChainAdapter implements IChainAdapter { protected readonly assetId = tonAssetId protected readonly rpcUrl: string private requestQueue: PQueue + private traceNotOwnCache = new Set() + private parseTxCache = new Map() constructor(args: ChainAdapterArgs) { this.rpcUrl = args.rpcUrl - // Toncenter free tier: ~1 req/sec, but we use 2s to be safe this.requestQueue = new PQueue({ intervalCap: 1, - interval: 2000, + interval: TON_REQUEST_QUEUE_INTERVAL_MS, concurrency: 1, }) } @@ -340,8 +138,8 @@ export class ChainAdapter implements IChainAdapter { const data = (await response.json()) as TonRpcResponse if (!data.ok && data.error) { - lastError = new Error(this.formatTonError(data.error)) - if (this.isRetryableError(data.error)) { + lastError = new Error(formatTonError(data.error)) + if (isRetryableError(data.error)) { const backoffDelay = 1000 * Math.pow(2, attempt) await new Promise(resolve => setTimeout(resolve, backoffDelay)) continue @@ -372,53 +170,6 @@ export class ChainAdapter implements IChainAdapter { ) } - private formatTonError(error: string): string { - if (error.includes('INVALID_BAG_OF_CELLS')) { - return `TON transaction serialization error: ${error}. This may indicate an invalid transaction format.` - } - if (error.includes('seqno')) { - return `TON sequence number error: ${error}. The transaction may be stale or already processed.` - } - if (error.includes('not enough balance') || error.includes('insufficient')) { - return `TON insufficient balance: ${error}` - } - return `TON RPC error: ${error}` - } - - private isRetryableError(error: string): boolean { - const lowerError = error.toLowerCase() - - const nonRetryablePatterns = [ - 'insufficient', - 'not enough balance', - 'invalid', - 'malformed', - 'unauthorized', - 'forbidden', - 'not found', - 'bad request', - 'seqno', - ] - if (nonRetryablePatterns.some(pattern => lowerError.includes(pattern))) { - return false - } - - const retryablePatterns = [ - 'timeout', - 'etimedout', - 'econnreset', - 'econnrefused', - 'network', - 'temporarily unavailable', - 'rate limit', - '429', - '500', - '502', - '503', - ] - return retryablePatterns.some(pattern => lowerError.includes(pattern)) - } - private httpApiRequest(endpoint: string): Promise { return this.requestQueue.add( async () => { @@ -530,62 +281,11 @@ export class ChainAdapter implements IChainAdapter { } try { - const jettonsResponse = await this.httpApiRequest<{ - jetton_wallets?: { - address: string - balance: string - jetton: string - }[] - address_book?: Record< - string, - { - user_friendly: string - } - > - metadata?: Record< - string, - { - token_info?: { - name?: string - symbol?: string - extra?: { - decimals?: string - } - }[] - } - > - }>(`/api/v3/jetton/wallets?owner_address=${encodeURIComponent(pubkey)}`) - - if (jettonsResponse.jetton_wallets) { - const addressBook = jettonsResponse.address_book ?? {} - const metadata = jettonsResponse.metadata ?? {} - - tokens = jettonsResponse.jetton_wallets - .filter(jw => jw.balance && jw.balance !== '0') - .map(jw => { - const jettonRawAddress = jw.jetton - const jettonUserFriendly = - addressBook[jettonRawAddress]?.user_friendly ?? jettonRawAddress - const jettonMeta = metadata[jettonRawAddress]?.token_info?.[0] - const precision = jettonMeta?.extra?.decimals - ? parseInt(jettonMeta.extra.decimals, 10) - : 9 - - const assetId = toAssetId({ - chainId: this.chainId, - assetNamespace: 'jetton', - assetReference: jettonUserFriendly, - }) - - return { - assetId, - balance: jw.balance, - symbol: jettonMeta?.symbol ?? '', - name: jettonMeta?.name ?? '', - precision, - } - }) - } + const jettonsResponse = await this.httpApiRequest( + `/api/v3/jetton/wallets?owner_address=${encodeURIComponent(pubkey)}`, + ) + + tokens = buildTonTokens(jettonsResponse, this.chainId) } catch (err) { console.error('[TON] Error fetching jetton balances:', err) tokens = [] @@ -653,9 +353,83 @@ export class ChainAdapter implements IChainAdapter { } } - const addressBook = data.address_book ?? {} + const addressBook = { ...(data.address_book ?? {}) } + + // Group by trace so a swap is a single transaction carrying all its legs (jetton send + + // native payout), matching parseTx, rather than disconnected send and receive rows + const txsByTrace: Record = {} + for (const tx of data.transactions) { + const traceId = tx.trace_id ?? tx.hash + ;(txsByTrace[traceId] ??= []).push(tx) + } + + const pageHashes = new Set(data.transactions.map(tx => tx.hash)) + const pageMaxLt = data.transactions.map(tx => BigInt(tx.lt)).reduce((a, b) => (a > b ? a : b)) + + // Rows are emitted complete or not at all: a page can slice through a trace, and a trace's + // initiator (whose account decides whether the trace is ours to merge) may live on another + // page. Traces needing resolution are fetched whole in batches - ownership, every leg, and + // an is_incomplete flag in one request each - so a partial group is never emitted for an + // own trace and never overwrites a complete row. + const pendingTraceIds = Object.entries(txsByTrace) + .filter(([traceId]) => { + if (this.traceNotOwnCache.has(`${pubkey}:${traceId}`)) return false + if (!pageHashes.has(traceId)) return true + const initiator = txsByTrace[traceId].find(t => t.hash === traceId) + return Boolean(initiator && BigInt(initiator.lt) + TRACE_COMPLETION_LT_SPAN > pageMaxLt) + }) + .map(([traceId]) => traceId) + + for (let i = 0; i < pendingTraceIds.length; i += TRACE_BATCH_SIZE) { + const batch = pendingTraceIds.slice(i, i + TRACE_BATCH_SIZE) + + try { + // Every leg of every requested trace in a single request - no lt-window or page-size + // assumptions, and is_incomplete flags traces still executing + const result = await this.httpApiRequest( + `/api/v3/traces?trace_id=${batch + .map(encodeURIComponent) + .join(',')}&limit=${TRACE_BATCH_SIZE}`, + ) + Object.assign(addressBook, result.address_book ?? {}) + + const tracesById = new Map((result.traces ?? []).map(trace => [trace.trace_id, trace])) + + for (const traceId of batch) { + const trace = tracesById.get(traceId) + // Not indexed (yet) - emit the page legs as-is + if (!trace) continue + + const initiator = trace.transactions?.[traceId] + if (!initiator || !addressesMatch(initiator.account, pubkey)) { + this.traceNotOwnCache.add(`${pubkey}:${traceId}`) + continue + } + + if (trace.is_incomplete) { + delete txsByTrace[traceId] + continue + } + + txsByTrace[traceId] = ownTraceTxs(trace, pubkey) + } + } catch (error) { + console.error('[TON] Failed to resolve traces, dropping affected rows this page', { + batch, + error, + }) + for (const traceId of batch) delete txsByTrace[traceId] + } + } + + const remainingTxs = Object.values(txsByTrace).flat() - const lts = data.transactions.map(tx => BigInt(tx.lt)) + if (remainingTxs.length === 0) { + const emptyCursor = data.transactions.length === pageSize ? String(offset + pageSize) : '' + return { cursor: emptyCursor, pubkey, transactions: [], txIds: [] } + } + + const lts = remainingTxs.map(tx => BigInt(tx.lt)) const minLt = lts.reduce((a, b) => (a < b ? a : b)).toString() const maxLt = lts.reduce((a, b) => (a > b ? a : b)).toString() @@ -667,50 +441,47 @@ export class ChainAdapter implements IChainAdapter { const jettonAddrBook = { ...addressBook, ...jettonData.address_book } - const jettonOwnerTx: Record = {} - for (const tx of data.transactions) { - const traceId = tx.trace_id ?? tx.hash - const isInitiator = tx.hash === traceId - if (!jettonOwnerTx[traceId] || isInitiator) { - jettonOwnerTx[traceId] = tx.hash - } - } - const transactions: Transaction[] = [] const txIds: string[] = [] - for (const tx of data.transactions) { - const txid = base64ToHex(tx.hash) + for (const [traceId, traceGroup] of Object.entries(txsByTrace)) { + const owner = traceGroup.find(t => t.hash === traceId) ?? traceGroup[0] - if (knownTxIds?.has(txid)) continue + const txid = getTraceOwnerTxid(owner) + + const allTransfers = buildTraceTransfers({ + txs: traceGroup, + jettonTransfers: jettonData.jetton_transfers, + traceId, + pubkey, + addressBook: jettonAddrBook, + assetId: this.assetId, + chainId: this.chainId, + }) + + // e.g. a gas-only excess leg of a foreign trace + if (allTransfers.length === 0) continue txIds.push(txid) - const normalizedTx = resolveAddresses(tx, addressBook) - const parsedTx = parseTonTx(normalizedTx, pubkey, txid, this.assetId, this.chainId) + if (knownTxIds?.has(txid)) continue + + const parsedOwner = parseTonTx( + resolveAddresses(owner, jettonAddrBook), + pubkey, + txid, + this.assetId, + this.chainId, + ) + + const anyAborted = traceGroup.some(t => t.description?.aborted === true) + const anyActionFailed = traceGroup.some(t => t.description?.action?.success === false) + const status = anyAborted || anyActionFailed ? TxStatus.Failed : TxStatus.Confirmed - const traceId = tx.trace_id ?? tx.hash - const shouldAttachJettons = jettonOwnerTx[traceId] === tx.hash - const jettonTransfers = shouldAttachJettons - ? buildJettonTransfers( - jettonData.jetton_transfers, - traceId, - pubkey, - jettonAddrBook, - this.chainId, - ) - : [] - - const hasJettonSends = jettonTransfers.some(t => t.type === TransferType.Send) - const hasJettonReceives = jettonTransfers.some(t => t.type === TransferType.Receive) - const nativeTransfers = parsedTx.transfers.filter(t => { - if (hasJettonSends && t.type === TransferType.Send) return false - if (hasJettonReceives && t.type === TransferType.Receive) return false - return true - }) - const allTransfers = [...nativeTransfers, ...jettonTransfers] transactions.push({ - ...parsedTx, + ...parsedOwner, + status, + confirmations: status === TxStatus.Confirmed ? 1 : 0, transfers: allTransfers, }) } @@ -732,10 +503,7 @@ export class ChainAdapter implements IChainAdapter { async getSeqno(address: string): Promise { try { - const result = await this.rpcRequest<{ - exit_code: number - stack: [string, string][] - }>('runGetMethod', { + const result = await this.rpcRequest('runGetMethod', { address, method: 'seqno', stack: [], @@ -756,10 +524,7 @@ export class ChainAdapter implements IChainAdapter { } async getJettonWalletAddress(jettonMaster: string, ownerAddress: string): Promise { - const response = await this.httpApiRequest<{ - jetton_wallets?: { address: string }[] - address_book?: Record - }>( + const response = await this.httpApiRequest( `/api/v3/jetton/wallets?owner_address=${encodeURIComponent( ownerAddress, )}&jetton_address=${encodeURIComponent(jettonMaster)}&limit=1`, @@ -883,7 +648,7 @@ export class ChainAdapter implements IChainAdapter { try { const { hex: signedTx } = input - const result = await this.rpcRequest<{ hash: string }>('sendBocReturnHash', { + const result = await this.rpcRequest('sendBocReturnHash', { boc: signedTx, }) @@ -907,11 +672,9 @@ export class ChainAdapter implements IChainAdapter { let storageFee = '0' try { - const configResult = await this.rpcRequest<{ - gas_price?: string - flat_gas_limit?: string - flat_gas_price?: string - }>('getConfigParam', { config_id: 20 }) + const configResult = await this.rpcRequest('getConfigParam', { + config_id: 20, + }) if (configResult.gas_price) { const gasPrice = BigInt(configResult.gas_price) @@ -975,12 +738,9 @@ export class ChainAdapter implements IChainAdapter { try { const apiHash = isHexHash(msgHash) ? hexToBase64(msgHash) : msgHash - const result = await this.httpApiRequest<{ - messages?: { - hash: string - in_msg_tx_hash?: string - }[] - }>(`/api/v3/messages?hash=${encodeURIComponent(apiHash)}`) + const result = await this.httpApiRequest( + `/api/v3/messages?hash=${encodeURIComponent(apiHash)}`, + ) if (!result.messages || result.messages.length === 0) { return TxStatus.Pending @@ -1030,15 +790,9 @@ export class ChainAdapter implements IChainAdapter { pubkey: string, startLt: string, endLt: string, - ): Promise<{ - jetton_transfers: JettonTransferRecord[] - address_book: Record - }> { + ): Promise> { try { - const response = await this.httpApiRequest<{ - jetton_transfers?: JettonTransferRecord[] - address_book?: Record - }>( + const response = await this.httpApiRequest( `/api/v3/jetton/transfers?owner_address=${encodeURIComponent( pubkey, )}&start_lt=${startLt}&end_lt=${endLt}&limit=100&sort=asc`, @@ -1053,35 +807,66 @@ export class ChainAdapter implements IChainAdapter { } } - async parseTx(txHashOrTx: unknown, pubkey: string): Promise { - try { - if (typeof txHashOrTx !== 'string') { - throw new Error(`[TON] parseTx expects a string tx hash, got ${typeof txHashOrTx}`) + parseTx(txHashOrTx: unknown, pubkey: string): Promise { + if (typeof txHashOrTx !== 'string') { + throw new Error(`[TON] parseTx expects a string tx hash, got ${typeof txHashOrTx}`) + } + // status poll, history upsert and balance pipeline all parse the same hash within seconds - + // a short-lived memo collapses them into one network run + const cacheKey = `${txHashOrTx}:${pubkey}` + const cached = this.parseTxCache.get(cacheKey) + if ( + cached && + (cached.resolvedAt === undefined || Date.now() - cached.resolvedAt < PARSE_TX_CACHE_TTL_MS) + ) { + return cached.promise + } + + const entry: ParseTxCacheEntry = { promise: this.parseTxImpl(txHashOrTx, pubkey) } + this.parseTxCache.set(cacheKey, entry) + entry.promise.then( + () => { + entry.resolvedAt = Date.now() + }, + () => { + if (this.parseTxCache.get(cacheKey) === entry) this.parseTxCache.delete(cacheKey) + }, + ) + + if (this.parseTxCache.size > 50) { + for (const [key, e] of this.parseTxCache) { + if (e.resolvedAt !== undefined && Date.now() - e.resolvedAt >= PARSE_TX_CACHE_TTL_MS) { + this.parseTxCache.delete(key) + } } - const inputHash = txHashOrTx + } + + return entry.promise + } + private async parseTxImpl(inputHash: string, pubkey: string): Promise { + try { const apiHash = isHexHash(inputHash) ? hexToBase64(inputHash) : inputHash const txid = isHexHash(inputHash) ? inputHash : base64ToHex(inputHash) - const msgResult = await this.httpApiRequest<{ - messages?: { - hash: string - in_msg_tx_hash?: string - source?: string - destination?: string - value?: string - created_at?: string - }[] - }>(`/api/v3/messages?hash=${encodeURIComponent(apiHash)}`) - - if (!msgResult.messages || msgResult.messages.length === 0) { - throw new Error('Message not found') - } + const txResult = await this.httpApiRequest( + `/api/v3/transactionsByMessage?msg_hash=${encodeURIComponent( + apiHash, + )}&direction=in&limit=1`, + ) - const msg = msgResult.messages[0] - const txHash = msg.in_msg_tx_hash + const tx = txResult.transactions?.[0] + + if (!tx) { + // Distinguish a known-but-unprocessed message (pending) from an unknown one + const msgResult = await this.httpApiRequest( + `/api/v3/messages?hash=${encodeURIComponent(apiHash)}`, + ) + + if (!msgResult.messages || msgResult.messages.length === 0) { + throw new Error('Message not found') + } - if (!txHash) { return { txid, blockHeight: 0, @@ -1095,69 +880,38 @@ export class ChainAdapter implements IChainAdapter { } } - const txResult = await this.httpApiRequest( - `/api/v3/transactions?hash=${encodeURIComponent(txHash)}&limit=1`, - ) - - const tx = txResult.transactions?.[0] - - if (!tx) { - throw new Error(`Transaction not found: ${txHash}`) - } - - const traceId = tx.trace_id ?? txHash + const traceId = tx.trace_id ?? tx.hash const endLt = (BigInt(tx.lt) + TRACE_LT_SEARCH_RANGE).toString() - const [traceTxResult, jettonData] = await Promise.all([ - this.httpApiRequest( - `/api/v3/transactions?account=${encodeURIComponent(pubkey)}&start_lt=${ - tx.lt - }&end_lt=${endLt}&sort=asc&limit=20`, + const [traceResult, jettonData] = await Promise.all([ + this.httpApiRequest( + `/api/v3/traces?tx_hash=${encodeURIComponent(tx.hash)}&limit=1`, ), this.fetchJettonTransfers(pubkey, tx.lt, endLt), ]) const addressBook = { ...(txResult.address_book ?? {}), - ...(traceTxResult.address_book ?? {}), + ...(traceResult.address_book ?? {}), ...jettonData.address_book, } - const jettonTransfers = buildJettonTransfers( - jettonData.jetton_transfers, - traceId, - pubkey, - addressBook, - this.chainId, - ) - - const hasJettonSends = jettonTransfers.some(t => t.type === TransferType.Send) - const hasJettonReceives = jettonTransfers.some(t => t.type === TransferType.Receive) - - const nativeTransfers: TxTransfer[] = [] - - const traceTxs = (traceTxResult.transactions ?? []).filter( - t => (t.trace_id ?? t.hash) === traceId, - ) + const trace = traceResult.traces?.[0] + const traceTxs = trace ? ownTraceTxs(trace, pubkey) : [] const primaryTx = traceTxs[0] ?? tx const txsToProcess = traceTxs.length > 0 ? traceTxs : [tx] - const seen = new Set() - - for (const traceTx of txsToProcess) { - const normalizedTraceTx = resolveAddresses(traceTx, addressBook) - const parsed = parseTonTx(normalizedTraceTx, pubkey, txid, this.assetId, this.chainId) - for (const transfer of parsed.transfers) { - if (hasJettonSends && transfer.type === TransferType.Send) continue - if (hasJettonReceives && transfer.type === TransferType.Receive) continue - const key = `${transfer.assetId}-${transfer.from[0]}-${transfer.to[0]}-${transfer.value}-${transfer.type}` - if (seen.has(key)) continue - seen.add(key) - nativeTransfers.push(transfer) - } - } - const allTransfers = [...nativeTransfers, ...jettonTransfers] + const allTransfers = buildTraceTransfers({ + txs: txsToProcess, + jettonTransfers: jettonData.jetton_transfers, + traceId, + pubkey, + addressBook, + assetId: this.assetId, + chainId: this.chainId, + }) + const anyAborted = txsToProcess.some(t => t.description?.aborted === true) const anyActionFailed = txsToProcess.some(t => t.description?.action?.success === false) const status = anyAborted || anyActionFailed ? TxStatus.Failed : TxStatus.Confirmed diff --git a/packages/chain-adapters/src/ton/constants.ts b/packages/chain-adapters/src/ton/constants.ts new file mode 100644 index 00000000000..7d0088ece94 --- /dev/null +++ b/packages/chain-adapters/src/ton/constants.ts @@ -0,0 +1,17 @@ +export const PROXY_TON_CONTRACTS = new Set([ + 'EQCM3B12QK1e4yZSf8GtBRT0aLMNyEsBc_DhVfRRtOEffLez', + 'EQBnGWMCf3-FZZq1W4IWcWiGAc3PHuZ0_H-7sad2oY00o83S', +]) + +// Logical time advances ~1e6 per second, and downstream trace legs (dex payouts, excesses) land +// tens of millions of lts after the initiator - this bounds the search only, results are +// filtered by trace_id +export const TRACE_LT_SEARCH_RANGE = 1_000_000_000n +// Legs of a trace land within this window of its initiator (~5 minutes of logical time) +export const TRACE_COMPLETION_LT_SPAN = 300_000_000n +export const TRACE_BATCH_SIZE = 20 +// Toncenter free tier allows ~1 req/sec; 429s are retried with Retry-After +export const TON_REQUEST_QUEUE_INTERVAL_MS = 1_100 +// Shorter than the 5s status poll interval so each poll still observes fresh chain state +export const PARSE_TX_CACHE_TTL_MS = 4_000 +export const TON_HASH_HEX_LENGTH = 64 diff --git a/packages/chain-adapters/src/ton/index.ts b/packages/chain-adapters/src/ton/index.ts index 5c1651168fa..2971dd95b8a 100644 --- a/packages/chain-adapters/src/ton/index.ts +++ b/packages/chain-adapters/src/ton/index.ts @@ -1,3 +1,6 @@ export { ChainAdapter } from './TonChainAdapter' +export * from './constants' +export * from './parser' export * from './types' +export * from './utils' diff --git a/packages/chain-adapters/src/ton/parser.ts b/packages/chain-adapters/src/ton/parser.ts new file mode 100644 index 00000000000..d9800ec4ddc --- /dev/null +++ b/packages/chain-adapters/src/ton/parser.ts @@ -0,0 +1,295 @@ +import type { AssetId, ChainId } from '@shapeshiftoss/caip' +import { toAssetId } from '@shapeshiftoss/caip' +import { TransferType, TxStatus } from '@shapeshiftoss/unchained-client' + +import type { Transaction, TxTransfer } from '../types' +import type { + JettonTransferRecord, + TonAddressBook, + TonJettonWalletsResponse, + TonToken, + TonTrace, + TonTx, +} from './types' +import { addressesMatch, isProxyTon, resolveAddresses } from './utils' + +// The complete set of this account's transactions within a trace, oldest first +export const ownTraceTxs = (trace: TonTrace, pubkey: string): TonTx[] => { + return Object.values(trace.transactions ?? {}) + .filter(t => addressesMatch(t.account, pubkey)) + .sort((a, b) => (BigInt(a.lt) < BigInt(b.lt) ? -1 : 1)) +} + +export const buildTonTokens = ( + response: TonJettonWalletsResponse, + chainId: ChainId, +): TonToken[] => { + const addressBook = response.address_book ?? {} + const metadata = response.metadata ?? {} + + return (response.jetton_wallets ?? []) + .filter(jw => jw.balance && jw.balance !== '0') + .map(jw => { + const jettonRawAddress = jw.jetton + const jettonUserFriendly = addressBook[jettonRawAddress]?.user_friendly ?? jettonRawAddress + const jettonMeta = metadata[jettonRawAddress]?.token_info?.[0] + const precision = jettonMeta?.extra?.decimals ? parseInt(jettonMeta.extra.decimals, 10) : 9 + + const assetId = toAssetId({ + chainId, + assetNamespace: 'jetton', + assetReference: jettonUserFriendly, + }) + + return { + assetId, + balance: jw.balance, + symbol: jettonMeta?.symbol ?? '', + name: jettonMeta?.name ?? '', + precision, + } + }) +} + +export const buildJettonTransfers = ( + jettonTransfers: JettonTransferRecord[], + traceId: string, + pubkey: string, + addressBook: TonAddressBook, + chainId: ChainId, +): TxTransfer[] => { + const transfers: TxTransfer[] = [] + + const matching = jettonTransfers.filter(jt => jt.trace_id === traceId) + if (matching.length === 0) return transfers + + const friendly = (addr: string) => addressBook[addr]?.user_friendly ?? addr + + for (const transfer of matching) { + if (!transfer.source || !transfer.destination || !transfer.amount || !transfer.jetton_master) + continue + + const sourceUserFriendly = friendly(transfer.source) + const destUserFriendly = friendly(transfer.destination) + const jettonUserFriendly = friendly(transfer.jetton_master) + + if (isProxyTon(jettonUserFriendly)) continue + + const isSend = addressesMatch(sourceUserFriendly, pubkey) + const isReceive = addressesMatch(destUserFriendly, pubkey) + + if (!isSend && !isReceive) continue + + const assetId = toAssetId({ + chainId, + assetNamespace: 'jetton', + assetReference: jettonUserFriendly, + }) + + if (isSend) { + transfers.push({ + assetId, + from: [sourceUserFriendly], + to: [destUserFriendly], + type: TransferType.Send, + value: transfer.amount, + }) + } + + if (isReceive) { + transfers.push({ + assetId, + from: [sourceUserFriendly], + to: [destUserFriendly], + type: TransferType.Receive, + value: transfer.amount, + }) + } + } + + return transfers +} + +export const parseTonTx = ( + tx: TonTx, + pubkey: string, + txid: string, + assetId: AssetId, + chainId: ChainId, +): Transaction => { + const isAborted = tx.description?.aborted ?? false + const actionSuccess = tx.description?.action?.success ?? true + const status = isAborted || !actionSuccess ? TxStatus.Failed : TxStatus.Confirmed + + const transfers: TxTransfer[] = [] + + if (tx.in_msg?.value && tx.in_msg.source && tx.in_msg.destination) { + const inMsgDecodedType = tx.in_msg.message_content?.decoded?.['@type'] + const isExcess = inMsgDecodedType === 'excess' + const value = tx.in_msg.value + if (BigInt(value) > 0n && !isExcess) { + const isReceive = addressesMatch(tx.in_msg.destination, pubkey) + const isSend = addressesMatch(tx.in_msg.source, pubkey) + + if (isSend) { + transfers.push({ + assetId, + from: [tx.in_msg.source], + to: [tx.in_msg.destination], + type: TransferType.Send, + value, + }) + } + if (isReceive) { + transfers.push({ + assetId, + from: [tx.in_msg.source], + to: [tx.in_msg.destination], + type: TransferType.Receive, + value, + }) + } + } + } + + if (tx.out_msgs) { + for (const outMsg of tx.out_msgs) { + if (outMsg.value && outMsg.source && outMsg.destination) { + const decodedType = outMsg.message_content?.decoded?.['@type'] + const value = + decodedType === 'pton_ton_transfer' && + outMsg.message_content?.decoded?.ton_amount?.amount?.value + ? outMsg.message_content.decoded.ton_amount.amount.value + : outMsg.value + if (BigInt(value) > 0n) { + const isSend = addressesMatch(outMsg.source, pubkey) + const isReceive = addressesMatch(outMsg.destination, pubkey) + + if (isSend) { + transfers.push({ + assetId, + from: [outMsg.source], + to: [outMsg.destination], + type: TransferType.Send, + value, + }) + } + if (isReceive) { + transfers.push({ + assetId, + from: [outMsg.source], + to: [outMsg.destination], + type: TransferType.Receive, + value, + }) + } + } + } + } + } + + const isSend = transfers.some(transfer => transfer.type === TransferType.Send) + + return { + txid, + blockHeight: Number(tx.lt) || 0, + blockTime: tx.now || 0, + blockHash: undefined, + chainId, + confirmations: status === TxStatus.Confirmed ? 1 : 0, + status, + transfers, + pubkey, + ...(isSend && tx.total_fees && { fee: { assetId, value: tx.total_fees } }), + } +} + +// Raw message values misstate native swap legs (gas budgets ride the envelope, refunds ride the +// payout) - swap rows use the proxy TON jetton amount when present, net native flow otherwise +export const buildTraceTransfers = ({ + txs, + jettonTransfers, + traceId, + pubkey, + addressBook, + assetId, + chainId, +}: { + txs: TonTx[] + jettonTransfers: JettonTransferRecord[] + traceId: string + pubkey: string + addressBook: TonAddressBook + assetId: AssetId + chainId: ChainId +}): TxTransfer[] => { + const jetton = buildJettonTransfers(jettonTransfers, traceId, pubkey, addressBook, chainId) + + const seen = new Set() + const native: TxTransfer[] = [] + for (const tx of txs) { + const parsed = parseTonTx(resolveAddresses(tx, addressBook), pubkey, '', assetId, chainId) + for (const transfer of parsed.transfers) { + // Scoped to the source tx so identical legs from different txs both survive + const key = `${tx.hash}-${transfer.assetId}-${transfer.from[0]}-${transfer.to[0]}-${transfer.value}-${transfer.type}` + if (seen.has(key)) continue + seen.add(key) + native.push(transfer) + } + } + + // Plain native transfers keep their per-leg values + if (jetton.length === 0) return native + + const friendly = (addr: string) => addressBook[addr]?.user_friendly ?? addr + + const proxyAmounts: Partial> = {} + for (const transfer of jettonTransfers) { + if (transfer.trace_id !== traceId) continue + if (!transfer.source || !transfer.destination || !transfer.amount || !transfer.jetton_master) + continue + if (!isProxyTon(friendly(transfer.jetton_master))) continue + + // Summed per direction - split routes move the wrapped amount in multiple legs + if (addressesMatch(friendly(transfer.source), pubkey)) { + proxyAmounts[TransferType.Send] = ( + BigInt(proxyAmounts[TransferType.Send] ?? '0') + BigInt(transfer.amount) + ).toString() + } + if (addressesMatch(friendly(transfer.destination), pubkey)) { + proxyAmounts[TransferType.Receive] = ( + BigInt(proxyAmounts[TransferType.Receive] ?? '0') + BigInt(transfer.amount) + ).toString() + } + } + + // Net native flow across the trace, gas envelopes and excess refunds included (fees excluded) + let net = 0n + for (const tx of txs) { + if (tx.in_msg?.value && tx.in_msg.source) net += BigInt(tx.in_msg.value) + for (const outMsg of tx.out_msgs ?? []) { + if (outMsg.value) net -= BigInt(outMsg.value) + } + } + + const hasJettonSend = jetton.some(t => t.type === TransferType.Send) + const hasJettonReceive = jetton.some(t => t.type === TransferType.Receive) + const sends = native.filter(t => t.type === TransferType.Send) + const receives = native.filter(t => t.type === TransferType.Receive) + + const nativeLegs: TxTransfer[] = [] + + if (proxyAmounts[TransferType.Send] && sends.length === 1) { + nativeLegs.push({ ...sends[0], value: proxyAmounts[TransferType.Send] }) + } else if (net < 0n && hasJettonReceive && !hasJettonSend && sends.length > 0) { + nativeLegs.push({ ...sends[0], value: (-net).toString() }) + } + + if (proxyAmounts[TransferType.Receive] && receives.length === 1) { + nativeLegs.push({ ...receives[0], value: proxyAmounts[TransferType.Receive] }) + } else if (net > 0n && hasJettonSend && !hasJettonReceive && receives.length > 0) { + nativeLegs.push({ ...receives[0], value: net.toString() }) + } + + return [...nativeLegs, ...jetton] +} diff --git a/packages/chain-adapters/src/ton/types.ts b/packages/chain-adapters/src/ton/types.ts index f5cc430e72a..178ca76d086 100644 --- a/packages/chain-adapters/src/ton/types.ts +++ b/packages/chain-adapters/src/ton/types.ts @@ -47,6 +47,7 @@ export type TonSignTx = { } export type TonTxMessage = { + hash?: string source?: string destination?: string value?: string @@ -87,9 +88,91 @@ export type JettonTransferRecord = { trace_id?: string } +export type TonAddressBook = Record + export type TonApiTxResponse = { transactions?: TonTx[] - address_book?: Record + address_book?: TonAddressBook +} + +export type TonJettonWallet = { + address: string + balance: string + jetton: string +} + +export type TonJettonWalletsResponse = { + jetton_wallets?: TonJettonWallet[] + address_book?: TonAddressBook + metadata?: Record< + string, + { + token_info?: { + name?: string + symbol?: string + extra?: { + decimals?: string + } + }[] + } + > +} + +export type TonJettonTransfersResponse = { + jetton_transfers?: JettonTransferRecord[] + address_book?: TonAddressBook +} + +export type TonMessage = { + hash: string + in_msg_tx_hash?: string +} + +export type TonMessagesResponse = { + messages?: TonMessage[] +} + +export type TonRunGetMethodResult = { + exit_code: number + stack: [string, string][] +} + +export type TonSendBocResult = { + hash: string +} + +export type TonConfigParamResult = { + gas_price?: string + flat_gas_limit?: string + flat_gas_price?: string +} + +export type ChainAdapterArgs = { + rpcUrl: string +} + +export type TonRpcResponse = { + ok: boolean + result?: T + error?: string +} + +export type TonAccountInfo = { + balance: string + state: 'active' | 'uninitialized' | 'frozen' + code?: string + data?: string +} + +export type TonTrace = { + trace_id: string + is_incomplete?: boolean + transactions?: Record +} + +export type TonTracesResponse = { + traces?: TonTrace[] + address_book?: TonAddressBook } export type Account = TonAccount diff --git a/packages/chain-adapters/src/ton/utils.ts b/packages/chain-adapters/src/ton/utils.ts new file mode 100644 index 00000000000..cf2518856e7 --- /dev/null +++ b/packages/chain-adapters/src/ton/utils.ts @@ -0,0 +1,110 @@ +import { base64ToHex } from '@shapeshiftoss/utils' +import { Address } from '@ton/core' + +import { PROXY_TON_CONTRACTS, TON_HASH_HEX_LENGTH } from './constants' +import type { TonAddressBook, TonTx } from './types' + +export const isHexHash = (str: string): boolean => { + return str.length === TON_HASH_HEX_LENGTH && /^[0-9a-f]+$/i.test(str) +} + +export const addressesMatch = (addr1: string, addr2: string): boolean => { + if (!addr1 || !addr2) return false + if (addr1 === addr2) return true + try { + return Address.parse(addr1).equals(Address.parse(addr2)) + } catch { + const normalize = (a: string) => a.replace(/^0:/, '').toLowerCase() + return normalize(addr1) === normalize(addr2) + } +} + +export const isProxyTon = (jettonMaster: string): boolean => { + if (PROXY_TON_CONTRACTS.has(jettonMaster)) return true + try { + const parsed = Address.parse(jettonMaster) + for (const known of PROXY_TON_CONTRACTS) { + try { + if (parsed.equals(Address.parse(known))) return true + } catch { + continue + } + } + } catch {} + return false +} + +export const resolveAddresses = (tx: TonTx, addressBook: TonAddressBook): TonTx => { + const resolve = (addr: string | undefined): string | undefined => + addr ? addressBook[addr]?.user_friendly ?? addr : addr + + return { + ...tx, + in_msg: tx.in_msg + ? { + ...tx.in_msg, + source: resolve(tx.in_msg.source), + destination: resolve(tx.in_msg.destination), + } + : tx.in_msg, + out_msgs: tx.out_msgs?.map(msg => ({ + ...msg, + source: resolve(msg.source), + destination: resolve(msg.destination), + })), + } +} + +// Externally-initiated txs are keyed by their message hash - the same id broadcast returns and +// parseTx uses, so rows upserted at swap time and history rows share one identity +export const getTraceOwnerTxid = (owner: TonTx): string => { + const isExternalInitiated = !owner.in_msg?.source && Boolean(owner.in_msg?.hash) + return base64ToHex(isExternalInitiated && owner.in_msg?.hash ? owner.in_msg.hash : owner.hash) +} + +export const formatTonError = (error: string): string => { + if (error.includes('INVALID_BAG_OF_CELLS')) { + return `TON transaction serialization error: ${error}. This may indicate an invalid transaction format.` + } + if (error.includes('seqno')) { + return `TON sequence number error: ${error}. The transaction may be stale or already processed.` + } + if (error.includes('not enough balance') || error.includes('insufficient')) { + return `TON insufficient balance: ${error}` + } + return `TON RPC error: ${error}` +} + +export const isRetryableError = (error: string): boolean => { + const lowerError = error.toLowerCase() + + const nonRetryablePatterns = [ + 'insufficient', + 'not enough balance', + 'invalid', + 'malformed', + 'unauthorized', + 'forbidden', + 'not found', + 'bad request', + 'seqno', + ] + if (nonRetryablePatterns.some(pattern => lowerError.includes(pattern))) { + return false + } + + const retryablePatterns = [ + 'timeout', + 'etimedout', + 'econnreset', + 'econnrefused', + 'network', + 'temporarily unavailable', + 'rate limit', + '429', + '500', + '502', + '503', + ] + return retryablePatterns.some(pattern => lowerError.includes(pattern)) +} diff --git a/packages/chain-adapters/src/types.ts b/packages/chain-adapters/src/types.ts index fbdd05171fb..e382619058a 100644 --- a/packages/chain-adapters/src/types.ts +++ b/packages/chain-adapters/src/types.ts @@ -71,6 +71,8 @@ type ChainSpecificAccount = ChainSpecific< [KnownChainIds.SoneiumMainnet]: evm.Account [KnownChainIds.SeiMainnet]: evm.Account [KnownChainIds.AbstractMainnet]: evm.Account + [KnownChainIds.RobinhoodMainnet]: evm.Account + [KnownChainIds.BitcoinMainnet]: utxo.Account [KnownChainIds.BitcoinCashMainnet]: utxo.Account [KnownChainIds.DogecoinMainnet]: utxo.Account @@ -145,6 +147,8 @@ type ChainSpecificFeeData = ChainSpecific< [KnownChainIds.SoneiumMainnet]: evm.FeeData [KnownChainIds.SeiMainnet]: evm.FeeData [KnownChainIds.AbstractMainnet]: evm.FeeData + [KnownChainIds.RobinhoodMainnet]: evm.FeeData + [KnownChainIds.BitcoinMainnet]: utxo.FeeData [KnownChainIds.BitcoinCashMainnet]: utxo.FeeData [KnownChainIds.DogecoinMainnet]: utxo.FeeData @@ -252,6 +256,8 @@ export type ChainSignTx = { [KnownChainIds.SoneiumMainnet]: ETHSignTx [KnownChainIds.SeiMainnet]: ETHSignTx [KnownChainIds.AbstractMainnet]: ETHSignTx + [KnownChainIds.RobinhoodMainnet]: ETHSignTx + [KnownChainIds.BitcoinMainnet]: BTCSignTx [KnownChainIds.BitcoinCashMainnet]: BTCSignTx [KnownChainIds.DogecoinMainnet]: BTCSignTx @@ -331,6 +337,8 @@ export type ChainSpecificBuildTxData = ChainSpecific< [KnownChainIds.SoneiumMainnet]: evm.BuildTxInput [KnownChainIds.SeiMainnet]: evm.BuildTxInput [KnownChainIds.AbstractMainnet]: evm.BuildTxInput + [KnownChainIds.RobinhoodMainnet]: evm.BuildTxInput + [KnownChainIds.BitcoinMainnet]: utxo.BuildTxInput [KnownChainIds.BitcoinCashMainnet]: utxo.BuildTxInput [KnownChainIds.DogecoinMainnet]: utxo.BuildTxInput @@ -460,6 +468,8 @@ type ChainSpecificGetFeeDataInput = ChainSpecific< [KnownChainIds.SoneiumMainnet]: evm.GetFeeDataInput [KnownChainIds.SeiMainnet]: evm.GetFeeDataInput [KnownChainIds.AbstractMainnet]: evm.GetFeeDataInput + [KnownChainIds.RobinhoodMainnet]: evm.GetFeeDataInput + [KnownChainIds.BitcoinMainnet]: utxo.GetFeeDataInput [KnownChainIds.BitcoinCashMainnet]: utxo.GetFeeDataInput [KnownChainIds.DogecoinMainnet]: utxo.GetFeeDataInput @@ -566,6 +576,7 @@ export enum ChainAdapterDisplayName { Starknet = 'Starknet', Ton = 'TON', Abstract = 'Abstract', + Robinhood = 'Robinhood', } export type BroadcastTransactionInput = { diff --git a/packages/contracts/package.json b/packages/contracts/package.json index e27a7d5148e..5a33df72364 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -36,7 +36,7 @@ "ethers": "6.11.1", "ethers5": "npm:ethers@5.7.2", "lodash": "^4.17.23", - "viem": "2.43.5" + "viem": "2.55.11" }, "devDependencies": { "@types/lodash": "^4.14.178" diff --git a/packages/contracts/src/ethersProviderSingleton.ts b/packages/contracts/src/ethersProviderSingleton.ts index 1d512384c78..bd201b0924f 100644 --- a/packages/contracts/src/ethersProviderSingleton.ts +++ b/packages/contracts/src/ethersProviderSingleton.ts @@ -82,6 +82,8 @@ export const rpcUrlByChainId = (chainId: EvmChainId): string => { return PUBLIC_RPC_URLS.sei[0] case KnownChainIds.AbstractMainnet: return PUBLIC_RPC_URLS.abstract[0] + case KnownChainIds.RobinhoodMainnet: + return PUBLIC_RPC_URLS.robinhood[0] default: return assertUnreachable(chainId) } diff --git a/packages/contracts/src/publicRpcUrls.ts b/packages/contracts/src/publicRpcUrls.ts index 12d5a518b2e..69d2f055b1e 100644 --- a/packages/contracts/src/publicRpcUrls.ts +++ b/packages/contracts/src/publicRpcUrls.ts @@ -95,4 +95,5 @@ export const PUBLIC_RPC_URLS = { 'https://zksync.drpc.org', 'https://zksync.api.onfinality.io/public', ], + robinhood: ['https://rpc.mainnet.chain.robinhood.com', 'https://robinhood-rpc.publicnode.com'], } as const diff --git a/packages/contracts/src/viemClient.ts b/packages/contracts/src/viemClient.ts index 076dbc2c0dd..251080810ea 100644 --- a/packages/contracts/src/viemClient.ts +++ b/packages/contracts/src/viemClient.ts @@ -23,12 +23,14 @@ import { linea, mainnet, mantle, + megaeth, mode, monad, optimism, plasma, plumeMainnet, polygon, + robinhood, scroll, sei, soneium, @@ -41,29 +43,6 @@ import { import { PUBLIC_RPC_URLS } from './publicRpcUrls' -const megaeth = defineChain({ - id: 4326, - name: 'MegaETH', - nativeCurrency: { - name: 'Ether', - symbol: 'ETH', - decimals: 18, - }, - rpcUrls: { - default: { - http: ['https://mainnet.megaeth.com/rpc'], - }, - }, - blockExplorers: { - default: { - name: 'MegaETH Explorer', - url: 'https://megaeth.blockscout.com', - }, - }, -}) - -export const flowEvmChain = flowMainnet - // Builds a viem fallback transport. `privateUrl` is the preferred source (e.g. ShapeShift proxy) // and is tried first; `publicUrls` are public endpoints used as backups. Pass `undefined` for // `privateUrl` when the chain has no private RPC (second-class chains). @@ -257,6 +236,11 @@ export const viemSoneiumClient = createPublicClient({ transport: createRpcTransport(undefined, PUBLIC_RPC_URLS.soneium), }) as PublicClient +export const viemRobinhoodClient = createPublicClient({ + chain: robinhood, + transport: createRpcTransport(undefined, PUBLIC_RPC_URLS.robinhood), +}) as PublicClient + export const viemClientByChainId: Record = { [KnownChainIds.EthereumMainnet]: viemEthMainnetClient, [KnownChainIds.BnbSmartChainMainnet]: viemBscClient, @@ -293,6 +277,7 @@ export const viemClientByChainId: Record = { [KnownChainIds.SoneiumMainnet]: viemSoneiumClient, [KnownChainIds.SeiMainnet]: viemSeiClient, [KnownChainIds.AbstractMainnet]: viemAbstractClient, + [KnownChainIds.RobinhoodMainnet]: viemRobinhoodClient, } export const viemNetworkIdByChainId: Record = { @@ -331,6 +316,7 @@ export const viemNetworkIdByChainId: Record = { [KnownChainIds.SoneiumMainnet]: soneium.id, [KnownChainIds.SeiMainnet]: sei.id, [KnownChainIds.AbstractMainnet]: abstract.id, + [KnownChainIds.RobinhoodMainnet]: robinhood.id, } export const viemClientByNetworkId: Record = { @@ -369,6 +355,7 @@ export const viemClientByNetworkId: Record = { [soneium.id]: viemSoneiumClient, [sei.id]: viemSeiClient, [abstract.id]: viemAbstractClient, + [robinhood.id]: viemRobinhoodClient, } export const assertGetViemClient = (chainId: ChainId): PublicClient => { diff --git a/packages/hdwallet-coinbase/src/coinbase.ts b/packages/hdwallet-coinbase/src/coinbase.ts index 3c783737f6f..3b5d0f90528 100644 --- a/packages/hdwallet-coinbase/src/coinbase.ts +++ b/packages/hdwallet-coinbase/src/coinbase.ts @@ -154,6 +154,7 @@ export class CoinbaseHDWallet implements core.HDWallet, core.ETHWallet { readonly _supportsKavaInfo = false readonly _supportsTerra = false readonly _supportsTerraInfo = false + readonly _supportsRobinhood = false info: CoinbaseHDWalletInfo & core.HDWalletInfo ethAddress?: Address | null diff --git a/packages/hdwallet-core/src/ethereum.ts b/packages/hdwallet-core/src/ethereum.ts index 658407c8f82..f8d8538f417 100644 --- a/packages/hdwallet-core/src/ethereum.ts +++ b/packages/hdwallet-core/src/ethereum.ts @@ -232,6 +232,7 @@ export interface ETHWallet extends ETHWalletInfo, HDWallet { readonly _supportsCronos: boolean readonly _supportsUnichain: boolean readonly _supportsSoneium: boolean + readonly _supportsRobinhood: boolean ethGetAddress(msg: ETHGetAddress): Promise
ethGetAddresses?(msgs: ETHGetAddress[]): Promise diff --git a/packages/hdwallet-core/src/wallet.ts b/packages/hdwallet-core/src/wallet.ts index 97ec2596115..6ca6656669c 100644 --- a/packages/hdwallet-core/src/wallet.ts +++ b/packages/hdwallet-core/src/wallet.ts @@ -277,6 +277,10 @@ export function supportsSoneium(wallet: HDWallet): wallet is ETHWallet { return isObject(wallet) && (wallet as any)._supportsSoneium } +export function supportsRobinhood(wallet: HDWallet): wallet is ETHWallet { + return isObject(wallet) && (wallet as any)._supportsRobinhood +} + export function infoCosmos(info: HDWalletInfo): info is CosmosWalletInfo { return isObject(info) && (info as any)._supportsCosmosInfo } diff --git a/packages/hdwallet-gridplus/src/gridplus.ts b/packages/hdwallet-gridplus/src/gridplus.ts index 054bf4b4b08..bcd3d592568 100644 --- a/packages/hdwallet-gridplus/src/gridplus.ts +++ b/packages/hdwallet-gridplus/src/gridplus.ts @@ -390,6 +390,7 @@ export class GridPlusHDWallet readonly _supportsCosmos = true readonly _supportsETH = true readonly _supportsEthSwitchChain = false + readonly _supportsRobinhood = false readonly _supportsGnosis = true readonly _supportsMayachain = true readonly _supportsOptimism = true diff --git a/packages/hdwallet-keepkey/src/keepkey.ts b/packages/hdwallet-keepkey/src/keepkey.ts index 4afe565a53a..25b7f3a70bf 100644 --- a/packages/hdwallet-keepkey/src/keepkey.ts +++ b/packages/hdwallet-keepkey/src/keepkey.ts @@ -576,6 +576,7 @@ export class KeepKeyHDWallet readonly _supportsCronos = false readonly _supportsUnichain = false readonly _supportsSoneium = false + readonly _supportsRobinhood = false readonly _supportsBTC = true _supportsCosmos = true _supportsOsmosis = true diff --git a/packages/hdwallet-ledger/src/ledger.ts b/packages/hdwallet-ledger/src/ledger.ts index a9d4e1b9343..40fe2518732 100644 --- a/packages/hdwallet-ledger/src/ledger.ts +++ b/packages/hdwallet-ledger/src/ledger.ts @@ -460,6 +460,7 @@ export class LedgerHDWallet readonly _supportsSui = true readonly _supportsTron = true readonly _supportsNear = true + readonly _supportsRobinhood = true _isLedger = true diff --git a/packages/hdwallet-metamask-multichain/src/native-multichain.ts b/packages/hdwallet-metamask-multichain/src/native-multichain.ts index b970148202f..53368b1b038 100644 --- a/packages/hdwallet-metamask-multichain/src/native-multichain.ts +++ b/packages/hdwallet-metamask-multichain/src/native-multichain.ts @@ -304,6 +304,7 @@ export class MetaMaskNativeMultiChainHDWallet readonly _supportsCronos = true readonly _supportsUnichain = true readonly _supportsSoneium = true + readonly _supportsRobinhood = true readonly _supportsOsmosisInfo = false readonly _supportsOsmosis = false readonly _supportsBinanceInfo = false diff --git a/packages/hdwallet-metamask-multichain/src/shapeshift-multichain.ts b/packages/hdwallet-metamask-multichain/src/shapeshift-multichain.ts index 472fcee7638..f7ad32cbe86 100644 --- a/packages/hdwallet-metamask-multichain/src/shapeshift-multichain.ts +++ b/packages/hdwallet-metamask-multichain/src/shapeshift-multichain.ts @@ -316,6 +316,7 @@ export class MetaMaskMultiChainHDWallet readonly _supportsEos = false readonly _supportsThorchainInfo = true readonly _supportsThorchain = true + readonly _supportsRobinhood = true info: MetaMaskMultiChainHDWalletInfo & core.HDWalletInfo bitcoinAddress?: string | null diff --git a/packages/hdwallet-native/src/ethereum.ts b/packages/hdwallet-native/src/ethereum.ts index f01d48ac42e..e5c2a37a27c 100644 --- a/packages/hdwallet-native/src/ethereum.ts +++ b/packages/hdwallet-native/src/ethereum.ts @@ -92,6 +92,7 @@ export function MixinNativeETHWallet { - return [1, 10, 56, 100, 137, 43114, 2741].includes(chainId) + return [1, 10, 56, 100, 137, 43114, 2741, 4663].includes(chainId) } public async ethSupportsSecureTransfer(): Promise { @@ -234,6 +234,7 @@ export class WalletConnectV2HDWallet implements HDWallet, ETHWallet, BTCWallet { readonly _supportsCronos = true readonly _supportsUnichain = true readonly _supportsSoneium = true + readonly _supportsRobinhood = true info: WalletConnectV2WalletInfo & HDWalletInfo provider: EthereumProvider diff --git a/packages/public-api/.env.example b/packages/public-api/.env.example index 2a3d2319863..523a598dad7 100644 --- a/packages/public-api/.env.example +++ b/packages/public-api/.env.example @@ -48,7 +48,7 @@ VITE_PLASMA_NODE_URL=https://rpc.plasma.to THORCHAIN_NODE_URL=https://dev-api.thorchain.shapeshift.com/lcd MAYACHAIN_NODE_URL=https://dev-api.mayachain.shapeshift.com/lcd TRON_NODE_URL=https://api.trongrid.io -SUI_NODE_URL=https://fullnode.mainnet.sui.io +SUI_NODE_URL=https://sui-rpc.publicnode.com SOLANA_NODE_URL=https://dev-api.solana.shapeshift.com/api/v1/jsonrpc TON_NODE_URL=https://toncenter.com/api/v2/jsonRPC STARKNET_NODE_URL=https://rpc.starknet.lava.build @@ -72,9 +72,11 @@ CHAINFLIP_API_URL=https://chainflip-broker.io # Swapper API Keys ACROSS_INTEGRATOR_ID= +ACROSS_API_KEY= BEBOP_API_KEY= CHAINFLIP_API_KEY= NEAR_INTENTS_API_KEY= +RELAY_API_KEY= # Affiliate DEFAULT_AFFILIATE_BPS=60 diff --git a/packages/public-api/docs/rest-api-guide.md b/packages/public-api/docs/rest-api-guide.md index 33e442c6913..ba198410d91 100644 --- a/packages/public-api/docs/rest-api-guide.md +++ b/packages/public-api/docs/rest-api-guide.md @@ -44,7 +44,7 @@ X-Partner-Code: your-partner-code - `swapperName` comes from the rate you chose in step 2. - `slippageTolerancePercentageDecimal` is optional; `accountNumber` is optional (defaults to `0`) and is needed for chains that derive addresses per account index (e.g. UTXO/Cosmos). - The response includes a `quoteId` (needed for status tracking), an `approval` object (whether an ERC-20 approval is required, the spender, and ready-to-sign `approvalTxs` when it is), and a `steps` array. Each step may include `transactionData` — a discriminated union on `type` (`evm`, `solana`, `utxo`, `cosmossdk_msg_send`, `cosmossdk_msg_deposit`) — describing exactly what to sign for that chain. -- Quotes expire: honor the `expiresAt` timestamp (≈ 60s after issue). Request a fresh quote rather than submitting an expired one. +- Quotes expire: honor the `expiresAt` timestamp — it reflects the swapper's own quote deadline (e.g. THORChain inbound addresses rotate, deposit-address swappers deactivate their channels; deadline-less providers get a conservative 60s). **Never sign or broadcast after `expiresAt`** — for deposit-style swappers funds sent late can be lost. Request a fresh quote instead. ## 4. Execute the swap diff --git a/packages/public-api/package.json b/packages/public-api/package.json index d0f497b85a0..2b91531a1e9 100644 --- a/packages/public-api/package.json +++ b/packages/public-api/package.json @@ -29,7 +29,7 @@ "express": "^4.21.0", "express-rate-limit": "^7.5.0", "uuid": "^9.0.0", - "viem": "2.43.5", + "viem": "2.55.11", "yaml": "^2.8.2", "zod": "3.23.8" }, diff --git a/packages/public-api/src/config.ts b/packages/public-api/src/config.ts index 7d50d41dfd2..fd4019f14f9 100644 --- a/packages/public-api/src/config.ts +++ b/packages/public-api/src/config.ts @@ -28,12 +28,14 @@ export const getServerConfig = (): SwapperConfig => ({ VITE_CHAINFLIP_API_URL: env.CHAINFLIP_API_URL, VITE_FEATURE_CHAINFLIP_SWAP_DCA: env.FEATURE_CHAINFLIP_SWAP_DCA, VITE_RELAY_API_URL: env.RELAY_API_URL, + VITE_RELAY_API_KEY: env.RELAY_API_KEY, VITE_BEBOP_API_KEY: env.BEBOP_API_KEY, VITE_NEAR_INTENTS_API_KEY: env.NEAR_INTENTS_API_KEY, VITE_TRON_GRID_API_KEY: env.TRON_GRID_API_KEY, VITE_SUI_NODE_URL: env.SUI_NODE_URL, VITE_ACROSS_API_URL: env.ACROSS_API_URL, VITE_ACROSS_INTEGRATOR_ID: env.ACROSS_INTEGRATOR_ID, + VITE_ACROSS_API_KEY: env.ACROSS_API_KEY, VITE_DEBRIDGE_API_URL: env.DEBRIDGE_API_URL, VITE_BOB_GATEWAY_API_KEY: env.BOB_GATEWAY_API_KEY, }) diff --git a/packages/public-api/src/constants.ts b/packages/public-api/src/constants.ts index 30f41055a52..e681718aa64 100644 --- a/packages/public-api/src/constants.ts +++ b/packages/public-api/src/constants.ts @@ -54,3 +54,7 @@ export const ENABLED_SWAPPER_NAMES: readonly SwapperName[] = [ SwapperName.Thorchain, SwapperName.Zrx, ] + +// Sanity ceiling catching provider deadline bugs (unit inflation, sentinel far-future dates). +// Widest legitimate deadline today is chainflip's 6h - raise this if a swapper ever quotes longer. +export const MAX_QUOTE_DEADLINE_MS = 7 * 24 * 60 * 60 * 1000 diff --git a/packages/public-api/src/env.ts b/packages/public-api/src/env.ts index b622983033d..d9851eb9445 100644 --- a/packages/public-api/src/env.ts +++ b/packages/public-api/src/env.ts @@ -78,10 +78,12 @@ const envSchema = z.object({ // Swapper API keys ACROSS_INTEGRATOR_ID: z.string().default(''), + ACROSS_API_KEY: z.string().default(''), BEBOP_API_KEY: z.string().min(1), BOB_GATEWAY_API_KEY: z.string().default(''), CHAINFLIP_API_KEY: z.string().min(1), NEAR_INTENTS_API_KEY: z.string().min(1), + RELAY_API_KEY: z.string().default(''), TRON_GRID_API_KEY: z.string().default(''), // Feature flags diff --git a/packages/public-api/src/lib/quoteStore.test.ts b/packages/public-api/src/lib/quoteStore.test.ts index ae8f5dc28ad..9dd5c5606ff 100644 --- a/packages/public-api/src/lib/quoteStore.test.ts +++ b/packages/public-api/src/lib/quoteStore.test.ts @@ -3,6 +3,9 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { StoredQuote } from './quoteStore' import { QuoteStore } from './quoteStore' +// The store treats expiresAt as caller-provided data (swapper deadline + bind grace in prod) +const QUOTE_TTL_MS = 15 * 60 * 1000 + const makeQuote = (overrides: Partial = {}): StoredQuote => ({ quoteId: 'quote-1', swapperName: '0x', @@ -18,7 +21,7 @@ const makeQuote = (overrides: Partial = {}): StoredQuote => ({ sendAddress: '0xsender', rate: '1800', createdAt: Date.now(), - expiresAt: Date.now() + QuoteStore.QUOTE_TTL_MS, + expiresAt: Date.now() + QUOTE_TTL_MS, metadata: { stepIndex: 0, quoteId: 'quote-1', @@ -56,14 +59,14 @@ describe('QuoteStore', () => { it('returns quote within QUOTE_TTL_MS', () => { const quote = makeQuote() store.set(quote.quoteId, quote) - vi.advanceTimersByTime(QuoteStore.QUOTE_TTL_MS - 1) + vi.advanceTimersByTime(QUOTE_TTL_MS - 1) expect(store.get(quote.quoteId)).toBeDefined() }) it('expires quote after QUOTE_TTL_MS', () => { const quote = makeQuote() store.set(quote.quoteId, quote) - vi.advanceTimersByTime(QuoteStore.QUOTE_TTL_MS + 1) + vi.advanceTimersByTime(QUOTE_TTL_MS + 1) expect(store.get(quote.quoteId)).toBeUndefined() }) }) @@ -74,13 +77,13 @@ describe('QuoteStore', () => { const quote = makeQuote({ txHash: '0xabc', registeredAt: now, - expiresAt: now + QuoteStore.QUOTE_TTL_MS, + expiresAt: now + QUOTE_TTL_MS, status: 'submitted', }) store.set(quote.quoteId, quote) // past QUOTE_TTL but within EXECUTION_TTL - vi.advanceTimersByTime(QuoteStore.QUOTE_TTL_MS + 1) + vi.advanceTimersByTime(QUOTE_TTL_MS + 1) expect(store.get(quote.quoteId)).toBeDefined() }) @@ -158,7 +161,7 @@ describe('QuoteStore', () => { store.set(quote.quoteId, quote) expect(store.size()).toBe(1) - vi.advanceTimersByTime(QuoteStore.QUOTE_TTL_MS + QuoteStore.CLEANUP_INTERVAL_MS + 1) + vi.advanceTimersByTime(QUOTE_TTL_MS + QuoteStore.CLEANUP_INTERVAL_MS + 1) expect(store.size()).toBe(0) }) diff --git a/packages/public-api/src/lib/quoteStore.ts b/packages/public-api/src/lib/quoteStore.ts index ac399ae1dbf..d61ba699244 100644 --- a/packages/public-api/src/lib/quoteStore.ts +++ b/packages/public-api/src/lib/quoteStore.ts @@ -25,8 +25,8 @@ export type StoredQuote = { /** * In-memory quote store with dual TTL: - * - 15 minutes for unsubmitted quotes (quote validity window) - * - 60 minutes after txHash is bound (execution tracking window) + * - unsubmitted: swapper deadline + bind grace (a slow first confirmation must still bind) + * - submitted: txHash bind time + execution TTL (destination-chain settlement tracking) * * Automatic sweep of expired entries every 60 seconds. * Migration path: swap to Redis with zero code changes (same get/set/delete interface). @@ -36,7 +36,7 @@ export class QuoteStore { private txHashIndex = new Map() private cleanupInterval: ReturnType - static readonly QUOTE_TTL_MS = 15 * 60 * 1000 + static readonly BIND_GRACE_MS = 60 * 60 * 1000 static readonly EXECUTION_TTL_MS = 60 * 60 * 1000 static readonly CLEANUP_INTERVAL_MS = 60 * 1000 static readonly MAX_QUOTES = 10000 diff --git a/packages/public-api/src/routes/quote/getQuote.ts b/packages/public-api/src/routes/quote/getQuote.ts index 0f856b6459b..98d239fa2da 100644 --- a/packages/public-api/src/routes/quote/getQuote.ts +++ b/packages/public-api/src/routes/quote/getQuote.ts @@ -12,7 +12,7 @@ import type { Request, Response } from 'express' import { v4 as uuidv4 } from 'uuid' import { getAsset } from '../../assets' -import { ENABLED_SWAPPER_NAMES } from '../../constants' +import { ENABLED_SWAPPER_NAMES, MAX_QUOTE_DEADLINE_MS } from '../../constants' import { env } from '../../env' import { QuoteStore, quoteStore } from '../../lib/quoteStore' import { registry } from '../../registry' @@ -48,6 +48,7 @@ registry.registerPath({ 404: { description: 'No quote available' }, 429: rateLimitResponse, 500: { description: 'Internal server error' }, + 502: { description: 'Swapper returned an expired or implausible quote deadline' }, }, }) @@ -171,7 +172,6 @@ export const getQuote = async (req: Request, res: Response): Promise => { const lastStep = quote.steps[quote.steps.length - 1] const quoteId = uuidv4() - const now = Date.now() const baseQuote = { quoteId, @@ -184,6 +184,28 @@ export const getQuote = async (req: Request, res: Response): Promise => { rate: quote.rate, } + const approval = await buildApprovalInfo(step, sendAddress) + + // taken after the allowance rpc reads so a slow check can't sneak an expired quote through + const now = Date.now() + + if (!Number.isFinite(quote.deadline) || quote.deadline <= now) { + res.status(502).json({ + error: 'Swapper quote expired before it could be returned; request a new quote', + } satisfies ErrorResponse) + return + } + + if (quote.deadline > now + MAX_QUOTE_DEADLINE_MS) { + console.error( + `[getQuote] ${validSwapperName} deadline ${quote.deadline} exceeds MAX_QUOTE_DEADLINE_MS sanity ceiling - provider bug, or raise the ceiling if this swapper legitimately quotes longer`, + ) + res.status(502).json({ + error: `Swapper quote deadline exceeds the MAX_QUOTE_DEADLINE_MS sanity ceiling`, + } satisfies ErrorResponse) + return + } + quoteStore.set(quoteId, { ...baseQuote, sellAssetId: sellAsset.assetId, @@ -193,7 +215,7 @@ export const getQuote = async (req: Request, res: Response): Promise => { partnerAddress: req.affiliateInfo?.partnerAddress, partnerCode: req.affiliateInfo?.partnerCode, createdAt: now, - expiresAt: now + QuoteStore.QUOTE_TTL_MS, + expiresAt: quote.deadline + QuoteStore.BIND_GRACE_MS, metadata: buildSwapMetadata(step, { stepIndex: 0, quoteId }), status: 'pending', }) @@ -206,8 +228,8 @@ export const getQuote = async (req: Request, res: Response): Promise => { slippageTolerancePercentageDecimal: quote.slippageTolerancePercentageDecimal, networkFeeCryptoBaseUnit: step.feeData.networkFeeCryptoBaseUnit, steps: quote.steps.map(transformQuoteStep), - approval: await buildApprovalInfo(step, sendAddress), - expiresAt: now + 60_000, + approval, + expiresAt: quote.deadline, } res.json(response) diff --git a/packages/public-api/src/routes/quote/types.ts b/packages/public-api/src/routes/quote/types.ts index 34a879bb01e..042007a4deb 100644 --- a/packages/public-api/src/routes/quote/types.ts +++ b/packages/public-api/src/routes/quote/types.ts @@ -154,7 +154,11 @@ export const QuoteResponseSchema = registry.register( networkFeeCryptoBaseUnit: z.string().optional().openapi({ example: '23000' }), approval: ApprovalInfoSchema, steps: z.array(QuoteStepSchema), - expiresAt: z.number(), + expiresAt: z.number().openapi({ + example: 1754265600000, + description: + "Epoch ms after which the quote must not be executed - the swapper's own deadline (inbound address rotation, deposit channel expiry, order validity). Broadcasting after it risks failed swaps or, for deposit-style swappers, lost funds. Request a fresh quote instead.", + }), }), ) diff --git a/packages/swap-widget/package.json b/packages/swap-widget/package.json index cff327e709d..d3e1b74ed31 100644 --- a/packages/swap-widget/package.json +++ b/packages/swap-widget/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/swap-widget", - "version": "0.6.0", + "version": "0.7.0", "description": "Embeddable swap widget using ShapeShift API", "repository": "https://github.com/shapeshift/web", "license": "MIT", diff --git a/packages/swap-widget/src/api/client.ts b/packages/swap-widget/src/api/client.ts index d4df7e4383e..352a3aa00ee 100644 --- a/packages/swap-widget/src/api/client.ts +++ b/packages/swap-widget/src/api/client.ts @@ -1,7 +1,6 @@ import type { AssetId, AssetsResponse, QuoteResponse, RatesResponse } from '../types' -const DEFAULT_API_BASE_URL = - import.meta.env.VITE_SWAP_WIDGET_API_URL ?? 'https://api.shapeshift.com' +const DEFAULT_API_BASE_URL = 'https://api.shapeshift.com' export type ApiClientConfig = { baseUrl?: string diff --git a/packages/swap-widget/src/demo/ExternalWalletApp.tsx b/packages/swap-widget/src/demo/ExternalWalletApp.tsx index dd2c42ec65e..df1afd977a7 100644 --- a/packages/swap-widget/src/demo/ExternalWalletApp.tsx +++ b/packages/swap-widget/src/demo/ExternalWalletApp.tsx @@ -31,6 +31,7 @@ import { DemoCustomizer, useDemoTheme } from './DemoCustomizer' import { WidgetModal } from './WidgetModal' const PROJECT_ID = import.meta.env.VITE_WALLETCONNECT_PROJECT_ID +const API_BASE_URL = import.meta.env.VITE_SWAP_WIDGET_API_URL if (!PROJECT_ID) throw new Error('VITE_WALLETCONNECT_PROJECT_ID is not set') @@ -102,6 +103,7 @@ const ExternalDemoBody = ({ theme, setTheme }: ExternalDemoBodyProps) => { const widget = useMemo( () => ( { const widget = useMemo( () => ( { return } + if (!sellAmountBaseUnit || sellAmountBaseUnit === '0') { + actorRef.send({ type: 'APPROVAL_ERROR', error: 'No sell amount specified' }) + return + } + + // api-supplied approvals are exact and in broadcast order (reset-then-approve for USDT-likes) + const approvalTxs = quote.approval.approvalTxs + if (!approvalTxs?.length) { + actorRef.send({ type: 'APPROVAL_ERROR', error: 'No approval transactions in quote' }) + return + } + const requiredChainId = getEvmNetworkId(sellAsset.chainId) const client = walletClient as WalletClient @@ -66,31 +78,26 @@ export const useSwapApproval = () => { rpcUrls: { default: { http: [] } }, } - if (!sellAmountBaseUnit || sellAmountBaseUnit === '0') { - actorRef.send({ type: 'APPROVAL_ERROR', error: 'No sell amount specified' }) - return - } - - const approvalData = encodeFunctionData({ - abi: erc20Abi, - functionName: 'approve', - args: [quote.approval.spender as `0x${string}`, BigInt(sellAmountBaseUnit)], - }) - - const approvalHash = await client.sendTransaction({ - to: sellAssetAddress as `0x${string}`, - data: approvalData, - value: BigInt(0), - chain, - account: walletAddress as `0x${string}`, - }) - const rpcUrl = chain.rpcUrls?.default?.http?.[0] const publicClient = createPublicClient({ chain, transport: rpcUrl ? http(rpcUrl) : http(), }) - await publicClient.waitForTransactionReceipt({ hash: approvalHash }) + + let approvalHash: `0x${string}` | undefined + for (const approvalTx of approvalTxs) { + approvalHash = await client.sendTransaction({ + to: approvalTx.to as `0x${string}`, + data: approvalTx.data as `0x${string}`, + value: BigInt(approvalTx.value), + chain, + account: walletAddress as `0x${string}`, + }) + const receipt = await publicClient.waitForTransactionReceipt({ hash: approvalHash }) + if (receipt.status !== 'success') throw new Error('Approval transaction reverted') + } + + if (!approvalHash) throw new Error('Expected at least one approval transaction') actorRef.send({ type: 'APPROVAL_SUCCESS', txHash: approvalHash }) } catch (error) { diff --git a/packages/swapper/package.json b/packages/swapper/package.json index ba0390edb5c..aeefc1723d3 100644 --- a/packages/swapper/package.json +++ b/packages/swapper/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/swapper", - "version": "18.1.0", + "version": "19.0.0", "repository": "https://github.com/shapeshift/web", "license": "MIT", "type": "module", @@ -64,7 +64,7 @@ "qs": "^6.14.2", "retry-axios": "^2.6.0", "uuid": "^9.0.0", - "viem": "2.43.5" + "viem": "2.55.11" }, "devDependencies": { "@types/lodash": "^4.14.178", diff --git a/packages/swapper/src/swappers/AcrossSwapper/constant.ts b/packages/swapper/src/swappers/AcrossSwapper/constant.ts index 05e7142aa9e..165d9cf8dc6 100644 --- a/packages/swapper/src/swappers/AcrossSwapper/constant.ts +++ b/packages/swapper/src/swappers/AcrossSwapper/constant.ts @@ -13,6 +13,7 @@ import { optimismChainId, plasmaChainId, polygonChainId, + robinhoodChainId, scrollChainId, solanaChainId, soneiumChainId, @@ -31,11 +32,13 @@ import { ink, linea, mainnet as ethereum, + megaeth, mode, monad, optimism, plasma, polygon, + robinhood, scroll, soneium, unichain, @@ -67,7 +70,8 @@ export const chainIdToAcrossChainId: Record = { // Across uses a custom Solana chain ID [solanaChainId]: 34268394551451, [scrollChainId]: scroll.id, - [megaethChainId]: 4326, + [megaethChainId]: megaeth.id, + [robinhoodChainId]: robinhood.id, } export const acrossChainIdToChainId = invert(chainIdToAcrossChainId) diff --git a/packages/swapper/src/swappers/AcrossSwapper/endpoints.ts b/packages/swapper/src/swappers/AcrossSwapper/endpoints.ts index a961a5d9001..f3017b5de8d 100644 --- a/packages/swapper/src/swappers/AcrossSwapper/endpoints.ts +++ b/packages/swapper/src/swappers/AcrossSwapper/endpoints.ts @@ -6,7 +6,7 @@ import { checkEvmSwapStatus, getExecutableTradeStep, isExecutableTradeQuote } fr import { getEvmTransactionFees, getUnsignedEvmTransaction } from '../../utils/evm' import { getTradeQuote } from './getTradeQuote/getTradeQuote' import { getTradeRate } from './getTradeRate/getTradeRate' -import { acrossService } from './utils/acrossService' +import { acrossService, getAcrossRequestConfig } from './utils/acrossService' import type { AcrossDepositStatus, AcrossTradeQuoteInput, @@ -54,6 +54,7 @@ export const acrossApi: SwapperApi = { const maybeStatusResponse = await acrossService.get( `${config.VITE_ACROSS_API_URL}/deposit/status?depositTxnRef=${txHash}`, + getAcrossRequestConfig(config), ) if (maybeStatusResponse.isErr()) { diff --git a/packages/swapper/src/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.ts b/packages/swapper/src/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.ts index 3ac1a042e38..0f56082de2e 100644 --- a/packages/swapper/src/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.ts +++ b/packages/swapper/src/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.ts @@ -25,7 +25,7 @@ export const getTradeQuote = async ( }) if (maybeContext.isErr()) return Err(maybeContext.unwrapErr()) - const { tradeCommon, stepCommon, protocolFees, stepDataArgs } = maybeContext.unwrap() + const { tradeCommon, stepCommon, protocolFees, stepDataArgs, deadline } = maybeContext.unwrap() const maybeStepData = await getAcrossStepData({ ...stepDataArgs, type: 'quote', input }) @@ -35,6 +35,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/AcrossSwapper/utils/acrossService.ts b/packages/swapper/src/swappers/AcrossSwapper/utils/acrossService.ts index 52f29dd337e..f168767d00f 100644 --- a/packages/swapper/src/swappers/AcrossSwapper/utils/acrossService.ts +++ b/packages/swapper/src/swappers/AcrossSwapper/utils/acrossService.ts @@ -1,5 +1,7 @@ +import type { AxiosRequestConfig } from 'axios' import axios from 'axios' +import type { SwapperConfig } from '../../../types' import { makeSwapperAxiosServiceMonadic } from '../../../utils' const axiosConfig = { @@ -13,3 +15,8 @@ const axiosConfig = { const acrossServiceBase = axios.create(axiosConfig) export const acrossService = makeSwapperAxiosServiceMonadic(acrossServiceBase) + +export const getAcrossRequestConfig = (config: SwapperConfig): AxiosRequestConfig | undefined => + config.VITE_ACROSS_API_KEY + ? { headers: { Authorization: `Bearer ${config.VITE_ACROSS_API_KEY}` } } + : undefined diff --git a/packages/swapper/src/swappers/AcrossSwapper/utils/fetchAcrossTrade.ts b/packages/swapper/src/swappers/AcrossSwapper/utils/fetchAcrossTrade.ts index f618ceb77e3..90dbb1daacf 100644 --- a/packages/swapper/src/swappers/AcrossSwapper/utils/fetchAcrossTrade.ts +++ b/packages/swapper/src/swappers/AcrossSwapper/utils/fetchAcrossTrade.ts @@ -2,7 +2,7 @@ import type { Result } from '@sniptt/monads' import type { AxiosResponse } from 'axios' import type { SwapErrorRight, SwapperConfig } from '../../../types' -import { acrossService } from './acrossService' +import { acrossService, getAcrossRequestConfig } from './acrossService' import type { AcrossSwapApprovalResponse } from './types' export type AcrossFetchQuoteParams = { @@ -44,5 +44,5 @@ export const fetchAcrossTrade = ( const url = `${config.VITE_ACROSS_API_URL}/swap/approval?${searchParams.toString()}` - return acrossService.get(url) + return acrossService.get(url, getAcrossRequestConfig(config)) } diff --git a/packages/swapper/src/swappers/AcrossSwapper/utils/getAcrossTradeContext.ts b/packages/swapper/src/swappers/AcrossSwapper/utils/getAcrossTradeContext.ts index 6610651f36b..e81b5c4a17f 100644 --- a/packages/swapper/src/swappers/AcrossSwapper/utils/getAcrossTradeContext.ts +++ b/packages/swapper/src/swappers/AcrossSwapper/utils/getAcrossTradeContext.ts @@ -22,7 +22,7 @@ import type { import { SwapperName, TradeQuoteError } from '../../../types' import { getInputOutputRate, makeSwapErrorRight } from '../../../utils' import { buildAffiliateFee } from '../../../utils/affiliateFee' -import { getTreasuryAddressFromChainId } from '../../../utils/helpers' +import { getTreasuryAddressFromChainId, normalizeEpochToMs } from '../../../utils/helpers' import { acrossChainIdToChainId, acrossErrorCodeToTradeQuoteError } from '../constant' import { fetchAcrossTrade } from './fetchAcrossTrade' import type { GetAcrossStepDataArgs } from './getAcrossStepData' @@ -35,6 +35,7 @@ type AcrossTradeContext = { stepCommon: Omit protocolFees: QuoteFeeData['protocolFees'] stepDataArgs: Omit + deadline: number } export const getAcrossTradeContext = async ({ @@ -246,5 +247,6 @@ export const getAcrossTradeContext = async ({ fallbackNetworkFeeCryptoBaseUnit: quote.fees.originGas.amount, deps, }, + deadline: normalizeEpochToMs(quote.quoteExpiryTimestamp), }) } diff --git a/packages/swapper/src/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.ts b/packages/swapper/src/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.ts index cce7cadd7bc..d7ebcde68dd 100644 --- a/packages/swapper/src/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.ts +++ b/packages/swapper/src/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.ts @@ -9,6 +9,7 @@ import type { TradeQuote, } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { ArbitrumBridgeTradeQuoteInput } from '../types' import { getArbitrumBridgeStepData } from '../utils/getArbitrumBridgeStepData' import { getArbitrumBridgeTradeContext } from '../utils/getArbitrumBridgeTradeContext' @@ -53,6 +54,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote', + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/AvnuSwapper/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/AvnuSwapper/swapperApi/getTradeQuote.ts index df7059156c8..9a862c3ed91 100644 --- a/packages/swapper/src/swappers/AvnuSwapper/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/AvnuSwapper/swapperApi/getTradeQuote.ts @@ -5,6 +5,7 @@ import { validateAndParseAddress } from 'starknet' import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { TradeQuoteError } from '../../../types' import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { AvnuTradeQuoteInput } from '../types' import { getAvnuTradeContext } from '../utils/getAvnuTradeContext' @@ -27,7 +28,7 @@ export const getTradeQuote = async ( const maybeContext = await getAvnuTradeContext({ input, takerAddress: normalizedSendAddress }) if (maybeContext.isErr()) return Err(maybeContext.unwrapErr()) - const { tradeCommon, stepCommon, protocolFees, quoteId, sellTokenAddress } = + const { tradeCommon, stepCommon, protocolFees, quoteId, sellTokenAddress, deadline } = maybeContext.unwrap() const adapter = deps.assertGetStarknetChainAdapter(sellAsset.chainId) @@ -46,6 +47,7 @@ export const getTradeQuote = async ( ...tradeCommon, receiveAddress: normalizedReceiveAddress, quoteOrRate: 'quote', + deadline: deadline ?? Date.now() + FALLBACK_QUOTE_DEADLINE_MS, steps: [ { ...stepCommon, diff --git a/packages/swapper/src/swappers/AvnuSwapper/utils/getAvnuTradeContext.ts b/packages/swapper/src/swappers/AvnuSwapper/utils/getAvnuTradeContext.ts index c72a436d3c4..bec02cbb522 100644 --- a/packages/swapper/src/swappers/AvnuSwapper/utils/getAvnuTradeContext.ts +++ b/packages/swapper/src/swappers/AvnuSwapper/utils/getAvnuTradeContext.ts @@ -17,7 +17,7 @@ import type { import { SwapperName, TradeQuoteError } from '../../../types' import { getInputOutputRate, makeSwapErrorRight } from '../../../utils' import { buildAffiliateFee } from '../../../utils/affiliateFee' -import { getTreasuryAddressFromChainId } from '../../../utils/helpers' +import { getTreasuryAddressFromChainId, normalizeEpochToMs } from '../../../utils/helpers' import { assertValidTrade, getTokenAddress } from './helpers' type AvnuTradeContext = { @@ -26,6 +26,7 @@ type AvnuTradeContext = { protocolFees: QuoteFeeData['protocolFees'] quoteId: string sellTokenAddress: string + deadline: number | undefined } export const getAvnuTradeContext = async ({ @@ -135,6 +136,7 @@ export const getAvnuTradeContext = async ({ protocolFees, quoteId: bestQuote.quoteId, sellTokenAddress, + deadline: bestQuote.expiry ? normalizeEpochToMs(bestQuote.expiry) : undefined, }) } catch (error) { return Err( diff --git a/packages/swapper/src/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.ts b/packages/swapper/src/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.ts index fb69d216c16..b27fdbd7384 100644 --- a/packages/swapper/src/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.ts +++ b/packages/swapper/src/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.ts @@ -9,6 +9,7 @@ import type { } from '../../../types' import { TradeQuoteError } from '../../../types' import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils' +import { normalizeEpochToMs } from '../../../utils/helpers' import { getBebopSolanaTradeContext } from '../utils/getBebopSolanaTradeContext' import { isBebopSolanaTxSafe } from '../utils/helpers' @@ -44,6 +45,8 @@ export const getBebopSolanaTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote', + // The sealed multi-signer tx is blockhash-pinned, so the provider expiry governs + deadline: normalizeEpochToMs(response.expiry), receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.ts b/packages/swapper/src/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.ts index 015a0e8ddd5..be8dc125b32 100644 --- a/packages/swapper/src/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.ts +++ b/packages/swapper/src/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.ts @@ -25,7 +25,7 @@ export const getBebopTradeQuote = async ( }) if (maybeContext.isErr()) return Err(maybeContext.unwrapErr()) - const { tradeCommon, stepCommon, stepDataArgs } = maybeContext.unwrap() + const { tradeCommon, stepCommon, stepDataArgs, deadline } = maybeContext.unwrap() const maybeStepData = await getBebopStepData({ ...stepDataArgs, type: 'quote', input }) @@ -35,6 +35,7 @@ export const getBebopTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote', + deadline, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/BebopSwapper/types.ts b/packages/swapper/src/swappers/BebopSwapper/types.ts index e37fed4051b..07d1292d1fe 100644 --- a/packages/swapper/src/swappers/BebopSwapper/types.ts +++ b/packages/swapper/src/swappers/BebopSwapper/types.ts @@ -19,6 +19,7 @@ export const bebopSupportedEvmChainIds = [ KnownChainIds.AvalancheMainnet, KnownChainIds.OptimismMainnet, KnownChainIds.BnbSmartChainMainnet, + KnownChainIds.RobinhoodMainnet, ] as const export const bebopSupportedChainIds = [ @@ -116,6 +117,7 @@ export const chainIdToBebopChain: Record = { [KnownChainIds.AvalancheMainnet]: 'avalanche', [KnownChainIds.OptimismMainnet]: 'optimism', [KnownChainIds.BnbSmartChainMainnet]: 'bsc', + [KnownChainIds.RobinhoodMainnet]: 'robinhood', [KnownChainIds.SolanaMainnet]: 'solana', } diff --git a/packages/swapper/src/swappers/BebopSwapper/utils/getBebopTradeContext.ts b/packages/swapper/src/swappers/BebopSwapper/utils/getBebopTradeContext.ts index 79a10c295bc..e2cf987c9a4 100644 --- a/packages/swapper/src/swappers/BebopSwapper/utils/getBebopTradeContext.ts +++ b/packages/swapper/src/swappers/BebopSwapper/utils/getBebopTradeContext.ts @@ -16,7 +16,7 @@ import type { import { SwapperName, TradeQuoteError } from '../../../types' import { makeSwapErrorRight } from '../../../utils' import { buildAffiliateFee } from '../../../utils/affiliateFee' -import { isNativeEvmAsset } from '../../../utils/helpers' +import { isNativeEvmAsset, normalizeEpochToMs } from '../../../utils/helpers' import { fetchBebopQuote } from './fetchFromBebop' import type { GetBebopStepDataArgs } from './getBebopStepData' import { assertValidTrade, calculateRate } from './helpers' @@ -25,6 +25,7 @@ type BebopTradeContext = { tradeCommon: TradeCommon stepCommon: Omit stepDataArgs: Omit + deadline: number } export const getBebopTradeContext = async ({ @@ -119,5 +120,6 @@ export const getBebopTradeContext = async ({ from, deps, }, + deadline: normalizeEpochToMs(quote.expiry), }) } diff --git a/packages/swapper/src/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.ts index 6ab875aa181..8040097a780 100644 --- a/packages/swapper/src/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.ts @@ -4,6 +4,7 @@ import { Err, Ok } from '@sniptt/monads' import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { BobGatewayTradeQuoteInput } from '../types' import { getBobGatewayStepData } from '../utils/getBobGatewayStepData' import { getBobGatewayTradeContext } from '../utils/getBobGatewayTradeContext' @@ -46,6 +47,7 @@ export const getBobGatewayTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote', + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts index a27d834db25..4598a448b89 100644 --- a/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts @@ -7,6 +7,7 @@ import { getDefaultSlippageDecimalPercentageForSwapper } from '../../../constant import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { SwapperName, TradeQuoteError } from '../../../types' import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { ButterSwapTradeQuoteInput } from '../types' import { getButterSwapStepData } from '../utils/getButterSwapStepData' import { getButterSwapTradeContext } from '../utils/getButterSwapTradeContext' @@ -82,6 +83,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts b/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts index 0705f0135b6..2d353dc35d9 100644 --- a/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts +++ b/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts @@ -6,6 +6,17 @@ import { KnownChainIds } from '@shapeshiftoss/types' import { BigAmount, bnOrZero } from '@shapeshiftoss/utils' import type { Result } from '@sniptt/monads' import { Err, Ok } from '@sniptt/monads' +import { + arbitrum, + avalanche, + base, + bsc, + mainnet as ethereum, + optimism, + polygon, + robinhood, + tron, +} from 'viem/chains' import type { SwapErrorRight } from '../../../types' import { TradeQuoteError } from '../../../types' @@ -14,16 +25,17 @@ import type { RouteSuccessItem } from '../types' // https://docs.butternetwork.io/butter-swap-integration/butter-api-for-routing/get-supportedchainlist#butter-chain-id-explanation const BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID: Record = { - 1: KnownChainIds.EthereumMainnet, - 137: KnownChainIds.PolygonMainnet, - 56: KnownChainIds.BnbSmartChainMainnet, - 42161: KnownChainIds.ArbitrumMainnet, - 10: KnownChainIds.OptimismMainnet, - 8453: KnownChainIds.BaseMainnet, - 43114: KnownChainIds.AvalancheMainnet, + [ethereum.id]: KnownChainIds.EthereumMainnet, + [polygon.id]: KnownChainIds.PolygonMainnet, + [bsc.id]: KnownChainIds.BnbSmartChainMainnet, + [arbitrum.id]: KnownChainIds.ArbitrumMainnet, + [optimism.id]: KnownChainIds.OptimismMainnet, + [base.id]: KnownChainIds.BaseMainnet, + [avalanche.id]: KnownChainIds.AvalancheMainnet, + [robinhood.id]: KnownChainIds.RobinhoodMainnet, 1360108768460801: KnownChainIds.SolanaMainnet, 1360095883558913: KnownChainIds.BitcoinMainnet, - 728126428: KnownChainIds.TronMainnet, + [tron.id]: KnownChainIds.TronMainnet, } const CHAIN_ID_TO_BUTTERSWAP_CHAIN_ID: Record = Object.entries( diff --git a/packages/swapper/src/swappers/CetusSwapper/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/CetusSwapper/swapperApi/getTradeQuote.ts index 11f1e05d1bb..3ff148fa5f0 100644 --- a/packages/swapper/src/swappers/CetusSwapper/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/CetusSwapper/swapperApi/getTradeQuote.ts @@ -3,6 +3,7 @@ import { Err, Ok } from '@sniptt/monads' import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { CetusTradeQuoteInput } from '../types' import { getCetusStepData } from './getCetusStepData' import { getCetusTradeContext } from './getCetusTradeContext' @@ -36,6 +37,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/ChainflipSwapper/constants.ts b/packages/swapper/src/swappers/ChainflipSwapper/constants.ts index cd8f52f1b8b..b45a8b14609 100644 --- a/packages/swapper/src/swappers/ChainflipSwapper/constants.ts +++ b/packages/swapper/src/swappers/ChainflipSwapper/constants.ts @@ -25,6 +25,9 @@ import { ChainflipNetwork } from './types' export const CHAINFLIP_REGULAR_QUOTE = 'regular' as const export const CHAINFLIP_DCA_QUOTE = 'dca' as const +// Deposit channels stay open ~24h - 6h keeps a 4x margin against depositing to an expired channel +export const CHAINFLIP_CHANNEL_DEADLINE_MS = 6 * 60 * 60 * 1000 + export const ChainflipSupportedChainIds = [ KnownChainIds.EthereumMainnet, KnownChainIds.ArbitrumMainnet, diff --git a/packages/swapper/src/swappers/ChainflipSwapper/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/ChainflipSwapper/swapperApi/getTradeQuote.ts index b0b9601ef8d..6e4f2525806 100644 --- a/packages/swapper/src/swappers/ChainflipSwapper/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/ChainflipSwapper/swapperApi/getTradeQuote.ts @@ -5,6 +5,7 @@ import type { AxiosError } from 'axios' import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { TradeQuoteError } from '../../../types' import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils' +import { CHAINFLIP_CHANNEL_DEADLINE_MS } from '../constants' import type { ChainflipMetadata, ChainflipTradeQuoteInput } from '../types' import { getChainflipStepData } from '../utils/getChainflipStepData' import { getChainflipTradeContexts } from '../utils/getChainflipTradeContexts' @@ -97,6 +98,7 @@ export const getTradeQuote = async ( tradeQuotes.push({ ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + CHAINFLIP_CHANNEL_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.ts b/packages/swapper/src/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.ts index feb66c993ad..2a488b875bc 100644 --- a/packages/swapper/src/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.ts +++ b/packages/swapper/src/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.ts @@ -41,6 +41,7 @@ export const getCowSwapTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: stepDataArgs.cowswapQuoteResponse.quote.validTo * 1000, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/DebridgeSwapper/constant.ts b/packages/swapper/src/swappers/DebridgeSwapper/constant.ts index f747fc5a2c6..96f784fefda 100644 --- a/packages/swapper/src/swappers/DebridgeSwapper/constant.ts +++ b/packages/swapper/src/swappers/DebridgeSwapper/constant.ts @@ -17,35 +17,48 @@ import { optimismChainId, plasmaChainId, polygonChainId, + robinhoodChainId, seiChainId, sonicChainId, storyChainId, } from '@shapeshiftoss/caip' import invert from 'lodash/invert' import { zeroAddress } from 'viem' +import { + arbitrum, + avalanche, + base, + bsc, + linea, + mainnet as ethereum, + optimism, + polygon, + robinhood, +} from 'viem/chains' export const chainIdToDebridgeChainId: Record = { - [ethChainId]: 1, - [optimismChainId]: 10, - [bscChainId]: 56, + [ethChainId]: ethereum.id, + [optimismChainId]: optimism.id, + [bscChainId]: bsc.id, [gnosisChainId]: 100000002, - [polygonChainId]: 137, + [polygonChainId]: polygon.id, [monadChainId]: 100000030, [hyperEvmChainId]: 100000022, [seiChainId]: 100000027, - [baseChainId]: 8453, + [baseChainId]: base.id, [plasmaChainId]: 100000028, - [arbitrumChainId]: 42161, - [avalancheChainId]: 43114, + [arbitrumChainId]: arbitrum.id, + [avalancheChainId]: avalanche.id, [mantleChainId]: 100000023, [cronosChainId]: 100000019, [berachainChainId]: 100000020, - [lineaChainId]: 59144, + [lineaChainId]: linea.id, [bobChainId]: 100000021, [sonicChainId]: 100000014, [storyChainId]: 100000013, [flowEvmChainId]: 100000009, [megaethChainId]: 100000031, + [robinhoodChainId]: robinhood.id, } export const debridgeChainIdToChainId = invert(chainIdToDebridgeChainId) diff --git a/packages/swapper/src/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.ts b/packages/swapper/src/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.ts index 051801121e9..45e32dfd34d 100644 --- a/packages/swapper/src/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.ts +++ b/packages/swapper/src/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.ts @@ -3,6 +3,7 @@ import { Err, Ok } from '@sniptt/monads' import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import { getDebridgeStepData } from '../utils/getDebridgeStepData' import { getDebridgeTradeContext } from '../utils/getDebridgeTradeContext' import type { DebridgeTradeQuoteInput } from '../utils/types' @@ -34,6 +35,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/NearIntentsSwapper/endpoints.ts b/packages/swapper/src/swappers/NearIntentsSwapper/endpoints.ts index 88339cf6578..303c454dd02 100644 --- a/packages/swapper/src/swappers/NearIntentsSwapper/endpoints.ts +++ b/packages/swapper/src/swappers/NearIntentsSwapper/endpoints.ts @@ -233,7 +233,11 @@ export const nearIntentsApi: SwapperApi = { // Extract buyTxHash from destination chain transactions const buyTxHash = statusResponse.swapDetails?.destinationChainTxHashes?.[0]?.hash - const actualBuyAmountCryptoBaseUnit = statusResponse.swapDetails?.amountOut + + // amountOut is only meaningful destination-denominated on terminal success - in-flight and + // refund states may carry settlement-internal or refund values + const actualBuyAmountCryptoBaseUnit = + statusResponse.status === 'SUCCESS' ? statusResponse.swapDetails?.amountOut : undefined return { status: txStatus, diff --git a/packages/swapper/src/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.ts index f2f6d07a805..96434100d51 100644 --- a/packages/swapper/src/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.ts @@ -68,9 +68,17 @@ export const getTradeQuote = async ( if (maybeStepData.isErr()) return Err(maybeStepData.unwrapErr()) const { transactionData, networkFeeCryptoBaseUnit } = maybeStepData.unwrap() + const requestDeadlineMs = Date.parse(quoteRequest.deadline) + const responseDeadlineMs = Date.parse(quote.deadline ?? '') + const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + // Deposits mined after our requested refund deadline refund instead of executing as quoted; + // the response deadline (when the deposit address goes inactive, ~72h) only binds if tighter + deadline: Number.isFinite(responseDeadlineMs) + ? Math.min(requestDeadlineMs, responseDeadlineMs) + : requestDeadlineMs, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.ts b/packages/swapper/src/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.ts index b4278703e39..b51b558f785 100644 --- a/packages/swapper/src/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.ts +++ b/packages/swapper/src/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.ts @@ -9,7 +9,11 @@ import { makeSwapErrorRight, makeTradeStepBuildFailedErr, } from '../../../utils' -import { getTreasuryAddressFromChainId } from '../../../utils/helpers' +import { + FALLBACK_QUOTE_DEADLINE_MS, + getTreasuryAddressFromChainId, + normalizeEpochToMs, +} from '../../../utils/helpers' import type { PortalsTradeQuoteInput } from '../types' import { fetchPortalsTradeOrder, PortalsError } from '../utils/fetchPortalsTradeOrder' import { getPortalsStepData } from '../utils/getPortalsStepData' @@ -158,9 +162,19 @@ export const getPortalsTradeQuote = async ( if (maybeStepData.isErr()) return Err(maybeStepData.unwrapErr()) const { transactionData, networkFeeCryptoBaseUnit } = maybeStepData.unwrap() + // Nullable in practice (live validated orders return null) - numeric or ISO when supplied + const expiryMs = (() => { + if (!orderContext.expiry) return undefined + const numeric = Number(orderContext.expiry) + if (Number.isFinite(numeric)) return normalizeEpochToMs(numeric) + const parsed = Date.parse(orderContext.expiry) + return Number.isNaN(parsed) ? undefined : parsed + })() + const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: expiryMs ?? Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/RelaySwapper/constant.ts b/packages/swapper/src/swappers/RelaySwapper/constant.ts index 71998c2eed2..9bb55ed271f 100644 --- a/packages/swapper/src/swappers/RelaySwapper/constant.ts +++ b/packages/swapper/src/swappers/RelaySwapper/constant.ts @@ -27,6 +27,7 @@ import { plasmaChainId, plumeChainId, polygonChainId, + robinhoodChainId, scrollChainId, seiChainId, solanaChainId, @@ -41,6 +42,7 @@ import { import invert from 'lodash/invert' import { zeroAddress } from 'viem' import { + abstract, arbitrum, avalanche, base, @@ -59,17 +61,20 @@ import { linea, mainnet as ethereum, mantle, + megaeth, mode, monad, optimism, plasma, plumeMainnet, polygon, + robinhood, scroll, sei, soneium, sonic, story, + tron, unichain, worldchain, zksync, @@ -90,12 +95,12 @@ export const chainIdToRelayChainId = { [gnosisChainId]: gnosis.id, [avalancheChainId]: avalanche.id, [bscChainId]: bsc.id, - [tronChainId]: 728126428, + [tronChainId]: tron.id, [monadChainId]: monad.id, [hyperEvmChainId]: hyperEvm.id, [mantleChainId]: mantle.id, [inkChainId]: ink.id, - [megaethChainId]: 4326, + [megaethChainId]: megaeth.id, [plasmaChainId]: plasma.id, [katanaChainId]: katana.id, [etherealChainId]: 5064014, @@ -117,7 +122,8 @@ export const chainIdToRelayChainId = { [modeChainId]: mode.id, [soneiumChainId]: soneium.id, [seiChainId]: sei.id, - [abstractChainId]: 2741, + [abstractChainId]: abstract.id, + [robinhoodChainId]: robinhood.id, } export enum RelayStatusMessage { diff --git a/packages/swapper/src/swappers/RelaySwapper/endpoints.ts b/packages/swapper/src/swappers/RelaySwapper/endpoints.ts index c4698027c52..2c28e4c3a38 100644 --- a/packages/swapper/src/swappers/RelaySwapper/endpoints.ts +++ b/packages/swapper/src/swappers/RelaySwapper/endpoints.ts @@ -12,7 +12,7 @@ import { getTradeQuote } from './getTradeQuote/getTradeQuote' import { getTradeRate } from './getTradeRate/getTradeRate' import { getLatestRelayStatusMessage } from './utils/getLatestRelayStatusMessage' import { notifyTransactionIndexing } from './utils/notifyTransactionIndexing' -import { relayService } from './utils/relayService' +import { getRelayRequestConfig, relayService } from './utils/relayService' import type { RelayStatus, RelayTradeQuoteInput, RelayTradeRateInput } from './utils/types' // Keep track of the trades we already notified the relay indexer about @@ -86,7 +86,8 @@ export const relayApi: SwapperApi = { const swapperTxLink = `https://relay.link/transaction/${txHash}` const maybeStatusResponse = await relayService.get( - `${config.VITE_RELAY_API_URL}/intents/status/v2?requestId=${relayMetadata.relayId}`, + `${config.VITE_RELAY_API_URL}/intents/status/v3?requestId=${relayMetadata.relayId}`, + getRelayRequestConfig(config), ) if (maybeStatusResponse.isErr()) { @@ -105,9 +106,13 @@ export const relayApi: SwapperApi = { switch (statusResponse.status) { case 'success': return TxStatus.Confirmed + case 'waiting': + case 'delayed': case 'pending': + case 'depositing': + case 'submitted': return TxStatus.Pending - case 'failed': + case 'failure': case 'refund': return TxStatus.Failed default: diff --git a/packages/swapper/src/swappers/RelaySwapper/getTradeQuote/getTradeQuote.ts b/packages/swapper/src/swappers/RelaySwapper/getTradeQuote/getTradeQuote.ts index 527358dd62c..2632b291c52 100644 --- a/packages/swapper/src/swappers/RelaySwapper/getTradeQuote/getTradeQuote.ts +++ b/packages/swapper/src/swappers/RelaySwapper/getTradeQuote/getTradeQuote.ts @@ -10,6 +10,7 @@ import type { TradeQuoteStep, } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { chainIdToRelayChainId as relayChainMapImplementation } from '../constant' import { getRelayStepData } from '../utils/getRelayStepData' import { getRelayTradeContext } from '../utils/getRelayTradeContext' @@ -74,6 +75,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps, } diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/fetchRelayTrade.ts b/packages/swapper/src/swappers/RelaySwapper/utils/fetchRelayTrade.ts index 525584e5357..c94e6c2957c 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/fetchRelayTrade.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/fetchRelayTrade.ts @@ -2,12 +2,16 @@ import type { Result } from '@sniptt/monads' import type { AxiosResponse } from 'axios' import type { SwapErrorRight, SwapperConfig } from '../../../types' -import { relayService } from './relayService' +import { getRelayRequestConfig, relayService } from './relayService' import type { RelayFetchQuoteParams, RelayQuote } from './types' export const fetchRelayTrade = async ( params: RelayFetchQuoteParams, config: SwapperConfig, ): Promise, SwapErrorRight>> => { - return await relayService.post(`${config.VITE_RELAY_API_URL}/quote/v2`, params) + return await relayService.post( + `${config.VITE_RELAY_API_URL}/quote/v2`, + params, + getRelayRequestConfig(config), + ) } diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/getLatestRelayStatusMessage.ts b/packages/swapper/src/swappers/RelaySwapper/utils/getLatestRelayStatusMessage.ts index c1adbd84034..3bb2fc3838e 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/getLatestRelayStatusMessage.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/getLatestRelayStatusMessage.ts @@ -10,10 +10,12 @@ export const getLatestRelayStatusMessage = (status: RelayStatus): string => { case statusValue === 'delayed': return RelayStatusMessage.Retrying case statusValue === 'pending': + case statusValue === 'depositing': + case statusValue === 'submitted': return RelayStatusMessage.DepositDetected case statusValue === 'success': return RelayStatusMessage.SwapComplete - case statusValue === 'failed': + case statusValue === 'failure': return RelayStatusMessage.SwapFailed default: return 'Unknown status' diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/notifyTransactionIndexing.ts b/packages/swapper/src/swappers/RelaySwapper/utils/notifyTransactionIndexing.ts index 8d8ae730d94..3026ec29b38 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/notifyTransactionIndexing.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/notifyTransactionIndexing.ts @@ -2,7 +2,7 @@ import type { Result } from '@sniptt/monads' import type { AxiosResponse } from 'axios' import type { SwapErrorRight, SwapperConfig } from '../../../types' -import { relayService } from './relayService' +import { getRelayRequestConfig, relayService } from './relayService' import type { RelayQuote } from './types' type NotifyTransactionIndexingParams = { @@ -18,5 +18,6 @@ export const notifyTransactionIndexing = async ( return await relayService.post( `${config.VITE_RELAY_API_URL}/transactions/single`, params, + getRelayRequestConfig(config), ) } diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/relayService.ts b/packages/swapper/src/swappers/RelaySwapper/utils/relayService.ts index 3a484a0ec2d..b845de39cc0 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/relayService.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/relayService.ts @@ -1,3 +1,6 @@ +import type { AxiosRequestConfig } from 'axios' + +import type { SwapperConfig } from '../../../types' import { createCache, makeSwapperAxiosServiceMonadic } from '../../../utils' const maxAgeMillis = 15 * 1000 @@ -14,3 +17,6 @@ const axiosConfig = { const relayServiceBase = createCache(maxAgeMillis, cachedUrls, axiosConfig) export const relayService = makeSwapperAxiosServiceMonadic(relayServiceBase) + +export const getRelayRequestConfig = (config: SwapperConfig): AxiosRequestConfig | undefined => + config.VITE_RELAY_API_KEY ? { headers: { 'x-api-key': config.VITE_RELAY_API_KEY } } : undefined diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/relayTokenToAssetId.ts b/packages/swapper/src/swappers/RelaySwapper/utils/relayTokenToAssetId.ts index 4d4b19f9534..dd188c632bb 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/relayTokenToAssetId.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/relayTokenToAssetId.ts @@ -256,7 +256,11 @@ export const relayTokenToAssetId = (relayToken: RelayToken): AssetId => { assetReference: ASSET_REFERENCE.Abstract, assetNamespace: ASSET_NAMESPACE.slip44, } - + case CHAIN_REFERENCE.RobinhoodMainnet: + return { + assetReference: ASSET_REFERENCE.Robinhood, + assetNamespace: ASSET_NAMESPACE.slip44, + } default: throw Error(`chainId '${relayToken.chainId}' not supported`) } diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/types.ts b/packages/swapper/src/swappers/RelaySwapper/utils/types.ts index d9f45f1be7d..0e673042e25 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/types.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/types.ts @@ -36,11 +36,19 @@ export type RelayMetadata = { } export type RelayStatus = { - status: 'success' | 'failed' | 'pending' | 'refund' | 'delayed' | 'waiting' + status: + | 'success' + | 'failure' + | 'pending' + | 'submitted' + | 'depositing' + | 'refund' + | 'delayed' + | 'waiting' details?: string inTxHashes: string[] txHashes: string[] - time: number + updatedAt: number originChainId: number destinationChainId: number } diff --git a/packages/swapper/src/swappers/StonfiSwapper/endpoints.ts b/packages/swapper/src/swappers/StonfiSwapper/endpoints.ts index fee12330c5a..0a9b561442e 100644 --- a/packages/swapper/src/swappers/StonfiSwapper/endpoints.ts +++ b/packages/swapper/src/swappers/StonfiSwapper/endpoints.ts @@ -1,5 +1,5 @@ import { toAddressNList } from '@shapeshiftoss/chain-adapters' -import { TxStatus } from '@shapeshiftoss/unchained-client' +import { TransferType, TxStatus } from '@shapeshiftoss/unchained-client' import { Blockchain } from '@ston-fi/omniston-sdk' import type { SwapperApi, TradeStatus } from '../../types' @@ -128,6 +128,24 @@ export const stonfiApi: SwapperApi = { const { quoteId } = getSwapMetadata(swap.metadata.swapperMetadata, 'stonfi') + // Settlement precedes toncenter's jetton indexer, and confirmed rows are never re-parsed - + // hold confirmation until the receive leg is visible so the confirmed-time parse and upsert + // carries both legs of the swap + const hasVisibleReceiveLeg = async (): Promise => { + const adapter = assertGetTonChainAdapter(swap.sellAsset.chainId) + const sellAddress = swap.sellAccountId.split(':')[2] ?? '' + const addresses = new Set( + [sellAddress, swap.receiveAddress].filter((address): address is string => Boolean(address)), + ) + + for (const address of addresses) { + const tx = await adapter.parseTx(sellTxHash, address) + if (tx.transfers.some(transfer => transfer.type === TransferType.Receive)) return true + } + + return false + } + try { const tradeStatus = await waitForFirstTradeStatus( { @@ -147,17 +165,15 @@ export const stonfiApi: SwapperApi = { const statusOneOf = tradeStatus.status + // While the trade is in flight the wallet tx may already be confirmed, but the payout leg + // hasn't landed - confirming here would parse and upsert a trace without the receive, so + // completion waits for settlement if ( statusOneOf.awaitingTransfer || statusOneOf.transferring || statusOneOf.swapping || statusOneOf.receivingFunds ) { - const chainStatus = await checkTxStatusViaChainAdapter() - if (chainStatus.status === TxStatus.Confirmed) { - return chainStatus - } - if (statusOneOf.awaitingTransfer) { return { status: TxStatus.Pending, @@ -194,19 +210,32 @@ export const stonfiApi: SwapperApi = { if (statusOneOf.tradeSettled) { const result = statusOneOf.tradeSettled.result - if (result === 'TRADE_RESULT_FULLY_FILLED') { - return { + if (result === 'TRADE_RESULT_FULLY_FILLED' || result === 'TRADE_RESULT_PARTIALLY_FILLED') { + const settled: TradeStatus = { status: TxStatus.Confirmed, buyTxHash: sellTxHash, - message: undefined, + message: + result === 'TRADE_RESULT_PARTIALLY_FILLED' + ? 'trade.statuses.partiallyFilled' + : undefined, } - } - if (result === 'TRADE_RESULT_PARTIALLY_FILLED') { - return { - status: TxStatus.Confirmed, - buyTxHash: sellTxHash, - message: 'trade.statuses.partiallyFilled', + try { + if (await hasVisibleReceiveLeg()) return settled + + return { + status: TxStatus.Pending, + buyTxHash: undefined, + message: 'trade.statuses.receivingFunds', + } + } catch (error) { + // Indexer/API failure must not block completion + console.error('[Stonfi] Error verifying settlement receive leg:', { + sellTxHash, + result, + error, + }) + return settled } } diff --git a/packages/swapper/src/swappers/StonfiSwapper/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/StonfiSwapper/swapperApi/getTradeQuote.ts index 5c44da40b80..24484034071 100644 --- a/packages/swapper/src/swappers/StonfiSwapper/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/StonfiSwapper/swapperApi/getTradeQuote.ts @@ -2,6 +2,7 @@ import { Err, Ok } from '@sniptt/monads' import type { SwapperDeps, TradeQuote, TradeQuoteResult } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { normalizeEpochToMs } from '../../../utils/helpers' import type { StonfiTradeQuoteInput } from '../types' import { getStonfiStepData } from '../utils/getStonfiStepData' import { getStonfiTradeContext } from '../utils/getStonfiTradeContext' @@ -33,6 +34,7 @@ export const getTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: normalizeEpochToMs(stonfiTransactionData.tradeStartDeadline), receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.ts b/packages/swapper/src/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.ts index 8cc24518bc3..1e98be401a6 100644 --- a/packages/swapper/src/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.ts +++ b/packages/swapper/src/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.ts @@ -3,6 +3,7 @@ import { Err, Ok } from '@sniptt/monads' import type { SwapErrorRight, SwapperDeps, TradeQuote } from '../../../types' import { assertQuoteAddresses } from '../../../utils' +import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers' import type { SunioTradeQuoteInput } from '../types' import { getSunioStepData } from '../utils/getSunioStepData' import { getSunioTradeContext } from '../utils/getSunioTradeContext' @@ -34,6 +35,7 @@ export const getSunioTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.ts b/packages/swapper/src/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.ts index e912c1c1324..2f52564cf1a 100644 --- a/packages/swapper/src/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.ts +++ b/packages/swapper/src/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.ts @@ -89,6 +89,7 @@ const expectedQuoteResponse: Omit[] = [ tradeType: TradeType.L1ToL1, slippageTolerancePercentageDecimal: '0.04357', expiry: 1713710808, + deadline: 1713710808000, swapperName: SwapperName.Thorchain, steps: [ { @@ -139,6 +140,7 @@ const expectedQuoteResponse: Omit[] = [ tradeType: TradeType.L1ToL1, slippageTolerancePercentageDecimal: undefined, expiry: 1713710808, + deadline: 1713710808000, swapperName: SwapperName.Thorchain, steps: [ { diff --git a/packages/swapper/src/swappers/ThorchainSwapper/utils/getLongtailQuote.ts b/packages/swapper/src/swappers/ThorchainSwapper/utils/getLongtailQuote.ts index 66609e70299..3e77c4d4e27 100644 --- a/packages/swapper/src/swappers/ThorchainSwapper/utils/getLongtailQuote.ts +++ b/packages/swapper/src/swappers/ThorchainSwapper/utils/getLongtailQuote.ts @@ -121,6 +121,8 @@ export const getLongtailToL1Quote = async ( return Ok({ ...quote, + // The aggregator swapIn deadline is tighter than the daemon quote expiry + deadline: Math.min(quote.deadline, Number(deadline) * 1000), data: data ?? quote.data, // This logic will need to be updated to support multi-hop, if that's ever implemented for THORChain steps: quote.steps.map(s => ({ diff --git a/packages/swapper/src/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.ts b/packages/swapper/src/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.ts index 9e0f6239d7a..d28c01dfcfd 100644 --- a/packages/swapper/src/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.ts +++ b/packages/swapper/src/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.ts @@ -10,7 +10,7 @@ import type { } from '../../../types' import { SwapperName, TradeQuoteError } from '../../../types' import { assertQuoteAddresses, makeSwapErrorRight } from '../../../utils' -import { isNativeEvmAsset } from '../../../utils/helpers' +import { FALLBACK_QUOTE_DEADLINE_MS, isNativeEvmAsset } from '../../../utils/helpers' import type { ZrxTradeQuoteInput } from '../types' import { fetchZrxQuote } from '../utils/fetchFromZrx' import { getZrxStepData } from '../utils/getZrxStepData' @@ -112,6 +112,7 @@ export const getZrxTradeQuote = async ( const tradeQuote: TradeQuote = { ...tradeCommon, quoteOrRate: 'quote' as const, + deadline: Date.now() + FALLBACK_QUOTE_DEADLINE_MS, receiveAddress, steps: [ { diff --git a/packages/swapper/src/swappers/ZrxSwapper/types.ts b/packages/swapper/src/swappers/ZrxSwapper/types.ts index e12b45720b2..a9bb9644280 100644 --- a/packages/swapper/src/swappers/ZrxSwapper/types.ts +++ b/packages/swapper/src/swappers/ZrxSwapper/types.ts @@ -14,6 +14,7 @@ export const zrxSupportedChainIds = [ KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, + KnownChainIds.RobinhoodMainnet, ] as const export type ZrxSupportedChainId = (typeof zrxSupportedChainIds)[number] diff --git a/packages/swapper/src/swappers/ZrxSwapper/utils/constants.ts b/packages/swapper/src/swappers/ZrxSwapper/utils/constants.ts index bb2128f9972..3169b41dbde 100644 --- a/packages/swapper/src/swappers/ZrxSwapper/utils/constants.ts +++ b/packages/swapper/src/swappers/ZrxSwapper/utils/constants.ts @@ -20,6 +20,7 @@ export const ZRX_SUPPORTED_CHAINIDS = Object.freeze([ KnownChainIds.PolygonMainnet, KnownChainIds.ArbitrumMainnet, KnownChainIds.BaseMainnet, + KnownChainIds.RobinhoodMainnet, ]) // https://0x.org/docs/developer-resources/faqs-and-troubleshooting diff --git a/packages/swapper/src/swappers/ZrxSwapper/utils/helpers.ts b/packages/swapper/src/swappers/ZrxSwapper/utils/helpers.ts index 884c2f9c98d..530924528c7 100644 --- a/packages/swapper/src/swappers/ZrxSwapper/utils/helpers.ts +++ b/packages/swapper/src/swappers/ZrxSwapper/utils/helpers.ts @@ -65,6 +65,11 @@ export const zrxTokenToAssetId = (token: string, chainId: ChainId): AssetId => { assetReference: ASSET_REFERENCE.Base, assetNamespace: ASSET_NAMESPACE.slip44, } + case KnownChainIds.RobinhoodMainnet: + return { + assetReference: ASSET_REFERENCE.Robinhood, + assetNamespace: ASSET_NAMESPACE.slip44, + } default: throw Error(`chainId '${chainId}' not supported`) } diff --git a/packages/swapper/src/types.ts b/packages/swapper/src/types.ts index 17e0a5a08b7..1f51cb8efcb 100644 --- a/packages/swapper/src/types.ts +++ b/packages/swapper/src/types.ts @@ -85,11 +85,13 @@ export type SwapperConfig = { VITE_CHAINFLIP_API_URL: string VITE_FEATURE_CHAINFLIP_SWAP_DCA: boolean VITE_RELAY_API_URL: string + VITE_RELAY_API_KEY: string VITE_BEBOP_API_KEY: string VITE_NEAR_INTENTS_API_KEY: string VITE_SUI_NODE_URL: string VITE_ACROSS_API_URL: string VITE_ACROSS_INTEGRATOR_ID: string + VITE_ACROSS_API_KEY: string VITE_DEBRIDGE_API_URL: string VITE_BOB_GATEWAY_API_KEY: string } @@ -583,6 +585,8 @@ export type TradeQuote = TradeQuoteBase & { } & { quoteOrRate: 'quote' receiveAddress: string + // Epoch ms after which the quote is no longer safe to execute (provider expiry or fallback) + deadline: number } export type MultiHopTradeQuote = TradeQuote & { diff --git a/packages/swapper/src/utils/helpers.test.ts b/packages/swapper/src/utils/helpers.test.ts index fa4deeee8a6..8ede38f6142 100644 --- a/packages/swapper/src/utils/helpers.test.ts +++ b/packages/swapper/src/utils/helpers.test.ts @@ -4,7 +4,7 @@ import { KnownChainIds } from '@shapeshiftoss/types' import { treasuryChainIds } from '@shapeshiftoss/utils' import { describe, expect, it } from 'vitest' -import { getTreasuryAddressFromChainId } from './helpers' +import { getTreasuryAddressFromChainId, normalizeEpochToMs } from './helpers' describe('getTreasuryAddressFromChainId', () => { // Affiliate and fee recipient addresses for every swapper flow through here, so pin the values @@ -39,3 +39,25 @@ describe('getTreasuryAddressFromChainId', () => { ) }) }) + +describe('normalizeEpochToMs', () => { + // 2026-08-05T00:00:00Z expressed in each unit + const epochS = 1785888000 + const epochMs = epochS * 1000 + + it('converts unix seconds to ms', () => { + expect(normalizeEpochToMs(epochS)).toBe(epochMs) + }) + + it('passes milliseconds through', () => { + expect(normalizeEpochToMs(epochMs)).toBe(epochMs) + }) + + it('converts microseconds to ms', () => { + expect(normalizeEpochToMs(epochMs * 1000)).toBe(epochMs) + }) + + it('converts nanoseconds to ms', () => { + expect(normalizeEpochToMs(epochMs * 1e6)).toBe(epochMs) + }) +}) diff --git a/packages/swapper/src/utils/helpers.ts b/packages/swapper/src/utils/helpers.ts index 6dc89ad2b27..3c038f3f799 100644 --- a/packages/swapper/src/utils/helpers.ts +++ b/packages/swapper/src/utils/helpers.ts @@ -34,6 +34,17 @@ import { isTreasuryChainId, } from '@shapeshiftoss/utils' +// Deadline for providers without their own expiry - short enough to keep priced amounts honest +export const FALLBACK_QUOTE_DEADLINE_MS = 60_000 + +// Bands are unambiguous for any realistic date: unix s land ~2e9, ms ~2e12, µs ~2e15, ns ~2e18 +export const normalizeEpochToMs = (value: number): number => { + if (value < 1e12) return value * 1000 + if (value < 1e15) return value + if (value < 1e18) return Math.floor(value / 1000) + return Math.floor(value / 1e6) +} + export const isNativeEvmAsset = (assetId: AssetId): boolean => { const { chainId } = fromAssetId(assetId) switch (chainId) { diff --git a/packages/swapper/src/utils/test-data/setupSwapQuote.ts b/packages/swapper/src/utils/test-data/setupSwapQuote.ts index b7371518d77..88eb0582345 100644 --- a/packages/swapper/src/utils/test-data/setupSwapQuote.ts +++ b/packages/swapper/src/utils/test-data/setupSwapQuote.ts @@ -12,6 +12,7 @@ export const setupQuote = () => { const tradeQuote: TradeQuote = { quoteOrRate: 'quote', id: 'foobar', + deadline: Date.now() + 60_000, receiveAddress: '0x1234', affiliateBps: '0', slippageTolerancePercentageDecimal: '0', diff --git a/packages/swapper/src/utils/thorchain/getThorL1TradeQuote.ts b/packages/swapper/src/utils/thorchain/getThorL1TradeQuote.ts index 09acee9a669..7574caacc73 100644 --- a/packages/swapper/src/utils/thorchain/getThorL1TradeQuote.ts +++ b/packages/swapper/src/utils/thorchain/getThorL1TradeQuote.ts @@ -3,6 +3,7 @@ import { Err, Ok } from '@sniptt/monads' import type { SwapErrorRight, SwapperDeps, SwapperName } from '../../types' import { assertQuoteAddresses, makeTradeStepBuildFailedErr } from '../../utils' +import { normalizeEpochToMs } from '../helpers' import { getLimitWithManualSlippage } from './getLimitWithManualSlippage/getLimitWithManualSlippage' import { getSuccessfulTrades, getThorL1TradeContexts } from './getThorL1TradeContexts' import { getThorStepData } from './getThorStepData' @@ -86,6 +87,8 @@ export const getThorL1TradeQuote = async ( const quote: ThorTradeQuote = { ...tradeCommon, quoteOrRate: 'quote', + // The daemon quote expiry scopes the inbound address - sending later risks a rotated vault + deadline: normalizeEpochToMs(tradeCommon.expiry), memo, receiveAddress, data, diff --git a/packages/types/package.json b/packages/types/package.json index 0b76dba2a80..ec38efa1f9e 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -33,6 +33,6 @@ "@cowprotocol/app-data": "^2.3.0", "@shapeshiftoss/caip": "workspace:^", "ethers5": "npm:ethers@5.7.2", - "viem": "2.43.5" + "viem": "2.55.11" } } diff --git a/packages/types/src/base.ts b/packages/types/src/base.ts index eeeb6313fb3..d14da26786e 100644 --- a/packages/types/src/base.ts +++ b/packages/types/src/base.ts @@ -63,6 +63,7 @@ export enum KnownChainIds { StarknetMainnet = 'starknet:SN_MAIN', TonMainnet = 'ton:mainnet', AbstractMainnet = 'eip155:2741', + RobinhoodMainnet = 'eip155:4663', } export type EvmChainId = @@ -101,6 +102,7 @@ export type EvmChainId = | KnownChainIds.ModeMainnet | KnownChainIds.SoneiumMainnet | KnownChainIds.AbstractMainnet + | KnownChainIds.RobinhoodMainnet export type CosmosSdkChainId = | KnownChainIds.CosmosMainnet diff --git a/packages/unchained-client/package.json b/packages/unchained-client/package.json index 5d07f18a1e3..e62eeacdbec 100644 --- a/packages/unchained-client/package.json +++ b/packages/unchained-client/package.json @@ -39,7 +39,7 @@ "bs58": "^5.0.0", "ethers": "6.11.1", "isomorphic-ws": "^4.0.1", - "viem": "2.43.5", + "viem": "2.55.11", "ws": "^8.17.1" }, "devDependencies": { diff --git a/packages/utils/src/assetData/baseAssets.ts b/packages/utils/src/assetData/baseAssets.ts index 2531ebc9c83..60ebb2c719a 100644 --- a/packages/utils/src/assetData/baseAssets.ts +++ b/packages/utils/src/assetData/baseAssets.ts @@ -2,6 +2,23 @@ import type { AssetId } from '@shapeshiftoss/caip' import * as caip from '@shapeshiftoss/caip' import type { Asset } from '@shapeshiftoss/types' +export const robinhood: Readonly = Object.freeze({ + assetId: caip.robinhoodAssetId, + chainId: caip.robinhoodChainId, + name: 'Ethereum', + networkName: 'Robinhood', + symbol: 'ETH', + precision: 18, + color: '#00C805', + networkColor: '#00C805', + icon: 'https://assets.coingecko.com/coins/images/279/large/ethereum.png', + networkIcon: 'https://assets.relay.link/icons/4663/light.png', + explorer: 'https://robinhoodchain.blockscout.com', + explorerAddressLink: 'https://robinhoodchain.blockscout.com/address/', + explorerTxLink: 'https://robinhoodchain.blockscout.com/tx/', + relatedAssetKey: 'eip155:1/slip44:60', +}) + export const abstract: Readonly = Object.freeze({ assetId: caip.abstractAssetId, chainId: caip.abstractChainId, diff --git a/packages/utils/src/assetData/getBaseAsset.ts b/packages/utils/src/assetData/getBaseAsset.ts index 33e613002c7..7bd0ad388ba 100644 --- a/packages/utils/src/assetData/getBaseAsset.ts +++ b/packages/utils/src/assetData/getBaseAsset.ts @@ -38,6 +38,7 @@ import { plasma, plume, polygon, + robinhood, scroll, sei, solana, @@ -156,6 +157,8 @@ export const getBaseAsset = (chainId: ChainId): Readonly => { return ton case KnownChainIds.AbstractMainnet: return abstract + case KnownChainIds.RobinhoodMainnet: + return robinhood default: return assertUnreachable(knownChainId) } diff --git a/packages/utils/src/chainIdToFeeAssetId.ts b/packages/utils/src/chainIdToFeeAssetId.ts index 01a9bfab4bb..abfb5690a0c 100644 --- a/packages/utils/src/chainIdToFeeAssetId.ts +++ b/packages/utils/src/chainIdToFeeAssetId.ts @@ -34,6 +34,7 @@ import { plasmaAssetId, plumeAssetId, polygonAssetId, + robinhoodAssetId, scrollAssetId, seiAssetId, solAssetId, @@ -155,6 +156,8 @@ export const chainIdToFeeAssetId = (_chainId: ChainId): AssetId => { return tonAssetId case KnownChainIds.AbstractMainnet: return abstractAssetId + case KnownChainIds.RobinhoodMainnet: + return robinhoodAssetId default: return assertUnreachable(chainId) } diff --git a/packages/utils/src/getAssetNamespaceFromChainId.ts b/packages/utils/src/getAssetNamespaceFromChainId.ts index 107b891cb36..e984f9b0b5e 100644 --- a/packages/utils/src/getAssetNamespaceFromChainId.ts +++ b/packages/utils/src/getAssetNamespaceFromChainId.ts @@ -49,6 +49,7 @@ export const getAssetNamespaceFromChainId = (chainId: KnownChainIds): AssetNames case KnownChainIds.FlowEvmMainnet: case KnownChainIds.CeloMainnet: case KnownChainIds.AbstractMainnet: + case KnownChainIds.RobinhoodMainnet: return ASSET_NAMESPACE.erc20 case KnownChainIds.StarknetMainnet: return ASSET_NAMESPACE.starknetToken diff --git a/packages/utils/src/getChainShortName.ts b/packages/utils/src/getChainShortName.ts index a5012b04e34..8b85efa58db 100644 --- a/packages/utils/src/getChainShortName.ts +++ b/packages/utils/src/getChainShortName.ts @@ -102,6 +102,8 @@ export const getChainShortName = (chainId: KnownChainIds) => { return 'TON' case KnownChainIds.AbstractMainnet: return 'ABS' + case KnownChainIds.RobinhoodMainnet: + return 'RH' default: { assertUnreachable(chainId) } diff --git a/packages/utils/src/getNativeFeeAssetReference.ts b/packages/utils/src/getNativeFeeAssetReference.ts index 53862e88e3d..814ea364e5b 100644 --- a/packages/utils/src/getNativeFeeAssetReference.ts +++ b/packages/utils/src/getNativeFeeAssetReference.ts @@ -94,6 +94,8 @@ export const getNativeFeeAssetReference = ( return ASSET_REFERENCE.Mode case CHAIN_REFERENCE.SoneiumMainnet: return ASSET_REFERENCE.Soneium + case CHAIN_REFERENCE.RobinhoodMainnet: + return ASSET_REFERENCE.Robinhood default: throw new Error(`Chain namespace ${chainNamespace} on ${chainReference} not supported.`) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33152c43049..37170e6965c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -549,11 +549,11 @@ importers: specifier: ^1.1.2 version: 1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) wagmi: specifier: ^2.9.2 - version: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) web-vitals: specifier: ^2.1.4 version: 2.1.4 @@ -806,19 +806,19 @@ importers: version: 1.8.18(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-adapter-wagmi': specifier: ^1.8.17 - version: 1.8.18(5cf0d2968b8b0d6c0da2a23aca49ea91) + version: 1.8.18(6ded1492dc1ab9213c487e266231b83f) '@shapeshiftoss/types': specifier: workspace:^ version: link:../types '@wagmi/core': specifier: ^2.22.1 - version: 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + version: 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) viem: specifier: ^2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) wagmi: specifier: ^2.19.5 - version: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) devDependencies: serve: specifier: ^14.2.6 @@ -908,8 +908,8 @@ importers: specifier: ^8.0.1 version: 8.1.1 viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) devDependencies: '@types/bs58check': specifier: ^2.1.0 @@ -948,8 +948,8 @@ importers: specifier: ^4.17.23 version: 4.17.23 viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) devDependencies: '@types/lodash': specifier: 4.14.182 @@ -1858,7 +1858,7 @@ importers: version: link:../hdwallet-trezor '@trezor/connect-web': specifier: ^9.6.4 - version: 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + version: 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) packages/hdwallet-vultisig: dependencies: @@ -1960,8 +1960,8 @@ importers: specifier: ^9.0.0 version: 9.0.1 viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) yaml: specifier: ^2.8.2 version: 2.8.2 @@ -2196,8 +2196,8 @@ importers: specifier: ^9.0.0 version: 9.0.1 viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) devDependencies: '@types/lodash': specifier: 4.14.182 @@ -2227,8 +2227,8 @@ importers: specifier: npm:ethers@5.7.2 version: ethers@5.7.2(bufferutil@4.1.0)(utf-8-validate@5.0.10) viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) packages/unchained-client: dependencies: @@ -2260,8 +2260,8 @@ importers: specifier: ^4.0.1 version: 4.0.1(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) viem: - specifier: 2.43.5 - version: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@6.0.6)(zod@3.25.76) + specifier: 2.55.11 + version: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@6.0.6)(zod@3.25.76) ws: specifier: ^8.17.1 version: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -13578,6 +13578,14 @@ packages: typescript: optional: true + ox@0.14.33: + resolution: {integrity: sha512-rooA/4o7bBof4Ge2VH/eovfNPb/AEEYyrNj03wggc55g5HZD8Pjs/OeWhttgjic3dDcqn0r29bDuvQEdTiUemQ==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + ox@0.4.4: resolution: {integrity: sha512-oJPEeCDs9iNiPs6J0rTx+Y0KGeCGyCAA3zo94yZhm8G5WpOxrwUtn2Ie/Y8IyARSqqY/j9JTKA3Fc1xs1DvFnw==} peerDependencies: @@ -16350,6 +16358,14 @@ packages: typescript: optional: true + viem@2.55.11: + resolution: {integrity: sha512-RR5MwtdUnFfqw6ZGoFptizywyLOkLuhTL7UafoP3Irf2upXpANakQkLgGqY4H7A7+8JBxjUs6lElGF5zuGjMEw==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite-bundle-analyzer@0.18.1: resolution: {integrity: sha512-VQgrvxRuiZuOhM61p85lGpxzWR3TUbgn1LYtCBL09LUVoKy+yoxPwWTq+ihuPqT5L4tp0Jiiaa/dGYIRF8Guag==} hasBin: true @@ -16855,6 +16871,18 @@ packages: utf-8-validate: optional: true + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xhr2-cookies@1.1.0: resolution: {integrity: sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==} @@ -18043,7 +18071,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.2.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18067,7 +18095,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.2.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18091,7 +18119,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.2.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18116,7 +18144,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18140,7 +18168,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18395,7 +18423,7 @@ snapshots: jose: 6.1.3 md5: 2.3.0 uncrypto: 0.1.3 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -18417,7 +18445,7 @@ snapshots: jose: 6.1.3 md5: 2.3.0 uncrypto: 0.1.3 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -18439,7 +18467,7 @@ snapshots: jose: 6.1.3 md5: 2.3.0 uncrypto: 0.1.3 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -18471,7 +18499,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.2.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18491,7 +18519,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.2.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18511,7 +18539,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.2.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18532,7 +18560,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -18552,7 +18580,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.2)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) transitivePeerDependencies: - '@types/react' @@ -20088,27 +20116,27 @@ snapshots: - react - react-dom - '@gemini-wallet/core@0.3.2(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))': + '@gemini-wallet/core@0.3.2(viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - supports-color - '@gemini-wallet/core@0.3.2(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@gemini-wallet/core@0.3.2(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - supports-color - '@gemini-wallet/core@0.3.2(viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@gemini-wallet/core@0.3.2(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - supports-color @@ -20123,7 +20151,7 @@ snapshots: bitcoinjs-lib: 6.1.7 ethers: 6.16.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) global: 4.4.0 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - supports-color @@ -20145,7 +20173,7 @@ snapshots: bitcoinjs-lib: 6.1.7 global: 4.4.0 globals: 17.6.0 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@tanstack/react-query' - bufferutil @@ -22893,7 +22921,7 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-adapter-wagmi@1.8.18(5cf0d2968b8b0d6c0da2a23aca49ea91)': + '@reown/appkit-adapter-wagmi@1.8.18(6ded1492dc1ab9213c487e266231b83f)': dependencies: '@reown/appkit': 1.8.18(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -22902,13 +22930,13 @@ snapshots: '@reown/appkit-scaffold-ui': 1.8.18(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.1.2)(react@19.2.4))(zod@3.25.76) '@reown/appkit-utils': 1.8.18(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.1.2)(react@19.2.4))(zod@3.25.76) '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) optionalDependencies: - '@wagmi/connectors': 7.2.1(4a34b347f59e84628f8f1e8bdace0018) + '@wagmi/connectors': 7.2.1(d1b501803ca7e7b2d671cc7c537a4c04) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -22952,7 +22980,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -22963,7 +22991,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -22974,7 +23002,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -22985,7 +23013,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -22996,7 +23024,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -23008,7 +23036,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -23019,7 +23047,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -23030,7 +23058,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -23041,7 +23069,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -23054,7 +23082,7 @@ snapshots: '@reown/appkit-wallet': 1.7.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.19.1(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23089,7 +23117,7 @@ snapshots: '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23124,7 +23152,7 @@ snapshots: '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23159,7 +23187,7 @@ snapshots: '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23194,7 +23222,7 @@ snapshots: '@reown/appkit-wallet': 1.8.17-wc-circular-dependencies-fix.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23230,7 +23258,7 @@ snapshots: '@reown/appkit-wallet': 1.8.17-wc-circular-dependencies-fix.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6) '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23265,7 +23293,7 @@ snapshots: '@reown/appkit-wallet': 1.8.17-wc-circular-dependencies-fix.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23300,7 +23328,7 @@ snapshots: '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -23335,7 +23363,7 @@ snapshots: '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -24462,7 +24490,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.19.1(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -24500,7 +24528,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -24538,7 +24566,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -24576,7 +24604,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -24615,7 +24643,7 @@ snapshots: '@walletconnect/logger': 3.0.2 '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) @@ -24662,7 +24690,7 @@ snapshots: '@walletconnect/logger': 3.0.2 '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -24710,7 +24738,7 @@ snapshots: '@walletconnect/logger': 3.0.2 '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -24757,7 +24785,7 @@ snapshots: '@walletconnect/logger': 3.0.2 '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -24805,7 +24833,7 @@ snapshots: '@walletconnect/logger': 3.0.2 '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -24852,7 +24880,7 @@ snapshots: '@walletconnect/logger': 3.0.2 '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -25002,7 +25030,7 @@ snapshots: '@walletconnect/universal-provider': 2.19.1(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -25045,7 +25073,7 @@ snapshots: '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -25088,7 +25116,7 @@ snapshots: '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -25131,7 +25159,7 @@ snapshots: '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -25174,7 +25202,7 @@ snapshots: bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.1.2) transitivePeerDependencies: @@ -25223,7 +25251,7 @@ snapshots: bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.1.2) transitivePeerDependencies: @@ -25273,7 +25301,7 @@ snapshots: bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.1.2) transitivePeerDependencies: @@ -25322,7 +25350,7 @@ snapshots: bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.1.2) transitivePeerDependencies: @@ -25372,7 +25400,7 @@ snapshots: bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.1.2) transitivePeerDependencies: @@ -25421,7 +25449,7 @@ snapshots: bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.1.2)(react@19.2.4) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.1.2) transitivePeerDependencies: @@ -25668,7 +25696,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -25678,7 +25706,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -25688,7 +25716,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -26354,17 +26382,17 @@ snapshots: dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + '@solana-program/compute-budget@0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + '@solana-program/stake@0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana-program/system@0.10.0(@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(utf-8-validate@5.0.10))': dependencies: @@ -26382,26 +26410,26 @@ snapshots: dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + '@solana-program/system@0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))': + '@solana-program/token-2022@0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana/sysvars': 5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)))': dependencies: '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': + '@solana-program/token@0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))': dependencies: - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana-program/token@0.9.0(@solana/kit@5.5.1(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.2.2)(utf-8-validate@5.0.10))': dependencies: @@ -26984,7 +27012,7 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: '@solana/accounts': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -26997,11 +27025,11 @@ snapshots: '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/rpc-parsed-types': 2.3.0(typescript@5.8.2) '@solana/rpc-spec-types': 2.3.0(typescript@5.8.2) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/signers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/sysvars': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/transaction-confirmation': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) typescript: 5.8.2 @@ -27485,14 +27513,14 @@ snapshots: typescript: 5.2.2 ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@solana/rpc-subscriptions-channel-websocket@2.3.0(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) '@solana/functional': 2.3.0(typescript@5.8.2) '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.2) '@solana/subscribable': 2.3.0(typescript@5.8.2) typescript: 5.8.2 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@solana/rpc-subscriptions-channel-websocket@5.5.1(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)': dependencies: @@ -27585,7 +27613,7 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@solana/rpc-subscriptions@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: '@solana/errors': 2.3.0(typescript@5.8.2) '@solana/fast-stable-stringify': 2.3.0(typescript@5.8.2) @@ -27593,7 +27621,7 @@ snapshots: '@solana/promises': 2.3.0(typescript@5.8.2) '@solana/rpc-spec-types': 2.3.0(typescript@5.8.2) '@solana/rpc-subscriptions-api': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-subscriptions-channel-websocket': 2.3.0(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana/rpc-subscriptions-spec': 2.3.0(typescript@5.8.2) '@solana/rpc-transformers': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -28139,7 +28167,7 @@ snapshots: - fastestsmallesttextencoderdecoder - ws - '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@solana/transaction-confirmation@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: '@solana/addresses': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/codecs-strings': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -28147,7 +28175,7 @@ snapshots: '@solana/keys': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/promises': 2.3.0(typescript@5.8.2) '@solana/rpc': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) - '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana/rpc-subscriptions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/transaction-messages': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@solana/transactions': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) @@ -29253,13 +29281,13 @@ snapshots: - react-native - utf-8-validate - '@trezor/blockchain-link@2.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@trezor/blockchain-link@2.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) - '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/stake': 0.2.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@solana/rpc-types': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2) '@stellar/stellar-sdk': 14.2.0 '@trezor/blockchain-link-types': 1.5.0(tslib@2.8.1) @@ -29341,9 +29369,9 @@ snapshots: - expo-localization - react-native - '@trezor/connect-web@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@trezor/connect-web@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: - '@trezor/connect': 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@trezor/connect': 9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@trezor/connect-common': 0.5.1(tslib@2.8.1) '@trezor/utils': 9.5.0(tslib@2.8.1) '@trezor/websocket-client': 1.3.0(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6) @@ -29383,7 +29411,7 @@ snapshots: - utf-8-validate - ws - '@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': + '@trezor/connect@9.7.2(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))': dependencies: '@ethereumjs/common': 10.1.1 '@ethereumjs/tx': 10.1.1 @@ -29391,12 +29419,12 @@ snapshots: '@mobily/ts-belt': 3.13.1 '@noble/hashes': 1.8.0 '@scure/bip39': 1.6.0 - '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) - '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) - '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) - '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) - '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - '@trezor/blockchain-link': 2.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@solana-program/compute-budget': 0.8.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/system': 0.7.0(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token': 0.5.1(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6))) + '@solana-program/token-2022': 0.4.2(@solana/kit@2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)) + '@solana/kit': 2.3.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + '@trezor/blockchain-link': 2.6.1(@solana/sysvars@5.5.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.2))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(tslib@2.8.1)(typescript@5.8.2)(utf-8-validate@6.0.6)(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) '@trezor/blockchain-link-types': 1.5.1(tslib@2.8.1) '@trezor/blockchain-link-utils': 1.5.2(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6) '@trezor/connect-analytics': 1.4.0(tslib@2.8.1) @@ -30806,19 +30834,19 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.0.3 - '@wagmi/connectors@6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': dependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@3.25.76) '@coinbase/wallet-sdk': 4.3.6(@types/react@19.1.2)(bufferutil@4.1.0)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(zod@3.25.76) - '@gemini-wallet/core': 0.3.2(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) + '@gemini-wallet/core': 0.3.2(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.1.2)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: @@ -30912,19 +30940,19 @@ snapshots: - wagmi - zod - '@wagmi/connectors@6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': dependencies: '@base-org/account': 2.4.0(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) '@coinbase/wallet-sdk': 4.3.6(@types/react@19.1.2)(bufferutil@4.1.0)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) - '@gemini-wallet/core': 0.3.2(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@gemini-wallet/core': 0.3.2(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.1.2)(bufferutil@4.1.0)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -30965,20 +30993,6 @@ snapshots: - wagmi - zod - '@wagmi/connectors@7.2.1(4a34b347f59e84628f8f1e8bdace0018)': - dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) - optionalDependencies: - '@coinbase/wallet-sdk': 4.3.6(@types/react@19.1.2)(bufferutil@4.1.0)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) - '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) - '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/ethereum-provider': 2.23.7(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) - porto: 0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) - typescript: 5.8.2 - optional: true - '@wagmi/connectors@7.2.1(8541e8d0795c7f8f3a0ed186f15beb01)': dependencies: '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76)) @@ -30993,11 +31007,25 @@ snapshots: typescript: 5.2.2 optional: true - '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))': + '@wagmi/connectors@7.2.1(d1b501803ca7e7b2d671cc7c537a4c04)': + dependencies: + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + optionalDependencies: + '@coinbase/wallet-sdk': 4.3.6(@types/react@19.1.2)(bufferutil@4.1.0)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) + '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) + '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/ethereum-provider': 2.23.7(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(utf-8-validate@5.0.10)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + typescript: 5.8.2 + optional: true + + '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.2.2) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: '@tanstack/query-core': 5.69.0 @@ -31008,11 +31036,11 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.2.2) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) zustand: 5.0.0(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: '@tanstack/query-core': 5.69.0 @@ -31038,11 +31066,11 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.8.2) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: '@tanstack/query-core': 5.69.0 @@ -31053,11 +31081,11 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.8.2) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) optionalDependencies: '@tanstack/query-core': 5.69.0 @@ -39008,9 +39036,13 @@ snapshots: dependencies: ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) - isows@1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)): + isows@1.0.7(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) + + isows@1.0.7(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)): + dependencies: + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) isstream@0.1.2: {} @@ -40676,7 +40708,7 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.11.1(typescript@5.2.2)(zod@3.25.76): + ox@0.11.1(typescript@5.8.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -40684,14 +40716,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) + abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.2.2 + typescript: 5.8.2 transitivePeerDependencies: - zod - ox@0.11.1(typescript@5.8.2)(zod@3.25.76): + ox@0.12.4(typescript@5.2.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -40699,14 +40731,14 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) + abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.2 + typescript: 5.2.2 transitivePeerDependencies: - zod - ox@0.12.4(typescript@5.2.2)(zod@3.25.76): + ox@0.14.33(typescript@5.2.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -40721,7 +40753,7 @@ snapshots: transitivePeerDependencies: - zod - ox@0.12.4(typescript@5.8.2)(zod@3.25.76): + ox@0.14.33(typescript@5.8.2)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -41151,21 +41183,21 @@ snapshots: dependencies: chalk: 5.3.0 - porto@0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) hono: 4.12.3 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.2.2) ox: 0.9.17(typescript@5.2.2)(zod@4.3.6) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) zod: 4.3.6 zustand: 5.0.11(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: '@tanstack/react-query': 5.69.0(react@19.2.4) react: 19.2.4 typescript: 5.2.2 - wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -41212,41 +41244,41 @@ snapshots: - use-sync-external-store optional: true - porto@0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) hono: 4.12.3 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.8.2) ox: 0.9.17(typescript@5.8.2)(zod@4.3.6) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 4.3.6 zustand: 5.0.11(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.4.0(react@19.2.4)) optionalDependencies: '@tanstack/react-query': 5.69.0(react@19.2.4) react: 19.2.4 typescript: 5.8.2 - wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer - use-sync-external-store - porto@0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) hono: 4.12.3 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.8.2) ox: 0.9.17(typescript@5.8.2)(zod@4.3.6) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 4.3.6 zustand: 5.0.11(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) optionalDependencies: '@tanstack/react-query': 5.69.0(react@19.2.4) react: 19.2.4 typescript: 5.8.2 - wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -44041,67 +44073,67 @@ snapshots: - utf-8-validate - zod - viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76): + viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - ox: 0.11.1(typescript@5.2.2)(zod@3.25.76) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + ox: 0.11.1(typescript@5.8.2)(zod@3.25.76) + ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.2.2 + typescript: 5.8.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) + abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.11.1(typescript@5.8.2)(zod@3.25.76) + ox: 0.12.4(typescript@5.2.2)(zod@3.25.76) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.8.2 + typescript: 5.2.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@6.0.6)(zod@3.25.76): + viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - ox: 0.11.1(typescript@5.8.2)(zod@3.25.76) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) + isows: 1.0.7(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + ox: 0.14.33(typescript@5.2.2)(zod@3.25.76) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.8.2 + typescript: 5.2.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.12.4(typescript@5.2.2)(zod@3.25.76) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + isows: 1.0.7(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + ox: 0.14.33(typescript@5.2.2)(zod@3.25.76) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: @@ -44109,33 +44141,33 @@ snapshots: - utf-8-validate - zod - viem@2.46.3(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76): + viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.2.2)(zod@3.25.76) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - ox: 0.12.4(typescript@5.2.2)(zod@3.25.76) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) + isows: 1.0.7(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + ox: 0.14.33(typescript@5.8.2)(zod@3.25.76) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: - typescript: 5.2.2 + typescript: 5.8.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - viem@2.46.3(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@6.0.6)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.8.2)(zod@3.25.76) - isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.12.4(typescript@5.8.2)(zod@3.25.76) - ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) + isows: 1.0.7(ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6)) + ox: 0.14.33(typescript@5.8.2)(zod@3.25.76) + ws: 8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -44303,14 +44335,14 @@ snapshots: - utf-8-validate - zod - wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76): + wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76): dependencies: '@tanstack/react-query': 5.69.0(react@19.2.4) - '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) + '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(utf-8-validate@6.0.6)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.2.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76)) react: 19.2.4 use-sync-external-store: 1.4.0(react@19.2.4) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.2.2)(utf-8-validate@6.0.6)(zod@3.25.76) optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: @@ -44348,14 +44380,14 @@ snapshots: - utf-8-validate - zod - wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): + wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): dependencies: '@tanstack/react-query': 5.69.0(react@19.2.4) - '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(@wagmi/core@2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.6.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.69.0)(@tanstack/react-query@5.69.0(react@19.2.4))(@types/react@19.1.2)(bufferutil@4.1.0)(fastestsmallesttextencoderdecoder@1.0.22)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.69.0)(@types/react@19.1.2)(immer@9.0.21)(react@19.2.4)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@19.2.4))(viem@2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)) react: 19.2.4 use-sync-external-store: 1.4.0(react@19.2.4) - viem: 2.43.5(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.55.11(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.8.2 transitivePeerDependencies: @@ -44982,6 +45014,16 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 6.0.6 + ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 5.0.10 + + ws@8.21.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + optionalDependencies: + bufferutil: 4.1.0 + utf-8-validate: 6.0.6 + xhr2-cookies@1.1.0: dependencies: cookiejar: 2.1.4 diff --git a/public/generated/asset-manifest.json b/public/generated/asset-manifest.json index 14f824f6c91..c6cf2ff31f9 100644 --- a/public/generated/asset-manifest.json +++ b/public/generated/asset-manifest.json @@ -1,4 +1,4 @@ { - "assetData": "a15d4f21", - "relatedAssetIndex": "18372678" + "assetData": "bc52916d", + "relatedAssetIndex": "a02f283c" } \ No newline at end of file diff --git a/public/generated/asset-manifest.json.br b/public/generated/asset-manifest.json.br index 328a602d7e2..942681e86a3 100644 Binary files a/public/generated/asset-manifest.json.br and b/public/generated/asset-manifest.json.br differ diff --git a/public/generated/asset-manifest.json.gz b/public/generated/asset-manifest.json.gz index fc67c72e6cb..3a2f6bfbc94 100644 Binary files a/public/generated/asset-manifest.json.gz and b/public/generated/asset-manifest.json.gz differ diff --git a/public/generated/generatedAssetData.json b/public/generated/generatedAssetData.json index 6e85a0fbbbf..603c43f828b 100644 --- a/public/generated/generatedAssetData.json +++ b/public/generated/generatedAssetData.json @@ -354147,6 +354147,3922 @@ "explorerAddressLink": "https://tronscan.org/#/address/", "explorerTxLink": "https://tronscan.org/#/transaction/", "relatedAssetKey": null + }, + "eip155:4663/erc20:0x01397109534e47d3742e794d3a610fa1c3158888": { + "assetId": "eip155:4663/erc20:0x01397109534e47d3742e794d3a610fa1c3158888", + "chainId": "eip155:4663", + "name": "NINEHOOD", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174660/large/nfe2qfplxrnvi92bl7fz9tctq2na.?1784446869", + "symbol": "NINEHOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x01637b14b7378b99de75a64d50656d98488d9a4d": { + "assetId": "eip155:4663/erc20:0x01637b14b7378b99de75a64d50656d98488d9a4d", + "chainId": "eip155:4663", + "name": "Lady Marian", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174281/large/marian.jpg?1783654680", + "symbol": "MARIAN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0172fd20b8e89cb577a6edd3b800ee7b2a5b00c1": { + "assetId": "eip155:4663/erc20:0x0172fd20b8e89cb577a6edd3b800ee7b2a5b00c1", + "chainId": "eip155:4663", + "name": "Stargazer AI", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174484/large/xokvrd9f7d2p72j4ahfhshxmv31x.?1783767319", + "symbol": "STAR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0188da44dcc9b6c9d0d80de904c633c5ff227777": { + "assetId": "eip155:4663/erc20:0x0188da44dcc9b6c9d0d80de904c633c5ff227777", + "chainId": "eip155:4663", + "name": "Givest", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174636/large/givest.jpg?1784293859", + "symbol": "GIVEST", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x020bfc650a365f8bb26819deaabf3e21291018b4": { + "assetId": "eip155:4663/erc20:0x020bfc650a365f8bb26819deaabf3e21291018b4", + "chainId": "eip155:4663", + "name": "Cash Cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174280/large/cashcat-logo.jpg?1782922765", + "symbol": "CASHCAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x02cf91de4e80d3dd104e5ad6fc23eb15a9b6f8e2": { + "assetId": "eip155:4663/erc20:0x02cf91de4e80d3dd104e5ad6fc23eb15a9b6f8e2", + "chainId": "eip155:4663", + "name": "PLEB INDEX", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174666/large/plebcoingecko.jpg?1784477808", + "symbol": "PLEB", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x05b37fb53a299a1b874a619e1c4c404d52c36f4c": { + "assetId": "eip155:4663/erc20:0x05b37fb53a299a1b874a619e1c4c404d52c36f4c", + "chainId": "eip155:4663", + "name": "Reddit • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174197/large/0x05b37fb53a299a1b874a619e1c4c404d52c36f4c.png?1782444795", + "symbol": "RDDT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0684e19528ccfd570fb00f0ca626dac4bdab17cf": { + "assetId": "eip155:4663/erc20:0x0684e19528ccfd570fb00f0ca626dac4bdab17cf", + "chainId": "eip155:4663", + "name": "Pension", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174420/large/up9rr6mbzowl4rv1btzej709fzgl.?1783667775", + "symbol": "PENSION", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0830a9dd26a04e959657ab6788d45f5725590c32": { + "assetId": "eip155:4663/erc20:0x0830a9dd26a04e959657ab6788d45f5725590c32", + "chainId": "eip155:4663", + "name": "Degen", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/34515/large/android-chrome-512x512.png?1706198225", + "symbol": "DEGEN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:8453/erc20:0x4ed4e862860bed51a9570b96d89af5e1b0efefed" + }, + "eip155:4663/erc20:0x0856f71c65268da154da4413d961cb348dc6119d": { + "assetId": "eip155:4663/erc20:0x0856f71c65268da154da4413d961cb348dc6119d", + "chainId": "eip155:4663", + "name": "ROBIN THE HOODINI", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174321/large/magnific_l7br5G4gv9.png?1783181131", + "symbol": "HOODINI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0acb834130d284bfffa1c697f02dddafd8f50335": { + "assetId": "eip155:4663/erc20:0x0acb834130d284bfffa1c697f02dddafd8f50335", + "chainId": "eip155:4663", + "name": "Hoodbird", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174556/large/oi0m02s0jssx77gheb2wpn2v11q6.?1784016046", + "symbol": "HOODBIRD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0af77e27f535256965944e617a386570f5c0432a": { + "assetId": "eip155:4663/erc20:0x0af77e27f535256965944e617a386570f5c0432a", + "chainId": "eip155:4663", + "name": "Steel", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174675/large/mylaw7bl6fl5k8x3bonq2arqg9ho.?1784553143", + "symbol": "STEEL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0bd7d308f8e1639fab988df18a8011f41eacad73": { + "assetId": "eip155:4663/erc20:0x0bd7d308f8e1639fab988df18a8011f41eacad73", + "chainId": "eip155:4663", + "name": "Robinhood Wrapped ETH (Robinhood Chain)", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174283/large/weth-robinhood.jpeg?1782924507", + "symbol": "WETH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:1/erc20:0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" + }, + "eip155:4663/erc20:0x0c3260af4b8f13a69c4c2dfb84fd667890cdfa14": { + "assetId": "eip155:4663/erc20:0x0c3260af4b8f13a69c4c2dfb84fd667890cdfa14", + "chainId": "eip155:4663", + "name": "ServiceNow • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174161/large/0x0c3260af4b8f13a69c4c2dfb84fd667890cdfa14.png?1782444700", + "symbol": "NOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0e6e67ba88e7b5d9b67636a215c76779b948de79": { + "assetId": "eip155:4663/erc20:0x0e6e67ba88e7b5d9b67636a215c76779b948de79", + "chainId": "eip155:4663", + "name": "United Microelectronics • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174147/large/0x0e6e67ba88e7b5d9b67636a215c76779b948de79.png?1782444661", + "symbol": "UMC", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0e8720b8cd84f95b4b6696adbfa8063c4b8b94f2": { + "assetId": "eip155:4663/erc20:0x0e8720b8cd84f95b4b6696adbfa8063c4b8b94f2", + "chainId": "eip155:4663", + "name": "Buy Button", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174563/large/0vwsqrv1p93nz9kkkx58kyol3irk.?1784020345", + "symbol": "BUY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x0f17206447090e464c277571124dd2688e48aea9": { + "assetId": "eip155:4663/erc20:0x0f17206447090e464c277571124dd2688e48aea9", + "chainId": "eip155:4663", + "name": "Qualcomm • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174137/large/0x0f17206447090e464c277571124dd2688e48aea9.png?1782444635", + "symbol": "QCOM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x117cc2133c37b721f49de2a7a74833232b3b4c0c": { + "assetId": "eip155:4663/erc20:0x117cc2133c37b721f49de2a7a74833232b3b4c0c", + "chainId": "eip155:4663", + "name": "SPDR S&P 500 ETF Trust • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174115/large/0x117cc2133c37b721f49de2a7a74833232b3b4c0c.png?1782444578", + "symbol": "SPY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x12f190a9f9d7d37a250758b26824b97ce941bf54": { + "assetId": "eip155:4663/erc20:0x12f190a9f9d7d37a250758b26824b97ce941bf54", + "chainId": "eip155:4663", + "name": "Amazon • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174126/large/0x12f190a9f9d7d37a250758b26824b97ce941bf54.png?1782444606", + "symbol": "AMZN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x156e175dd063a8ce274c50654ef40e0032b3fbcf": { + "assetId": "eip155:4663/erc20:0x156e175dd063a8ce274c50654ef40e0032b3fbcf", + "chainId": "eip155:4663", + "name": "Broadcom • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174164/large/0x156e175dd063a8ce274c50654ef40e0032b3fbcf.png?1782444707", + "symbol": "AVGO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x15cd20759ce7f3285c29a319de2d1a2e098c6f43": { + "assetId": "eip155:4663/erc20:0x15cd20759ce7f3285c29a319de2d1a2e098c6f43", + "chainId": "eip155:4663", + "name": "State Street Technology Select Sector SPDR ETF • Robinhood T", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174157/large/0x15cd20759ce7f3285c29a319de2d1a2e098c6f43.png?1782444689", + "symbol": "XLK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x15e8b90d9444d1a5e9b39f5c9547a104ae69ba11": { + "assetId": "eip155:4663/erc20:0x15e8b90d9444d1a5e9b39f5c9547a104ae69ba11", + "chainId": "eip155:4663", + "name": "buy and retire", + "precision": 9, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174518/large/logo.png?1783854944", + "symbol": "530A", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x164d9da79722c5294369e79807980e0bff257777": { + "assetId": "eip155:4663/erc20:0x164d9da79722c5294369e79807980e0bff257777", + "chainId": "eip155:4663", + "name": "utopiadet", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174676/large/vkoksjd43j74j4x3jxva13yl9k4l.?1784553272", + "symbol": "UTOPIA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x178e54df3d091ee4d0b2534742ef9e3692b76526": { + "assetId": "eip155:4663/erc20:0x178e54df3d091ee4d0b2534742ef9e3692b76526", + "chainId": "eip155:4663", + "name": "BankrCoin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/52626/large/bankr-static.png?1736405365", + "symbol": "BNKR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x17bb0c898254406b1ea2e8e99b0c263e26c9e4a4": { + "assetId": "eip155:4663/erc20:0x17bb0c898254406b1ea2e8e99b0c263e26c9e4a4", + "chainId": "eip155:4663", + "name": "Dog In Hood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174285/large/DIH_PFP.png?1784475558", + "symbol": "DIH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x1abf16f660ccbaa22ce8646deb1b63635d582228": { + "assetId": "eip155:4663/erc20:0x1abf16f660ccbaa22ce8646deb1b63635d582228", + "chainId": "eip155:4663", + "name": "Fonz on Pons", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174658/large/fonz.jpg?1784446665", + "symbol": "FONZ", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x1af6446f07eb1d97c546afc8c9544cbdf3ad5137": { + "assetId": "eip155:4663/erc20:0x1af6446f07eb1d97c546afc8c9544cbdf3ad5137", + "chainId": "eip155:4663", + "name": "AST SpaceMobile • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174162/large/0x1af6446f07eb1d97c546afc8c9544cbdf3ad5137.png?1782444702", + "symbol": "ASTS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x1b0e319c6a659f002271b69db8a7df2f911c153e": { + "assetId": "eip155:4663/erc20:0x1b0e319c6a659f002271b69db8a7df2f911c153e", + "chainId": "eip155:4663", + "name": "GameStop • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174150/large/0x1b0e319c6a659f002271b69db8a7df2f911c153e.png?1782444670", + "symbol": "GME", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x1cdad396db64bda184d5182a97dd9b3c62100b7d": { + "assetId": "eip155:4663/erc20:0x1cdad396db64bda184d5182a97dd9b3c62100b7d", + "chainId": "eip155:4663", + "name": "Everpure • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174199/large/0x1cdad396db64bda184d5182a97dd9b3c62100b7d.png?1782444800", + "symbol": "P", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x1dae71a215ee5c696cb644f030597ae4f32831c0": { + "assetId": "eip155:4663/erc20:0x1dae71a215ee5c696cb644f030597ae4f32831c0", + "chainId": "eip155:4663", + "name": "sparkleware", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174428/large/sparkleware.jpg?1783669849", + "symbol": "SPARKLE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x1e0aaaf3fdb5c0de3574d215e7081177ec0f96a3": { + "assetId": "eip155:4663/erc20:0x1e0aaaf3fdb5c0de3574d215e7081177ec0f96a3", + "chainId": "eip155:4663", + "name": "AI PIN", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/34235/large/AiPin-200px.png?1704306335", + "symbol": "AI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:8453/erc20:0xf516562b703f46084eeb79afe58cc046572e56a7" + }, + "eip155:4663/erc20:0x20aa6e63076ee856f46bb31f7d30e60b335b11e9": { + "assetId": "eip155:4663/erc20:0x20aa6e63076ee856f46bb31f7d30e60b335b11e9", + "chainId": "eip155:4663", + "name": "Dog on Wire", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174736/large/c2or6npzh6yqz16sjhjkj7dyng57.?1784704179", + "symbol": "DOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x2103faa9d1762e27a716c61718b3acf3ec1f9bf1": { + "assetId": "eip155:4663/erc20:0x2103faa9d1762e27a716c61718b3acf3ec1f9bf1", + "chainId": "eip155:4663", + "name": "Robin Hood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174509/large/rhood.jpg?1783842242", + "symbol": "FOX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x218eec7d0c6a26ba119063b3228b8d04085545d3": { + "assetId": "eip155:4663/erc20:0x218eec7d0c6a26ba119063b3228b8d04085545d3", + "chainId": "eip155:4663", + "name": "LMEOW", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174521/large/20w3ifjdw0gefoczkwnh7ztvy99e.?1783855266", + "symbol": "LMEOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x2355431b83b1a8e40172d099d90243d8d666b56b": { + "assetId": "eip155:4663/erc20:0x2355431b83b1a8e40172d099d90243d8d666b56b", + "chainId": "eip155:4663", + "name": "Vibing Cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174456/large/uu5c80xhybczyk1te0r9tnl31eto.?1783692760", + "symbol": "VIBECAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x23f88eda2b24a0d45d4c3e2ad05edff30f860697": { + "assetId": "eip155:4663/erc20:0x23f88eda2b24a0d45d4c3e2ad05edff30f860697", + "chainId": "eip155:4663", + "name": "Leavehood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174558/large/leavehood_400x400.jpg?1784019212", + "symbol": "LEAVE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x241f3caad03db31137f641bef005a32176530024": { + "assetId": "eip155:4663/erc20:0x241f3caad03db31137f641bef005a32176530024", + "chainId": "eip155:4663", + "name": "Non-Playable Coin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/31193/large/NPC_200x200.png?1696530021", + "symbol": "NPC", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:8453/erc20:0xb166e8b140d35d9d8226e40c09f757bac5a4d87d" + }, + "eip155:4663/erc20:0x25824447ed0e26b0741858b67065bb6bd0017b15": { + "assetId": "eip155:4663/erc20:0x25824447ed0e26b0741858b67065bb6bd0017b15", + "chainId": "eip155:4663", + "name": "HOOD6900", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174422/large/mdt1lm9nr0btuf6esxag7sjf55bd.?1783668507", + "symbol": "HOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x25c288e6d899b9bc30160965ad9644c67e73be0c": { + "assetId": "eip155:4663/erc20:0x25c288e6d899b9bc30160965ad9644c67e73be0c", + "chainId": "eip155:4663", + "name": "Ford Motor • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174185/large/0x25c288e6d899b9bc30160965ad9644c67e73be0c.png?1782444763", + "symbol": "F", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x26c41b10527de2dc870fa5c9d5f4a8dbaa966cdf": { + "assetId": "eip155:4663/erc20:0x26c41b10527de2dc870fa5c9d5f4a8dbaa966cdf", + "chainId": "eip155:4663", + "name": "Privacy Hood by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174577/large/zue9xia7wlzsab8hj66uebykzxqy.?1784095461", + "symbol": "PHOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x27c99fbde9d0d2aa4f4bfb4943f237843ddf6958": { + "assetId": "eip155:4663/erc20:0x27c99fbde9d0d2aa4f4bfb4943f237843ddf6958", + "chainId": "eip155:4663", + "name": "Datadog • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174188/large/0x27c99fbde9d0d2aa4f4bfb4943f237843ddf6958.png?1782444771", + "symbol": "DDOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x281079a7832b15238ed9c6ec1e787f3ed9db6ad1": { + "assetId": "eip155:4663/erc20:0x281079a7832b15238ed9c6ec1e787f3ed9db6ad1", + "chainId": "eip155:4663", + "name": "The Hoodies", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174398/large/hoodies.jpg?1783580769", + "symbol": "HOODIES", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x282e87451e10fa6679bc7d76c69be44cd3fc777c": { + "assetId": "eip155:4663/erc20:0x282e87451e10fa6679bc7d76c69be44cd3fc777c", + "chainId": "eip155:4663", + "name": "Fluence Energy • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174194/large/0x282e87451e10fa6679bc7d76c69be44cd3fc777c.png?1782444787", + "symbol": "FLNC", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x284358abc07f9359f19f4b5b4ac91901be2597ba": { + "assetId": "eip155:4663/erc20:0x284358abc07f9359f19f4b5b4ac91901be2597ba", + "chainId": "eip155:4663", + "name": "Rigetti Computing • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174146/large/0x284358abc07f9359f19f4b5b4ac91901be2597ba.png?1782444659", + "symbol": "RGTI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x2b10d89ba75cfe18f2678a66e4c18c1005b03afa": { + "assetId": "eip155:4663/erc20:0x2b10d89ba75cfe18f2678a66e4c18c1005b03afa", + "chainId": "eip155:4663", + "name": "HoodPerp", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174662/large/h2nhpetu0yhvn5vh8pgm7aps9g00.?1784447187", + "symbol": "HPERP", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x2e0847e8910a9732eb3fb1bb4b70a580adad4fe3": { + "assetId": "eip155:4663/erc20:0x2e0847e8910a9732eb3fb1bb4b70a580adad4fe3", + "chainId": "eip155:4663", + "name": "Alphabet Class A • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174124/large/0x2e0847e8910a9732eb3fb1bb4b70a580adad4fe3.png?1782444601", + "symbol": "GOOGL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x2e9c3b1c6e7703d1784b2b8f80ef4e99d76b3e56": { + "assetId": "eip155:4663/erc20:0x2e9c3b1c6e7703d1784b2b8f80ef4e99d76b3e56", + "chainId": "eip155:4663", + "name": "Tiger, Inc.", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174452/large/wa6a1q8ciuo4j2rtsmxmfpw3y4w2.?1783691743", + "symbol": "MEOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x2ea05472e1b7289004e5a1f6d959f6f2f3a6fecb": { + "assetId": "eip155:4663/erc20:0x2ea05472e1b7289004e5a1f6d959f6f2f3a6fecb", + "chainId": "eip155:4663", + "name": "Pepe Community", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/31482/large/photo_2023-08-25_07-54-16.jpg?1696530294", + "symbol": "PEPE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:1/erc20:0xbe042e9d09cb588331ff911c2b46fd833a3e5bd6" + }, + "eip155:4663/erc20:0x3018e275da8d1acd16e7b803e74fca9c251fd60f": { + "assetId": "eip155:4663/erc20:0x3018e275da8d1acd16e7b803e74fca9c251fd60f", + "chainId": "eip155:4663", + "name": "MEOWOOD", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174540/large/7wyw5t1rcw7ekj6piizniljhlipi.?1783957311", + "symbol": "MEOWOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x31be8f7485e36928c9de86566c62da82d4b6bf81": { + "assetId": "eip155:4663/erc20:0x31be8f7485e36928c9de86566c62da82d4b6bf81", + "chainId": "eip155:4663", + "name": "The Green Bull", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174476/large/vlad.png?1783762041", + "symbol": "VLAD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x31ef2f4e678b3640a380c5882ae1a73763d138e9": { + "assetId": "eip155:4663/erc20:0x31ef2f4e678b3640a380c5882ae1a73763d138e9", + "chainId": "eip155:4663", + "name": "flowr", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174679/large/mv6er40qzfjeicirabn4e07yvxu3.?1784554561", + "symbol": "FLOWR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x322f0929c4625ed5bad873c95208d54e1c003b2d": { + "assetId": "eip155:4663/erc20:0x322f0929c4625ed5bad873c95208d54e1c003b2d", + "chainId": "eip155:4663", + "name": "Tesla • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174112/large/0x322f0929c4625ed5bad873c95208d54e1c003b2d.png?1782444570", + "symbol": "TSLA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x32758ae8e02b0a2cb6b802b6aaeaf74158c169f7": { + "assetId": "eip155:4663/erc20:0x32758ae8e02b0a2cb6b802b6aaeaf74158c169f7", + "chainId": "eip155:4663", + "name": "Exterminate All Humans", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174511/large/xgv1bpooulvjh0ug2ssfqjgsluww.?1783848672", + "symbol": "HOODBOT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x343a9c531acf28c4d9f4cd8ef2d6413ceba3c2df": { + "assetId": "eip155:4663/erc20:0x343a9c531acf28c4d9f4cd8ef2d6413ceba3c2df", + "chainId": "eip155:4663", + "name": "Mr. Goxx", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174539/large/goxx_400x400.jpg?1783957268", + "symbol": "GOXX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x3450598e419abb5609f60e4b2fda127ff0897777": { + "assetId": "eip155:4663/erc20:0x3450598e419abb5609f60e4b2fda127ff0897777", + "chainId": "eip155:4663", + "name": "Fletch Finance", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174616/large/aibd7en0i4lmsrgjvibo397y3up5.?1784192160", + "symbol": "FLETCH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x36046893810a7e7fce501229d57dc3fc8c8716d0": { + "assetId": "eip155:4663/erc20:0x36046893810a7e7fce501229d57dc3fc8c8716d0", + "chainId": "eip155:4663", + "name": "Applied Materials • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174172/large/0x36046893810a7e7fce501229d57dc3fc8c8716d0.png?1782444729", + "symbol": "AMAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x364d9f23ede3ada0f5e3f41df10f0a0d01c57777": { + "assetId": "eip155:4663/erc20:0x364d9f23ede3ada0f5e3f41df10f0a0d01c57777", + "chainId": "eip155:4663", + "name": "Quiver Money", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174688/large/logo_quiver.jpg?1784627094", + "symbol": "QUIVER", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x3746a5ebca295dee695dd1bcba50a8626df3099c": { + "assetId": "eip155:4663/erc20:0x3746a5ebca295dee695dd1bcba50a8626df3099c", + "chainId": "eip155:4663", + "name": "Humanoid Network by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174607/large/zfx4kdjebl7sv670env09oc9tv2t.?1784190652", + "symbol": "HAN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x38bb87cf3e7344a82be7cd671c191f015b97eee6": { + "assetId": "eip155:4663/erc20:0x38bb87cf3e7344a82be7cd671c191f015b97eee6", + "chainId": "eip155:4663", + "name": "SANTAHOOD", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174554/large/30768.png?1784014852", + "symbol": "SANTACOIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x39dbed3a2bd333467115de45665cc57f813c4571": { + "assetId": "eip155:4663/erc20:0x39dbed3a2bd333467115de45665cc57f813c4571", + "chainId": "eip155:4663", + "name": "Pons", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174571/large/jhitvkisdq8fhxvimdkpcw7y3dx5.?1784093932", + "symbol": "PONS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x39ec44bee4f6a116c6f9b8de566848a985c53c60": { + "assetId": "eip155:4663/erc20:0x39ec44bee4f6a116c6f9b8de566848a985c53c60", + "chainId": "eip155:4663", + "name": "e.l.f. Beauty • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174196/large/0x39ec44bee4f6a116c6f9b8de566848a985c53c60.png?1782444793", + "symbol": "ELF", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x3aaa874b93612bf3f683b85e2739e81eab38321e": { + "assetId": "eip155:4663/erc20:0x3aaa874b93612bf3f683b85e2739e81eab38321e", + "chainId": "eip155:4663", + "name": "COCO", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174508/large/coco.jpg?1783840381", + "symbol": "COCO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x3b14c39e89d60d627b42a1a4ca45b5bb45fc12e2": { + "assetId": "eip155:4663/erc20:0x3b14c39e89d60d627b42a1a4ca45b5bb45fc12e2", + "chainId": "eip155:4663", + "name": "Rocket Lab Corporation • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174133/large/0x3b14c39e89d60d627b42a1a4ca45b5bb45fc12e2.png?1782444624", + "symbol": "RKLB", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x3d0a2e4763eee58a7c631acf7ff13ad6398a5141": { + "assetId": "eip155:4663/erc20:0x3d0a2e4763eee58a7c631acf7ff13ad6398a5141", + "chainId": "eip155:4663", + "name": "ArcherAutomates", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174541/large/cqbodpv9mzuntm480qba1of6y74z.?1783957424", + "symbol": "ARCHER", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x3f5e952b29be5d70846fc2ba472bea05761a769e": { + "assetId": "eip155:4663/erc20:0x3f5e952b29be5d70846fc2ba472bea05761a769e", + "chainId": "eip155:4663", + "name": "foreskin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174485/large/IMG_2485.jpeg?1784083180", + "symbol": "HOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x407470f85e0b342a52aae2f191e135cef2947777": { + "assetId": "eip155:4663/erc20:0x407470f85e0b342a52aae2f191e135cef2947777", + "chainId": "eip155:4663", + "name": "Mizukara", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174605/large/n7xy2tqh7j0xj15pp1e738ayr1wi.?1784190421", + "symbol": "MIZUKARA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7": { + "assetId": "eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7", + "chainId": "eip155:4663", + "name": "syrupUSDG", + "precision": 6, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174289/large/syrupUSDG.png?1783055974", + "symbol": "SYRUPUSDG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7" + }, + "eip155:4663/erc20:0x408c14038a04f7bd235329e26d2bf569ee20e250": { + "assetId": "eip155:4663/erc20:0x408c14038a04f7bd235329e26d2bf569ee20e250", + "chainId": "eip155:4663", + "name": "Nu • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174171/large/0x408c14038a04f7bd235329e26d2bf569ee20e250.png?1782444726", + "symbol": "NU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x40e836f547653691b74c0d68fff60befe36cb024": { + "assetId": "eip155:4663/erc20:0x40e836f547653691b74c0d68fff60befe36cb024", + "chainId": "eip155:4663", + "name": "Family coin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174734/large/517bpw2jczl05x5sldy4dk1k4we1.?1784703805", + "symbol": "FAMILY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x411efb0e7f985935daec3d4c3ebaea0d0ad7d89f": { + "assetId": "eip155:4663/erc20:0x411efb0e7f985935daec3d4c3ebaea0d0ad7d89f", + "chainId": "eip155:4663", + "name": "iShares Silver Trust • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174120/large/0x411efb0e7f985935daec3d4c3ebaea0d0ad7d89f.png?1782444590", + "symbol": "SLV", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x4189f0c66ebbb0bfef1c31f763131361ef32f77c": { + "assetId": "eip155:4663/erc20:0x4189f0c66ebbb0bfef1c31f763131361ef32f77c", + "chainId": "eip155:4663", + "name": "Permian Resources • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174186/large/0x4189f0c66ebbb0bfef1c31f763131361ef32f77c.png?1782444766", + "symbol": "PR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x41f41f7b849a25e027876c485544c8088f447a11": { + "assetId": "eip155:4663/erc20:0x41f41f7b849a25e027876c485544c8088f447a11", + "chainId": "eip155:4663", + "name": "Catcoin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102172993/large/axtt4lvrtgids5t0emi1p56igs49.?1777044509", + "symbol": "CATCOIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x43e7cb9984ad95aa808ac21998cc8d5f909e47af": { + "assetId": "eip155:4663/erc20:0x43e7cb9984ad95aa808ac21998cc8d5f909e47af", + "chainId": "eip155:4663", + "name": "Vimen by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174614/large/vsy51l1nd423o96w8w1eoems5xwg.?1784191746", + "symbol": "VIM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x44c4f142009036cf477ed2d09932051843137cf1": { + "assetId": "eip155:4663/erc20:0x44c4f142009036cf477ed2d09932051843137cf1", + "chainId": "eip155:4663", + "name": "Zoom • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174191/large/0x44c4f142009036cf477ed2d09932051843137cf1.png?1782444779", + "symbol": "ZM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x45242320dbb855eea8fd36804c6487e10e97fcf9": { + "assetId": "eip155:4663/erc20:0x45242320dbb855eea8fd36804c6487e10e97fcf9", + "chainId": "eip155:4663", + "name": "TENDIES", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174418/large/x1o0qj8dm7mlay3licerc1y75hr4.?1783667012", + "symbol": "TENDIES", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x46cf2ca61505902a4410b3b4242d787cd4737777": { + "assetId": "eip155:4663/erc20:0x46cf2ca61505902a4410b3b4242d787cd4737777", + "chainId": "eip155:4663", + "name": "Senkai", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174494/large/e7224c1c-0a5c-4652-909b-b167c498c2f2.png?1783781659", + "symbol": "SENKAI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x47ee684e52e5d92de0b24d4e00ad45c7af7db9a3": { + "assetId": "eip155:4663/erc20:0x47ee684e52e5d92de0b24d4e00ad45c7af7db9a3", + "chainId": "eip155:4663", + "name": "HoodDomains", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174531/large/HoodDomains.png?1783930998", + "symbol": "HD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x47f93d52cbec7c6d2cfc080e154002370a60daea": { + "assetId": "eip155:4663/erc20:0x47f93d52cbec7c6d2cfc080e154002370a60daea", + "chainId": "eip155:4663", + "name": "ASML Holding NV • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174168/large/0x47f93d52cbec7c6d2cfc080e154002370a60daea.png?1782444718", + "symbol": "ASML", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x48961813349333209994750ffa89b3c5c22ec969": { + "assetId": "eip155:4663/erc20:0x48961813349333209994750ffa89b3c5c22ec969", + "chainId": "eip155:4663", + "name": "MaxLinear • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174193/large/0x48961813349333209994750ffa89b3c5c22ec969.png?1782444784", + "symbol": "MXL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea": { + "assetId": "eip155:4663/erc20:0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea", + "chainId": "eip155:4663", + "name": "SpaceX • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174129/large/0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea.png?1782444614", + "symbol": "SPCX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x4c9d9527c4e3cf9faf70f0df8429d2cced157492": { + "assetId": "eip155:4663/erc20:0x4c9d9527c4e3cf9faf70f0df8429d2cced157492", + "chainId": "eip155:4663", + "name": "Dumb Money", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174462/large/dumb.jpg?1783694383", + "symbol": "DUMBMONEY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x4d21483a44bf67a86b77e3da301411880797d452": { + "assetId": "eip155:4663/erc20:0x4d21483a44bf67a86b77e3da301411880797d452", + "chainId": "eip155:4663", + "name": "Boeing • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174190/large/0x4d21483a44bf67a86b77e3da301411880797d452.png?1782444776", + "symbol": "BA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x4e62068525ab11fe768e29dfd00ef909b9803016": { + "assetId": "eip155:4663/erc20:0x4e62068525ab11fe768e29dfd00ef909b9803016", + "chainId": "eip155:4663", + "name": "Lululemon • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174187/large/0x4e62068525ab11fe768e29dfd00ef909b9803016.png?1782444768", + "symbol": "LULU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x4ea005168d7f09a7a0ba9d1def21a479950e44c2": { + "assetId": "eip155:4663/erc20:0x4ea005168d7f09a7a0ba9d1def21a479950e44c2", + "chainId": "eip155:4663", + "name": "Costco • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174152/large/0x4ea005168d7f09a7a0ba9d1def21a479950e44c2.png?1782444675", + "symbol": "COST", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x516c0878acca15e7eb2f6a401b5b6cd2a0f9f455": { + "assetId": "eip155:4663/erc20:0x516c0878acca15e7eb2f6a401b5b6cd2a0f9f455", + "chainId": "eip155:4663", + "name": "Run Your Money", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174560/large/30puty0mmko4uqgh1o0gj4ly6k52.?1784019561", + "symbol": "RYM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x51b57d1157975756c156ee28e3e167718792b665": { + "assetId": "eip155:4663/erc20:0x51b57d1157975756c156ee28e3e167718792b665", + "chainId": "eip155:4663", + "name": "The Little Guy", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174578/large/pquwcujemzityddphqqfmpht38qj.?1784095577", + "symbol": "GUY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x521cf887e6531c6f667b5bc4d896e5d9bfe8eb2e": { + "assetId": "eip155:4663/erc20:0x521cf887e6531c6f667b5bc4d896e5d9bfe8eb2e", + "chainId": "eip155:4663", + "name": "Applied Optoelectronics • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174149/large/0x521cf887e6531c6f667b5bc4d896e5d9bfe8eb2e.png?1782444667", + "symbol": "AAOI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5266eeaff092d6136ab63d18b975a60a0cc0c8f7": { + "assetId": "eip155:4663/erc20:0x5266eeaff092d6136ab63d18b975a60a0cc0c8f7", + "chainId": "eip155:4663", + "name": "Robinhood Pepe", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174414/large/RHPEPE.png?1783651521", + "symbol": "REPE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x53d2e1225aace4551194ecbb6bbe5c44d94aa5fa": { + "assetId": "eip155:4663/erc20:0x53d2e1225aace4551194ecbb6bbe5c44d94aa5fa", + "chainId": "eip155:4663", + "name": "Robinhood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174376/large/robinhood.png?1783488235", + "symbol": "ROBINHOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x55796b27aa48444fa2caef2bf902e12e9c280dc9": { + "assetId": "eip155:4663/erc20:0x55796b27aa48444fa2caef2bf902e12e9c280dc9", + "chainId": "eip155:4663", + "name": "ROBIN", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174347/large/robin_400x400.jpg?1783360662", + "symbol": "ROBIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x558378e000d634a36593e338ebacdd6207640efe": { + "assetId": "eip155:4663/erc20:0x558378e000d634a36593e338ebacdd6207640efe", + "chainId": "eip155:4663", + "name": "IonQ • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174166/large/0x558378e000d634a36593e338ebacdd6207640efe.png?1782444713", + "symbol": "IONQ", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x56910d4409f3a0c78c64dd8d0545ff0705389870": { + "assetId": "eip155:4663/erc20:0x56910d4409f3a0c78c64dd8d0545ff0705389870", + "chainId": "eip155:4663", + "name": "The Index", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174740/large/qffiSdBd_400x400_%281%29.jpg?1784708104", + "symbol": "INDEX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x56a98db16cf501b686c14ba00a5dec02e87083fa": { + "assetId": "eip155:4663/erc20:0x56a98db16cf501b686c14ba00a5dec02e87083fa", + "chainId": "eip155:4663", + "name": "Robinfun", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174348/large/robinfun_400x400.jpg?1783360807", + "symbol": "ROBINFUN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x56d23bee5f41a7120170b0c603dae30128e460e9": { + "assetId": "eip155:4663/erc20:0x56d23bee5f41a7120170b0c603dae30128e460e9", + "chainId": "eip155:4663", + "name": "Intuit • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174179/large/0x56d23bee5f41a7120170b0c603dae30128e460e9.png?1782444747", + "symbol": "INTU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5788116f4fe1820bf499c26fc7203630bf2d020f": { + "assetId": "eip155:4663/erc20:0x5788116f4fe1820bf499c26fc7203630bf2d020f", + "chainId": "eip155:4663", + "name": "Hood Morning", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174580/large/HM.jpg?1784096041", + "symbol": "HM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x57a1ab439e8c24b90ecc6534c05621d6e68ed35a": { + "assetId": "eip155:4663/erc20:0x57a1ab439e8c24b90ecc6534c05621d6e68ed35a", + "chainId": "eip155:4663", + "name": "Baby Cash Cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174416/large/6fwxi1r56qpfm18h87bp83rravj4.?1783666583", + "symbol": "BABYCASHCAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x57c0e45cb534413d1c20a4240955d6bb250bb4f1": { + "assetId": "eip155:4663/erc20:0x57c0e45cb534413d1c20a4240955d6bb250bb4f1", + "chainId": "eip155:4663", + "name": "up", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174542/large/tgeb6e7cyzun3qkeab3th5cj23qv.?1783957652", + "symbol": "UP", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x58ffe4a942d3885baa22d7520691f611ef09e7aa": { + "assetId": "eip155:4663/erc20:0x58ffe4a942d3885baa22d7520691f611ef09e7aa", + "chainId": "eip155:4663", + "name": "Taiwan Semiconductor Manufacturing • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174148/large/0x58ffe4a942d3885baa22d7520691f611ef09e7aa.png?1782444664", + "symbol": "TSM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x59818904ab4ce163b3ce4ffb64f2d6ca02c434b4": { + "assetId": "eip155:4663/erc20:0x59818904ab4ce163b3ce4ffb64f2d6ca02c434b4", + "chainId": "eip155:4663", + "name": "Quantum Computing • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174141/large/0x59818904ab4ce163b3ce4ffb64f2d6ca02c434b4.png?1782444645", + "symbol": "QUBT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5a283986b204326344a1cc04b52b37f1af54ef72": { + "assetId": "eip155:4663/erc20:0x5a283986b204326344a1cc04b52b37f1af54ef72", + "chainId": "eip155:4663", + "name": "Cash Dog in Hood", + "precision": 9, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174510/large/Untitled-28.png?1783844926", + "symbol": "CASHDOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5b58e24034bc052af010d6e863ae81acde261b1d": { + "assetId": "eip155:4663/erc20:0x5b58e24034bc052af010d6e863ae81acde261b1d", + "chainId": "eip155:4663", + "name": "QuantHood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174709/large/nkzuwz0gym2qzde0pdqoqowbzgdw.?1784645654", + "symbol": "QUANT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5bd252b4d7aa573813d1c6a4888f778790583667": { + "assetId": "eip155:4663/erc20:0x5bd252b4d7aa573813d1c6a4888f778790583667", + "chainId": "eip155:4663", + "name": "STOCKCOIN", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174459/large/stock.jpg?1783694761", + "symbol": "STOCKCOIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5c90450bbb4273d7b2f17cf6917aeb237a569679": { + "assetId": "eip155:4663/erc20:0x5c90450bbb4273d7b2f17cf6917aeb237a569679", + "chainId": "eip155:4663", + "name": "Cerebras Systems • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174134/large/0x5c90450bbb4273d7b2f17cf6917aeb237a569679.png?1782444627", + "symbol": "CBRS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34": { + "assetId": "eip155:4663/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34", + "chainId": "eip155:4663", + "name": "Ethena USDe", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/33613/large/usde.png?1733810059", + "symbol": "USDE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:1/erc20:0x4c9edd5852cd905f086c759e8383e09bff1e68b3" + }, + "eip155:4663/erc20:0x5d6fa71583e40d6a40ab09cd071f24f6603b0970": { + "assetId": "eip155:4663/erc20:0x5d6fa71583e40d6a40ab09cd071f24f6603b0970", + "chainId": "eip155:4663", + "name": "Yarrow", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174617/large/ezu124eudmkdr6p6i29d24bhm8na.?1784192278", + "symbol": "YARROW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5e81213613b6b86eab4c6c50d718d34359459786": { + "assetId": "eip155:4663/erc20:0x5e81213613b6b86eab4c6c50d718d34359459786", + "chainId": "eip155:4663", + "name": "Take-Two Interactive Software • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174176/large/0x5e81213613b6b86eab4c6c50d718d34359459786.png?1782444740", + "symbol": "TTWO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5f10a1c971b69e47e059e1dc91901b59b3fb49c3": { + "assetId": "eip155:4663/erc20:0x5f10a1c971b69e47e059e1dc91901b59b3fb49c3", + "chainId": "eip155:4663", + "name": "CoreWeave • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174127/large/0x5f10a1c971b69e47e059e1dc91901b59b3fb49c3.png?1782444608", + "symbol": "CRWV", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5f18b02b8320ef1c5b7d7a5a8bad482a767f4716": { + "assetId": "eip155:4663/erc20:0x5f18b02b8320ef1c5b7d7a5a8bad482a767f4716", + "chainId": "eip155:4663", + "name": "Fletcher by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174579/large/bp1i40cgq9ngr00cq6tof389kkwo.?1784095672", + "symbol": "FLETCHER", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x5fc5360d0400a0fd4f2af552add042d716f1d168": { + "assetId": "eip155:4663/erc20:0x5fc5360d0400a0fd4f2af552add042d716f1d168", + "chainId": "eip155:4663", + "name": "Global Dollar", + "precision": 6, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/51281/large/GDN_USDG_Token_200x200.png?1730484111", + "symbol": "USDG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:1/erc20:0xe343167631d89b6ffc58b88d6b7fb0228795491d" + }, + "eip155:4663/erc20:0x62c71cd34a52c30d894419cbcc55db2afa8032ea": { + "assetId": "eip155:4663/erc20:0x62c71cd34a52c30d894419cbcc55db2afa8032ea", + "chainId": "eip155:4663", + "name": "YOLO", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174641/large/fzvhldxmvphx85ls235mclk6bf3x.?1784363718", + "symbol": "YOLO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x62fd0668e10d8b72339be2dcf7643001688ff13b": { + "assetId": "eip155:4663/erc20:0x62fd0668e10d8b72339be2dcf7643001688ff13b", + "chainId": "eip155:4663", + "name": "Marvell Technology • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174140/large/0x62fd0668e10d8b72339be2dcf7643001688ff13b.png?1782444643", + "symbol": "MRVL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x6330d8c3178a418788df01a47479c0ce7ccf450b": { + "assetId": "eip155:4663/erc20:0x6330d8c3178a418788df01a47479c0ce7ccf450b", + "chainId": "eip155:4663", + "name": "Coinbase • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174136/large/0x6330d8c3178a418788df01a47479c0ce7ccf450b.png?1782444632", + "symbol": "COIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x636358c682843ca3976b32cb4dd5fb13fb407777": { + "assetId": "eip155:4663/erc20:0x636358c682843ca3976b32cb4dd5fb13fb407777", + "chainId": "eip155:4663", + "name": "Escape The Fed", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174621/large/IMG_2615.jpeg?1784257687", + "symbol": "ETF", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x6365fd27ddefc42f50895994b67b04fab5f08d5e": { + "assetId": "eip155:4663/erc20:0x6365fd27ddefc42f50895994b67b04fab5f08d5e", + "chainId": "eip155:4663", + "name": "$1 is all you need", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174530/large/1.png?1783910785", + "symbol": "$1", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x63e0ca3841bff47a191949417ab64f82cfa3314b": { + "assetId": "eip155:4663/erc20:0x63e0ca3841bff47a191949417ab64f82cfa3314b", + "chainId": "eip155:4663", + "name": "pooɥcoin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174488/large/ohrrr5da9yotw3m90pqmyixxwt32.?1783768224", + "symbol": "POOꞍ", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x647dd517c8820fc9874e1a3f58e6e0b9a43395c0": { + "assetId": "eip155:4663/erc20:0x647dd517c8820fc9874e1a3f58e6e0b9a43395c0", + "chainId": "eip155:4663", + "name": "r0b", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174725/large/0mtztu1maia5evtmsnt799el5mc1.?1784701910", + "symbol": "R0B", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x64abfc878dc340bbf33bae4aaf39ed33fb1828c0": { + "assetId": "eip155:4663/erc20:0x64abfc878dc340bbf33bae4aaf39ed33fb1828c0", + "chainId": "eip155:4663", + "name": "Yorozu", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174424/large/am3nerfpw2jwpo8mv5j76o23a88e.?1783668870", + "symbol": "YORO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x65b445518b1ad0d9c597731494f5bd2991b7ec08": { + "assetId": "eip155:4663/erc20:0x65b445518b1ad0d9c597731494f5bd2991b7ec08", + "chainId": "eip155:4663", + "name": "ClawBank", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102172948/large/X_Prof_pic.jpg?1776782170", + "symbol": "$CLAWBANK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x6689ab375aaaa9aed78aaaba2e8edcc547478cf1": { + "assetId": "eip155:4663/erc20:0x6689ab375aaaa9aed78aaaba2e8edcc547478cf1", + "chainId": "eip155:4663", + "name": "Kaleido", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174631/large/2p7e3dmb8tyansb5nog13y66iprp.?1784289458", + "symbol": "KALEIDO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x66cef844f82a461444621f1fcb53efa9ed6dee18": { + "assetId": "eip155:4663/erc20:0x66cef844f82a461444621f1fcb53efa9ed6dee18", + "chainId": "eip155:4663", + "name": "Vled Tenov", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174495/large/photo_2026-07-02_22-21-50.jpg?1783781931", + "symbol": "TENOV", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x692dcca648e2e26baaf9da4aebf7cdd5ac2171d5": { + "assetId": "eip155:4663/erc20:0x692dcca648e2e26baaf9da4aebf7cdd5ac2171d5", + "chainId": "eip155:4663", + "name": "robn", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174735/large/fua1doc7gw0w2dhy9zwzr9wcubpf.?1784704012", + "symbol": "ROBN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x6a4baa1927f37256017342dbd8fec0c12831b8e3": { + "assetId": "eip155:4663/erc20:0x6a4baa1927f37256017342dbd8fec0c12831b8e3", + "chainId": "eip155:4663", + "name": "Pulse Pastures by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174633/large/45zcyi730ho6otaw4fbz9ctaoac1.?1784293501", + "symbol": "PP", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x6eda83fc299c10d474068a7e69771c809bcbbba3": { + "assetId": "eip155:4663/erc20:0x6eda83fc299c10d474068a7e69771c809bcbbba3", + "chainId": "eip155:4663", + "name": "AgentOS", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174570/large/b6b5ojnnrpnx7zs0zm302gumiizv.?1784093688", + "symbol": "AGENTOS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7168563b0e70124f0c7c0cf2f13a8d1861baf4a5": { + "assetId": "eip155:4663/erc20:0x7168563b0e70124f0c7c0cf2f13a8d1861baf4a5", + "chainId": "eip155:4663", + "name": "Backed", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174659/large/zpo16kazej461buko6zozopkfqdc.?1784446814", + "symbol": "BACKED", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x727701f88f09fed71eb217bcea88b3f314cf7079": { + "assetId": "eip155:4663/erc20:0x727701f88f09fed71eb217bcea88b3f314cf7079", + "chainId": "eip155:4663", + "name": "GRID by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174630/large/41nxlf8zihm0bizumu35snw3bls9.?1784288993", + "symbol": "GRID", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x729bcb002e38f415502596617cd52321acb4e681": { + "assetId": "eip155:4663/erc20:0x729bcb002e38f415502596617cd52321acb4e681", + "chainId": "eip155:4663", + "name": "Stocktopia", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174726/large/qjwrmt07glcxhrmn0xfnus0fjpvo.?1784702013", + "symbol": "STOCK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7331991062f3b1e4eb0fd0506bf1ff0779e08b91": { + "assetId": "eip155:4663/erc20:0x7331991062f3b1e4eb0fd0506bf1ff0779e08b91", + "chainId": "eip155:4663", + "name": "Dopehood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174684/large/200x200_TransparentBG_Mascot.png?1784612370", + "symbol": "DOHO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x745c1c97551204f10cd5eb51c1b6902fece13b0e": { + "assetId": "eip155:4663/erc20:0x745c1c97551204f10cd5eb51c1b6902fece13b0e", + "chainId": "eip155:4663", + "name": "unknown0", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174527/large/2026-07-11_20.22.21.jpg?1783871033", + "symbol": "UNK0", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7541872e32bb529d7ff11d6c59832269ce33a6ff": { + "assetId": "eip155:4663/erc20:0x7541872e32bb529d7ff11d6c59832269ce33a6ff", + "chainId": "eip155:4663", + "name": "MONVERA by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174615/large/wi15njncifod4ctl8i083ewe9xmr.?1784191969", + "symbol": "MONVERA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x75742c18bc1f1c5c5f448f4c9d9c6f66dafaaa38": { + "assetId": "eip155:4663/erc20:0x75742c18bc1f1c5c5f448f4c9d9c6f66dafaaa38", + "chainId": "eip155:4663", + "name": "iShares Semiconductor ETF • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174155/large/0x75742c18bc1f1c5c5f448f4c9d9c6f66dafaaa38.png?1782444683", + "symbol": "SOXX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x75c8258eaa6d0f94b82951194191ca3efb0bcbe2": { + "assetId": "eip155:4663/erc20:0x75c8258eaa6d0f94b82951194191ca3efb0bcbe2", + "chainId": "eip155:4663", + "name": "meow", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174516/large/5kybcmg7gseqm1pakwwam51t2u70.?1783850995", + "symbol": "MEOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x77581054581b9c525e7dd7a0155de43867532d03": { + "assetId": "eip155:4663/erc20:0x77581054581b9c525e7dd7a0155de43867532d03", + "chainId": "eip155:4663", + "name": "WISHBONE", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174392/large/wishbone.png?1783579749", + "symbol": "WISHBONE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7817c85e4390bc83a58a47a71f0a5fa83a4e16d4": { + "assetId": "eip155:4663/erc20:0x7817c85e4390bc83a58a47a71f0a5fa83a4e16d4", + "chainId": "eip155:4663", + "name": "The Office Dog", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174553/large/LOGO.JPG?1784014807", + "symbol": "YORK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x79d2234ed4ee24880835f261df9a98fcefc7600e": { + "assetId": "eip155:4663/erc20:0x79d2234ed4ee24880835f261df9a98fcefc7600e", + "chainId": "eip155:4663", + "name": "The Hood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174284/large/the-hood.jpg?1782938983", + "symbol": "HOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7c04e6a3368f2a1de3874f0e80d2e0a1a9915da6": { + "assetId": "eip155:4663/erc20:0x7c04e6a3368f2a1de3874f0e80d2e0a1a9915da6", + "chainId": "eip155:4663", + "name": "Corning • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174144/large/0x7c04e6a3368f2a1de3874f0e80d2e0a1a9915da6.png?1782444653", + "symbol": "GLW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7dc013eb55e436f30d7ed1afe4e36d6e45e3c3f7": { + "assetId": "eip155:4663/erc20:0x7dc013eb55e436f30d7ed1afe4e36d6e45e3c3f7", + "chainId": "eip155:4663", + "name": "Zscaler • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174154/large/0x7dc013eb55e436f30d7ed1afe4e36d6e45e3c3f7.png?1782444680", + "symbol": "ZS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7e86381a763f0ecca2bdf27c54eac403ddd48123": { + "assetId": "eip155:4663/erc20:0x7e86381a763f0ecca2bdf27c54eac403ddd48123", + "chainId": "eip155:4663", + "name": "GameStop", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174374/large/70586C54-4D0E-42E2-86DC-DEC527DE759C.jpeg?1783777485", + "symbol": "GME", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7f0abef0c07280f82c6a08ead09ded6bae2c13fc": { + "assetId": "eip155:4663/erc20:0x7f0abef0c07280f82c6a08ead09ded6bae2c13fc", + "chainId": "eip155:4663", + "name": "iShares MSCI South Korea fund • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174159/large/0x7f0abef0c07280f82c6a08ead09ded6bae2c13fc.png?1782444694", + "symbol": "EWY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7f3d6b93809fd4534bf3c5b25deeaec0aab5a1d8": { + "assetId": "eip155:4663/erc20:0x7f3d6b93809fd4534bf3c5b25deeaec0aab5a1d8", + "chainId": "eip155:4663", + "name": "RANDY", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174524/large/photo_2026-07-10_20-08-28.jpg?1783858507", + "symbol": "RANDY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x7fe995a80075df3dc8ae11a9b82c7fe4202cd87f": { + "assetId": "eip155:4663/erc20:0x7fe995a80075df3dc8ae11a9b82c7fe4202cd87f", + "chainId": "eip155:4663", + "name": "Thinking Cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174672/large/fmu02lq7zai1iyp4qqwfnmu5wr1v.?1784552285", + "symbol": "HMM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8005d266423c7ea827372c9c864491e5786600ea": { + "assetId": "eip155:4663/erc20:0x8005d266423c7ea827372c9c864491e5786600ea", + "chainId": "eip155:4663", + "name": "Eli Lilly • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174175/large/0x8005d266423c7ea827372c9c864491e5786600ea.png?1782444737", + "symbol": "LLY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x822cc93ffd030293e9842c30bbd678f530701867": { + "assetId": "eip155:4663/erc20:0x822cc93ffd030293e9842c30bbd678f530701867", + "chainId": "eip155:4663", + "name": "Bloom Energy • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174131/large/0x822cc93ffd030293e9842c30bbd678f530701867.png?1782444619", + "symbol": "BE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x82da4646242e1d962e96e932269dc644c94a9caa": { + "assetId": "eip155:4663/erc20:0x82da4646242e1d962e96e932269dc644c94a9caa", + "chainId": "eip155:4663", + "name": "Workday • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174198/large/0x82da4646242e1d962e96e932269dc644c94a9caa.png?1782444798", + "symbol": "WDAY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x834b31164b5e5f4a08b441d796abb85f714bb7c1": { + "assetId": "eip155:4663/erc20:0x834b31164b5e5f4a08b441d796abb85f714bb7c1", + "chainId": "eip155:4663", + "name": "HOPPY", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174469/large/49vk4m8lsi2tg3kda41dwkm444fb.?1783760729", + "symbol": "HOPPY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x839b8bd8ed3d2f1be5a709ce99144337296681c7": { + "assetId": "eip155:4663/erc20:0x839b8bd8ed3d2f1be5a709ce99144337296681c7", + "chainId": "eip155:4663", + "name": "booh", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174663/large/3w1woop8vyyku4w8vw09wxfd4oce.?1784447367", + "symbol": "BOOH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x83d37c1c2c3ed4e6536a01fd92c2a75453b57cc2": { + "assetId": "eip155:4663/erc20:0x83d37c1c2c3ed4e6536a01fd92c2a75453b57cc2", + "chainId": "eip155:4663", + "name": "Prometheus", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174427/large/prometheus.jpg?1783669702", + "symbol": "PROMETHEUS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x84ad72f6fd6bccab5b5aa4f3c9ab86863bd2bcda": { + "assetId": "eip155:4663/erc20:0x84ad72f6fd6bccab5b5aa4f3c9ab86863bd2bcda", + "chainId": "eip155:4663", + "name": "HoodAgent", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174426/large/hoodagent.jpg?1783669375", + "symbol": "HOODAGENT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x84b7515081a7ac5adc26179b77a8b18a8c6725c0": { + "assetId": "eip155:4663/erc20:0x84b7515081a7ac5adc26179b77a8b18a8c6725c0", + "chainId": "eip155:4663", + "name": "Mintly", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174486/large/mintly.png?1783767591", + "symbol": "MLY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x84f210f9fa42613e5f5bc89ee4978afbd1e90f11": { + "assetId": "eip155:4663/erc20:0x84f210f9fa42613e5f5bc89ee4978afbd1e90f11", + "chainId": "eip155:4663", + "name": "ROB", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174464/large/RH_colored_icon.png?1783705268", + "symbol": "ROB", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x86923f96303d656e4aa86d9d42d1e57ad2023fdc": { + "assetId": "eip155:4663/erc20:0x86923f96303d656e4aa86d9d42d1e57ad2023fdc", + "chainId": "eip155:4663", + "name": "AMD • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174114/large/0x86923f96303d656e4aa86d9d42d1e57ad2023fdc.png?1782444575", + "symbol": "AMD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x86a24426d1fc5dfdee454120af3ecc3cc552789b": { + "assetId": "eip155:4663/erc20:0x86a24426d1fc5dfdee454120af3ecc3cc552789b", + "chainId": "eip155:4663", + "name": "pow", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174730/large/ow343bvobqvponxu56hfnyguw0wl.?1784703299", + "symbol": "POW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x880b852316d430741c5b693aa53f22871e42ee77": { + "assetId": "eip155:4663/erc20:0x880b852316d430741c5b693aa53f22871e42ee77", + "chainId": "eip155:4663", + "name": "novara", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174501/large/favicon.png?1783784078", + "symbol": "NVR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x894e1ec2d74ffe5aef8dc8a9e84686accb964f2a": { + "assetId": "eip155:4663/erc20:0x894e1ec2d74ffe5aef8dc8a9e84686accb964f2a", + "chainId": "eip155:4663", + "name": "Palantir Technologies • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174117/large/0x894e1ec2d74ffe5aef8dc8a9e84686accb964f2a.png?1782444583", + "symbol": "PLTR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x89776d4cd68193597a2fc132cfac1fde36ccea8a": { + "assetId": "eip155:4663/erc20:0x89776d4cd68193597a2fc132cfac1fde36ccea8a", + "chainId": "eip155:4663", + "name": "Tower Semiconductor • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174184/large/0x89776d4cd68193597a2fc132cfac1fde36ccea8a.png?1782444761", + "symbol": "TSEM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8b7daf8ca650ab30df4c686e1e3689e9248732c6": { + "assetId": "eip155:4663/erc20:0x8b7daf8ca650ab30df4c686e1e3689e9248732c6", + "chainId": "eip155:4663", + "name": "Boardwalk", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174687/large/boardwalk_avatar_white_on_blue.png?1784621838", + "symbol": "BWLK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8bada99332848483995ef9c61f4bffced1bafeed": { + "assetId": "eip155:4663/erc20:0x8bada99332848483995ef9c61f4bffced1bafeed", + "chainId": "eip155:4663", + "name": "CatCoin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174644/large/IMG_0568.jpeg?1784377524", + "symbol": "CATCOIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8cf07c5a878945185d327aaa6e33faa95f95e7bf": { + "assetId": "eip155:4663/erc20:0x8cf07c5a878945185d327aaa6e33faa95f95e7bf", + "chainId": "eip155:4663", + "name": "Celsius • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174173/large/0x8cf07c5a878945185d327aaa6e33faa95f95e7bf.png?1782444732", + "symbol": "CELH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8d4dfaaa4198b6486e0293fec914c2b6a821d4dc": { + "assetId": "eip155:4663/erc20:0x8d4dfaaa4198b6486e0293fec914c2b6a821d4dc", + "chainId": "eip155:4663", + "name": "Kitsu", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174287/large/kitsu-logo.jpg?1782940070", + "symbol": "KITSU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8e62f281f282686fca6dcb39288069a93fc23f1c": { + "assetId": "eip155:4663/erc20:0x8e62f281f282686fca6dcb39288069a93fc23f1c", + "chainId": "eip155:4663", + "name": "Hoodrat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174350/large/sOAZF0mL_400x400.jpg?1783654472", + "symbol": "HOODRAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8ecea3d0e648db646d824aa51eedeb16ac3d6878": { + "assetId": "eip155:4663/erc20:0x8ecea3d0e648db646d824aa51eedeb16ac3d6878", + "chainId": "eip155:4663", + "name": "wire bot", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174661/large/cuy40m3sqh9boqn7pdlzirdt299x.?1784447111", + "symbol": "WIRE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8ed8ab093d29e9ccbc26bb38df09910ae1d69125": { + "assetId": "eip155:4663/erc20:0x8ed8ab093d29e9ccbc26bb38df09910ae1d69125", + "chainId": "eip155:4663", + "name": "Nuggies", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174677/large/wkioabj0q2i25rcbq7f78ok0ybau.?1784553497", + "symbol": "NUG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8ef20885f94e3d9bc7eb3080279188bd5ed7c08c": { + "assetId": "eip155:4663/erc20:0x8ef20885f94e3d9bc7eb3080279188bd5ed7c08c", + "chainId": "eip155:4663", + "name": "Lumentum • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174138/large/0x8ef20885f94e3d9bc7eb3080279188bd5ed7c08c.png?1782444637", + "symbol": "LITE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8f100e99ddf699320724e37cb866770381d47382": { + "assetId": "eip155:4663/erc20:0x8f100e99ddf699320724e37cb866770381d47382", + "chainId": "eip155:4663", + "name": "Robinhood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174608/large/h6trwdnktfg2o4blsjf3psm2jj7q.?1784190982", + "symbol": "ROBINHOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8fde2c15d44eb7cc1a889bc74633e226f91d3295": { + "assetId": "eip155:4663/erc20:0x8fde2c15d44eb7cc1a889bc74633e226f91d3295", + "chainId": "eip155:4663", + "name": "ROBINHOODIES", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174517/large/rhoodies.jpg?1783851136", + "symbol": "ROBINHOODIES", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x8ff92566f2e81bdd68edfaa8cde73942a723796b": { + "assetId": "eip155:4663/erc20:0x8ff92566f2e81bdd68edfaa8cde73942a723796b", + "chainId": "eip155:4663", + "name": "ProjectVex", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174375/large/vex.jpg?1783487786", + "symbol": "VEX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x90079857237da767c38d1d261a39848ea424319e": { + "assetId": "eip155:4663/erc20:0x90079857237da767c38d1d261a39848ea424319e", + "chainId": "eip155:4663", + "name": "DATA BEAR", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174513/large/9zf8mhbo75icx26z17pr0grkgn41.?1783848877", + "symbol": "DATABEAR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x912136b5ce6063591e6ae47edc76cde98235860e": { + "assetId": "eip155:4663/erc20:0x912136b5ce6063591e6ae47edc76cde98235860e", + "chainId": "eip155:4663", + "name": "GREENBOW", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174581/large/1000022977.jpg?1784104402", + "symbol": "GREENBOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x92ef19e82bd8ff36661de838d5eae7e5cef0effe": { + "assetId": "eip155:4663/erc20:0x92ef19e82bd8ff36661de838d5eae7e5cef0effe", + "chainId": "eip155:4663", + "name": "Redwire • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174174/large/0x92ef19e82bd8ff36661de838d5eae7e5cef0effe.png?1782444734", + "symbol": "RDW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x92fd66527192e3e61d4ddd13322aa222de86f9b5": { + "assetId": "eip155:4663/erc20:0x92fd66527192e3e61d4ddd13322aa222de86f9b5", + "chainId": "eip155:4663", + "name": "iShares 0-3 Month Treasury Bond ETF • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174130/large/0x92fd66527192e3e61d4ddd13322aa222de86f9b5.png?1782444616", + "symbol": "SGOV", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x941ae714ec6d8130c7b75d67160ca08f1e7d11dd": { + "assetId": "eip155:4663/erc20:0x941ae714ec6d8130c7b75d67160ca08f1e7d11dd", + "chainId": "eip155:4663", + "name": "Dell • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174139/large/0x941ae714ec6d8130c7b75d67160ca08f1e7d11dd.png?1782444640", + "symbol": "DELL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x94fef3763ed87051267dcd7ffc5df416b6c03a7e": { + "assetId": "eip155:4663/erc20:0x94fef3763ed87051267dcd7ffc5df416b6c03a7e", + "chainId": "eip155:4663", + "name": "Robinhood Payments Protocol", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174568/large/robinpay_icon.png?1784047831", + "symbol": "RPP402", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x95052ddcd5dc25641657424a8cf04834997e1730": { + "assetId": "eip155:4663/erc20:0x95052ddcd5dc25641657424a8cf04834997e1730", + "chainId": "eip155:4663", + "name": "EchoStar • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174181/large/0x95052ddcd5dc25641657424a8cf04834997e1730.png?1782444753", + "symbol": "SATS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x9651342cea770ae9a2969ba2a52611523146aef9": { + "assetId": "eip155:4663/erc20:0x9651342cea770ae9a2969ba2a52611523146aef9", + "chainId": "eip155:4663", + "name": "Carnival Corporation • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174200/large/0x9651342cea770ae9a2969ba2a52611523146aef9.png?1782444803", + "symbol": "CCL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x96765066f6a040a21eb027167d2315b707c82633": { + "assetId": "eip155:4663/erc20:0x96765066f6a040a21eb027167d2315b707c82633", + "chainId": "eip155:4663", + "name": "Ravenhood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174431/large/ba178407-dda3-4969-a7e3-071cec79c121.png?1783670771", + "symbol": "RVH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x970078468807853bc316432e745165eb34398ba3": { + "assetId": "eip155:4663/erc20:0x970078468807853bc316432e745165eb34398ba3", + "chainId": "eip155:4663", + "name": "Urizen", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174612/large/h2je1zbvqwamnc7nwvl6zs0tgagi.?1784191502", + "symbol": "URI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x9727b500ac8726c716f018e5d3ca871481245065": { + "assetId": "eip155:4663/erc20:0x9727b500ac8726c716f018e5d3ca871481245065", + "chainId": "eip155:4663", + "name": "Ansem Cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174690/large/logo.png?1784628480", + "symbol": "ANSEMCAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x97e39393a9afc4f21b1e74209ee0522e91ef028c": { + "assetId": "eip155:4663/erc20:0x97e39393a9afc4f21b1e74209ee0522e91ef028c", + "chainId": "eip155:4663", + "name": "Hoodclaw by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174635/large/hoodclaw.jpg?1784293778", + "symbol": "HCLAW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x98e75885157c80992a8d41b696d8c9c6fb30a926": { + "assetId": "eip155:4663/erc20:0x98e75885157c80992a8d41b696d8c9c6fb30a926", + "chainId": "eip155:4663", + "name": "SoFi Technologies • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174163/large/0x98e75885157c80992a8d41b696d8c9c6fb30a926.png?1782444705", + "symbol": "SOFI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x9b23573b156b52565012f5ce02cdf60afbaa70be": { + "assetId": "eip155:4663/erc20:0x9b23573b156b52565012f5ce02cdf60afbaa70be", + "chainId": "eip155:4663", + "name": "Penguin Solutions • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174204/large/0x9b23573b156b52565012f5ce02cdf60afbaa70be.png?1782444814", + "symbol": "PENG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x9d9c6684f596f66a64c030b93a886d51fd4d7931": { + "assetId": "eip155:4663/erc20:0x9d9c6684f596f66a64c030b93a886d51fd4d7931", + "chainId": "eip155:4663", + "name": "Nebius Group • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174160/large/0x9d9c6684f596f66a64c030b93a886d51fd4d7931.png?1782444697", + "symbol": "NBIS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x9e93ea35be23ab0e1e20ed6b62d3b1cbd5234a83": { + "assetId": "eip155:4663/erc20:0x9e93ea35be23ab0e1e20ed6b62d3b1cbd5234a83", + "chainId": "eip155:4663", + "name": "Cash Dog", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174453/large/40c133casfwn37d8vjv1wxezh0ev.?1783691920", + "symbol": "CASHDOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0x9fb101579e716b2571ab069c2718cd06b69ffdd7": { + "assetId": "eip155:4663/erc20:0x9fb101579e716b2571ab069c2718cd06b69ffdd7", + "chainId": "eip155:4663", + "name": "BOW", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174489/large/cursor_%288%29.png?1783778079", + "symbol": "BOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa15cd06dd305269a0f48bebeb30aa3588fba7b32": { + "assetId": "eip155:4663/erc20:0xa15cd06dd305269a0f48bebeb30aa3588fba7b32", + "chainId": "eip155:4663", + "name": "Merrymen by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174731/large/mrxvnxar3u7g7ktbuhekb01doafd.?1784703453", + "symbol": "MERRYMEN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa2718f80f1fe0cdec69c9023ee006807dd487a8c": { + "assetId": "eip155:4663/erc20:0xa2718f80f1fe0cdec69c9023ee006807dd487a8c", + "chainId": "eip155:4663", + "name": "YOINK", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174349/large/yoink_400x400.png?1783361029", + "symbol": "YOINK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa3054f28c48b387d4825be8f3b79ed161abc5405": { + "assetId": "eip155:4663/erc20:0xa3054f28c48b387d4825be8f3b79ed161abc5405", + "chainId": "eip155:4663", + "name": "Wrapped BESC", + "precision": 9, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/68170/large/IMG_20250811_025232_632.png?1754993709", + "symbol": "WBESC", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa30fa36db767ad9ed3f7a60fc79526fb4d56d344": { + "assetId": "eip155:4663/erc20:0xa30fa36db767ad9ed3f7a60fc79526fb4d56d344", + "chainId": "eip155:4663", + "name": "United States Oil Fund • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174125/large/0xa30fa36db767ad9ed3f7a60fc79526fb4d56d344.png?1782444603", + "symbol": "USO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa3bfbccd4aeec8ac56b17fee3e02dd2c60722ccc": { + "assetId": "eip155:4663/erc20:0xa3bfbccd4aeec8ac56b17fee3e02dd2c60722ccc", + "chainId": "eip155:4663", + "name": "Cashcat Strategy", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174618/large/cashstrategy.jpg?1784192415", + "symbol": "CATSTR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa4874f62c8826e19cf8691bcabd02fe1a0b7401f": { + "assetId": "eip155:4663/erc20:0xa4874f62c8826e19cf8691bcabd02fe1a0b7401f", + "chainId": "eip155:4663", + "name": "VladDog", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174417/large/oqo9mht01qlu8n2efrerer0k9h5k.?1783666715", + "symbol": "VLADDOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa4bd8def4b887fd1851defe10acdcf7a84437a88": { + "assetId": "eip155:4663/erc20:0xa4bd8def4b887fd1851defe10acdcf7a84437a88", + "chainId": "eip155:4663", + "name": "PepeWifHood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174288/large/pepewifhood.jpg?1782940593", + "symbol": "PEPE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa56605e4c65e702f72830bf6880e821588bab836": { + "assetId": "eip155:4663/erc20:0xa56605e4c65e702f72830bf6880e821588bab836", + "chainId": "eip155:4663", + "name": "Finance Bro", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174463/large/cjt8kdbnqterkghhvvq471lvm2ar.?1783694518", + "symbol": "FINANCEBRO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa5bac17a919a10ba0628cda5bcf273681e1a8d4e": { + "assetId": "eip155:4663/erc20:0xa5bac17a919a10ba0628cda5bcf273681e1a8d4e", + "chainId": "eip155:4663", + "name": "Mystery", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174457/large/lvypy9aghsanol5d93fseducbvn0.?1783692822", + "symbol": "MYSTERY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa5d4968421ba94814be3b136b15cf422101ac1a3": { + "assetId": "eip155:4663/erc20:0xa5d4968421ba94814be3b136b15cf422101ac1a3", + "chainId": "eip155:4663", + "name": "Intuitive Machines • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174177/large/0xa5d4968421ba94814be3b136b15cf422101ac1a3.png?1782444742", + "symbol": "LUNR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa737df5de18e3aa6b0bf8c2e9846ed699f6f2aeb": { + "assetId": "eip155:4663/erc20:0xa737df5de18e3aa6b0bf8c2e9846ed699f6f2aeb", + "chainId": "eip155:4663", + "name": "PONSTAR", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174575/large/ponstar.jpg?1784095225", + "symbol": "PONSTAR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa79e6db2549c541b6cae25e99021728425b9d0e9": { + "assetId": "eip155:4663/erc20:0xa79e6db2549c541b6cae25e99021728425b9d0e9", + "chainId": "eip155:4663", + "name": "frog cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174561/large/frogcat_400x400.jpg?1784019990", + "symbol": "FROGCAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa80ba06f0a0327e68da6bede67eb35ac023d6e62": { + "assetId": "eip155:4663/erc20:0xa80ba06f0a0327e68da6bede67eb35ac023d6e62", + "chainId": "eip155:4663", + "name": "The Floor", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174461/large/ccg2fz1nlv53g2ljtnlifko188se.?1783694008", + "symbol": "FLOOR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa80eb66b3e0cf66ccb46f8b8c9e7ff5803eeb820": { + "assetId": "eip155:4663/erc20:0xa80eb66b3e0cf66ccb46f8b8c9e7ff5803eeb820", + "chainId": "eip155:4663", + "name": "Wen Lambo", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174429/large/Screenshot_2026-07-10_at_6.46.16%E2%80%AFAM.png?1783670272", + "symbol": "WEN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa870f8c7cae9705194a141b0c2964b6c79ee3742": { + "assetId": "eip155:4663/erc20:0xa870f8c7cae9705194a141b0c2964b6c79ee3742", + "chainId": "eip155:4663", + "name": "🪶 (Feather)", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174334/large/newfeatherlogo.jpg?1783323012", + "symbol": "🪶", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa8eb3bccbf2017ee7cbfb652eb51cf2e1b153289": { + "assetId": "eip155:4663/erc20:0xa8eb3bccbf2017ee7cbfb652eb51cf2e1b153289", + "chainId": "eip155:4663", + "name": "Xanadu Quantum • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174180/large/0xa8eb3bccbf2017ee7cbfb652eb51cf2e1b153289.png?1782444750", + "symbol": "XNDU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xa9038d2c4e798d10dd46c2fdb1f72c9b397bbdad": { + "assetId": "eip155:4663/erc20:0xa9038d2c4e798d10dd46c2fdb1f72c9b397bbdad", + "chainId": "eip155:4663", + "name": "vladdy", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174576/large/j43c4zpw5s1jg5unit79lh9rzw93.?1784095092", + "symbol": "VLAD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xaa4b6a79df257e50e0079cd812a92262ee3951b0": { + "assetId": "eip155:4663/erc20:0xaa4b6a79df257e50e0079cd812a92262ee3951b0", + "chainId": "eip155:4663", + "name": "Sushi Cat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174678/large/ags3nzvw7ber00sk0ma6fdcwlyxr.?1784553807", + "symbol": "SUSHICAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xaa730f8cca8a22600f92d854322c560390fcff87": { + "assetId": "eip155:4663/erc20:0xaa730f8cca8a22600f92d854322c560390fcff87", + "chainId": "eip155:4663", + "name": "Delphic Arena", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174643/large/delphic.jpg?1784364418", + "symbol": "DELPHIC", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xaab3d2e25869dd9661e7a886b9a51c02ee6c7777": { + "assetId": "eip155:4663/erc20:0xaab3d2e25869dd9661e7a886b9a51c02ee6c7777", + "chainId": "eip155:4663", + "name": "StockPackz", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174628/large/623vjbzuafixrvzzka4do5ckxy7k.?1784285002", + "symbol": "PACKZ", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xab26d5b48bd07f1248a66fd817036f785078b51d": { + "assetId": "eip155:4663/erc20:0xab26d5b48bd07f1248a66fd817036f785078b51d", + "chainId": "eip155:4663", + "name": "Kansoku Labs", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174642/large/uo1z06se7r152mhbgi1yw6byv9l2.?1784364328", + "symbol": "KANSO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xac0f333bbebb62b6d16322650641bd5ef2b849e5": { + "assetId": "eip155:4663/erc20:0xac0f333bbebb62b6d16322650641bd5ef2b849e5", + "chainId": "eip155:4663", + "name": "SHIBCAT", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174716/large/1000130024.png?1784664797", + "symbol": "SHIBCAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xac9bba3f724dfbd6ec677684783d2de2aae05ad3": { + "assetId": "eip155:4663/erc20:0xac9bba3f724dfbd6ec677684783d2de2aae05ad3", + "chainId": "eip155:4663", + "name": "Nasdog", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174481/large/zln5ucvnevtmdirtsx0bddi56w8f.?1783767096", + "symbol": "NASDOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xace3c5adc456de444501d91c12b0b03f902eb250": { + "assetId": "eip155:4663/erc20:0xace3c5adc456de444501d91c12b0b03f902eb250", + "chainId": "eip155:4663", + "name": "Nerve", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174512/large/j634h6sovs0z4f6z5okrtbplk100.?1783848736", + "symbol": "NRV", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xad25ac6c84d497db898fa1e8387bf6af3532a1c4": { + "assetId": "eip155:4663/erc20:0xad25ac6c84d497db898fa1e8387bf6af3532a1c4", + "chainId": "eip155:4663", + "name": "Alibaba • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174135/large/0xad25ac6c84d497db898fa1e8387bf6af3532a1c4.png?1782444629", + "symbol": "BABA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xad622320e520de39e72d41ef07438c3fd3354875": { + "assetId": "eip155:4663/erc20:0xad622320e520de39e72d41ef07438c3fd3354875", + "chainId": "eip155:4663", + "name": "Invesco S&P 500 Momentum ETF • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174183/large/0xad622320e520de39e72d41ef07438c3fd3354875.png?1782444758", + "symbol": "SPMO", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xaf3d76f1834a1d425780943c99ea8a608f8a93f9": { + "assetId": "eip155:4663/erc20:0xaf3d76f1834a1d425780943c99ea8a608f8a93f9", + "chainId": "eip155:4663", + "name": "Apple • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174123/large/0xaf3d76f1834a1d425780943c99ea8a608f8a93f9.png?1782444598", + "symbol": "AAPL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xaf4c10fef50059d1e3e8ab1c80e46db6a76098b4": { + "assetId": "eip155:4663/erc20:0xaf4c10fef50059d1e3e8ab1c80e46db6a76098b4", + "chainId": "eip155:4663", + "name": "Bowyer App by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174671/large/3jkwzwiyv769b9o2cumpl1o5c7ne.?1784551608", + "symbol": "BOWYER", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb0992820e760d836549ba69bc7598b4af75dee03": { + "assetId": "eip155:4663/erc20:0xb0992820e760d836549ba69bc7598b4af75dee03", + "chainId": "eip155:4663", + "name": "Oracle • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174128/large/0xb0992820e760d836549ba69bc7598b4af75dee03.png?1782444611", + "symbol": "ORCL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb1bf26c1d20ff267a4f93550d1e0d06ac40a114b": { + "assetId": "eip155:4663/erc20:0xb1bf26c1d20ff267a4f93550d1e0d06ac40a114b", + "chainId": "eip155:4663", + "name": "Rivian Automotive • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174195/large/0xb1bf26c1d20ff267a4f93550d1e0d06ac40a114b.png?1782444790", + "symbol": "RIVN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb1cb27f78b7335df8c3d8ebf0881a15bed6beb60": { + "assetId": "eip155:4663/erc20:0xb1cb27f78b7335df8c3d8ebf0881a15bed6beb60", + "chainId": "eip155:4663", + "name": "Sherwood Exchange", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174567/large/swood_logo.png?1784046843", + "symbol": "SWOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb1d46eff0e3d1a4169a4d4159b46c5783b4f7a05": { + "assetId": "eip155:4663/erc20:0xb1d46eff0e3d1a4169a4d4159b46c5783b4f7a05", + "chainId": "eip155:4663", + "name": "Lemon Protocol", + "precision": 9, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174526/large/IMG_5018.jpeg?1783868910", + "symbol": "LEMON", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb47f4702deb124cb4eb6286be83c9d84277c6239": { + "assetId": "eip155:4663/erc20:0xb47f4702deb124cb4eb6286be83c9d84277c6239", + "chainId": "eip155:4663", + "name": "Karma by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174639/large/3jy9qsd8qu9527llxncb5532ri2c.?1784363001", + "symbol": "KARMA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb66d83f0a7eae1bed80df1e049a5d6aefa90eb66": { + "assetId": "eip155:4663/erc20:0xb66d83f0a7eae1bed80df1e049a5d6aefa90eb66", + "chainId": "eip155:4663", + "name": "DoOnlyGoodEveryday", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174421/large/rao8t0ak6a52v8qi0hkpiukjgjxr.?1783667934", + "symbol": "DOGE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb8dbf92f9741c9ac1c32115e78581f23509916fd": { + "assetId": "eip155:4663/erc20:0xb8dbf92f9741c9ac1c32115e78581f23509916fd", + "chainId": "eip155:4663", + "name": "Applied Digital • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174167/large/0xb8dbf92f9741c9ac1c32115e78581f23509916fd.png?1782444716", + "symbol": "APLD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xb90a19ff0af67f7779aff50a882a9cff42446400": { + "assetId": "eip155:4663/erc20:0xb90a19ff0af67f7779aff50a882a9cff42446400", + "chainId": "eip155:4663", + "name": "Sandisk Corporation • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174113/large/0xb90a19ff0af67f7779aff50a882a9cff42446400.png?1782444573", + "symbol": "SNDK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbd433ecab074ae6a740959fb5e7bf1d02f6f57f6": { + "assetId": "eip155:4663/erc20:0xbd433ecab074ae6a740959fb5e7bf1d02f6f57f6", + "chainId": "eip155:4663", + "name": "your hood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174477/large/ofg1s8agrx2cejbbfx7ygyydkqsg.?1783762358", + "symbol": "UHOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbd8e0244791b67547b4ae8cfc9463ab19f6e9c08": { + "assetId": "eip155:4663/erc20:0xbd8e0244791b67547b4ae8cfc9463ab19f6e9c08", + "chainId": "eip155:4663", + "name": "Boe", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174520/large/py0rrrbly1yhyi5kfxgrtkq9hw4e.?1783855214", + "symbol": "BOE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbe6702d7b70315376dc48a3293f24f0982f86386": { + "assetId": "eip155:4663/erc20:0xbe6702d7b70315376dc48a3293f24f0982f86386", + "chainId": "eip155:4663", + "name": "Navitas Semiconductor • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174153/large/0xbe6702d7b70315376dc48a3293f24f0982f86386.png?1782444678", + "symbol": "NVTS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbec416ac3e36a8ca0571cef5a104edaef2a31a89": { + "assetId": "eip155:4663/erc20:0xbec416ac3e36a8ca0571cef5a104edaef2a31a89", + "chainId": "eip155:4663", + "name": "wrkr by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174620/large/pfp.jpg?1784257386", + "symbol": "WRKR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbef75684c43c4ea7bd18dd532a2244674ee8b926": { + "assetId": "eip155:4663/erc20:0xbef75684c43c4ea7bd18dd532a2244674ee8b926", + "chainId": "eip155:4663", + "name": "Nano Nuclear Energy • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174203/large/0xbef75684c43c4ea7bd18dd532a2244674ee8b926.png?1782444811", + "symbol": "NNE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbf72347bacefe747eaf48b8a66e38babad3020a0": { + "assetId": "eip155:4663/erc20:0xbf72347bacefe747eaf48b8a66e38babad3020a0", + "chainId": "eip155:4663", + "name": "Stonks", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174286/large/_STONKS_-_COINGECKO.png?1784083271", + "symbol": "STONKS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xbfc3a980b78b007ef0cde9625e52dbb66c51a1a7": { + "assetId": "eip155:4663/erc20:0xbfc3a980b78b007ef0cde9625e52dbb66c51a1a7", + "chainId": "eip155:4663", + "name": "HOLD", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/32575/large/200.png?1698554742", + "symbol": "EARN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:1/erc20:0x0b61c4f33bcdef83359ab97673cb5961c6435f4e" + }, + "eip155:4663/erc20:0xc01aa1fecec0605b13bc84874ff7256c0f5f562a": { + "assetId": "eip155:4663/erc20:0xc01aa1fecec0605b13bc84874ff7256c0f5f562a", + "chainId": "eip155:4663", + "name": "Super Micro Computer • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174158/large/0xc01aa1fecec0605b13bc84874ff7256c0f5f562a.png?1782444692", + "symbol": "SMCI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc0b57404486bae3decd0f47c49406214a303dac8": { + "assetId": "eip155:4663/erc20:0xc0b57404486bae3decd0f47c49406214a303dac8", + "chainId": "eip155:4663", + "name": "catwifcap", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174474/large/b80fvpea97rvr3n4dgnfi3phm23h.?1783761692", + "symbol": "CAP", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc0d6457c16cc70d6790dd43521c899c87ce02f35": { + "assetId": "eip155:4663/erc20:0xc0d6457c16cc70d6790dd43521c899c87ce02f35", + "chainId": "eip155:4663", + "name": "Meta Platforms • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174122/large/0xc0d6457c16cc70d6790dd43521c899c87ce02f35.png?1782444595", + "symbol": "META", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc23d7218512c672ba6e87b7f8bcce53355f55931": { + "assetId": "eip155:4663/erc20:0xc23d7218512c672ba6e87b7f8bcce53355f55931", + "chainId": "eip155:4663", + "name": "Bowline by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174611/large/ksktdldgjag5fe2ync0v0ks5fd5v.?1784191378", + "symbol": "BOWLINE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc35968c7f5475bb03a43c7382526f4118e01c0de": { + "assetId": "eip155:4663/erc20:0xc35968c7f5475bb03a43c7382526f4118e01c0de", + "chainId": "eip155:4663", + "name": "Robinvista", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174634/large/zyadtlnqzwoufadtwxbe4y31s8yv.?1784293650", + "symbol": "VISTA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc583c60aef9dc401da72cec1b404743a93cea1cc": { + "assetId": "eip155:4663/erc20:0xc583c60aef9dc401da72cec1b404743a93cea1cc", + "chainId": "eip155:4663", + "name": "D-Wave Quantum • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174145/large/0xc583c60aef9dc401da72cec1b404743a93cea1cc.png?1782444656", + "symbol": "QBTS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc5ac3b7664ba1ac915145cc58f50b89ec3a2970d": { + "assetId": "eip155:4663/erc20:0xc5ac3b7664ba1ac915145cc58f50b89ec3a2970d", + "chainId": "eip155:4663", + "name": "KAIRUNE by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174674/large/uksja0jisrnu6on2t05gyrqu10x3.?1784552817", + "symbol": "KAIRUNE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc6911796042b15d7fa4f6cde69e245ddcd3d9c31": { + "assetId": "eip155:4663/erc20:0xc6911796042b15d7fa4f6cde69e245ddcd3d9c31", + "chainId": "eip155:4663", + "name": "Virtuals Protocol", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/34057/large/LOGOMARK.png?1708356054", + "symbol": "VIRTUAL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:8453/erc20:0x0b3e328455c4059eeb9e3f84b5543f74e24e7e1b" + }, + "eip155:4663/erc20:0xc72b96e0e48ecd4dc75e1e45396e26300bc39681": { + "assetId": "eip155:4663/erc20:0xc72b96e0e48ecd4dc75e1e45396e26300bc39681", + "chainId": "eip155:4663", + "name": "Intel • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174118/large/0xc72b96e0e48ecd4dc75e1e45396e26300bc39681.png?1782444585", + "symbol": "INTC", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc72c01aab5f5678dc1d6f5c6d2b417d91d402ba3": { + "assetId": "eip155:4663/erc20:0xc72c01aab5f5678dc1d6f5c6d2b417d91d402ba3", + "chainId": "eip155:4663", + "name": "HOODIE", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174391/large/telegram-cloud-photo-size-1-5084796264477559962-y.jpg?1783986760", + "symbol": "HOODIE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc79d46d716b33b463b3a6574d6ee26009abf4e9a": { + "assetId": "eip155:4663/erc20:0xc79d46d716b33b463b3a6574d6ee26009abf4e9a", + "chainId": "eip155:4663", + "name": "Bycocket", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174515/large/bycocket.jpg?1783850845", + "symbol": "BYCOCKET", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xc9e7c34fa156a235e8b8601171a543bc9c84a1b9": { + "assetId": "eip155:4663/erc20:0xc9e7c34fa156a235e8b8601171a543bc9c84a1b9", + "chainId": "eip155:4663", + "name": "tamPons", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174729/large/3feil5y7kqcu4kdtw2x05q6gpcel.?1784703134", + "symbol": "TAMPONS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xca0da673a451c84917d7dd0362109efff0f8825a": { + "assetId": "eip155:4663/erc20:0xca0da673a451c84917d7dd0362109efff0f8825a", + "chainId": "eip155:4663", + "name": "eBESS", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174651/large/ebess-bolt-200.png?1784383618", + "symbol": "EBESS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xca70d457418b90493e5735de6ec4410c3945498e": { + "assetId": "eip155:4663/erc20:0xca70d457418b90493e5735de6ec4410c3945498e", + "chainId": "eip155:4663", + "name": "Hoodwatch", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174732/large/20wrx2u04dnf1ihw14v63x271ffq.?1784703535", + "symbol": "WATCH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xca9c78dd337a67f6e0077f65f5e9218719d30edf": { + "assetId": "eip155:4663/erc20:0xca9c78dd337a67f6e0077f65f5e9218719d30edf", + "chainId": "eip155:4663", + "name": "NetNet", + "precision": 9, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174712/large/netnet_400x400.jpg?1784646716", + "symbol": "NET", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xcbb95bbf36099d34da091dc6fa6f49efa257cee3": { + "assetId": "eip155:4663/erc20:0xcbb95bbf36099d34da091dc6fa6f49efa257cee3", + "chainId": "eip155:4663", + "name": "CleanSpark • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174156/large/0xcbb95bbf36099d34da091dc6fa6f49efa257cee3.png?1782444686", + "symbol": "CLSK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xcdd50d73b45085d71cb05e2ca238d12c3bd7bebd": { + "assetId": "eip155:4663/erc20:0xcdd50d73b45085d71cb05e2ca238d12c3bd7bebd", + "chainId": "eip155:4663", + "name": "BUTTERCOIN", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174733/large/buttercoin.jpg?1784703709", + "symbol": "BUTTERCOIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xcf6b2d875361be807eafa57458c80f28521f9333": { + "assetId": "eip155:4663/erc20:0xcf6b2d875361be807eafa57458c80f28521f9333", + "chainId": "eip155:4663", + "name": "POET Technologies • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174142/large/0xcf6b2d875361be807eafa57458c80f28521f9333.png?1782444648", + "symbol": "POET", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xcf8b02128d2803b3df114e277094cc1096294b5c": { + "assetId": "eip155:4663/erc20:0xcf8b02128d2803b3df114e277094cc1096294b5c", + "chainId": "eip155:4663", + "name": "CRASH CAT", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174544/large/logo_white_200.jpeg?1783980461", + "symbol": "CRASHCAT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec": { + "assetId": "eip155:4663/erc20:0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec", + "chainId": "eip155:4663", + "name": "NVIDIA • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174110/large/0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec.png?1782444565", + "symbol": "NVDA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd1d4bbe54fdeafc83693420c5ade4a2abe6a90da": { + "assetId": "eip155:4663/erc20:0xd1d4bbe54fdeafc83693420c5ade4a2abe6a90da", + "chainId": "eip155:4663", + "name": "Dark Arena", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174438/large/IMG_4929.jpeg?1783672528", + "symbol": "DARK", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd4052415613b34af236024b895574c467f65b6dd": { + "assetId": "eip155:4663/erc20:0xd4052415613b34af236024b895574c467f65b6dd", + "chainId": "eip155:4663", + "name": "4663", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174346/large/4663.jpg?1783360399", + "symbol": "4663", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd5f3879160bc7c32ebb4dc785f8a4f505888de68": { + "assetId": "eip155:4663/erc20:0xd5f3879160bc7c32ebb4dc785f8a4f505888de68", + "chainId": "eip155:4663", + "name": "Invesco QQQ • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174119/large/0xd5f3879160bc7c32ebb4dc785f8a4f505888de68.png?1782444588", + "symbol": "QQQ", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd69845e0589c8d59de25e7a885f9dcecaec95b69": { + "assetId": "eip155:4663/erc20:0xd69845e0589c8d59de25e7a885f9dcecaec95b69", + "chainId": "eip155:4663", + "name": "PipTrade by Virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174538/large/pip_400x400.png?1783957140", + "symbol": "PIP", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd7321801caae694090694ff55a9323139f043b88": { + "assetId": "eip155:4663/erc20:0xd7321801caae694090694ff55a9323139f043b88", + "chainId": "eip155:4663", + "name": "The Juggernaut", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174595/large/juggernaut.jpg?1784167487", + "symbol": "JUGGERNAUT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd8d1c08a8ba4fc64bac744f74290b89adcb6bf25": { + "assetId": "eip155:4663/erc20:0xd8d1c08a8ba4fc64bac744f74290b89adcb6bf25", + "chainId": "eip155:4663", + "name": "watch it grow", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174514/large/seedcoin.jpg?1783850727", + "symbol": "SEEDCOIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xd917b029c761d264c6a312bbbcda868658ef86a6": { + "assetId": "eip155:4663/erc20:0xd917b029c761d264c6a312bbbcda868658ef86a6", + "chainId": "eip155:4663", + "name": "USA Rare Earth • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174132/large/0xd917b029c761d264c6a312bbbcda868658ef86a6.png?1782444621", + "symbol": "USAR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xdb0c60375be0031b2817fd0c9d178ba3a85b6666": { + "assetId": "eip155:4663/erc20:0xdb0c60375be0031b2817fd0c9d178ba3a85b6666", + "chainId": "eip155:4663", + "name": "HOOD OF MEME", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174603/large/b5gdllavnvo7f54wzf406i7oyxqq.?1784189197", + "symbol": "HOME", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xdb87393727b666c43f5aecb03d8b419ba54d9b03": { + "assetId": "eip155:4663/erc20:0xdb87393727b666c43f5aecb03d8b419ba54d9b03", + "chainId": "eip155:4663", + "name": "Swole Doge", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174699/large/7t4dl21ciugls2q680q2kew04slp.?1784643462", + "symbol": "SWOGE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xdca6da2adcebe397c15f348f6ee38ee0ebe6b867": { + "assetId": "eip155:4663/erc20:0xdca6da2adcebe397c15f348f6ee38ee0ebe6b867", + "chainId": "eip155:4663", + "name": "FIDEL", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174384/large/IMG_2444.jpeg?1783527074", + "symbol": "FIDEL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xdcc34bdd5d3c30237303b95d2f59cc29437b5c74": { + "assetId": "eip155:4663/erc20:0xdcc34bdd5d3c30237303b95d2f59cc29437b5c74", + "chainId": "eip155:4663", + "name": "Copper pot of wealth", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174480/large/ihx8i8chu5ellibewxvsz1c5c5sv.?1783767012", + "symbol": "COOKWARE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xddf2266b79abf0b48898959b0ed6e6adf512be74": { + "assetId": "eip155:4663/erc20:0xddf2266b79abf0b48898959b0ed6e6adf512be74", + "chainId": "eip155:4663", + "name": "MongoDB • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174178/large/0xddf2266b79abf0b48898959b0ed6e6adf512be74.png?1782444745", + "symbol": "MDB", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5": { + "assetId": "eip155:4663/erc20:0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5", + "chainId": "eip155:4663", + "name": "Circle Internet Group • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174121/large/0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5.png?1782444593", + "symbol": "CRCL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe013e34f03f42d49e836d59cf6353b897c337777": { + "assetId": "eip155:4663/erc20:0xe013e34f03f42d49e836d59cf6353b897c337777", + "chainId": "eip155:4663", + "name": "RAMENCOIN", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174649/large/new_logo.jpg?1784380868", + "symbol": "RAMEN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe0444ef8bf4ed74f74fd73686e2ddf4c1c5591e8": { + "assetId": "eip155:4663/erc20:0xe0444ef8bf4ed74f74fd73686e2ddf4c1c5591e8", + "chainId": "eip155:4663", + "name": "Netflix • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174165/large/0xe0444ef8bf4ed74f74fd73686e2ddf4c1c5591e8.png?1782444710", + "symbol": "NFLX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe0cc2751249b797871b694ad3779755b7d4b1111": { + "assetId": "eip155:4663/erc20:0xe0cc2751249b797871b694ad3779755b7d4b1111", + "chainId": "eip155:4663", + "name": "CashDog", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174597/large/200.png?1784184183", + "symbol": "CASHDOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe170dc96ca10103e0d4c5d9293c5a3a72ee365a5": { + "assetId": "eip155:4663/erc20:0xe170dc96ca10103e0d4c5d9293c5a3a72ee365a5", + "chainId": "eip155:4663", + "name": "Little John", + "precision": 9, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174507/large/logo.png?1783834955", + "symbol": "JOHN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe44951407d2ed8e73dce4b7002908732bc0d0bc3": { + "assetId": "eip155:4663/erc20:0xe44951407d2ed8e73dce4b7002908732bc0d0bc3", + "chainId": "eip155:4663", + "name": "Kindra by virtuals", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174551/large/IMG_0751.jpeg?1784014646", + "symbol": "KINDRA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe49a1c3033ecc6b804bc423021d3f71f1a3e0f9b": { + "assetId": "eip155:4663/erc20:0xe49a1c3033ecc6b804bc423021d3f71f1a3e0f9b", + "chainId": "eip155:4663", + "name": "RobinWifHat", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174351/large/roh_400x400.jpg?1783361275", + "symbol": "WIF", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe555853720737512e3f8ccf64159a087b4da51db": { + "assetId": "eip155:4663/erc20:0xe555853720737512e3f8ccf64159a087b4da51db", + "chainId": "eip155:4663", + "name": "Bull in Hood", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174396/large/9i1mvghswnk59rioodi0ewlpqco8.?1783580569", + "symbol": "BIH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe59e2953334cc1664181976d79c4b5d39eab7777": { + "assetId": "eip155:4663/erc20:0xe59e2953334cc1664181976d79c4b5d39eab7777", + "chainId": "eip155:4663", + "name": "PACKS", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174657/large/nlxe1a3rglt7xwd04amg12ylvua9.?1784446540", + "symbol": "PACKS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe59eccb15ea07a755eb9587eefda7929559e1fa6": { + "assetId": "eip155:4663/erc20:0xe59eccb15ea07a755eb9587eefda7929559e1fa6", + "chainId": "eip155:4663", + "name": "RobinFlow", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174393/large/rflow.jpg?1783580255", + "symbol": "FLOW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe77d354898a44808ff3999947002785cd727bed5": { + "assetId": "eip155:4663/erc20:0xe77d354898a44808ff3999947002785cd727bed5", + "chainId": "eip155:4663", + "name": "saffron.finance", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/13117/large/sfi_red_250px.png?1696512904", + "symbol": "SFI", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe81dc008231035c91f09633c541394b9ddf53673": { + "assetId": "eip155:4663/erc20:0xe81dc008231035c91f09633c541394b9ddf53673", + "chainId": "eip155:4663", + "name": "VORTANO", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174483/large/2qbpbp79qyj6a2zjzsxd3zl6pgiy.?1783767232", + "symbol": "VRTN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe8fb470e0685437d7739bd2aacba60b228800335": { + "assetId": "eip155:4663/erc20:0xe8fb470e0685437d7739bd2aacba60b228800335", + "chainId": "eip155:4663", + "name": "Throbbin", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174596/large/logo.png?1784184003", + "symbol": "THROBBIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe93237c50d904957cf27e7b1133b510c669c2e74": { + "assetId": "eip155:4663/erc20:0xe93237c50d904957cf27e7b1133b510c669c2e74", + "chainId": "eip155:4663", + "name": "Microsoft • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174116/large/0xe93237c50d904957cf27e7b1133b510c669c2e74.png?1782444580", + "symbol": "MSFT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xe934e36a439c94017b64a3fece66af12099abf50": { + "assetId": "eip155:4663/erc20:0xe934e36a439c94017b64a3fece66af12099abf50", + "chainId": "eip155:4663", + "name": "StonkBroker", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174654/large/9gwu14e3hpizobkefg65k66l70wu.?1784445702", + "symbol": "STONKBROKER", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xea72ecca2d0f6bfa1394dbbcff85b52cd4233931": { + "assetId": "eip155:4663/erc20:0xea72ecca2d0f6bfa1394dbbcff85b52cd4233931", + "chainId": "eip155:4663", + "name": "CrowdStrike Holdings • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174169/large/0xea72ecca2d0f6bfa1394dbbcff85b52cd4233931.png?1782444721", + "symbol": "CRWD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xeaa9abb805db03b6859662354abfe0c2a30902ae": { + "assetId": "eip155:4663/erc20:0xeaa9abb805db03b6859662354abfe0c2a30902ae", + "chainId": "eip155:4663", + "name": "Dog in a suit", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174482/large/v64shru14od043vgkuastg83stim.?1783767178", + "symbol": "SUIT", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xeafa804083a4886a9460b5b19557334a652beba8": { + "assetId": "eip155:4663/erc20:0xeafa804083a4886a9460b5b19557334a652beba8", + "chainId": "eip155:4663", + "name": "Naven Network", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174473/large/ig41n6nw5t647mtxdhqxi89s54ym.?1783761466", + "symbol": "NAVEN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xeb30663bdff0622ef4e4e5cbb4e975f19f33f51d": { + "assetId": "eip155:4663/erc20:0xeb30663bdff0622ef4e4e5cbb4e975f19f33f51d", + "chainId": "eip155:4663", + "name": "Futu Holdings • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174192/large/0xeb30663bdff0622ef4e4e5cbb4e975f19f33f51d.png?1782444782", + "symbol": "FUTU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xec262a75e413fafd0df80480274532c79d42da09": { + "assetId": "eip155:4663/erc20:0xec262a75e413fafd0df80480274532c79d42da09", + "chainId": "eip155:4663", + "name": "Strategy Inc. • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174143/large/0xec262a75e413fafd0df80480274532c79d42da09.png?1782444651", + "symbol": "MSTR", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xec51b6e5d99487ac5646f3311c109714b54f6ed8": { + "assetId": "eip155:4663/erc20:0xec51b6e5d99487ac5646f3311c109714b54f6ed8", + "chainId": "eip155:4663", + "name": "OUTLAW", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174543/large/cgy1jwn1e4c0jvga6xm9mun1rfg1.?1783957800", + "symbol": "OUTLAW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf0568863195770965a6d8abb0aa87f4314b80320": { + "assetId": "eip155:4663/erc20:0xf0568863195770965a6d8abb0aa87f4314b80320", + "chainId": "eip155:4663", + "name": "SLIPPY", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174710/large/slippy_400x400.jpg?1784646272", + "symbol": "SLIPPY", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf0ab0c93be6f41369d302e55db1a96b3c430212d": { + "assetId": "eip155:4663/erc20:0xf0ab0c93be6f41369d302e55db1a96b3c430212d", + "chainId": "eip155:4663", + "name": "IREN Limited • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174151/large/0xf0ab0c93be6f41369d302e55db1a96b3c430212d.png?1782444672", + "symbol": "IREN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf0c4bf4c582cb3836e98394b1d4e7b7281101be8": { + "assetId": "eip155:4663/erc20:0xf0c4bf4c582cb3836e98394b1d4e7b7281101be8", + "chainId": "eip155:4663", + "name": "Roblox • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174202/large/0xf0c4bf4c582cb3836e98394b1d4e7b7281101be8.png?1782444808", + "symbol": "RBLX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf132bd1d1770d42cf4ec8659b9077d0d1c197cc1": { + "assetId": "eip155:4663/erc20:0xf132bd1d1770d42cf4ec8659b9077d0d1c197cc1", + "chainId": "eip155:4663", + "name": "Ranger AI", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174478/large/b7uzk8j65odkho6ldjmy4a0yb7vy.?1783762549", + "symbol": "RANGER", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf1953dab6fad537488d5a022361ffaa8b4c95ec6": { + "assetId": "eip155:4663/erc20:0xf1953dab6fad537488d5a022361ffaa8b4c95ec6", + "chainId": "eip155:4663", + "name": "Innodata • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174189/large/0xf1953dab6fad537488d5a022361ffaa8b4c95ec6.png?1782444774", + "symbol": "INOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf202de51bb42a0073948b0971707d14c54ef5f44": { + "assetId": "eip155:4663/erc20:0xf202de51bb42a0073948b0971707d14c54ef5f44", + "chainId": "eip155:4663", + "name": "Peeps", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174737/large/IMG_5333.jpeg?1784707626", + "symbol": "PEEPS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf23250dac154d05bb671cb0d0ebef3c635c79ce2": { + "assetId": "eip155:4663/erc20:0xf23250dac154d05bb671cb0d0ebef3c635c79ce2", + "chainId": "eip155:4663", + "name": "UPS • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174201/large/0xf23250dac154d05bb671cb0d0ebef3c635c79ce2.png?1782444806", + "symbol": "UPS", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf2915d1e3c1b0c769d0c756ec43f1c1f6c99cd03": { + "assetId": "eip155:4663/erc20:0xf2915d1e3c1b0c769d0c756ec43f1c1f6c99cd03", + "chainId": "eip155:4663", + "name": "Arrow", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174345/large/AF-PP-Inverted.png?1783421306", + "symbol": "ARROW", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf314aedeaadcb02f33a13eae471fe06d13aa7777": { + "assetId": "eip155:4663/erc20:0xf314aedeaadcb02f33a13eae471fe06d13aa7777", + "chainId": "eip155:4663", + "name": "Retirement plan", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174415/large/hyk32wnnk1jtgu2hftwgscdt9e3v.?1783666304", + "symbol": "401K", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf444f3c77c77a33f7c8d8fcab8a1e88afb843da5": { + "assetId": "eip155:4663/erc20:0xf444f3c77c77a33f7c8d8fcab8a1e88afb843da5", + "chainId": "eip155:4663", + "name": "The Great Squeeze", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174624/large/qj9v3lb8qibwfwrdkdx3ayj7avvh.?1784278227", + "symbol": "SQUEEZE", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf44702b17d9abd53815f703e772f35e9c71a53af": { + "assetId": "eip155:4663/erc20:0xf44702b17d9abd53815f703e772f35e9c71a53af", + "chainId": "eip155:4663", + "name": "RAXOL", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174343/large/tljlld1hjqbs8rz1f0hdznr8ouls.?1783332390", + "symbol": "RAXOL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf4c450c1570c2dbda91de1ed2e39995a15028c97": { + "assetId": "eip155:4663/erc20:0xf4c450c1570c2dbda91de1ed2e39995a15028c97", + "chainId": "eip155:4663", + "name": "Diamond Hands", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174373/large/4un2w5gi4dfttub6y5hianoyvffa.?1783486971", + "symbol": "HODL", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf53f66751b1eff985311b693531e3290f600c410": { + "assetId": "eip155:4663/erc20:0xf53f66751b1eff985311b693531e3290f600c410", + "chainId": "eip155:4663", + "name": "Shopify • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174182/large/0xf53f66751b1eff985311b693531e3290f600c410.png?1782444755", + "symbol": "SHOP", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf55f03ea76c4e21f263631b1860b55e255acb339": { + "assetId": "eip155:4663/erc20:0xf55f03ea76c4e21f263631b1860b55e255acb339", + "chainId": "eip155:4663", + "name": "MOG CAT", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174458/large/mog.jpg?1783693336", + "symbol": "MOG", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf82119ebd01eb6ab67105c9536a713d61a25cf9f": { + "assetId": "eip155:4663/erc20:0xf82119ebd01eb6ab67105c9536a713d61a25cf9f", + "chainId": "eip155:4663", + "name": "heyAura", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/847/large/token.png?1775296339", + "symbol": "ADX", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:56/erc20:0x6bff4fb161347ad7de4a625ae5aa3a1ca7077819" + }, + "eip155:4663/erc20:0xf8bc08092c06db6148114dcf82af881f1085f92b": { + "assetId": "eip155:4663/erc20:0xf8bc08092c06db6148114dcf82af881f1085f92b", + "chainId": "eip155:4663", + "name": "Sherwood Protocol", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174574/large/4vvnmslrns3stkpsmbsnsv4cu5ae.?1784094690", + "symbol": "WOOD", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xf9b46d3d1b22199d4d1025a9cedb540a33f1a2d5": { + "assetId": "eip155:4663/erc20:0xf9b46d3d1b22199d4d1025a9cedb540a33f1a2d5", + "chainId": "eip155:4663", + "name": "Exxon Holdings Corporation • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174170/large/0xf9b46d3d1b22199d4d1025a9cedb540a33f1a2d5.png?1782444723", + "symbol": "XOM", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xfb1bcb6817f7b8fa86896d3253b16aeb7bd6a5a8": { + "assetId": "eip155:4663/erc20:0xfb1bcb6817f7b8fa86896d3253b16aeb7bd6a5a8", + "chainId": "eip155:4663", + "name": "one life, its worth an attempt", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174519/large/worth.jpg?1783855128", + "symbol": "WORTH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xfb4729659eef22bfc1c2b680f6f873f8147aaaab": { + "assetId": "eip155:4663/erc20:0xfb4729659eef22bfc1c2b680f6f873f8147aaaab", + "chainId": "eip155:4663", + "name": "Robin", + "precision": 6, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174386/large/robin-mascot-circle.png?1784168000", + "symbol": "ROBIN", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xfbd1bf9d354cd8197ab54f80778c03cc468adaaf": { + "assetId": "eip155:4663/erc20:0xfbd1bf9d354cd8197ab54f80778c03cc468adaaf", + "chainId": "eip155:4663", + "name": "Vena Protocol", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174423/large/wfzc0l3rb6j0rhrmvf23peh9ha5m.?1783668573", + "symbol": "VENA", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xfe2112b4569d3a131e7964dcf45c155d7907534e": { + "assetId": "eip155:4663/erc20:0xfe2112b4569d3a131e7964dcf45c155d7907534e", + "chainId": "eip155:4663", + "name": "Pooch", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174505/large/template_copy.PNG?1783814065", + "symbol": "POOCH", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/erc20:0xff080c8ce2e5feadaca0da81314ae59d232d4afd": { + "assetId": "eip155:4663/erc20:0xff080c8ce2e5feadaca0da81314ae59d232d4afd", + "chainId": "eip155:4663", + "name": "Micron Technology • Robinhood Token", + "precision": 18, + "color": "#FFFFFF", + "icon": "https://assets.coingecko.com/coins/images/102174111/large/0xff080c8ce2e5feadaca0da81314ae59d232d4afd.png?1782444567", + "symbol": "MU", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": null + }, + "eip155:4663/slip44:60": { + "assetId": "eip155:4663/slip44:60", + "chainId": "eip155:4663", + "name": "Ethereum", + "networkName": "Robinhood", + "symbol": "ETH", + "precision": 18, + "color": "#00C805", + "networkColor": "#00C805", + "icon": "https://assets.coingecko.com/coins/images/279/large/ethereum.png", + "networkIcon": "https://assets.relay.link/icons/4663/light.png", + "explorer": "https://robinhoodchain.blockscout.com", + "explorerAddressLink": "https://robinhoodchain.blockscout.com/address/", + "explorerTxLink": "https://robinhoodchain.blockscout.com/tx/", + "relatedAssetKey": "eip155:1/slip44:60" } }, "ids": [ @@ -380348,6 +384264,307 @@ "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:JDt9rRGaieF6aN1cJkXFeUmsy7ZE4yY3CZb8tVMXVroS", "eip155:1/erc20:0x750c3a0a0ce9984eeb8c5d146dff024b584e5e33", "eip155:324/erc20:0x3355df6d4c9c3035724fd0e3914de96a5a83aaf4", - "eip155:324/erc20:0xbbeb516fb02a01611cbbe0453fe3c580d7281011" + "eip155:324/erc20:0xbbeb516fb02a01611cbbe0453fe3c580d7281011", + "eip155:4663/erc20:0x01397109534e47d3742e794d3a610fa1c3158888", + "eip155:4663/erc20:0x01637b14b7378b99de75a64d50656d98488d9a4d", + "eip155:4663/erc20:0x0172fd20b8e89cb577a6edd3b800ee7b2a5b00c1", + "eip155:4663/erc20:0x0188da44dcc9b6c9d0d80de904c633c5ff227777", + "eip155:4663/erc20:0x020bfc650a365f8bb26819deaabf3e21291018b4", + "eip155:4663/erc20:0x02cf91de4e80d3dd104e5ad6fc23eb15a9b6f8e2", + "eip155:4663/erc20:0x05b37fb53a299a1b874a619e1c4c404d52c36f4c", + "eip155:4663/erc20:0x0684e19528ccfd570fb00f0ca626dac4bdab17cf", + "eip155:4663/erc20:0x0830a9dd26a04e959657ab6788d45f5725590c32", + "eip155:4663/erc20:0x0856f71c65268da154da4413d961cb348dc6119d", + "eip155:4663/erc20:0x0acb834130d284bfffa1c697f02dddafd8f50335", + "eip155:4663/erc20:0x0af77e27f535256965944e617a386570f5c0432a", + "eip155:4663/erc20:0x0bd7d308f8e1639fab988df18a8011f41eacad73", + "eip155:4663/erc20:0x0c3260af4b8f13a69c4c2dfb84fd667890cdfa14", + "eip155:4663/erc20:0x0e6e67ba88e7b5d9b67636a215c76779b948de79", + "eip155:4663/erc20:0x0e8720b8cd84f95b4b6696adbfa8063c4b8b94f2", + "eip155:4663/erc20:0x0f17206447090e464c277571124dd2688e48aea9", + "eip155:4663/erc20:0x117cc2133c37b721f49de2a7a74833232b3b4c0c", + "eip155:4663/erc20:0x12f190a9f9d7d37a250758b26824b97ce941bf54", + "eip155:4663/erc20:0x156e175dd063a8ce274c50654ef40e0032b3fbcf", + "eip155:4663/erc20:0x15cd20759ce7f3285c29a319de2d1a2e098c6f43", + "eip155:4663/erc20:0x15e8b90d9444d1a5e9b39f5c9547a104ae69ba11", + "eip155:4663/erc20:0x164d9da79722c5294369e79807980e0bff257777", + "eip155:4663/erc20:0x178e54df3d091ee4d0b2534742ef9e3692b76526", + "eip155:4663/erc20:0x17bb0c898254406b1ea2e8e99b0c263e26c9e4a4", + "eip155:4663/erc20:0x1abf16f660ccbaa22ce8646deb1b63635d582228", + "eip155:4663/erc20:0x1af6446f07eb1d97c546afc8c9544cbdf3ad5137", + "eip155:4663/erc20:0x1b0e319c6a659f002271b69db8a7df2f911c153e", + "eip155:4663/erc20:0x1cdad396db64bda184d5182a97dd9b3c62100b7d", + "eip155:4663/erc20:0x1dae71a215ee5c696cb644f030597ae4f32831c0", + "eip155:4663/erc20:0x1e0aaaf3fdb5c0de3574d215e7081177ec0f96a3", + "eip155:4663/erc20:0x20aa6e63076ee856f46bb31f7d30e60b335b11e9", + "eip155:4663/erc20:0x2103faa9d1762e27a716c61718b3acf3ec1f9bf1", + "eip155:4663/erc20:0x218eec7d0c6a26ba119063b3228b8d04085545d3", + "eip155:4663/erc20:0x2355431b83b1a8e40172d099d90243d8d666b56b", + "eip155:4663/erc20:0x23f88eda2b24a0d45d4c3e2ad05edff30f860697", + "eip155:4663/erc20:0x241f3caad03db31137f641bef005a32176530024", + "eip155:4663/erc20:0x25824447ed0e26b0741858b67065bb6bd0017b15", + "eip155:4663/erc20:0x25c288e6d899b9bc30160965ad9644c67e73be0c", + "eip155:4663/erc20:0x26c41b10527de2dc870fa5c9d5f4a8dbaa966cdf", + "eip155:4663/erc20:0x27c99fbde9d0d2aa4f4bfb4943f237843ddf6958", + "eip155:4663/erc20:0x281079a7832b15238ed9c6ec1e787f3ed9db6ad1", + "eip155:4663/erc20:0x282e87451e10fa6679bc7d76c69be44cd3fc777c", + "eip155:4663/erc20:0x284358abc07f9359f19f4b5b4ac91901be2597ba", + "eip155:4663/erc20:0x2b10d89ba75cfe18f2678a66e4c18c1005b03afa", + "eip155:4663/erc20:0x2e0847e8910a9732eb3fb1bb4b70a580adad4fe3", + "eip155:4663/erc20:0x2e9c3b1c6e7703d1784b2b8f80ef4e99d76b3e56", + "eip155:4663/erc20:0x2ea05472e1b7289004e5a1f6d959f6f2f3a6fecb", + "eip155:4663/erc20:0x3018e275da8d1acd16e7b803e74fca9c251fd60f", + "eip155:4663/erc20:0x31be8f7485e36928c9de86566c62da82d4b6bf81", + "eip155:4663/erc20:0x31ef2f4e678b3640a380c5882ae1a73763d138e9", + "eip155:4663/erc20:0x322f0929c4625ed5bad873c95208d54e1c003b2d", + "eip155:4663/erc20:0x32758ae8e02b0a2cb6b802b6aaeaf74158c169f7", + "eip155:4663/erc20:0x343a9c531acf28c4d9f4cd8ef2d6413ceba3c2df", + "eip155:4663/erc20:0x3450598e419abb5609f60e4b2fda127ff0897777", + "eip155:4663/erc20:0x36046893810a7e7fce501229d57dc3fc8c8716d0", + "eip155:4663/erc20:0x364d9f23ede3ada0f5e3f41df10f0a0d01c57777", + "eip155:4663/erc20:0x3746a5ebca295dee695dd1bcba50a8626df3099c", + "eip155:4663/erc20:0x38bb87cf3e7344a82be7cd671c191f015b97eee6", + "eip155:4663/erc20:0x39dbed3a2bd333467115de45665cc57f813c4571", + "eip155:4663/erc20:0x39ec44bee4f6a116c6f9b8de566848a985c53c60", + "eip155:4663/erc20:0x3aaa874b93612bf3f683b85e2739e81eab38321e", + "eip155:4663/erc20:0x3b14c39e89d60d627b42a1a4ca45b5bb45fc12e2", + "eip155:4663/erc20:0x3d0a2e4763eee58a7c631acf7ff13ad6398a5141", + "eip155:4663/erc20:0x3f5e952b29be5d70846fc2ba472bea05761a769e", + "eip155:4663/erc20:0x407470f85e0b342a52aae2f191e135cef2947777", + "eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7", + "eip155:4663/erc20:0x408c14038a04f7bd235329e26d2bf569ee20e250", + "eip155:4663/erc20:0x40e836f547653691b74c0d68fff60befe36cb024", + "eip155:4663/erc20:0x411efb0e7f985935daec3d4c3ebaea0d0ad7d89f", + "eip155:4663/erc20:0x4189f0c66ebbb0bfef1c31f763131361ef32f77c", + "eip155:4663/erc20:0x41f41f7b849a25e027876c485544c8088f447a11", + "eip155:4663/erc20:0x43e7cb9984ad95aa808ac21998cc8d5f909e47af", + "eip155:4663/erc20:0x44c4f142009036cf477ed2d09932051843137cf1", + "eip155:4663/erc20:0x45242320dbb855eea8fd36804c6487e10e97fcf9", + "eip155:4663/erc20:0x46cf2ca61505902a4410b3b4242d787cd4737777", + "eip155:4663/erc20:0x47ee684e52e5d92de0b24d4e00ad45c7af7db9a3", + "eip155:4663/erc20:0x47f93d52cbec7c6d2cfc080e154002370a60daea", + "eip155:4663/erc20:0x48961813349333209994750ffa89b3c5c22ec969", + "eip155:4663/erc20:0x4a0e65a3eccec6dbe60ae065f2e7bb85fae35eea", + "eip155:4663/erc20:0x4c9d9527c4e3cf9faf70f0df8429d2cced157492", + "eip155:4663/erc20:0x4d21483a44bf67a86b77e3da301411880797d452", + "eip155:4663/erc20:0x4e62068525ab11fe768e29dfd00ef909b9803016", + "eip155:4663/erc20:0x4ea005168d7f09a7a0ba9d1def21a479950e44c2", + "eip155:4663/erc20:0x516c0878acca15e7eb2f6a401b5b6cd2a0f9f455", + "eip155:4663/erc20:0x51b57d1157975756c156ee28e3e167718792b665", + "eip155:4663/erc20:0x521cf887e6531c6f667b5bc4d896e5d9bfe8eb2e", + "eip155:4663/erc20:0x5266eeaff092d6136ab63d18b975a60a0cc0c8f7", + "eip155:4663/erc20:0x53d2e1225aace4551194ecbb6bbe5c44d94aa5fa", + "eip155:4663/erc20:0x55796b27aa48444fa2caef2bf902e12e9c280dc9", + "eip155:4663/erc20:0x558378e000d634a36593e338ebacdd6207640efe", + "eip155:4663/erc20:0x56910d4409f3a0c78c64dd8d0545ff0705389870", + "eip155:4663/erc20:0x56a98db16cf501b686c14ba00a5dec02e87083fa", + "eip155:4663/erc20:0x56d23bee5f41a7120170b0c603dae30128e460e9", + "eip155:4663/erc20:0x5788116f4fe1820bf499c26fc7203630bf2d020f", + "eip155:4663/erc20:0x57a1ab439e8c24b90ecc6534c05621d6e68ed35a", + "eip155:4663/erc20:0x57c0e45cb534413d1c20a4240955d6bb250bb4f1", + "eip155:4663/erc20:0x58ffe4a942d3885baa22d7520691f611ef09e7aa", + "eip155:4663/erc20:0x59818904ab4ce163b3ce4ffb64f2d6ca02c434b4", + "eip155:4663/erc20:0x5a283986b204326344a1cc04b52b37f1af54ef72", + "eip155:4663/erc20:0x5b58e24034bc052af010d6e863ae81acde261b1d", + "eip155:4663/erc20:0x5bd252b4d7aa573813d1c6a4888f778790583667", + "eip155:4663/erc20:0x5c90450bbb4273d7b2f17cf6917aeb237a569679", + "eip155:4663/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34", + "eip155:4663/erc20:0x5d6fa71583e40d6a40ab09cd071f24f6603b0970", + "eip155:4663/erc20:0x5e81213613b6b86eab4c6c50d718d34359459786", + "eip155:4663/erc20:0x5f10a1c971b69e47e059e1dc91901b59b3fb49c3", + "eip155:4663/erc20:0x5f18b02b8320ef1c5b7d7a5a8bad482a767f4716", + "eip155:4663/erc20:0x5fc5360d0400a0fd4f2af552add042d716f1d168", + "eip155:4663/erc20:0x62c71cd34a52c30d894419cbcc55db2afa8032ea", + "eip155:4663/erc20:0x62fd0668e10d8b72339be2dcf7643001688ff13b", + "eip155:4663/erc20:0x6330d8c3178a418788df01a47479c0ce7ccf450b", + "eip155:4663/erc20:0x636358c682843ca3976b32cb4dd5fb13fb407777", + "eip155:4663/erc20:0x6365fd27ddefc42f50895994b67b04fab5f08d5e", + "eip155:4663/erc20:0x63e0ca3841bff47a191949417ab64f82cfa3314b", + "eip155:4663/erc20:0x647dd517c8820fc9874e1a3f58e6e0b9a43395c0", + "eip155:4663/erc20:0x64abfc878dc340bbf33bae4aaf39ed33fb1828c0", + "eip155:4663/erc20:0x65b445518b1ad0d9c597731494f5bd2991b7ec08", + "eip155:4663/erc20:0x6689ab375aaaa9aed78aaaba2e8edcc547478cf1", + "eip155:4663/erc20:0x66cef844f82a461444621f1fcb53efa9ed6dee18", + "eip155:4663/erc20:0x692dcca648e2e26baaf9da4aebf7cdd5ac2171d5", + "eip155:4663/erc20:0x6a4baa1927f37256017342dbd8fec0c12831b8e3", + "eip155:4663/erc20:0x6eda83fc299c10d474068a7e69771c809bcbbba3", + "eip155:4663/erc20:0x7168563b0e70124f0c7c0cf2f13a8d1861baf4a5", + "eip155:4663/erc20:0x727701f88f09fed71eb217bcea88b3f314cf7079", + "eip155:4663/erc20:0x729bcb002e38f415502596617cd52321acb4e681", + "eip155:4663/erc20:0x7331991062f3b1e4eb0fd0506bf1ff0779e08b91", + "eip155:4663/erc20:0x745c1c97551204f10cd5eb51c1b6902fece13b0e", + "eip155:4663/erc20:0x7541872e32bb529d7ff11d6c59832269ce33a6ff", + "eip155:4663/erc20:0x75742c18bc1f1c5c5f448f4c9d9c6f66dafaaa38", + "eip155:4663/erc20:0x75c8258eaa6d0f94b82951194191ca3efb0bcbe2", + "eip155:4663/erc20:0x77581054581b9c525e7dd7a0155de43867532d03", + "eip155:4663/erc20:0x7817c85e4390bc83a58a47a71f0a5fa83a4e16d4", + "eip155:4663/erc20:0x79d2234ed4ee24880835f261df9a98fcefc7600e", + "eip155:4663/erc20:0x7c04e6a3368f2a1de3874f0e80d2e0a1a9915da6", + "eip155:4663/erc20:0x7dc013eb55e436f30d7ed1afe4e36d6e45e3c3f7", + "eip155:4663/erc20:0x7e86381a763f0ecca2bdf27c54eac403ddd48123", + "eip155:4663/erc20:0x7f0abef0c07280f82c6a08ead09ded6bae2c13fc", + "eip155:4663/erc20:0x7f3d6b93809fd4534bf3c5b25deeaec0aab5a1d8", + "eip155:4663/erc20:0x7fe995a80075df3dc8ae11a9b82c7fe4202cd87f", + "eip155:4663/erc20:0x8005d266423c7ea827372c9c864491e5786600ea", + "eip155:4663/erc20:0x822cc93ffd030293e9842c30bbd678f530701867", + "eip155:4663/erc20:0x82da4646242e1d962e96e932269dc644c94a9caa", + "eip155:4663/erc20:0x834b31164b5e5f4a08b441d796abb85f714bb7c1", + "eip155:4663/erc20:0x839b8bd8ed3d2f1be5a709ce99144337296681c7", + "eip155:4663/erc20:0x83d37c1c2c3ed4e6536a01fd92c2a75453b57cc2", + "eip155:4663/erc20:0x84ad72f6fd6bccab5b5aa4f3c9ab86863bd2bcda", + "eip155:4663/erc20:0x84b7515081a7ac5adc26179b77a8b18a8c6725c0", + "eip155:4663/erc20:0x84f210f9fa42613e5f5bc89ee4978afbd1e90f11", + "eip155:4663/erc20:0x86923f96303d656e4aa86d9d42d1e57ad2023fdc", + "eip155:4663/erc20:0x86a24426d1fc5dfdee454120af3ecc3cc552789b", + "eip155:4663/erc20:0x880b852316d430741c5b693aa53f22871e42ee77", + "eip155:4663/erc20:0x894e1ec2d74ffe5aef8dc8a9e84686accb964f2a", + "eip155:4663/erc20:0x89776d4cd68193597a2fc132cfac1fde36ccea8a", + "eip155:4663/erc20:0x8b7daf8ca650ab30df4c686e1e3689e9248732c6", + "eip155:4663/erc20:0x8bada99332848483995ef9c61f4bffced1bafeed", + "eip155:4663/erc20:0x8cf07c5a878945185d327aaa6e33faa95f95e7bf", + "eip155:4663/erc20:0x8d4dfaaa4198b6486e0293fec914c2b6a821d4dc", + "eip155:4663/erc20:0x8e62f281f282686fca6dcb39288069a93fc23f1c", + "eip155:4663/erc20:0x8ecea3d0e648db646d824aa51eedeb16ac3d6878", + "eip155:4663/erc20:0x8ed8ab093d29e9ccbc26bb38df09910ae1d69125", + "eip155:4663/erc20:0x8ef20885f94e3d9bc7eb3080279188bd5ed7c08c", + "eip155:4663/erc20:0x8f100e99ddf699320724e37cb866770381d47382", + "eip155:4663/erc20:0x8fde2c15d44eb7cc1a889bc74633e226f91d3295", + "eip155:4663/erc20:0x8ff92566f2e81bdd68edfaa8cde73942a723796b", + "eip155:4663/erc20:0x90079857237da767c38d1d261a39848ea424319e", + "eip155:4663/erc20:0x912136b5ce6063591e6ae47edc76cde98235860e", + "eip155:4663/erc20:0x92ef19e82bd8ff36661de838d5eae7e5cef0effe", + "eip155:4663/erc20:0x92fd66527192e3e61d4ddd13322aa222de86f9b5", + "eip155:4663/erc20:0x941ae714ec6d8130c7b75d67160ca08f1e7d11dd", + "eip155:4663/erc20:0x94fef3763ed87051267dcd7ffc5df416b6c03a7e", + "eip155:4663/erc20:0x95052ddcd5dc25641657424a8cf04834997e1730", + "eip155:4663/erc20:0x9651342cea770ae9a2969ba2a52611523146aef9", + "eip155:4663/erc20:0x96765066f6a040a21eb027167d2315b707c82633", + "eip155:4663/erc20:0x970078468807853bc316432e745165eb34398ba3", + "eip155:4663/erc20:0x9727b500ac8726c716f018e5d3ca871481245065", + "eip155:4663/erc20:0x97e39393a9afc4f21b1e74209ee0522e91ef028c", + "eip155:4663/erc20:0x98e75885157c80992a8d41b696d8c9c6fb30a926", + "eip155:4663/erc20:0x9b23573b156b52565012f5ce02cdf60afbaa70be", + "eip155:4663/erc20:0x9d9c6684f596f66a64c030b93a886d51fd4d7931", + "eip155:4663/erc20:0x9e93ea35be23ab0e1e20ed6b62d3b1cbd5234a83", + "eip155:4663/erc20:0x9fb101579e716b2571ab069c2718cd06b69ffdd7", + "eip155:4663/erc20:0xa15cd06dd305269a0f48bebeb30aa3588fba7b32", + "eip155:4663/erc20:0xa2718f80f1fe0cdec69c9023ee006807dd487a8c", + "eip155:4663/erc20:0xa3054f28c48b387d4825be8f3b79ed161abc5405", + "eip155:4663/erc20:0xa30fa36db767ad9ed3f7a60fc79526fb4d56d344", + "eip155:4663/erc20:0xa3bfbccd4aeec8ac56b17fee3e02dd2c60722ccc", + "eip155:4663/erc20:0xa4874f62c8826e19cf8691bcabd02fe1a0b7401f", + "eip155:4663/erc20:0xa4bd8def4b887fd1851defe10acdcf7a84437a88", + "eip155:4663/erc20:0xa56605e4c65e702f72830bf6880e821588bab836", + "eip155:4663/erc20:0xa5bac17a919a10ba0628cda5bcf273681e1a8d4e", + "eip155:4663/erc20:0xa5d4968421ba94814be3b136b15cf422101ac1a3", + "eip155:4663/erc20:0xa737df5de18e3aa6b0bf8c2e9846ed699f6f2aeb", + "eip155:4663/erc20:0xa79e6db2549c541b6cae25e99021728425b9d0e9", + "eip155:4663/erc20:0xa80ba06f0a0327e68da6bede67eb35ac023d6e62", + "eip155:4663/erc20:0xa80eb66b3e0cf66ccb46f8b8c9e7ff5803eeb820", + "eip155:4663/erc20:0xa870f8c7cae9705194a141b0c2964b6c79ee3742", + "eip155:4663/erc20:0xa8eb3bccbf2017ee7cbfb652eb51cf2e1b153289", + "eip155:4663/erc20:0xa9038d2c4e798d10dd46c2fdb1f72c9b397bbdad", + "eip155:4663/erc20:0xaa4b6a79df257e50e0079cd812a92262ee3951b0", + "eip155:4663/erc20:0xaa730f8cca8a22600f92d854322c560390fcff87", + "eip155:4663/erc20:0xaab3d2e25869dd9661e7a886b9a51c02ee6c7777", + "eip155:4663/erc20:0xab26d5b48bd07f1248a66fd817036f785078b51d", + "eip155:4663/erc20:0xac0f333bbebb62b6d16322650641bd5ef2b849e5", + "eip155:4663/erc20:0xac9bba3f724dfbd6ec677684783d2de2aae05ad3", + "eip155:4663/erc20:0xace3c5adc456de444501d91c12b0b03f902eb250", + "eip155:4663/erc20:0xad25ac6c84d497db898fa1e8387bf6af3532a1c4", + "eip155:4663/erc20:0xad622320e520de39e72d41ef07438c3fd3354875", + "eip155:4663/erc20:0xaf3d76f1834a1d425780943c99ea8a608f8a93f9", + "eip155:4663/erc20:0xaf4c10fef50059d1e3e8ab1c80e46db6a76098b4", + "eip155:4663/erc20:0xb0992820e760d836549ba69bc7598b4af75dee03", + "eip155:4663/erc20:0xb1bf26c1d20ff267a4f93550d1e0d06ac40a114b", + "eip155:4663/erc20:0xb1cb27f78b7335df8c3d8ebf0881a15bed6beb60", + "eip155:4663/erc20:0xb1d46eff0e3d1a4169a4d4159b46c5783b4f7a05", + "eip155:4663/erc20:0xb47f4702deb124cb4eb6286be83c9d84277c6239", + "eip155:4663/erc20:0xb66d83f0a7eae1bed80df1e049a5d6aefa90eb66", + "eip155:4663/erc20:0xb8dbf92f9741c9ac1c32115e78581f23509916fd", + "eip155:4663/erc20:0xb90a19ff0af67f7779aff50a882a9cff42446400", + "eip155:4663/erc20:0xbd433ecab074ae6a740959fb5e7bf1d02f6f57f6", + "eip155:4663/erc20:0xbd8e0244791b67547b4ae8cfc9463ab19f6e9c08", + "eip155:4663/erc20:0xbe6702d7b70315376dc48a3293f24f0982f86386", + "eip155:4663/erc20:0xbec416ac3e36a8ca0571cef5a104edaef2a31a89", + "eip155:4663/erc20:0xbef75684c43c4ea7bd18dd532a2244674ee8b926", + "eip155:4663/erc20:0xbf72347bacefe747eaf48b8a66e38babad3020a0", + "eip155:4663/erc20:0xbfc3a980b78b007ef0cde9625e52dbb66c51a1a7", + "eip155:4663/erc20:0xc01aa1fecec0605b13bc84874ff7256c0f5f562a", + "eip155:4663/erc20:0xc0b57404486bae3decd0f47c49406214a303dac8", + "eip155:4663/erc20:0xc0d6457c16cc70d6790dd43521c899c87ce02f35", + "eip155:4663/erc20:0xc23d7218512c672ba6e87b7f8bcce53355f55931", + "eip155:4663/erc20:0xc35968c7f5475bb03a43c7382526f4118e01c0de", + "eip155:4663/erc20:0xc583c60aef9dc401da72cec1b404743a93cea1cc", + "eip155:4663/erc20:0xc5ac3b7664ba1ac915145cc58f50b89ec3a2970d", + "eip155:4663/erc20:0xc6911796042b15d7fa4f6cde69e245ddcd3d9c31", + "eip155:4663/erc20:0xc72b96e0e48ecd4dc75e1e45396e26300bc39681", + "eip155:4663/erc20:0xc72c01aab5f5678dc1d6f5c6d2b417d91d402ba3", + "eip155:4663/erc20:0xc79d46d716b33b463b3a6574d6ee26009abf4e9a", + "eip155:4663/erc20:0xc9e7c34fa156a235e8b8601171a543bc9c84a1b9", + "eip155:4663/erc20:0xca0da673a451c84917d7dd0362109efff0f8825a", + "eip155:4663/erc20:0xca70d457418b90493e5735de6ec4410c3945498e", + "eip155:4663/erc20:0xca9c78dd337a67f6e0077f65f5e9218719d30edf", + "eip155:4663/erc20:0xcbb95bbf36099d34da091dc6fa6f49efa257cee3", + "eip155:4663/erc20:0xcdd50d73b45085d71cb05e2ca238d12c3bd7bebd", + "eip155:4663/erc20:0xcf6b2d875361be807eafa57458c80f28521f9333", + "eip155:4663/erc20:0xcf8b02128d2803b3df114e277094cc1096294b5c", + "eip155:4663/erc20:0xd0601ce157db5bdc3162bbac2a2c8af5320d9eec", + "eip155:4663/erc20:0xd1d4bbe54fdeafc83693420c5ade4a2abe6a90da", + "eip155:4663/erc20:0xd4052415613b34af236024b895574c467f65b6dd", + "eip155:4663/erc20:0xd5f3879160bc7c32ebb4dc785f8a4f505888de68", + "eip155:4663/erc20:0xd69845e0589c8d59de25e7a885f9dcecaec95b69", + "eip155:4663/erc20:0xd7321801caae694090694ff55a9323139f043b88", + "eip155:4663/erc20:0xd8d1c08a8ba4fc64bac744f74290b89adcb6bf25", + "eip155:4663/erc20:0xd917b029c761d264c6a312bbbcda868658ef86a6", + "eip155:4663/erc20:0xdb0c60375be0031b2817fd0c9d178ba3a85b6666", + "eip155:4663/erc20:0xdb87393727b666c43f5aecb03d8b419ba54d9b03", + "eip155:4663/erc20:0xdca6da2adcebe397c15f348f6ee38ee0ebe6b867", + "eip155:4663/erc20:0xdcc34bdd5d3c30237303b95d2f59cc29437b5c74", + "eip155:4663/erc20:0xddf2266b79abf0b48898959b0ed6e6adf512be74", + "eip155:4663/erc20:0xdf0992e440dd0be65bd8439b609d6d4366bf1cb5", + "eip155:4663/erc20:0xe013e34f03f42d49e836d59cf6353b897c337777", + "eip155:4663/erc20:0xe0444ef8bf4ed74f74fd73686e2ddf4c1c5591e8", + "eip155:4663/erc20:0xe0cc2751249b797871b694ad3779755b7d4b1111", + "eip155:4663/erc20:0xe170dc96ca10103e0d4c5d9293c5a3a72ee365a5", + "eip155:4663/erc20:0xe44951407d2ed8e73dce4b7002908732bc0d0bc3", + "eip155:4663/erc20:0xe49a1c3033ecc6b804bc423021d3f71f1a3e0f9b", + "eip155:4663/erc20:0xe555853720737512e3f8ccf64159a087b4da51db", + "eip155:4663/erc20:0xe59e2953334cc1664181976d79c4b5d39eab7777", + "eip155:4663/erc20:0xe59eccb15ea07a755eb9587eefda7929559e1fa6", + "eip155:4663/erc20:0xe77d354898a44808ff3999947002785cd727bed5", + "eip155:4663/erc20:0xe81dc008231035c91f09633c541394b9ddf53673", + "eip155:4663/erc20:0xe8fb470e0685437d7739bd2aacba60b228800335", + "eip155:4663/erc20:0xe93237c50d904957cf27e7b1133b510c669c2e74", + "eip155:4663/erc20:0xe934e36a439c94017b64a3fece66af12099abf50", + "eip155:4663/erc20:0xea72ecca2d0f6bfa1394dbbcff85b52cd4233931", + "eip155:4663/erc20:0xeaa9abb805db03b6859662354abfe0c2a30902ae", + "eip155:4663/erc20:0xeafa804083a4886a9460b5b19557334a652beba8", + "eip155:4663/erc20:0xeb30663bdff0622ef4e4e5cbb4e975f19f33f51d", + "eip155:4663/erc20:0xec262a75e413fafd0df80480274532c79d42da09", + "eip155:4663/erc20:0xec51b6e5d99487ac5646f3311c109714b54f6ed8", + "eip155:4663/erc20:0xf0568863195770965a6d8abb0aa87f4314b80320", + "eip155:4663/erc20:0xf0ab0c93be6f41369d302e55db1a96b3c430212d", + "eip155:4663/erc20:0xf0c4bf4c582cb3836e98394b1d4e7b7281101be8", + "eip155:4663/erc20:0xf132bd1d1770d42cf4ec8659b9077d0d1c197cc1", + "eip155:4663/erc20:0xf1953dab6fad537488d5a022361ffaa8b4c95ec6", + "eip155:4663/erc20:0xf202de51bb42a0073948b0971707d14c54ef5f44", + "eip155:4663/erc20:0xf23250dac154d05bb671cb0d0ebef3c635c79ce2", + "eip155:4663/erc20:0xf2915d1e3c1b0c769d0c756ec43f1c1f6c99cd03", + "eip155:4663/erc20:0xf314aedeaadcb02f33a13eae471fe06d13aa7777", + "eip155:4663/erc20:0xf444f3c77c77a33f7c8d8fcab8a1e88afb843da5", + "eip155:4663/erc20:0xf44702b17d9abd53815f703e772f35e9c71a53af", + "eip155:4663/erc20:0xf4c450c1570c2dbda91de1ed2e39995a15028c97", + "eip155:4663/erc20:0xf53f66751b1eff985311b693531e3290f600c410", + "eip155:4663/erc20:0xf55f03ea76c4e21f263631b1860b55e255acb339", + "eip155:4663/erc20:0xf82119ebd01eb6ab67105c9536a713d61a25cf9f", + "eip155:4663/erc20:0xf8bc08092c06db6148114dcf82af881f1085f92b", + "eip155:4663/erc20:0xf9b46d3d1b22199d4d1025a9cedb540a33f1a2d5", + "eip155:4663/erc20:0xfb1bcb6817f7b8fa86896d3253b16aeb7bd6a5a8", + "eip155:4663/erc20:0xfb4729659eef22bfc1c2b680f6f873f8147aaaab", + "eip155:4663/erc20:0xfbd1bf9d354cd8197ab54f80778c03cc468adaaf", + "eip155:4663/erc20:0xfe2112b4569d3a131e7964dcf45c155d7907534e", + "eip155:4663/erc20:0xff080c8ce2e5feadaca0da81314ae59d232d4afd", + "eip155:4663/slip44:60" ] } \ No newline at end of file diff --git a/public/generated/generatedAssetData.json.br b/public/generated/generatedAssetData.json.br index 1075dbba651..5554d0b3dec 100644 Binary files a/public/generated/generatedAssetData.json.br and b/public/generated/generatedAssetData.json.br differ diff --git a/public/generated/generatedAssetData.json.gz b/public/generated/generatedAssetData.json.gz index faa5aa94a70..6358a0ac612 100644 Binary files a/public/generated/generatedAssetData.json.gz and b/public/generated/generatedAssetData.json.gz differ diff --git a/public/generated/relatedAssetIndex.json b/public/generated/relatedAssetIndex.json index f4b1c610ae1..dde1196430b 100644 --- a/public/generated/relatedAssetIndex.json +++ b/public/generated/relatedAssetIndex.json @@ -506,7 +506,8 @@ "eip155:43114/erc20:0x806cc7a21bd85e960857ac1e097802fabad6f594", "eip155:56/erc20:0x2ac895feba458b42884dcbcb47d57e44c3a303c8", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:8CuPzHKuZQUyYbear8fi3u6iuTY652WVZT2cHZ2yeNbE", - "eip155:1/erc20:0x0b61c4f33bcdef83359ab97673cb5961c6435f4e" + "eip155:1/erc20:0x0b61c4f33bcdef83359ab97673cb5961c6435f4e", + "eip155:4663/erc20:0xbfc3a980b78b007ef0cde9625e52dbb66c51a1a7" ], "eip155:56/erc20:0x9f16e46c73b43bdb70861247d537bee4ea18f639": [ "eip155:1/erc20:0x0c1f3412a44ff99e40bf14e06e5ea321ae7b3938", @@ -2502,7 +2503,8 @@ "eip155:8453/erc20:0x0b3e328455c4059eeb9e3f84b5543f74e24e7e1b": [ "eip155:1/erc20:0x44ff8620b8ca30902395a7bd3f2407e1a091bf73", "eip155:8453/erc20:0x0b3e328455c4059eeb9e3f84b5543f74e24e7e1b", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:3iQL8BFS2vE7mww4ehAqQHAsbmRNCrPxizWAT2Zfyr9y" + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:3iQL8BFS2vE7mww4ehAqQHAsbmRNCrPxizWAT2Zfyr9y", + "eip155:4663/erc20:0xc6911796042b15d7fa4f6cde69e245ddcd3d9c31" ], "eip155:56/erc20:0xa19863e302fd1b41276fce5a48d9c511dbeef34c": [], "eip155:1/erc20:0x45f93404ae1e4f0411a7f42bc6a5dc395792738d": [], @@ -2809,7 +2811,8 @@ "eip155:324/erc20:0x39fe7a0dacce31bd90418e3e659fb0b5f0b3db0d", "eip155:81457/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34", "eip155:4326/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34", - "eip155:143/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34" + "eip155:143/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34", + "eip155:4663/erc20:0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34" ], "eip155:56/erc20:0x4cbf89ed7bb30b8a860fa86d3c96e9c72931299b": [ "eip155:1/erc20:0x4cbf89ed7bb30b8a860fa86d3c96e9c72931299b", @@ -5282,7 +5285,8 @@ "eip155:56/erc20:0xfebfa339e44c28e2aa9e62ea1027c9cb4e378605", "eip155:1/erc20:0x8ed97a637a790be1feff5e888d43629dc05408f6", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:BeGY8KqKxboEwRbJd1q9H2K829jS4Rc5dEyNMYXCbV5p", - "eip155:8453/erc20:0xb166e8b140d35d9d8226e40c09f757bac5a4d87d" + "eip155:8453/erc20:0xb166e8b140d35d9d8226e40c09f757bac5a4d87d", + "eip155:4663/erc20:0x241f3caad03db31137f641bef005a32176530024" ], "eip155:1/erc20:0x8de5b80a0c1b02fe4976851d030b36122dbb8624": [ "eip155:137/erc20:0x8de5b80a0c1b02fe4976851d030b36122dbb8624", @@ -6354,7 +6358,8 @@ ], "eip155:56/erc20:0x6bff4fb161347ad7de4a625ae5aa3a1ca7077819": [ "eip155:1/erc20:0xade00c28244d5ce17d72e40330b1c318cd12b7c3", - "eip155:56/erc20:0x6bff4fb161347ad7de4a625ae5aa3a1ca7077819" + "eip155:56/erc20:0x6bff4fb161347ad7de4a625ae5aa3a1ca7077819", + "eip155:4663/erc20:0xf82119ebd01eb6ab67105c9536a713d61a25cf9f" ], "eip155:1/erc20:0xad996a45fd2373ed0b10efa4a8ecb9de445a4302": [ "eip155:56/erc20:0x7269d98af4aa705e0b1a5d8512fadb4d45817d5a", @@ -6819,7 +6824,8 @@ ], "eip155:8453/erc20:0xf516562b703f46084eeb79afe58cc046572e56a7": [ "eip155:1/erc20:0xbc544207ff1c5b2bc47a35f745010b603b97e99e", - "eip155:8453/erc20:0xf516562b703f46084eeb79afe58cc046572e56a7" + "eip155:8453/erc20:0xf516562b703f46084eeb79afe58cc046572e56a7", + "eip155:4663/erc20:0x1e0aaaf3fdb5c0de3574d215e7081177ec0f96a3" ], "eip155:42161/erc20:0xbc33b4d48f76d17a1800afcb730e8a6aaada7fe5": [ "eip155:8453/erc20:0xbc33b4d48f76d17a1800afcb730e8a6aaada7fe5", @@ -6913,7 +6919,8 @@ "eip155:1/erc20:0xbe042e9d09cb588331ff911c2b46fd833a3e5bd6": [ "eip155:8453/erc20:0xb5068ad7e4ad8f7fe2fcf5abe2c043ab8866569c", "eip155:42161/erc20:0xef4a1d459d62dfd2ebb9c45b04f90f0a7ba1d56e", - "eip155:1/erc20:0xbe042e9d09cb588331ff911c2b46fd833a3e5bd6" + "eip155:1/erc20:0xbe042e9d09cb588331ff911c2b46fd833a3e5bd6", + "eip155:4663/erc20:0x2ea05472e1b7289004e5a1f6d959f6f2f3a6fecb" ], "eip155:8453/erc20:0xa26a4611b8313bbb25ccb1a9e227ecc536a2f8f7": [], "eip155:8453/erc20:0xc55e93c62874d8100dbd2dfe307edc1036ad5434": [ @@ -7050,7 +7057,8 @@ "eip155:57073/erc20:0x4200000000000000000000000000000000000006", "eip155:324/erc20:0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", "eip155:4326/erc20:0x4200000000000000000000000000000000000006", - "eip155:534352/erc20:0x5300000000000000000000000000000000000004" + "eip155:534352/erc20:0x5300000000000000000000000000000000000004", + "eip155:4663/erc20:0x0bd7d308f8e1639fab988df18a8011f41eacad73" ], "eip155:42161/erc20:0xea986d33ef8a20a96120ecc44dbdd49830192043": [ "eip155:56/erc20:0x3028b4395f98777123c7da327010c40f3c7cc4ef", @@ -8347,7 +8355,8 @@ "eip155:1/erc20:0xe343167631d89b6ffc58b88d6b7fb0228795491d": [ "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH", "eip155:1/erc20:0xe343167631d89b6ffc58b88d6b7fb0228795491d", - "eip155:57073/erc20:0xe343167631d89b6ffc58b88d6b7fb0228795491d" + "eip155:57073/erc20:0xe343167631d89b6ffc58b88d6b7fb0228795491d", + "eip155:4663/erc20:0x5fc5360d0400a0fd4f2af552add042d716f1d168" ], "eip155:56/erc20:0x790cfdc6ab2e0ee45a433aac5434f183be1f6a20": [ "eip155:1/erc20:0xe3818504c1b32bf1557b16c238b2e01fd3149c17", @@ -9243,7 +9252,8 @@ "eip155:1/erc20:0xfee293840d23b0b2de8c55e1cf7a9f01c157767c", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:A7n89LqW67HJKzJkdWZa2xojuK4N5GBKHz3dfjATCZPz", "eip155:42161/erc20:0x9f07f8a82cb1af1466252e505b7b7ddee103bc91", - "eip155:8453/erc20:0x4ed4e862860bed51a9570b96d89af5e1b0efefed" + "eip155:8453/erc20:0x4ed4e862860bed51a9570b96d89af5e1b0efefed", + "eip155:4663/erc20:0x0830a9dd26a04e959657ab6788d45f5725590c32" ], "eip155:56/erc20:0x0b33542240d6fa323c796749f6d6869fdb7f13ca": [], "eip155:42161/erc20:0xf3c091ed43de9c270593445163a41a876a0bb3dd": [ @@ -9271,7 +9281,8 @@ "eip155:480/slip44:60", "eip155:81457/slip44:60", "eip155:324/slip44:60", - "eip155:2741/slip44:60" + "eip155:2741/slip44:60", + "eip155:4663/slip44:60" ], "eip155:8453/erc20:0x22a2488fe295047ba13bd8cccdbc8361dbd8cf7c": [], "eip155:8453/erc20:0xba8cd87120aca631f59231f9fd6c5469bbee3440": [ @@ -15700,5 +15711,9 @@ "eip155:8453/erc20:0xab274df53b9ca19a9bf9d389fe63c71335fd6a52", "eip155:42161/erc20:0x37cad1518d70976245bb52aa4f34e0ba4aef6814", "eip155:43114/erc20:0x56be37ff55b186c9be2dca186519c96425ba3bd6" + ], + "eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7": [ + "eip155:1/erc20:0x87b65c4aaffa76881f9e96f3e7ed945ddfc3cd7a", + "eip155:4663/erc20:0x40858070814a57fdf33a613ae84fe0a8b4a874f7" ] } \ No newline at end of file diff --git a/public/generated/relatedAssetIndex.json.br b/public/generated/relatedAssetIndex.json.br index 832d5dbc6cd..6ead0034204 100644 Binary files a/public/generated/relatedAssetIndex.json.br and b/public/generated/relatedAssetIndex.json.br differ diff --git a/public/generated/relatedAssetIndex.json.gz b/public/generated/relatedAssetIndex.json.gz index b3c50e11d75..8a6650b28ed 100644 Binary files a/public/generated/relatedAssetIndex.json.gz and b/public/generated/relatedAssetIndex.json.gz differ diff --git a/scripts/generateAssetData/coingecko.ts b/scripts/generateAssetData/coingecko.ts index 8c83dbfeab8..26177f50bb3 100644 --- a/scripts/generateAssetData/coingecko.ts +++ b/scripts/generateAssetData/coingecko.ts @@ -29,6 +29,7 @@ import { plasmaChainId, plumeChainId, polygonChainId, + robinhoodChainId, scrollChainId, seiChainId, solanaChainId, @@ -73,6 +74,7 @@ import { plasma, plume, polygon, + robinhood, scroll, sei, solana, @@ -443,6 +445,14 @@ export async function getAssets(chainId: ChainId): Promise { explorerAddressLink: ton.explorerAddressLink, explorerTxLink: ton.explorerTxLink, } + case robinhoodChainId: + return { + assetNamespace: ASSET_NAMESPACE.erc20, + category: adapters.chainIdToCoingeckoAssetPlatform(chainId), + explorer: robinhood.explorer, + explorerAddressLink: robinhood.explorerAddressLink, + explorerTxLink: robinhood.explorerTxLink, + } default: throw new Error(`no coingecko token support for chainId: ${chainId}`) } diff --git a/scripts/generateAssetData/generateAssetData.ts b/scripts/generateAssetData/generateAssetData.ts index 6554fbd430e..ea85bb98a20 100644 --- a/scripts/generateAssetData/generateAssetData.ts +++ b/scripts/generateAssetData/generateAssetData.ts @@ -55,6 +55,7 @@ import { overrideAssets } from './overrides' import * as plasma from './plasma' import * as plume from './plume' import * as polygon from './polygon' +import * as robinhood from './robinhood' import * as scroll from './scroll' import * as sei from './sei' import * as solana from './solana' @@ -123,6 +124,7 @@ const generateAssetData = async () => { const suiAssets = await sui.getAssets() const tonAssets = await tonModule.getAssets() const nearAssets = await near.getAssets() + const robinhoodAssets = await robinhood.getAssets() // all assets, included assets to be blacklisted const unfilteredAssetData: Asset[] = [ @@ -178,6 +180,7 @@ const generateAssetData = async () => { ...suiAssets, ...tonAssets, ...nearAssets, + ...robinhoodAssets, ] // remove blacklisted assets diff --git a/scripts/generateAssetData/generateRelatedAssetIndex/generateChainRelatedAssetIndex.ts b/scripts/generateAssetData/generateRelatedAssetIndex/generateChainRelatedAssetIndex.ts index 2f0592b6878..1af5121f1fd 100644 --- a/scripts/generateAssetData/generateRelatedAssetIndex/generateChainRelatedAssetIndex.ts +++ b/scripts/generateAssetData/generateRelatedAssetIndex/generateChainRelatedAssetIndex.ts @@ -18,6 +18,7 @@ import { megaethAssetId, modeAssetId, optimismAssetId, + robinhoodAssetId, scrollAssetId, soneiumAssetId, sonicAssetId, @@ -78,6 +79,7 @@ const manualRelatedAssetIndex: Record = { worldChainAssetId, blastAssetId, zkSyncEraAssetId, + robinhoodAssetId, ], [foxAssetId]: [foxOnArbitrumOneAssetId], [starknetAssetId]: [ diff --git a/scripts/generateAssetData/generateRelatedAssetIndex/generateRelatedAssetIndex.ts b/scripts/generateAssetData/generateRelatedAssetIndex/generateRelatedAssetIndex.ts index 8c6b98e686b..8fe3994e7ae 100644 --- a/scripts/generateAssetData/generateRelatedAssetIndex/generateRelatedAssetIndex.ts +++ b/scripts/generateAssetData/generateRelatedAssetIndex/generateRelatedAssetIndex.ts @@ -19,6 +19,7 @@ import { megaethAssetId, modeAssetId, optimismAssetId, + robinhoodAssetId, scrollAssetId, soneiumAssetId, sonicAssetId, @@ -79,6 +80,7 @@ const manualRelatedAssetIndex: Record = { modeAssetId, soneiumAssetId, abstractAssetId, + robinhoodAssetId, ], [foxAssetId]: [foxOnArbitrumOneAssetId], [starknetAssetId]: [ diff --git a/scripts/generateAssetData/robinhood/index.ts b/scripts/generateAssetData/robinhood/index.ts new file mode 100644 index 00000000000..8dd9df5bffe --- /dev/null +++ b/scripts/generateAssetData/robinhood/index.ts @@ -0,0 +1,11 @@ +import { robinhoodChainId } from '@shapeshiftoss/caip' +import type { Asset } from '@shapeshiftoss/types' +import { robinhood, unfreeze } from '@shapeshiftoss/utils' + +import * as coingecko from '../coingecko' + +export const getAssets = async (): Promise => { + const assets = await coingecko.getAssets(robinhoodChainId) + + return [...assets, unfreeze(robinhood)] +} diff --git a/src/components/Layout/Header/GlobalSearch/GlobalSearchButton.tsx b/src/components/Layout/Header/GlobalSearch/GlobalSearchButton.tsx index 37e905c944e..43f71d49330 100644 --- a/src/components/Layout/Header/GlobalSearch/GlobalSearchButton.tsx +++ b/src/components/Layout/Header/GlobalSearch/GlobalSearchButton.tsx @@ -11,9 +11,6 @@ interface GlobalSearchButtonProps { isIconButton?: boolean } -const widthProp = { base: 'auto', lg: 'full' } -const displayProp1 = { base: 'flex', lg: 'none' } -const displayProp2 = { base: 'none', lg: 'flex' } const sxProp1 = { svg: { width: '18px', height: '18px' } } const searchIcon = @@ -50,14 +47,7 @@ export const GlobalSearchButton = memo(({ isIconButton = false }: GlobalSearchBu data-testid='global-search-button' /> ) : ( - - +