@vleap/warps-adapter-evm 0.2.0-alpha.23 → 0.2.0-alpha.25

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/dist/index.mjs CHANGED
@@ -1,309 +1,294 @@
1
1
  // src/chains/arbitrum.ts
2
- import { WarpChainName } from "@vleap/warps";
2
+ import { WarpChainName as WarpChainName6 } from "@vleap/warps";
3
3
 
4
4
  // src/WarpEvmDataLoader.ts
5
5
  import {
6
- getProviderUrl
6
+ CacheTtl as CacheTtl2,
7
+ getProviderUrl,
8
+ WarpCache as WarpCache2,
9
+ WarpCacheKey
7
10
  } from "@vleap/warps";
8
11
  import { ethers } from "ethers";
9
12
 
10
- // src/LogoService.ts
11
- var CHAIN_IDS = {
12
- ethereum: 1,
13
- arbitrum: 42161,
14
- base: 8453
15
- };
16
- var FALLBACK_LOGOS = {
17
- ethereum: {
18
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png",
19
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": "https://assets.coingecko.com/coins/images/325/small/Tether.png",
20
- "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png",
21
- "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": "https://assets.coingecko.com/coins/images/2518/small/weth.png",
22
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": "https://assets.coingecko.com/coins/images/9956/small/4943.png"
23
- },
24
- arbitrum: {
25
- "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png",
26
- "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": "https://assets.coingecko.com/coins/images/325/small/Tether.png",
27
- "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": "https://assets.coingecko.com/coins/images/2518/small/weth.png"
28
- },
29
- base: {
30
- "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png",
31
- "0x4200000000000000000000000000000000000006": "https://assets.coingecko.com/coins/images/2518/small/weth.png",
32
- "0x036CbD53842c5426634e7929541eC2318f3dCF7e": "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png",
33
- "0x808456652fdb597867f38412077A9182bf77359F": "https://assets.coingecko.com/coins/images/26045/standard/euro.png",
34
- "0xcbB7C0006F23900c38EB856149F799620fcb8A4a": "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
35
- }
36
- };
37
- var TOKEN_LISTS = [
38
- "https://tokens.uniswap.org",
39
- "https://raw.githubusercontent.com/compound-finance/token-list/master/compound.tokenlist.json",
40
- "https://tokens.1inch.io"
41
- ];
42
- var logoCache = /* @__PURE__ */ new Map();
43
- var tokenInfoCache = /* @__PURE__ */ new Map();
44
- var tokenListCache = /* @__PURE__ */ new Map();
45
- var EvmLogoService = class {
46
- static async getTokenInfo(chainName, tokenAddress) {
47
- const cacheKey = `${chainName}:${tokenAddress.toLowerCase()}`;
48
- if (tokenInfoCache.has(cacheKey)) {
49
- return tokenInfoCache.get(cacheKey);
50
- }
51
- let tokenInfo = {};
13
+ // src/providers/UniswapService.ts
14
+ import { CacheTtl } from "@vleap/warps";
15
+ var _UniswapService = class _UniswapService {
16
+ constructor(cache, chainId) {
17
+ this.cache = cache;
18
+ this.chainId = chainId;
19
+ }
20
+ async getTokenList() {
52
21
  try {
53
- tokenInfo = await this.fetchFromTokenLists(chainName, tokenAddress);
54
- } catch (error) {
55
- }
56
- if (!tokenInfo.logoURI) {
57
- try {
58
- tokenInfo = { ...tokenInfo, ...await this.fetchFromDefiLlama(chainName, tokenAddress) };
59
- } catch (error) {
22
+ const response = await fetch(_UniswapService.UNISWAP_TOKEN_LIST_URL);
23
+ if (!response.ok) {
24
+ throw new Error(`Failed to fetch Uniswap token list: ${response.status}`);
60
25
  }
26
+ const tokenList = await response.json();
27
+ return tokenList;
28
+ } catch (error) {
29
+ throw new Error(`Failed to fetch Uniswap token list: ${error}`);
61
30
  }
62
- tokenInfoCache.set(cacheKey, tokenInfo);
63
- return tokenInfo;
64
31
  }
65
- static async getLogoUrl(chainName, tokenAddress, tokenName, tokenSymbol) {
66
- const cacheKey = `${chainName}:${tokenAddress.toLowerCase()}`;
67
- if (logoCache.has(cacheKey)) {
68
- return logoCache.get(cacheKey);
32
+ async findToken(address) {
33
+ const normalizedAddress = address.toLowerCase();
34
+ const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`;
35
+ const cachedToken = this.cache.get(cacheKey);
36
+ if (cachedToken) {
37
+ return cachedToken;
69
38
  }
70
- let logoUrl = "";
71
- const fallbackLogos = FALLBACK_LOGOS[chainName];
72
- if (fallbackLogos && fallbackLogos[tokenAddress]) {
73
- logoUrl = fallbackLogos[tokenAddress];
74
- } else {
75
- const tokenInfo = await this.getTokenInfo(chainName, tokenAddress);
76
- logoUrl = tokenInfo.logoURI || "";
77
- if (!logoUrl && (tokenSymbol || tokenName)) {
78
- try {
79
- logoUrl = await this.fetchFromTrustWallet(chainName, tokenAddress);
80
- } catch (error) {
81
- }
39
+ try {
40
+ const tokenList = await this.getTokenList();
41
+ const token = tokenList.tokens.find((token2) => token2.address.toLowerCase() === normalizedAddress) || null;
42
+ if (token && token.chainId !== this.chainId) {
43
+ return null;
82
44
  }
45
+ if (token) {
46
+ this.cache.set(cacheKey, token, CacheTtl.OneHour);
47
+ } else {
48
+ this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5);
49
+ }
50
+ return token;
51
+ } catch (error) {
52
+ return null;
83
53
  }
84
- logoCache.set(cacheKey, logoUrl);
85
- return logoUrl;
86
54
  }
87
- static async fetchFromTokenLists(chainName, tokenAddress) {
88
- const chainId = CHAIN_IDS[chainName];
89
- if (!chainId) return {};
90
- const normalizedAddress = tokenAddress.toLowerCase();
91
- if (tokenListCache.has(`${chainId}:${normalizedAddress}`)) {
92
- return tokenListCache.get(`${chainId}:${normalizedAddress}`) || {};
55
+ async getTokenMetadata(address) {
56
+ const normalizedAddress = address.toLowerCase();
57
+ const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`;
58
+ const cachedMetadata = this.cache.get(cacheKey);
59
+ if (cachedMetadata !== null) {
60
+ return cachedMetadata;
93
61
  }
94
- for (const tokenListUrl of TOKEN_LISTS) {
95
- try {
96
- const response = await fetch(tokenListUrl, {
97
- headers: { Accept: "application/json" },
98
- signal: AbortSignal.timeout(5e3)
99
- });
100
- if (response.ok) {
101
- const data = await response.json();
102
- const token = data.tokens.find((t) => t.chainId === chainId && t.address.toLowerCase() === normalizedAddress);
103
- if (token) {
104
- const tokenInfo = {
105
- name: token.name,
106
- symbol: token.symbol,
107
- decimals: token.decimals,
108
- logoURI: token.logoURI
109
- };
110
- tokenListCache.set(`${chainId}:${normalizedAddress}`, tokenInfo);
111
- return tokenInfo;
112
- }
113
- }
114
- } catch (error) {
115
- continue;
116
- }
62
+ const token = await this.findToken(address);
63
+ if (!token) {
64
+ this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5);
65
+ return null;
117
66
  }
118
- return {};
119
- }
120
- static async fetchFromDefiLlama(chainName, tokenAddress) {
121
- try {
122
- const chainMapping = {
123
- ethereum: "ethereum",
124
- arbitrum: "arbitrum",
125
- base: "base"
126
- };
127
- const chain = chainMapping[chainName];
128
- if (!chain) return {};
129
- const response = await fetch(`https://coins.llama.fi/prices/current/${chain}:${tokenAddress}`, { signal: AbortSignal.timeout(5e3) });
130
- if (response.ok) {
131
- const data = await response.json();
132
- const coinData = data.coins?.[`${chain}:${tokenAddress}`];
133
- if (coinData) {
134
- return {
135
- symbol: coinData.symbol,
136
- logoURI: coinData.logoURI
137
- };
138
- }
139
- }
140
- } catch (error) {
67
+ const metadata = {
68
+ name: token.name,
69
+ symbol: token.symbol,
70
+ decimals: token.decimals,
71
+ logoUrl: token.logoURI
72
+ };
73
+ this.cache.set(cacheKey, metadata, CacheTtl.OneHour);
74
+ return metadata;
75
+ }
76
+ async getBridgeInfo(address) {
77
+ const normalizedAddress = address.toLowerCase();
78
+ const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`;
79
+ const cachedBridgeInfo = this.cache.get(cacheKey);
80
+ if (cachedBridgeInfo !== null) {
81
+ return cachedBridgeInfo;
141
82
  }
142
- return {};
143
- }
144
- static async fetchFromTrustWallet(chainName, tokenAddress) {
145
- try {
146
- const chainMapping = {
147
- ethereum: "ethereum",
148
- arbitrum: "arbitrum",
149
- base: "base"
150
- };
151
- const chain = chainMapping[chainName];
152
- if (!chain) return "";
153
- const logoUrl = `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/${chain}/assets/${tokenAddress}/logo.png`;
154
- const response = await fetch(logoUrl, {
155
- method: "HEAD",
156
- signal: AbortSignal.timeout(3e3)
157
- });
158
- if (response.ok) {
159
- return logoUrl;
160
- }
161
- } catch (error) {
83
+ const token = await this.findToken(address);
84
+ if (!token?.extensions?.bridgeInfo) {
85
+ this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5);
86
+ return null;
87
+ }
88
+ const bridgeInfo = {};
89
+ for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {
90
+ bridgeInfo[chainId] = info.tokenAddress;
162
91
  }
163
- return "";
92
+ this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour);
93
+ return bridgeInfo;
164
94
  }
165
- static clearCache() {
166
- logoCache.clear();
167
- tokenInfoCache.clear();
168
- tokenListCache.clear();
95
+ };
96
+ _UniswapService.UNISWAP_TOKEN_LIST_URL = "https://tokens.uniswap.org";
97
+ var UniswapService = _UniswapService;
98
+
99
+ // src/tokens/arbitrum.ts
100
+ import { WarpChainName } from "@vleap/warps";
101
+ var ArbitrumChain = WarpChainName.Arbitrum;
102
+ var ArbitrumTokens = [
103
+ {
104
+ chain: ArbitrumChain,
105
+ identifier: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
106
+ name: "USD Coin",
107
+ symbol: "USDC",
108
+ decimals: 6,
109
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
110
+ },
111
+ {
112
+ chain: ArbitrumChain,
113
+ identifier: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
114
+ name: "Tether USD",
115
+ symbol: "USDT",
116
+ decimals: 6,
117
+ logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
118
+ },
119
+ {
120
+ chain: ArbitrumChain,
121
+ identifier: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
122
+ name: "Wrapped Ether",
123
+ symbol: "WETH",
124
+ decimals: 18,
125
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
169
126
  }
170
- static getCacheSize() {
171
- return logoCache.size + tokenInfoCache.size + tokenListCache.size;
127
+ ];
128
+
129
+ // src/tokens/base.ts
130
+ import { WarpChainName as WarpChainName2 } from "@vleap/warps";
131
+ var BaseChain = WarpChainName2.Base;
132
+ var BaseTokens = [
133
+ {
134
+ chain: BaseChain,
135
+ identifier: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
136
+ name: "USD Coin",
137
+ symbol: "USDC",
138
+ decimals: 6,
139
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
140
+ },
141
+ {
142
+ chain: BaseChain,
143
+ identifier: "0x4200000000000000000000000000000000000006",
144
+ name: "Wrapped Ether",
145
+ symbol: "WETH",
146
+ decimals: 18,
147
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
148
+ },
149
+ {
150
+ chain: BaseChain,
151
+ identifier: "0x808456652fdb597867f38412077A9182bf77359F",
152
+ name: "Euro",
153
+ symbol: "EURC",
154
+ decimals: 6,
155
+ logoUrl: "https://assets.coingecko.com/coins/images/26045/standard/euro.png"
156
+ },
157
+ {
158
+ chain: BaseChain,
159
+ fidentifier: "0xcbB7C0006F23900c38EB856149F799620fcb8A4a",
160
+ name: "Coinbase Wrapped BTC",
161
+ symbol: "CBETH",
162
+ decimals: 8,
163
+ logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
172
164
  }
173
- };
165
+ ];
166
+
167
+ // src/tokens/base-sepolia.ts
168
+ import { WarpChainName as WarpChainName3 } from "@vleap/warps";
169
+ var BaseChain2 = WarpChainName3.Base;
170
+ var BaseSepoliaTokens = [
171
+ {
172
+ chain: BaseChain2,
173
+ identifier: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
174
+ name: "USD",
175
+ symbol: "USDC",
176
+ decimals: 6,
177
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
178
+ },
179
+ {
180
+ chain: BaseChain2,
181
+ identifier: "0x808456652fdb597867f38412077A9182bf77359F",
182
+ name: "Euro",
183
+ symbol: "EURC",
184
+ decimals: 6,
185
+ logoUrl: "https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420"
186
+ },
187
+ {
188
+ chain: BaseChain2,
189
+ identifier: "0xcbB7C0006F23900c38EB856149F799620fcb8A4a",
190
+ name: "Wrapped Bitcoin",
191
+ symbol: "WBTC",
192
+ decimals: 8,
193
+ logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
194
+ }
195
+ ];
196
+
197
+ // src/tokens/ethereum.ts
198
+ import { WarpChainName as WarpChainName4 } from "@vleap/warps";
199
+ var EthereumChain = WarpChainName4.Ethereum;
200
+ var EthereumTokens = [
201
+ {
202
+ chain: EthereumChain,
203
+ identifier: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
204
+ name: "USD Coin",
205
+ symbol: "USDC",
206
+ decimals: 6,
207
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
208
+ },
209
+ {
210
+ chain: EthereumChain,
211
+ identifier: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
212
+ name: "Tether USD",
213
+ symbol: "USDT",
214
+ decimals: 6,
215
+ logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
216
+ },
217
+ {
218
+ chain: EthereumChain,
219
+ identifier: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
220
+ name: "Wrapped Bitcoin",
221
+ symbol: "WBTC",
222
+ decimals: 8,
223
+ logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
224
+ },
225
+ {
226
+ chain: EthereumChain,
227
+ identifier: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
228
+ name: "Wrapped Ether",
229
+ symbol: "WETH",
230
+ decimals: 18,
231
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
232
+ },
233
+ {
234
+ chain: EthereumChain,
235
+ identifier: "0x6B175474E89094C44Da98b954EedeAC495271d0F",
236
+ name: "Dai Stablecoin",
237
+ symbol: "DAI",
238
+ decimals: 18,
239
+ logoUrl: "https://assets.coingecko.com/coins/images/9956/small/4943.png"
240
+ }
241
+ ];
242
+
243
+ // src/tokens/ethereum-sepolia.ts
244
+ import { WarpChainName as WarpChainName5 } from "@vleap/warps";
245
+ var EthereumChain2 = WarpChainName5.Ethereum;
246
+ var EthereumSepoliaTokens = [
247
+ {
248
+ chain: EthereumChain2,
249
+ identifier: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
250
+ name: "USD Coin",
251
+ symbol: "USDC",
252
+ decimals: 6,
253
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
254
+ },
255
+ {
256
+ chain: EthereumChain2,
257
+ identifier: "0x7169D38820dfd117C3FA1f22a697dBA58d90BA06",
258
+ name: "Tether USD",
259
+ symbol: "USDT",
260
+ decimals: 6,
261
+ logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
262
+ },
263
+ {
264
+ chain: EthereumChain2,
265
+ identifier: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9",
266
+ name: "Wrapped Ether",
267
+ symbol: "WETH",
268
+ decimals: 18,
269
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
270
+ }
271
+ ];
174
272
 
175
273
  // src/tokens.ts
176
274
  var KnownTokens = {
177
275
  ethereum: {
178
- mainnet: [
179
- {
180
- id: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
181
- name: "USD Coin",
182
- symbol: "USDC",
183
- decimals: 6,
184
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
185
- },
186
- {
187
- id: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
188
- name: "Tether USD",
189
- symbol: "USDT",
190
- decimals: 6,
191
- logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
192
- },
193
- {
194
- id: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
195
- name: "Wrapped Bitcoin",
196
- symbol: "WBTC",
197
- decimals: 8,
198
- logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
199
- },
200
- {
201
- id: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
202
- name: "Wrapped Ether",
203
- symbol: "WETH",
204
- decimals: 18,
205
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
206
- },
207
- {
208
- id: "0x6B175474E89094C44Da98b954EedeAC495271d0F",
209
- name: "Dai Stablecoin",
210
- symbol: "DAI",
211
- decimals: 18,
212
- logoUrl: "https://assets.coingecko.com/coins/images/9956/small/4943.png"
213
- }
214
- ],
215
- testnet: [
216
- {
217
- id: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
218
- name: "USD Coin",
219
- symbol: "USDC",
220
- decimals: 6,
221
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
222
- },
223
- {
224
- id: "0x7169D38820dfd117C3FA1f22a697dBA58d90BA06",
225
- name: "Tether USD",
226
- symbol: "USDT",
227
- decimals: 6,
228
- logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
229
- },
230
- {
231
- id: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9",
232
- name: "Wrapped Ether",
233
- symbol: "WETH",
234
- decimals: 18,
235
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
236
- }
237
- ]
238
- },
239
- arbitrum: {
240
- mainnet: [
241
- {
242
- id: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
243
- name: "USD Coin",
244
- symbol: "USDC",
245
- decimals: 6,
246
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
247
- },
248
- {
249
- id: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
250
- name: "Tether USD",
251
- symbol: "USDT",
252
- decimals: 6,
253
- logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
254
- },
255
- {
256
- id: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
257
- name: "Wrapped Ether",
258
- symbol: "WETH",
259
- decimals: 18,
260
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
261
- }
262
- ]
276
+ mainnet: EthereumTokens,
277
+ testnet: EthereumSepoliaTokens,
278
+ devnet: EthereumSepoliaTokens
263
279
  },
264
280
  base: {
265
- mainnet: [
266
- {
267
- id: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
268
- name: "USD Coin",
269
- symbol: "USDC",
270
- decimals: 6,
271
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
272
- },
273
- {
274
- id: "0x4200000000000000000000000000000000000006",
275
- name: "Wrapped Ether",
276
- symbol: "WETH",
277
- decimals: 18,
278
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
279
- },
280
- {
281
- id: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
282
- name: "USD Coin",
283
- symbol: "USDC",
284
- decimals: 6,
285
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
286
- },
287
- {
288
- id: "0x808456652fdb597867f38412077A9182bf77359F",
289
- name: "Euro Coin",
290
- symbol: "EURC",
291
- decimals: 6,
292
- logoUrl: "https://assets.coingecko.com/coins/images/26045/standard/euro.png"
293
- },
294
- {
295
- id: "0xcbB7C0006F23900c38EB856149F799620fcb8A4a",
296
- name: "Coinbase Wrapped BTC",
297
- symbol: "CBETH",
298
- decimals: 8,
299
- logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
300
- }
301
- ]
281
+ mainnet: BaseTokens,
282
+ testnet: BaseSepoliaTokens,
283
+ devnet: BaseSepoliaTokens
284
+ },
285
+ arbitrum: {
286
+ mainnet: ArbitrumTokens
302
287
  }
303
288
  };
304
- var findKnownTokenById = (chainName, id, env = "mainnet") => {
305
- const chainTokens = KnownTokens[chainName]?.[env] || [];
306
- return chainTokens.find((token) => token.id === id) || null;
289
+ var findKnownTokenById = (chain, env, id) => {
290
+ const chainTokens = KnownTokens[chain]?.[env] || [];
291
+ return chainTokens.find((token) => token.identifier === id) || null;
307
292
  };
308
293
  var getKnownTokensForChain = (chainName, env = "mainnet") => {
309
294
  return KnownTokens[chainName]?.[env] || [];
@@ -324,6 +309,8 @@ var WarpEvmDataLoader = class {
324
309
  const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
325
310
  const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId));
326
311
  this.provider = new ethers.JsonRpcProvider(apiUrl, network);
312
+ this.cache = new WarpCache2(config.cache?.type);
313
+ this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId));
327
314
  }
328
315
  async getAccount(address) {
329
316
  const balance = await this.provider.getBalance(address);
@@ -339,14 +326,14 @@ var WarpEvmDataLoader = class {
339
326
  let assets = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : [];
340
327
  for (const tokenBalance of tokenBalances) {
341
328
  if (tokenBalance.balance > 0n) {
342
- const logoUrl = tokenBalance.metadata.logoUrl || await this.getLogoUrl(tokenBalance);
343
329
  assets.push({
344
330
  chain: this.chain.name,
345
331
  identifier: tokenBalance.tokenAddress,
346
- name: tokenBalance.metadata.name,
332
+ name: tokenBalance.name,
333
+ symbol: tokenBalance.symbol,
347
334
  amount: tokenBalance.balance,
348
- decimals: tokenBalance.metadata.decimals,
349
- logoUrl: logoUrl || ""
335
+ decimals: tokenBalance.decimals,
336
+ logoUrl: tokenBalance.logoUrl || ""
350
337
  });
351
338
  }
352
339
  }
@@ -354,16 +341,38 @@ var WarpEvmDataLoader = class {
354
341
  }
355
342
  async getAsset(identifier) {
356
343
  try {
344
+ if (identifier === this.chain.nativeToken.identifier) {
345
+ return this.chain.nativeToken;
346
+ }
347
+ const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier);
348
+ const cachedAsset = this.cache.get(cacheKey);
349
+ if (cachedAsset) {
350
+ return cachedAsset;
351
+ }
352
+ const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier);
353
+ if (knownToken) {
354
+ return {
355
+ chain: this.chain.name,
356
+ identifier,
357
+ name: knownToken.name,
358
+ symbol: knownToken.symbol,
359
+ amount: 0n,
360
+ decimals: knownToken.decimals,
361
+ logoUrl: knownToken.logoUrl
362
+ };
363
+ }
357
364
  const metadata = await this.getTokenMetadata(identifier);
358
- if (!metadata) return null;
359
- return {
365
+ const asset = {
360
366
  chain: this.chain.name,
361
367
  identifier,
362
368
  name: metadata.name,
369
+ symbol: metadata.symbol,
363
370
  amount: 0n,
364
371
  decimals: metadata.decimals,
365
372
  logoUrl: metadata.logoUrl || ""
366
373
  };
374
+ this.cache.set(cacheKey, asset, CacheTtl2.OneHour);
375
+ return asset;
367
376
  } catch (error) {
368
377
  return null;
369
378
  }
@@ -405,40 +414,18 @@ var WarpEvmDataLoader = class {
405
414
  return [];
406
415
  }
407
416
  async getERC20TokenBalances(address) {
408
- const tokenBalances = [];
409
- const env = this.config.env === "devnet" ? "testnet" : this.config.env;
410
- const knownTokens = getKnownTokensForChain(this.chain.name, env);
411
- for (const token of knownTokens) {
412
- try {
413
- const balance = await this.getTokenBalance(address, token.id);
414
- if (balance > 0n) {
415
- tokenBalances.push({
416
- tokenAddress: token.id,
417
- balance,
418
- metadata: token
419
- });
420
- }
421
- } catch (error) {
422
- }
423
- }
424
- const additionalTokens = await this.detectTokensFromEvents(address);
425
- for (const tokenAddress of additionalTokens) {
426
- if (!findKnownTokenById(this.chain.name, tokenAddress, env)) {
427
- try {
428
- const metadata = await this.getTokenMetadata(tokenAddress);
429
- const balance = await this.getTokenBalance(address, tokenAddress);
430
- if (balance > 0n) {
431
- tokenBalances.push({
432
- tokenAddress,
433
- balance,
434
- metadata
435
- });
436
- }
437
- } catch (error) {
438
- }
439
- }
440
- }
441
- return tokenBalances;
417
+ const env = this.config.env === "mainnet" ? "mainnet" : "testnet";
418
+ const tokens = getKnownTokensForChain(this.chain.name, env);
419
+ const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n));
420
+ const balances = await Promise.all(balanceReqs);
421
+ return balances.map((balance, index) => ({ balance, token: tokens[index] })).filter(({ balance }) => balance > 0n).map(({ balance, token }) => ({
422
+ tokenAddress: token.identifier,
423
+ balance,
424
+ name: token.name,
425
+ symbol: token.symbol,
426
+ decimals: token.decimals || 18,
427
+ logoUrl: token.logoUrl || ""
428
+ }));
442
429
  }
443
430
  async getTokenBalance(address, tokenAddress) {
444
431
  const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
@@ -446,55 +433,23 @@ var WarpEvmDataLoader = class {
446
433
  return balance;
447
434
  }
448
435
  async getTokenMetadata(tokenAddress) {
449
- const tokenInfo = await EvmLogoService.getTokenInfo(this.chain.name, tokenAddress);
450
- if (tokenInfo.name && tokenInfo.symbol && tokenInfo.decimals !== void 0) {
451
- return {
452
- name: tokenInfo.name,
453
- symbol: tokenInfo.symbol,
454
- decimals: tokenInfo.decimals,
455
- logoUrl: tokenInfo.logoURI
456
- };
436
+ const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress);
437
+ if (uniswapMetadata) {
438
+ return uniswapMetadata;
457
439
  }
458
440
  const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
459
441
  const [name, symbol, decimals] = await Promise.all([
460
- contract.name().catch(() => tokenInfo.name || "Unknown Token"),
461
- contract.symbol().catch(() => tokenInfo.symbol || "UNKNOWN"),
462
- contract.decimals().catch(() => tokenInfo.decimals || 18)
442
+ contract.name().catch(() => "Unknown Token"),
443
+ contract.symbol().catch(() => "UNKNOWN"),
444
+ contract.decimals().catch(() => 18)
463
445
  ]);
464
446
  return {
465
- name: name || tokenInfo.name || "Unknown Token",
466
- symbol: symbol || tokenInfo.symbol || "UNKNOWN",
467
- decimals: decimals || tokenInfo.decimals || 18,
468
- logoUrl: tokenInfo.logoURI
447
+ name: name || "Unknown Token",
448
+ symbol: symbol || "UNKNOWN",
449
+ decimals: decimals || 18,
450
+ logoUrl: ""
469
451
  };
470
452
  }
471
- async detectTokensFromEvents(address) {
472
- try {
473
- const currentBlock = await this.provider.getBlockNumber();
474
- const fromBlock = Math.max(0, currentBlock - 1e4);
475
- const filter = {
476
- fromBlock,
477
- toBlock: currentBlock,
478
- topics: [ethers.id("Transfer(address,address,uint256)"), null, ethers.zeroPadValue(address, 32)]
479
- };
480
- const logs = await this.provider.getLogs(filter);
481
- const tokenAddresses = /* @__PURE__ */ new Set();
482
- for (const log of logs) {
483
- tokenAddresses.add(log.address);
484
- }
485
- return Array.from(tokenAddresses);
486
- } catch (error) {
487
- return [];
488
- }
489
- }
490
- async getLogoUrl(tokenBalance) {
491
- return await EvmLogoService.getLogoUrl(
492
- this.chain.name,
493
- tokenBalance.tokenAddress,
494
- tokenBalance.metadata.name,
495
- tokenBalance.metadata.symbol
496
- );
497
- }
498
453
  };
499
454
 
500
455
  // src/WarpEvmExecutor.ts
@@ -1008,9 +963,6 @@ var WarpEvmExecutor = class {
1008
963
  };
1009
964
  }
1010
965
  }
1011
- async preprocessInput(chain, input, type, value) {
1012
- return input;
1013
- }
1014
966
  async estimateGasAndSetDefaults(tx, from) {
1015
967
  try {
1016
968
  const gasEstimate = await this.provider.estimateGas({
@@ -1227,15 +1179,16 @@ var createEvmAdapter = (chainName, chainPrefix, chainInfos) => {
1227
1179
 
1228
1180
  // src/chains/arbitrum.ts
1229
1181
  var NativeTokenArb = {
1230
- chain: WarpChainName.Arbitrum,
1182
+ chain: WarpChainName6.Arbitrum,
1231
1183
  identifier: "ARB",
1232
- name: "ARB",
1184
+ symbol: "ARB",
1185
+ name: "Arbitrum",
1233
1186
  decimals: 18,
1234
1187
  logoUrl: "https://vleap.ai/images/tokens/arb.svg"
1235
1188
  };
1236
- var getArbitrumAdapter = createEvmAdapter(WarpChainName.Arbitrum, "arb", {
1189
+ var getArbitrumAdapter = createEvmAdapter(WarpChainName6.Arbitrum, "arb", {
1237
1190
  mainnet: {
1238
- name: WarpChainName.Arbitrum,
1191
+ name: WarpChainName6.Arbitrum,
1239
1192
  displayName: "Arbitrum",
1240
1193
  chainId: "42161",
1241
1194
  blockTime: 1e3,
@@ -1244,7 +1197,7 @@ var getArbitrumAdapter = createEvmAdapter(WarpChainName.Arbitrum, "arb", {
1244
1197
  nativeToken: NativeTokenArb
1245
1198
  },
1246
1199
  testnet: {
1247
- name: WarpChainName.Arbitrum,
1200
+ name: WarpChainName6.Arbitrum,
1248
1201
  displayName: "Arbitrum Sepolia",
1249
1202
  chainId: "421614",
1250
1203
  blockTime: 1e3,
@@ -1253,7 +1206,7 @@ var getArbitrumAdapter = createEvmAdapter(WarpChainName.Arbitrum, "arb", {
1253
1206
  nativeToken: NativeTokenArb
1254
1207
  },
1255
1208
  devnet: {
1256
- name: WarpChainName.Arbitrum,
1209
+ name: WarpChainName6.Arbitrum,
1257
1210
  displayName: "Arbitrum Sepolia",
1258
1211
  chainId: "421614",
1259
1212
  blockTime: 1e3,
@@ -1264,17 +1217,18 @@ var getArbitrumAdapter = createEvmAdapter(WarpChainName.Arbitrum, "arb", {
1264
1217
  });
1265
1218
 
1266
1219
  // src/chains/base.ts
1267
- import { WarpChainName as WarpChainName2 } from "@vleap/warps";
1220
+ import { WarpChainName as WarpChainName7 } from "@vleap/warps";
1268
1221
  var NativeTokenBase = {
1269
- chain: WarpChainName2.Base,
1222
+ chain: WarpChainName7.Base,
1270
1223
  identifier: "ETH",
1271
- name: "ETH",
1224
+ name: "Ether",
1225
+ symbol: "ETH",
1272
1226
  decimals: 18,
1273
1227
  logoUrl: "https://vleap.ai/images/tokens/eth.svg"
1274
1228
  };
1275
- var getBaseAdapter = createEvmAdapter(WarpChainName2.Base, "base", {
1229
+ var getBaseAdapter = createEvmAdapter(WarpChainName7.Base, "base", {
1276
1230
  mainnet: {
1277
- name: WarpChainName2.Base,
1231
+ name: WarpChainName7.Base,
1278
1232
  displayName: "Base",
1279
1233
  chainId: "8453",
1280
1234
  blockTime: 2e3,
@@ -1283,7 +1237,7 @@ var getBaseAdapter = createEvmAdapter(WarpChainName2.Base, "base", {
1283
1237
  nativeToken: NativeTokenBase
1284
1238
  },
1285
1239
  testnet: {
1286
- name: WarpChainName2.Base,
1240
+ name: WarpChainName7.Base,
1287
1241
  displayName: "Base Sepolia",
1288
1242
  chainId: "84532",
1289
1243
  blockTime: 2e3,
@@ -1292,7 +1246,7 @@ var getBaseAdapter = createEvmAdapter(WarpChainName2.Base, "base", {
1292
1246
  nativeToken: NativeTokenBase
1293
1247
  },
1294
1248
  devnet: {
1295
- name: WarpChainName2.Base,
1249
+ name: WarpChainName7.Base,
1296
1250
  displayName: "Base Sepolia",
1297
1251
  chainId: "84532",
1298
1252
  blockTime: 2e3,
@@ -1303,20 +1257,21 @@ var getBaseAdapter = createEvmAdapter(WarpChainName2.Base, "base", {
1303
1257
  });
1304
1258
 
1305
1259
  // src/chains/combined.ts
1306
- import { WarpChainName as WarpChainName4 } from "@vleap/warps";
1260
+ import { WarpChainName as WarpChainName9 } from "@vleap/warps";
1307
1261
 
1308
1262
  // src/chains/ethereum.ts
1309
- import { WarpChainName as WarpChainName3 } from "@vleap/warps";
1263
+ import { WarpChainName as WarpChainName8 } from "@vleap/warps";
1310
1264
  var NativeTokenEth = {
1311
- chain: WarpChainName3.Ethereum,
1265
+ chain: WarpChainName8.Ethereum,
1312
1266
  identifier: "ETH",
1313
- name: "ETH",
1267
+ symbol: "ETH",
1268
+ name: "Ether",
1314
1269
  decimals: 18,
1315
1270
  logoUrl: "https://vleap.ai/images/tokens/eth.svg"
1316
1271
  };
1317
- var getEthereumAdapter = createEvmAdapter(WarpChainName3.Ethereum, "eth", {
1272
+ var getEthereumAdapter = createEvmAdapter(WarpChainName8.Ethereum, "eth", {
1318
1273
  mainnet: {
1319
- name: WarpChainName3.Ethereum,
1274
+ name: WarpChainName8.Ethereum,
1320
1275
  displayName: "Ethereum Mainnet",
1321
1276
  chainId: "1",
1322
1277
  blockTime: 12e3,
@@ -1325,7 +1280,7 @@ var getEthereumAdapter = createEvmAdapter(WarpChainName3.Ethereum, "eth", {
1325
1280
  nativeToken: NativeTokenEth
1326
1281
  },
1327
1282
  testnet: {
1328
- name: WarpChainName3.Ethereum,
1283
+ name: WarpChainName8.Ethereum,
1329
1284
  displayName: "Ethereum Sepolia",
1330
1285
  chainId: "11155111",
1331
1286
  blockTime: 12e3,
@@ -1334,7 +1289,7 @@ var getEthereumAdapter = createEvmAdapter(WarpChainName3.Ethereum, "eth", {
1334
1289
  nativeToken: NativeTokenEth
1335
1290
  },
1336
1291
  devnet: {
1337
- name: WarpChainName3.Ethereum,
1292
+ name: WarpChainName8.Ethereum,
1338
1293
  displayName: "Ethereum Sepolia",
1339
1294
  chainId: "11155111",
1340
1295
  blockTime: 12e3,
@@ -1350,17 +1305,18 @@ var getAllEvmAdapters = (config, fallback) => [
1350
1305
  getArbitrumAdapter(config, fallback),
1351
1306
  getBaseAdapter(config, fallback)
1352
1307
  ];
1353
- var getAllEvmChainNames = () => [WarpChainName4.Ethereum, WarpChainName4.Base, WarpChainName4.Arbitrum];
1308
+ var getAllEvmChainNames = () => [WarpChainName9.Ethereum, WarpChainName9.Base, WarpChainName9.Arbitrum];
1354
1309
  export {
1355
1310
  ArbitrumExplorers,
1356
1311
  BaseExplorers,
1357
1312
  EthereumExplorers,
1358
1313
  EvmExplorers,
1359
- EvmLogoService,
1360
1314
  ExplorerUrls,
1315
+ KnownTokens,
1361
1316
  NativeTokenArb,
1362
1317
  NativeTokenBase,
1363
1318
  NativeTokenEth,
1319
+ UniswapService,
1364
1320
  WarpEvmConstants,
1365
1321
  WarpEvmDataLoader,
1366
1322
  WarpEvmExecutor,
@@ -1368,10 +1324,12 @@ export {
1368
1324
  WarpEvmResults,
1369
1325
  WarpEvmSerializer,
1370
1326
  createEvmAdapter,
1327
+ findKnownTokenById,
1371
1328
  getAllEvmAdapters,
1372
1329
  getAllEvmChainNames,
1373
1330
  getArbitrumAdapter,
1374
1331
  getBaseAdapter,
1375
- getEthereumAdapter
1332
+ getEthereumAdapter,
1333
+ getKnownTokensForChain
1376
1334
  };
1377
1335
  //# sourceMappingURL=index.mjs.map