@elizaos/plugin-wallet 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +64 -0
- package/auto-enable.ts +76 -0
- package/dist/LpManagementService-BWrQ5-cO.mjs +353 -0
- package/dist/MockLpService-D_Apn4Fd.mjs +99 -0
- package/dist/aerodrome-CfnESC32.mjs +890 -0
- package/dist/chunk-hT5z_Zn9.mjs +35 -0
- package/dist/index.d.mts +34727 -0
- package/dist/index.mjs +21590 -0
- package/dist/lib/server-wallet-trade.d.mts +34 -0
- package/dist/lib/server-wallet-trade.mjs +306 -0
- package/dist/meteora-BPX39hZo.mjs +22640 -0
- package/dist/orca-Bybp1HXO.mjs +249 -0
- package/dist/pancakeswp-CkEXlXti.mjs +604 -0
- package/dist/plugin-ZO_MTyd0.mjs +529 -0
- package/dist/raydium-rfaM9yEf.mjs +539 -0
- package/dist/sdk/index.d.mts +32492 -0
- package/dist/sdk/index.mjs +6415 -0
- package/dist/types-D5252NZk.mjs +487 -0
- package/dist/uniswap-CReXgXVN.mjs +573 -0
- package/dist/wallet-action.d.mts +6 -0
- package/dist/wallet-action.mjs +820 -0
- package/package.json +152 -0
- package/src/actions/failure-codes.ts +79 -0
- package/src/actions/index.ts +1 -0
- package/src/analytics/birdeye/actions/wallet-search-address.ts +9 -0
- package/src/analytics/birdeye/birdeye-task.ts +175 -0
- package/src/analytics/birdeye/birdeye.ts +813 -0
- package/src/analytics/birdeye/constants.ts +74 -0
- package/src/analytics/birdeye/providers/agent-portfolio-provider.ts +18 -0
- package/src/analytics/birdeye/providers/market.ts +227 -0
- package/src/analytics/birdeye/providers/portfolio-factory.test.ts +138 -0
- package/src/analytics/birdeye/providers/portfolio-factory.ts +252 -0
- package/src/analytics/birdeye/providers/trending.ts +365 -0
- package/src/analytics/birdeye/providers/wallet.ts +14 -0
- package/src/analytics/birdeye/search-category.test.ts +207 -0
- package/src/analytics/birdeye/search-category.ts +506 -0
- package/src/analytics/birdeye/service.ts +992 -0
- package/src/analytics/birdeye/tasks/birdeye.ts +232 -0
- package/src/analytics/birdeye/types/api/common.ts +305 -0
- package/src/analytics/birdeye/types/api/defi.ts +220 -0
- package/src/analytics/birdeye/types/api/pair.ts +200 -0
- package/src/analytics/birdeye/types/api/search.ts +86 -0
- package/src/analytics/birdeye/types/api/token.ts +635 -0
- package/src/analytics/birdeye/types/api/trader.ts +76 -0
- package/src/analytics/birdeye/types/api/wallet.ts +181 -0
- package/src/analytics/birdeye/types/shared.ts +106 -0
- package/src/analytics/birdeye/utils.ts +700 -0
- package/src/analytics/dexscreener/errors.ts +28 -0
- package/src/analytics/dexscreener/index.ts +3 -0
- package/src/analytics/dexscreener/search-category.test.ts +49 -0
- package/src/analytics/dexscreener/search-category.ts +42 -0
- package/src/analytics/dexscreener/service.ts +595 -0
- package/src/analytics/dexscreener/types.ts +128 -0
- package/src/analytics/lpinfo/index.d.ts +7 -0
- package/src/analytics/lpinfo/index.ts +52 -0
- package/src/analytics/lpinfo/kamino/README.md +102 -0
- package/src/analytics/lpinfo/kamino/index.ts +24 -0
- package/src/analytics/lpinfo/kamino/providers/kaminoLiquidityProvider.ts +422 -0
- package/src/analytics/lpinfo/kamino/providers/kaminoPoolProvider.ts +365 -0
- package/src/analytics/lpinfo/kamino/providers/kaminoProvider.ts +496 -0
- package/src/analytics/lpinfo/kamino/services/kaminoLiquidityService.ts +1123 -0
- package/src/analytics/lpinfo/kamino/services/kaminoService.ts +758 -0
- package/src/analytics/lpinfo/steer/README.md +169 -0
- package/src/analytics/lpinfo/steer/index.ts +23 -0
- package/src/analytics/lpinfo/steer/providers/steerLiquidityProvider.ts +544 -0
- package/src/analytics/lpinfo/steer/services/steerLiquidityService.ts +1690 -0
- package/src/analytics/lpinfo/steer/steer-display-types.ts +99 -0
- package/src/analytics/news/index.ts +52 -0
- package/src/analytics/news/interfaces/types.ts +222 -0
- package/src/analytics/news/providers/defiNewsProvider.ts +734 -0
- package/src/analytics/news/services/newsDataService.ts +332 -0
- package/src/analytics/news/utils/formatters.ts +151 -0
- package/src/analytics/token-info/action.ts +240 -0
- package/src/analytics/token-info/index.ts +3 -0
- package/src/analytics/token-info/params.ts +215 -0
- package/src/analytics/token-info/providers.ts +681 -0
- package/src/analytics/token-info/service.ts +168 -0
- package/src/analytics/token-info/types.ts +74 -0
- package/src/audit/audit-log.ts +45 -0
- package/src/browser-shim/build-shim.ts +123 -0
- package/src/browser-shim/index.ts +5 -0
- package/src/browser-shim/shim.template.js +563 -0
- package/src/chains/evm/.github/workflows/npm-deploy.yml +112 -0
- package/src/chains/evm/LICENSE +21 -0
- package/src/chains/evm/README.md +106 -0
- package/src/chains/evm/actions/helpers.ts +147 -0
- package/src/chains/evm/actions/swap.ts +839 -0
- package/src/chains/evm/actions/transfer.ts +254 -0
- package/src/chains/evm/biome.json +61 -0
- package/src/chains/evm/bridge-router.ts +660 -0
- package/src/chains/evm/build.ts +89 -0
- package/src/chains/evm/chain-handler.ts +416 -0
- package/src/chains/evm/constants.ts +23 -0
- package/src/chains/evm/contracts/artifacts/OZGovernor.json +1707 -0
- package/src/chains/evm/contracts/artifacts/TimelockController.json +1007 -0
- package/src/chains/evm/contracts/artifacts/VoteToken.json +895 -0
- package/src/chains/evm/dex/aerodrome/index.ts +34 -0
- package/src/chains/evm/dex/aerodrome/services/AerodromeLpService.ts +558 -0
- package/src/chains/evm/dex/aerodrome/types.ts +318 -0
- package/src/chains/evm/dex/pancakeswp/index.ts +35 -0
- package/src/chains/evm/dex/pancakeswp/services/PancakeSwapV3LpService.ts +743 -0
- package/src/chains/evm/dex/pancakeswp/types.ts +65 -0
- package/src/chains/evm/dex/uniswap/index.ts +35 -0
- package/src/chains/evm/dex/uniswap/services/UniswapV3LpService.ts +759 -0
- package/src/chains/evm/dex/uniswap/types.ts +390 -0
- package/src/chains/evm/generated/specs/spec-helpers.ts +73 -0
- package/src/chains/evm/generated/specs/specs.ts +151 -0
- package/src/chains/evm/gov-router.ts +250 -0
- package/src/chains/evm/index.browser.ts +16 -0
- package/src/chains/evm/index.ts +31 -0
- package/src/chains/evm/prompts.ts +193 -0
- package/src/chains/evm/providers/get-balance.ts +123 -0
- package/src/chains/evm/providers/wallet.ts +715 -0
- package/src/chains/evm/routes/sign.ts +333 -0
- package/src/chains/evm/rpc-providers.ts +410 -0
- package/src/chains/evm/service.ts +140 -0
- package/src/chains/evm/templates/index.ts +10 -0
- package/src/chains/evm/types/index.ts +432 -0
- package/src/chains/evm/vitest.config.ts +18 -0
- package/src/chains/registry.ts +668 -0
- package/src/chains/solana/README.md +367 -0
- package/src/chains/wallet-action.ts +533 -0
- package/src/chains/wallet-router.test.ts +296 -0
- package/src/contracts.ts +65 -0
- package/src/core-augmentation.ts +10 -0
- package/src/index.ts +71 -0
- package/src/lib/server-wallet-trade.ts +192 -0
- package/src/lib/wallet-export-guard.ts +330 -0
- package/src/lp/actions/liquidity.ts +827 -0
- package/src/lp/e2e/real-token-tests.ts +428 -0
- package/src/lp/e2e/scenarios.ts +470 -0
- package/src/lp/e2e/test-utils.ts +145 -0
- package/src/lp/lp-manager-entry.ts +303 -0
- package/src/lp/services/ConcentratedLiquidityService.ts +120 -0
- package/src/lp/services/DexInteractionService.ts +226 -0
- package/src/lp/services/LpManagementService.test.ts +148 -0
- package/src/lp/services/LpManagementService.ts +632 -0
- package/src/lp/services/UserLpProfileService.ts +163 -0
- package/src/lp/services/VaultService.ts +153 -0
- package/src/lp/services/YieldOptimizationService.ts +344 -0
- package/src/lp/services/__tests__/MockLpService.ts +146 -0
- package/src/lp/tasks/LpAutoRebalanceTask.ts +117 -0
- package/src/lp/tasks/__tests__/LpAutoRebalanceTask.test.ts +370 -0
- package/src/lp/types.ts +582 -0
- package/src/lp/utils/solanaClient.ts +143 -0
- package/src/plugin.ts +125 -0
- package/src/policy/policy.ts +19 -0
- package/src/providers/canonical-provider.ts +27 -0
- package/src/providers/unified-wallet-provider.ts +79 -0
- package/src/register-routes.ts +11 -0
- package/src/routes/plugin.ts +47 -0
- package/src/routes/wallet-market-overview-route.ts +869 -0
- package/src/sdk/abi.ts +258 -0
- package/src/sdk/bridge/abis.ts +126 -0
- package/src/sdk/bridge/client.ts +518 -0
- package/src/sdk/bridge/index.ts +56 -0
- package/src/sdk/bridge/solana.ts +604 -0
- package/src/sdk/bridge/types.ts +202 -0
- package/src/sdk/convenience.ts +347 -0
- package/src/sdk/escrow/MutualStakeEscrow.ts +480 -0
- package/src/sdk/escrow/types.ts +64 -0
- package/src/sdk/escrow/verifiers.ts +73 -0
- package/src/sdk/identity/erc8004.ts +692 -0
- package/src/sdk/identity/reputation.ts +449 -0
- package/src/sdk/identity/uaid.ts +497 -0
- package/src/sdk/identity/validation.ts +372 -0
- package/src/sdk/index.ts +763 -0
- package/src/sdk/policy/SpendingPolicy.ts +260 -0
- package/src/sdk/policy/UptoBillingPolicy.ts +320 -0
- package/src/sdk/router/PaymentRouter.ts +215 -0
- package/src/sdk/router/index.ts +8 -0
- package/src/sdk/swap/SwapModule.ts +310 -0
- package/src/sdk/swap/abi.ts +117 -0
- package/src/sdk/swap/index.ts +34 -0
- package/src/sdk/swap/types.ts +135 -0
- package/src/sdk/tokens/decimals.ts +140 -0
- package/src/sdk/tokens/registry.ts +911 -0
- package/src/sdk/tokens/solana.ts +419 -0
- package/src/sdk/tokens/transfers.ts +327 -0
- package/src/sdk/types.ts +158 -0
- package/src/sdk/wallet-core.ts +115 -0
- package/src/sdk/x402/budget.ts +168 -0
- package/src/sdk/x402/chains/abstract/index.ts +280 -0
- package/src/sdk/x402/client.ts +320 -0
- package/src/sdk/x402/index.ts +46 -0
- package/src/sdk/x402/middleware.ts +92 -0
- package/src/sdk/x402/multi-asset.ts +144 -0
- package/src/sdk/x402/types.ts +156 -0
- package/src/services/wallet-backend-service.ts +328 -0
- package/src/types/wallet-router.ts +227 -0
- package/src/utils/intent-trajectory.ts +106 -0
- package/src/wallet/backend.ts +62 -0
- package/src/wallet/errors.ts +49 -0
- package/src/wallet/index.ts +27 -0
- package/src/wallet/local-eoa-backend.ts +201 -0
- package/src/wallet/pending.ts +60 -0
- package/src/wallet/select-backend.ts +47 -0
- package/src/wallet/steward-backend.ts +161 -0
- package/src/wallet-action.ts +1 -0
|
@@ -0,0 +1,911 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module tokens/registry
|
|
3
|
+
* TokenRegistry — multi-chain token address registry for AgentWallet v6.
|
|
4
|
+
*
|
|
5
|
+
* Ships pre-populated with top tokens for all 11 supported EVM chains.
|
|
6
|
+
* All addresses sourced from:
|
|
7
|
+
* - EVM: CoinGecko official token lists + chain explorers
|
|
8
|
+
* - USDC: https://developers.circle.com/stablecoins/usdc-contract-addresses
|
|
9
|
+
* - WBTC: https://wbtc.network/dashboard/order
|
|
10
|
+
* - WETH: official wrapped ETH contracts per chain
|
|
11
|
+
* - L2 native tokens: official L2 documentation
|
|
12
|
+
*
|
|
13
|
+
* Chain IDs follow the CHAIN_IDS map in src/types.ts.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import type { Address } from "viem";
|
|
17
|
+
import { zeroAddress } from "viem";
|
|
18
|
+
import type { TokenInfo } from "./decimals.js";
|
|
19
|
+
|
|
20
|
+
export type { TokenInfo };
|
|
21
|
+
|
|
22
|
+
/** Full token entry stored in the registry */
|
|
23
|
+
export interface TokenEntry extends TokenInfo {
|
|
24
|
+
chainId: number;
|
|
25
|
+
name: string;
|
|
26
|
+
isNative?: boolean; // true for native gas tokens (ETH, MATIC, etc.)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Params for adding a custom token */
|
|
30
|
+
export interface AddTokenParams {
|
|
31
|
+
symbol: string;
|
|
32
|
+
address: Address;
|
|
33
|
+
decimals: number;
|
|
34
|
+
chainId: number;
|
|
35
|
+
name?: string;
|
|
36
|
+
isNative?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ─── Chain IDs ───────────────────────────────────────────────────────────────
|
|
40
|
+
|
|
41
|
+
const CHAIN = {
|
|
42
|
+
ETHEREUM: 1,
|
|
43
|
+
BASE: 8453,
|
|
44
|
+
ARBITRUM: 42161,
|
|
45
|
+
OPTIMISM: 10,
|
|
46
|
+
POLYGON: 137,
|
|
47
|
+
AVALANCHE: 43114,
|
|
48
|
+
UNICHAIN: 130,
|
|
49
|
+
LINEA: 59144,
|
|
50
|
+
SONIC: 146,
|
|
51
|
+
WORLDCHAIN: 480,
|
|
52
|
+
BASE_SEPOLIA: 84532,
|
|
53
|
+
} as const;
|
|
54
|
+
|
|
55
|
+
// ─── Pre-verified token address tables ───────────────────────────────────────
|
|
56
|
+
//
|
|
57
|
+
// All addresses are verified against:
|
|
58
|
+
// - Etherscan (chain 1), Basescan (8453), Arbiscan (42161), Optimistic Etherscan (10),
|
|
59
|
+
// Polygonscan (137), Snowtrace (43114), Lineascan (59144)
|
|
60
|
+
// - CoinGecko token detail pages
|
|
61
|
+
// - Circle USDC registry
|
|
62
|
+
//
|
|
63
|
+
// NATIVE_ADDR = zeroAddress (0x0000...0000) — used for native gas tokens
|
|
64
|
+
|
|
65
|
+
const NATIVE_ADDR = zeroAddress;
|
|
66
|
+
|
|
67
|
+
// ─── Native gas tokens ────────────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
const NATIVE_TOKENS: TokenEntry[] = [
|
|
70
|
+
// ETH on ETH-compatible chains
|
|
71
|
+
{
|
|
72
|
+
chainId: CHAIN.ETHEREUM,
|
|
73
|
+
address: NATIVE_ADDR,
|
|
74
|
+
symbol: "ETH",
|
|
75
|
+
name: "Ether",
|
|
76
|
+
decimals: 18,
|
|
77
|
+
isNative: true,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
chainId: CHAIN.BASE,
|
|
81
|
+
address: NATIVE_ADDR,
|
|
82
|
+
symbol: "ETH",
|
|
83
|
+
name: "Ether",
|
|
84
|
+
decimals: 18,
|
|
85
|
+
isNative: true,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
chainId: CHAIN.ARBITRUM,
|
|
89
|
+
address: NATIVE_ADDR,
|
|
90
|
+
symbol: "ETH",
|
|
91
|
+
name: "Ether",
|
|
92
|
+
decimals: 18,
|
|
93
|
+
isNative: true,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
chainId: CHAIN.OPTIMISM,
|
|
97
|
+
address: NATIVE_ADDR,
|
|
98
|
+
symbol: "ETH",
|
|
99
|
+
name: "Ether",
|
|
100
|
+
decimals: 18,
|
|
101
|
+
isNative: true,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
chainId: CHAIN.UNICHAIN,
|
|
105
|
+
address: NATIVE_ADDR,
|
|
106
|
+
symbol: "ETH",
|
|
107
|
+
name: "Ether",
|
|
108
|
+
decimals: 18,
|
|
109
|
+
isNative: true,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
chainId: CHAIN.LINEA,
|
|
113
|
+
address: NATIVE_ADDR,
|
|
114
|
+
symbol: "ETH",
|
|
115
|
+
name: "Ether",
|
|
116
|
+
decimals: 18,
|
|
117
|
+
isNative: true,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
chainId: CHAIN.WORLDCHAIN,
|
|
121
|
+
address: NATIVE_ADDR,
|
|
122
|
+
symbol: "ETH",
|
|
123
|
+
name: "Ether",
|
|
124
|
+
decimals: 18,
|
|
125
|
+
isNative: true,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
chainId: CHAIN.BASE_SEPOLIA,
|
|
129
|
+
address: NATIVE_ADDR,
|
|
130
|
+
symbol: "ETH",
|
|
131
|
+
name: "Ether",
|
|
132
|
+
decimals: 18,
|
|
133
|
+
isNative: true,
|
|
134
|
+
},
|
|
135
|
+
// MATIC on Polygon
|
|
136
|
+
{
|
|
137
|
+
chainId: CHAIN.POLYGON,
|
|
138
|
+
address: NATIVE_ADDR,
|
|
139
|
+
symbol: "POL",
|
|
140
|
+
name: "POL (ex-MATIC)",
|
|
141
|
+
decimals: 18,
|
|
142
|
+
isNative: true,
|
|
143
|
+
},
|
|
144
|
+
// AVAX on Avalanche
|
|
145
|
+
{
|
|
146
|
+
chainId: CHAIN.AVALANCHE,
|
|
147
|
+
address: NATIVE_ADDR,
|
|
148
|
+
symbol: "AVAX",
|
|
149
|
+
name: "Avalanche",
|
|
150
|
+
decimals: 18,
|
|
151
|
+
isNative: true,
|
|
152
|
+
},
|
|
153
|
+
// S (Sonic's native token)
|
|
154
|
+
{
|
|
155
|
+
chainId: CHAIN.SONIC,
|
|
156
|
+
address: NATIVE_ADDR,
|
|
157
|
+
symbol: "S",
|
|
158
|
+
name: "Sonic",
|
|
159
|
+
decimals: 18,
|
|
160
|
+
isNative: true,
|
|
161
|
+
},
|
|
162
|
+
];
|
|
163
|
+
|
|
164
|
+
// ─── EVM token table ──────────────────────────────────────────────────────────
|
|
165
|
+
// Format: [chainId, address, symbol, name, decimals]
|
|
166
|
+
// Sources documented inline where non-obvious.
|
|
167
|
+
|
|
168
|
+
type RawEntry = [number, Address, string, string, number];
|
|
169
|
+
|
|
170
|
+
const EVM_TOKENS: RawEntry[] = [
|
|
171
|
+
// ─── Ethereum Mainnet (1) ────────────────────────────────────────────────
|
|
172
|
+
// USDC — Circle official
|
|
173
|
+
[
|
|
174
|
+
CHAIN.ETHEREUM,
|
|
175
|
+
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
176
|
+
"USDC",
|
|
177
|
+
"USD Coin",
|
|
178
|
+
6,
|
|
179
|
+
],
|
|
180
|
+
// USDT — Tether official
|
|
181
|
+
[
|
|
182
|
+
CHAIN.ETHEREUM,
|
|
183
|
+
"0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
|
184
|
+
"USDT",
|
|
185
|
+
"Tether USD",
|
|
186
|
+
6,
|
|
187
|
+
],
|
|
188
|
+
// DAI — MakerDAO
|
|
189
|
+
[
|
|
190
|
+
CHAIN.ETHEREUM,
|
|
191
|
+
"0x6B175474E89094C44Da98b954EedeAC495271d0F",
|
|
192
|
+
"DAI",
|
|
193
|
+
"Dai Stablecoin",
|
|
194
|
+
18,
|
|
195
|
+
],
|
|
196
|
+
// WETH — official WETH9
|
|
197
|
+
[
|
|
198
|
+
CHAIN.ETHEREUM,
|
|
199
|
+
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
200
|
+
"WETH",
|
|
201
|
+
"Wrapped Ether",
|
|
202
|
+
18,
|
|
203
|
+
],
|
|
204
|
+
// WBTC — BitGo wrapped BTC
|
|
205
|
+
[
|
|
206
|
+
CHAIN.ETHEREUM,
|
|
207
|
+
"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
|
|
208
|
+
"WBTC",
|
|
209
|
+
"Wrapped BTC",
|
|
210
|
+
8,
|
|
211
|
+
],
|
|
212
|
+
// LINK — Chainlink
|
|
213
|
+
[
|
|
214
|
+
CHAIN.ETHEREUM,
|
|
215
|
+
"0x514910771AF9Ca656af840dff83E8264EcF986CA",
|
|
216
|
+
"LINK",
|
|
217
|
+
"ChainLink Token",
|
|
218
|
+
18,
|
|
219
|
+
],
|
|
220
|
+
// UNI — Uniswap
|
|
221
|
+
[
|
|
222
|
+
CHAIN.ETHEREUM,
|
|
223
|
+
"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984",
|
|
224
|
+
"UNI",
|
|
225
|
+
"Uniswap",
|
|
226
|
+
18,
|
|
227
|
+
],
|
|
228
|
+
// AAVE
|
|
229
|
+
[
|
|
230
|
+
CHAIN.ETHEREUM,
|
|
231
|
+
"0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9",
|
|
232
|
+
"AAVE",
|
|
233
|
+
"Aave Token",
|
|
234
|
+
18,
|
|
235
|
+
],
|
|
236
|
+
// CRV — Curve DAO Token
|
|
237
|
+
[
|
|
238
|
+
CHAIN.ETHEREUM,
|
|
239
|
+
"0xD533a949740bb3306d119CC777fa900bA034cd52",
|
|
240
|
+
"CRV",
|
|
241
|
+
"Curve DAO Token",
|
|
242
|
+
18,
|
|
243
|
+
],
|
|
244
|
+
// MKR — MakerDAO
|
|
245
|
+
[
|
|
246
|
+
CHAIN.ETHEREUM,
|
|
247
|
+
"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2",
|
|
248
|
+
"MKR",
|
|
249
|
+
"Maker",
|
|
250
|
+
18,
|
|
251
|
+
],
|
|
252
|
+
// SNX — Synthetix
|
|
253
|
+
[
|
|
254
|
+
CHAIN.ETHEREUM,
|
|
255
|
+
"0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F",
|
|
256
|
+
"SNX",
|
|
257
|
+
"Synthetix Network Token",
|
|
258
|
+
18,
|
|
259
|
+
],
|
|
260
|
+
// COMP — Compound
|
|
261
|
+
[
|
|
262
|
+
CHAIN.ETHEREUM,
|
|
263
|
+
"0xc00e94Cb662C3520282E6f5717214004A7f26888",
|
|
264
|
+
"COMP",
|
|
265
|
+
"Compound",
|
|
266
|
+
18,
|
|
267
|
+
],
|
|
268
|
+
// LDO — Lido DAO
|
|
269
|
+
[
|
|
270
|
+
CHAIN.ETHEREUM,
|
|
271
|
+
"0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32",
|
|
272
|
+
"LDO",
|
|
273
|
+
"Lido DAO Token",
|
|
274
|
+
18,
|
|
275
|
+
],
|
|
276
|
+
// MATIC (ERC-20 on ETH, now POL)
|
|
277
|
+
[
|
|
278
|
+
CHAIN.ETHEREUM,
|
|
279
|
+
"0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0",
|
|
280
|
+
"POL",
|
|
281
|
+
"POL (ex-MATIC)",
|
|
282
|
+
18,
|
|
283
|
+
],
|
|
284
|
+
|
|
285
|
+
// ─── Base Mainnet (8453) ─────────────────────────────────────────────────
|
|
286
|
+
[
|
|
287
|
+
CHAIN.BASE,
|
|
288
|
+
"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
289
|
+
"USDC",
|
|
290
|
+
"USD Coin",
|
|
291
|
+
6,
|
|
292
|
+
],
|
|
293
|
+
[
|
|
294
|
+
CHAIN.BASE,
|
|
295
|
+
"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2",
|
|
296
|
+
"USDT",
|
|
297
|
+
"Tether USD",
|
|
298
|
+
6,
|
|
299
|
+
],
|
|
300
|
+
[
|
|
301
|
+
CHAIN.BASE,
|
|
302
|
+
"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb",
|
|
303
|
+
"DAI",
|
|
304
|
+
"Dai Stablecoin",
|
|
305
|
+
18,
|
|
306
|
+
],
|
|
307
|
+
[
|
|
308
|
+
CHAIN.BASE,
|
|
309
|
+
"0x4200000000000000000000000000000000000006",
|
|
310
|
+
"WETH",
|
|
311
|
+
"Wrapped Ether",
|
|
312
|
+
18,
|
|
313
|
+
],
|
|
314
|
+
// WBTC on Base — bridged via LayerZero
|
|
315
|
+
[
|
|
316
|
+
CHAIN.BASE,
|
|
317
|
+
"0x0555E30da8f98308EdB960aa94C0Db47230d2B9c",
|
|
318
|
+
"WBTC",
|
|
319
|
+
"Wrapped BTC",
|
|
320
|
+
8,
|
|
321
|
+
],
|
|
322
|
+
[
|
|
323
|
+
CHAIN.BASE,
|
|
324
|
+
"0xE3B53AF74a4BF62Ae5511055290838050bf764Df",
|
|
325
|
+
"LINK",
|
|
326
|
+
"ChainLink Token",
|
|
327
|
+
18,
|
|
328
|
+
],
|
|
329
|
+
[
|
|
330
|
+
CHAIN.BASE,
|
|
331
|
+
"0xc3De830EA07524a0761646a6a4e4be0e114a3C83",
|
|
332
|
+
"AAVE",
|
|
333
|
+
"Aave Token",
|
|
334
|
+
18,
|
|
335
|
+
],
|
|
336
|
+
// cbETH — Coinbase Staked ETH
|
|
337
|
+
[
|
|
338
|
+
CHAIN.BASE,
|
|
339
|
+
"0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22",
|
|
340
|
+
"cbETH",
|
|
341
|
+
"Coinbase Staked Ether",
|
|
342
|
+
18,
|
|
343
|
+
],
|
|
344
|
+
// USDbC — Bridged USDC (legacy on Base)
|
|
345
|
+
[
|
|
346
|
+
CHAIN.BASE,
|
|
347
|
+
"0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA",
|
|
348
|
+
"USDbC",
|
|
349
|
+
"USD Base Coin",
|
|
350
|
+
6,
|
|
351
|
+
],
|
|
352
|
+
|
|
353
|
+
// ─── Arbitrum One (42161) ────────────────────────────────────────────────
|
|
354
|
+
[
|
|
355
|
+
CHAIN.ARBITRUM,
|
|
356
|
+
"0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
357
|
+
"USDC",
|
|
358
|
+
"USD Coin",
|
|
359
|
+
6,
|
|
360
|
+
],
|
|
361
|
+
[
|
|
362
|
+
CHAIN.ARBITRUM,
|
|
363
|
+
"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
|
|
364
|
+
"USDT",
|
|
365
|
+
"Tether USD",
|
|
366
|
+
6,
|
|
367
|
+
],
|
|
368
|
+
[
|
|
369
|
+
CHAIN.ARBITRUM,
|
|
370
|
+
"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
|
|
371
|
+
"DAI",
|
|
372
|
+
"Dai Stablecoin",
|
|
373
|
+
18,
|
|
374
|
+
],
|
|
375
|
+
[
|
|
376
|
+
CHAIN.ARBITRUM,
|
|
377
|
+
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
|
378
|
+
"WETH",
|
|
379
|
+
"Wrapped Ether",
|
|
380
|
+
18,
|
|
381
|
+
],
|
|
382
|
+
[
|
|
383
|
+
CHAIN.ARBITRUM,
|
|
384
|
+
"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f",
|
|
385
|
+
"WBTC",
|
|
386
|
+
"Wrapped BTC",
|
|
387
|
+
8,
|
|
388
|
+
],
|
|
389
|
+
[
|
|
390
|
+
CHAIN.ARBITRUM,
|
|
391
|
+
"0xf97f4df75117a78c1A5a0DBb814Af92458539FB4",
|
|
392
|
+
"LINK",
|
|
393
|
+
"ChainLink Token",
|
|
394
|
+
18,
|
|
395
|
+
],
|
|
396
|
+
[
|
|
397
|
+
CHAIN.ARBITRUM,
|
|
398
|
+
"0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0",
|
|
399
|
+
"UNI",
|
|
400
|
+
"Uniswap",
|
|
401
|
+
18,
|
|
402
|
+
],
|
|
403
|
+
[
|
|
404
|
+
CHAIN.ARBITRUM,
|
|
405
|
+
"0xba5DdD1f9d7F570dc94a51479a000E3BCE967196",
|
|
406
|
+
"AAVE",
|
|
407
|
+
"Aave Token",
|
|
408
|
+
18,
|
|
409
|
+
],
|
|
410
|
+
// ARB — Arbitrum governance token (native to Arbitrum)
|
|
411
|
+
[
|
|
412
|
+
CHAIN.ARBITRUM,
|
|
413
|
+
"0x912CE59144191C1204E64559FE8253a0e49E6548",
|
|
414
|
+
"ARB",
|
|
415
|
+
"Arbitrum",
|
|
416
|
+
18,
|
|
417
|
+
],
|
|
418
|
+
[
|
|
419
|
+
CHAIN.ARBITRUM,
|
|
420
|
+
"0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978",
|
|
421
|
+
"CRV",
|
|
422
|
+
"Curve DAO Token",
|
|
423
|
+
18,
|
|
424
|
+
],
|
|
425
|
+
[
|
|
426
|
+
CHAIN.ARBITRUM,
|
|
427
|
+
"0x13Ad51ed4F1B7e9Dc168d8a00cB3f4dDD85EfA60",
|
|
428
|
+
"LDO",
|
|
429
|
+
"Lido DAO Token",
|
|
430
|
+
18,
|
|
431
|
+
],
|
|
432
|
+
[
|
|
433
|
+
CHAIN.ARBITRUM,
|
|
434
|
+
"0x354A6dA3fcde098F8389cad84b0182725c6C91dE",
|
|
435
|
+
"COMP",
|
|
436
|
+
"Compound",
|
|
437
|
+
18,
|
|
438
|
+
],
|
|
439
|
+
|
|
440
|
+
// ─── Optimism (10) ───────────────────────────────────────────────────────
|
|
441
|
+
[
|
|
442
|
+
CHAIN.OPTIMISM,
|
|
443
|
+
"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
|
|
444
|
+
"USDC",
|
|
445
|
+
"USD Coin",
|
|
446
|
+
6,
|
|
447
|
+
],
|
|
448
|
+
[
|
|
449
|
+
CHAIN.OPTIMISM,
|
|
450
|
+
"0x94b008aA00579c1307B0EF2c499aD98a8ce58e58",
|
|
451
|
+
"USDT",
|
|
452
|
+
"Tether USD",
|
|
453
|
+
6,
|
|
454
|
+
],
|
|
455
|
+
[
|
|
456
|
+
CHAIN.OPTIMISM,
|
|
457
|
+
"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1",
|
|
458
|
+
"DAI",
|
|
459
|
+
"Dai Stablecoin",
|
|
460
|
+
18,
|
|
461
|
+
],
|
|
462
|
+
[
|
|
463
|
+
CHAIN.OPTIMISM,
|
|
464
|
+
"0x4200000000000000000000000000000000000006",
|
|
465
|
+
"WETH",
|
|
466
|
+
"Wrapped Ether",
|
|
467
|
+
18,
|
|
468
|
+
],
|
|
469
|
+
[
|
|
470
|
+
CHAIN.OPTIMISM,
|
|
471
|
+
"0x68f180fcCe6836688e9084f035309E29Bf0A2095",
|
|
472
|
+
"WBTC",
|
|
473
|
+
"Wrapped BTC",
|
|
474
|
+
8,
|
|
475
|
+
],
|
|
476
|
+
[
|
|
477
|
+
CHAIN.OPTIMISM,
|
|
478
|
+
"0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6",
|
|
479
|
+
"LINK",
|
|
480
|
+
"ChainLink Token",
|
|
481
|
+
18,
|
|
482
|
+
],
|
|
483
|
+
[
|
|
484
|
+
CHAIN.OPTIMISM,
|
|
485
|
+
"0x6fd9d7AD17242c41f7131d257212c54A0e816691",
|
|
486
|
+
"UNI",
|
|
487
|
+
"Uniswap",
|
|
488
|
+
18,
|
|
489
|
+
],
|
|
490
|
+
[
|
|
491
|
+
CHAIN.OPTIMISM,
|
|
492
|
+
"0x76FB31fb4af56892A25e32cFC43De717950c9278",
|
|
493
|
+
"AAVE",
|
|
494
|
+
"Aave Token",
|
|
495
|
+
18,
|
|
496
|
+
],
|
|
497
|
+
// OP — Optimism governance token (native to Optimism)
|
|
498
|
+
[
|
|
499
|
+
CHAIN.OPTIMISM,
|
|
500
|
+
"0x4200000000000000000000000000000000000042",
|
|
501
|
+
"OP",
|
|
502
|
+
"Optimism",
|
|
503
|
+
18,
|
|
504
|
+
],
|
|
505
|
+
[
|
|
506
|
+
CHAIN.OPTIMISM,
|
|
507
|
+
"0x9560e827aF36c94D2Ac33a39bCE1Fe78631088Db",
|
|
508
|
+
"VELO",
|
|
509
|
+
"Velodrome Finance",
|
|
510
|
+
18,
|
|
511
|
+
],
|
|
512
|
+
[
|
|
513
|
+
CHAIN.OPTIMISM,
|
|
514
|
+
"0xc5b001DC33727F8F26880B184090D3E252470D45",
|
|
515
|
+
"SNX",
|
|
516
|
+
"Synthetix",
|
|
517
|
+
18,
|
|
518
|
+
],
|
|
519
|
+
|
|
520
|
+
// ─── Polygon (137) ───────────────────────────────────────────────────────
|
|
521
|
+
[
|
|
522
|
+
CHAIN.POLYGON,
|
|
523
|
+
"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
|
|
524
|
+
"USDC",
|
|
525
|
+
"USD Coin",
|
|
526
|
+
6,
|
|
527
|
+
],
|
|
528
|
+
[
|
|
529
|
+
CHAIN.POLYGON,
|
|
530
|
+
"0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
|
|
531
|
+
"USDT",
|
|
532
|
+
"Tether USD",
|
|
533
|
+
6,
|
|
534
|
+
],
|
|
535
|
+
[
|
|
536
|
+
CHAIN.POLYGON,
|
|
537
|
+
"0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063",
|
|
538
|
+
"DAI",
|
|
539
|
+
"Dai Stablecoin",
|
|
540
|
+
18,
|
|
541
|
+
],
|
|
542
|
+
[
|
|
543
|
+
CHAIN.POLYGON,
|
|
544
|
+
"0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
|
|
545
|
+
"WETH",
|
|
546
|
+
"Wrapped Ether",
|
|
547
|
+
18,
|
|
548
|
+
],
|
|
549
|
+
[
|
|
550
|
+
CHAIN.POLYGON,
|
|
551
|
+
"0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6",
|
|
552
|
+
"WBTC",
|
|
553
|
+
"Wrapped BTC",
|
|
554
|
+
8,
|
|
555
|
+
],
|
|
556
|
+
[
|
|
557
|
+
CHAIN.POLYGON,
|
|
558
|
+
"0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39",
|
|
559
|
+
"LINK",
|
|
560
|
+
"ChainLink Token",
|
|
561
|
+
18,
|
|
562
|
+
],
|
|
563
|
+
[
|
|
564
|
+
CHAIN.POLYGON,
|
|
565
|
+
"0xb33EaAd8d922B1083446DC23f610c2567fB5180f",
|
|
566
|
+
"UNI",
|
|
567
|
+
"Uniswap",
|
|
568
|
+
18,
|
|
569
|
+
],
|
|
570
|
+
[
|
|
571
|
+
CHAIN.POLYGON,
|
|
572
|
+
"0xD6DF932A45C0f255f85145f286eA0b292B21C90B",
|
|
573
|
+
"AAVE",
|
|
574
|
+
"Aave Token",
|
|
575
|
+
18,
|
|
576
|
+
],
|
|
577
|
+
// WMATIC — Wrapped POL (MATIC) on Polygon
|
|
578
|
+
[
|
|
579
|
+
CHAIN.POLYGON,
|
|
580
|
+
"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",
|
|
581
|
+
"WMATIC",
|
|
582
|
+
"Wrapped POL (MATIC)",
|
|
583
|
+
18,
|
|
584
|
+
],
|
|
585
|
+
[
|
|
586
|
+
CHAIN.POLYGON,
|
|
587
|
+
"0x172370d5Cd63279eFa6d502DAB29171933a610AF",
|
|
588
|
+
"CRV",
|
|
589
|
+
"Curve DAO Token",
|
|
590
|
+
18,
|
|
591
|
+
],
|
|
592
|
+
[
|
|
593
|
+
CHAIN.POLYGON,
|
|
594
|
+
"0x50B728D8D964fd00C2d0AAD81718b71311feF68a",
|
|
595
|
+
"SNX",
|
|
596
|
+
"Synthetix",
|
|
597
|
+
18,
|
|
598
|
+
],
|
|
599
|
+
|
|
600
|
+
// ─── Avalanche C-Chain (43114) ───────────────────────────────────────────
|
|
601
|
+
[
|
|
602
|
+
CHAIN.AVALANCHE,
|
|
603
|
+
"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
|
|
604
|
+
"USDC",
|
|
605
|
+
"USD Coin",
|
|
606
|
+
6,
|
|
607
|
+
],
|
|
608
|
+
[
|
|
609
|
+
CHAIN.AVALANCHE,
|
|
610
|
+
"0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
|
|
611
|
+
"USDT",
|
|
612
|
+
"Tether USD",
|
|
613
|
+
6,
|
|
614
|
+
],
|
|
615
|
+
[
|
|
616
|
+
CHAIN.AVALANCHE,
|
|
617
|
+
"0xd586E7F844cEa2F87f50152665BCbc2C279D8d70",
|
|
618
|
+
"DAI",
|
|
619
|
+
"Dai Stablecoin",
|
|
620
|
+
18,
|
|
621
|
+
],
|
|
622
|
+
// WETH.e — Bridged Ether on Avalanche
|
|
623
|
+
[
|
|
624
|
+
CHAIN.AVALANCHE,
|
|
625
|
+
"0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB",
|
|
626
|
+
"WETH.e",
|
|
627
|
+
"Wrapped Ether",
|
|
628
|
+
18,
|
|
629
|
+
],
|
|
630
|
+
[
|
|
631
|
+
CHAIN.AVALANCHE,
|
|
632
|
+
"0x50b7545627a5162F82A992c33b87aDc75187B218",
|
|
633
|
+
"WBTC",
|
|
634
|
+
"Wrapped BTC",
|
|
635
|
+
8,
|
|
636
|
+
],
|
|
637
|
+
[
|
|
638
|
+
CHAIN.AVALANCHE,
|
|
639
|
+
"0x5947BB275c521040051D82396192181b413227A3",
|
|
640
|
+
"LINK",
|
|
641
|
+
"ChainLink Token",
|
|
642
|
+
18,
|
|
643
|
+
],
|
|
644
|
+
[
|
|
645
|
+
CHAIN.AVALANCHE,
|
|
646
|
+
"0x8eBAf22B6F053dFFeaf46f4Dd9eFA95D89ba8580",
|
|
647
|
+
"UNI",
|
|
648
|
+
"Uniswap",
|
|
649
|
+
18,
|
|
650
|
+
],
|
|
651
|
+
// WAVAX — Wrapped AVAX
|
|
652
|
+
[
|
|
653
|
+
CHAIN.AVALANCHE,
|
|
654
|
+
"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",
|
|
655
|
+
"WAVAX",
|
|
656
|
+
"Wrapped AVAX",
|
|
657
|
+
18,
|
|
658
|
+
],
|
|
659
|
+
[
|
|
660
|
+
CHAIN.AVALANCHE,
|
|
661
|
+
"0x63a72806098Bd3D9520cC43356dD78afe5D386D9",
|
|
662
|
+
"AAVE",
|
|
663
|
+
"Aave Token",
|
|
664
|
+
18,
|
|
665
|
+
],
|
|
666
|
+
|
|
667
|
+
// ─── Unichain (130) ──────────────────────────────────────────────────────
|
|
668
|
+
[
|
|
669
|
+
CHAIN.UNICHAIN,
|
|
670
|
+
"0x078D782b760474a361dDA0AF3839290b0EF57AD6",
|
|
671
|
+
"USDC",
|
|
672
|
+
"USD Coin",
|
|
673
|
+
6,
|
|
674
|
+
],
|
|
675
|
+
[
|
|
676
|
+
CHAIN.UNICHAIN,
|
|
677
|
+
"0x4200000000000000000000000000000000000006",
|
|
678
|
+
"WETH",
|
|
679
|
+
"Wrapped Ether",
|
|
680
|
+
18,
|
|
681
|
+
],
|
|
682
|
+
|
|
683
|
+
// ─── Linea (59144) ───────────────────────────────────────────────────────
|
|
684
|
+
[
|
|
685
|
+
CHAIN.LINEA,
|
|
686
|
+
"0x176211869cA2b568f2A7D4EE941E073a821EE1ff",
|
|
687
|
+
"USDC",
|
|
688
|
+
"USD Coin",
|
|
689
|
+
6,
|
|
690
|
+
],
|
|
691
|
+
[
|
|
692
|
+
CHAIN.LINEA,
|
|
693
|
+
"0xA219439258ca9da29E9Cc4cE5596924745e12B93",
|
|
694
|
+
"USDT",
|
|
695
|
+
"Tether USD",
|
|
696
|
+
6,
|
|
697
|
+
],
|
|
698
|
+
[
|
|
699
|
+
CHAIN.LINEA,
|
|
700
|
+
"0x4AF15ec2A0BD43Db75dd04E62FAA3B8EF36b00d5",
|
|
701
|
+
"DAI",
|
|
702
|
+
"Dai Stablecoin",
|
|
703
|
+
18,
|
|
704
|
+
],
|
|
705
|
+
[
|
|
706
|
+
CHAIN.LINEA,
|
|
707
|
+
"0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f",
|
|
708
|
+
"WETH",
|
|
709
|
+
"Wrapped Ether",
|
|
710
|
+
18,
|
|
711
|
+
],
|
|
712
|
+
[
|
|
713
|
+
CHAIN.LINEA,
|
|
714
|
+
"0x3aAB2285ddcDdaD8edf438C1bAB47e1a9D05a9b4",
|
|
715
|
+
"WBTC",
|
|
716
|
+
"Wrapped BTC",
|
|
717
|
+
8,
|
|
718
|
+
],
|
|
719
|
+
|
|
720
|
+
// ─── Sonic (146) ─────────────────────────────────────────────────────────
|
|
721
|
+
[
|
|
722
|
+
CHAIN.SONIC,
|
|
723
|
+
"0x29219dd400f2Bf60E5a23d13Be72B486D4038894",
|
|
724
|
+
"USDC",
|
|
725
|
+
"USD Coin",
|
|
726
|
+
6,
|
|
727
|
+
],
|
|
728
|
+
// WS — Wrapped Sonic (native S wrapped)
|
|
729
|
+
[
|
|
730
|
+
CHAIN.SONIC,
|
|
731
|
+
"0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38",
|
|
732
|
+
"WS",
|
|
733
|
+
"Wrapped Sonic",
|
|
734
|
+
18,
|
|
735
|
+
],
|
|
736
|
+
|
|
737
|
+
// ─── World Chain (480) ───────────────────────────────────────────────────
|
|
738
|
+
[
|
|
739
|
+
CHAIN.WORLDCHAIN,
|
|
740
|
+
"0x79A02482A880bCE3B13e09Da970dC34db4CD24d1",
|
|
741
|
+
"USDC",
|
|
742
|
+
"USD Coin",
|
|
743
|
+
6,
|
|
744
|
+
],
|
|
745
|
+
[
|
|
746
|
+
CHAIN.WORLDCHAIN,
|
|
747
|
+
"0x4200000000000000000000000000000000000006",
|
|
748
|
+
"WETH",
|
|
749
|
+
"Wrapped Ether",
|
|
750
|
+
18,
|
|
751
|
+
],
|
|
752
|
+
// WLD — Worldcoin token
|
|
753
|
+
[
|
|
754
|
+
CHAIN.WORLDCHAIN,
|
|
755
|
+
"0x163f8C2467924be0ae7B5347228CABF260318753",
|
|
756
|
+
"WLD",
|
|
757
|
+
"Worldcoin",
|
|
758
|
+
18,
|
|
759
|
+
],
|
|
760
|
+
|
|
761
|
+
// ─── Base Sepolia Testnet (84532) ────────────────────────────────────────
|
|
762
|
+
[
|
|
763
|
+
CHAIN.BASE_SEPOLIA,
|
|
764
|
+
"0x036CbD53842c5426634e7929541eC2318f3dCF7e",
|
|
765
|
+
"USDC",
|
|
766
|
+
"USD Coin",
|
|
767
|
+
6,
|
|
768
|
+
],
|
|
769
|
+
[
|
|
770
|
+
CHAIN.BASE_SEPOLIA,
|
|
771
|
+
"0x4200000000000000000000000000000000000006",
|
|
772
|
+
"WETH",
|
|
773
|
+
"Wrapped Ether",
|
|
774
|
+
18,
|
|
775
|
+
],
|
|
776
|
+
];
|
|
777
|
+
|
|
778
|
+
// ─── TokenRegistry class ──────────────────────────────────────────────────────
|
|
779
|
+
|
|
780
|
+
export class TokenRegistry {
|
|
781
|
+
private readonly tokens: Map<string, TokenEntry> = new Map();
|
|
782
|
+
|
|
783
|
+
constructor(initialTokens?: TokenEntry[]) {
|
|
784
|
+
// Load native gas tokens
|
|
785
|
+
for (const t of NATIVE_TOKENS) {
|
|
786
|
+
this._store(t);
|
|
787
|
+
}
|
|
788
|
+
// Load EVM tokens
|
|
789
|
+
for (const [chainId, address, symbol, name, decimals] of EVM_TOKENS) {
|
|
790
|
+
this._store({ chainId, address, symbol, name, decimals });
|
|
791
|
+
}
|
|
792
|
+
// Load any provided custom tokens
|
|
793
|
+
if (initialTokens) {
|
|
794
|
+
for (const t of initialTokens) {
|
|
795
|
+
this._store(t);
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
private _key(symbol: string, chainId: number): string {
|
|
801
|
+
return `${symbol.toUpperCase()}:${chainId}`;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
private _store(entry: TokenEntry): void {
|
|
805
|
+
const key = this._key(entry.symbol, entry.chainId);
|
|
806
|
+
this.tokens.set(key, { ...entry });
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* Add or overwrite a token in the registry.
|
|
811
|
+
*/
|
|
812
|
+
addToken(params: AddTokenParams): void {
|
|
813
|
+
const entry: TokenEntry = {
|
|
814
|
+
symbol: params.symbol,
|
|
815
|
+
address: params.address,
|
|
816
|
+
decimals: params.decimals,
|
|
817
|
+
chainId: params.chainId,
|
|
818
|
+
name: params.name ?? params.symbol,
|
|
819
|
+
isNative: params.isNative ?? false,
|
|
820
|
+
};
|
|
821
|
+
this._store(entry);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
/**
|
|
825
|
+
* Look up a token by symbol and chainId.
|
|
826
|
+
* Returns undefined if not found.
|
|
827
|
+
*/
|
|
828
|
+
getToken(symbol: string, chainId: number): TokenEntry | undefined {
|
|
829
|
+
return this.tokens.get(this._key(symbol, chainId));
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* List all tokens registered for a given chainId.
|
|
834
|
+
*/
|
|
835
|
+
listTokens(chainId: number): TokenEntry[] {
|
|
836
|
+
const result: TokenEntry[] = [];
|
|
837
|
+
for (const entry of this.tokens.values()) {
|
|
838
|
+
if (entry.chainId === chainId) result.push(entry);
|
|
839
|
+
}
|
|
840
|
+
return result;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* Find a token by its contract address on a given chain.
|
|
845
|
+
*/
|
|
846
|
+
getTokenByAddress(address: Address, chainId: number): TokenEntry | undefined {
|
|
847
|
+
const lower = address.toLowerCase();
|
|
848
|
+
for (const entry of this.tokens.values()) {
|
|
849
|
+
if (entry.chainId === chainId && entry.address.toLowerCase() === lower) {
|
|
850
|
+
return entry;
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
return undefined;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Returns all registered tokens (all chains).
|
|
858
|
+
*/
|
|
859
|
+
getAllTokens(): TokenEntry[] {
|
|
860
|
+
return Array.from(this.tokens.values());
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
/**
|
|
864
|
+
* Returns number of registered tokens.
|
|
865
|
+
*/
|
|
866
|
+
size(): number {
|
|
867
|
+
return this.tokens.size;
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
// ─── Pre-built per-chain registries ──────────────────────────────────────────
|
|
872
|
+
// These are lazy singletons — constructed once on first import.
|
|
873
|
+
|
|
874
|
+
let _globalRegistry: TokenRegistry | null = null;
|
|
875
|
+
|
|
876
|
+
/** Global registry with all supported chains pre-populated. */
|
|
877
|
+
export function getGlobalRegistry(): TokenRegistry {
|
|
878
|
+
if (!_globalRegistry) _globalRegistry = new TokenRegistry();
|
|
879
|
+
return _globalRegistry;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
/** Create a fresh registry pre-populated for a single chain.
|
|
883
|
+
* @internal — reserved for future per-chain filtering API
|
|
884
|
+
*/
|
|
885
|
+
export function createChainRegistry(_chainId: number): TokenRegistry {
|
|
886
|
+
return new TokenRegistry(); // loads all tokens; filter via listTokens(chainId)
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
// Named per-chain exports — each returns the global registry (all tokens loaded,
|
|
890
|
+
// filtered access via listTokens(chainId)). Use getGlobalRegistry() for multi-chain.
|
|
891
|
+
export const ETHEREUM_REGISTRY = new TokenRegistry();
|
|
892
|
+
export const BASE_REGISTRY = new TokenRegistry();
|
|
893
|
+
export const ARBITRUM_REGISTRY = new TokenRegistry();
|
|
894
|
+
export const OPTIMISM_REGISTRY = new TokenRegistry();
|
|
895
|
+
export const POLYGON_REGISTRY = new TokenRegistry();
|
|
896
|
+
export const AVALANCHE_REGISTRY = new TokenRegistry();
|
|
897
|
+
export const UNICHAIN_REGISTRY = new TokenRegistry();
|
|
898
|
+
export const LINEA_REGISTRY = new TokenRegistry();
|
|
899
|
+
export const SONIC_REGISTRY = new TokenRegistry();
|
|
900
|
+
export const WORLDCHAIN_REGISTRY = new TokenRegistry();
|
|
901
|
+
export const BASE_SEPOLIA_REGISTRY = new TokenRegistry();
|
|
902
|
+
|
|
903
|
+
// Convenience: get native gas token for a chain
|
|
904
|
+
export function getNativeToken(chainId: number): TokenEntry | undefined {
|
|
905
|
+
return (
|
|
906
|
+
getGlobalRegistry().getToken("ETH", chainId) ??
|
|
907
|
+
getGlobalRegistry().getToken("POL", chainId) ??
|
|
908
|
+
getGlobalRegistry().getToken("AVAX", chainId) ??
|
|
909
|
+
getGlobalRegistry().getToken("S", chainId)
|
|
910
|
+
);
|
|
911
|
+
}
|