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

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.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { WarpChainAsset, AdapterFactory, WarpClientConfig, Adapter, WarpChain, WarpChainEnv, WarpChainInfo, AdapterWarpDataLoader, WarpChainAccount, WarpDataLoaderOptions, WarpChainAction, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, Warp, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
1
+ import { WarpChainAsset, AdapterFactory, WarpClientConfig, Adapter, WarpChain, WarpChainEnv, WarpChainInfo, AdapterWarpDataLoader, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, Warp, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
2
2
  import { ethers } from 'ethers';
3
3
 
4
4
  declare const NativeTokenArb: WarpChainAsset;
@@ -88,7 +88,7 @@ declare class EvmLogoService {
88
88
  static getCacheSize(): number;
89
89
  }
90
90
 
91
- interface TokenMetadata$1 {
91
+ interface TokenMetadata {
92
92
  name: string;
93
93
  symbol: string;
94
94
  decimals: number;
@@ -97,7 +97,7 @@ interface TokenMetadata$1 {
97
97
  interface TokenBalance {
98
98
  tokenAddress: string;
99
99
  balance: bigint;
100
- metadata: TokenMetadata$1;
100
+ metadata: TokenMetadata;
101
101
  }
102
102
  interface TokenInfo {
103
103
  name?: string;
@@ -116,12 +116,6 @@ interface TokenListResponse {
116
116
  }>;
117
117
  }
118
118
 
119
- interface TokenMetadata {
120
- name: string;
121
- symbol: string;
122
- decimals: number;
123
- logoUrl?: string;
124
- }
125
119
  declare class WarpEvmDataLoader implements AdapterWarpDataLoader {
126
120
  private readonly config;
127
121
  private readonly chain;
@@ -129,20 +123,14 @@ declare class WarpEvmDataLoader implements AdapterWarpDataLoader {
129
123
  constructor(config: WarpClientConfig, chain: WarpChainInfo);
130
124
  getAccount(address: string): Promise<WarpChainAccount>;
131
125
  getAccountAssets(address: string): Promise<WarpChainAsset[]>;
126
+ getAsset(identifier: string): Promise<WarpChainAsset | null>;
127
+ getAction(identifier: string, awaitCompleted?: boolean): Promise<WarpChainAction | null>;
132
128
  getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]>;
133
129
  private getERC20TokenBalances;
134
130
  private getTokenBalance;
135
131
  private getTokenMetadata;
136
132
  private detectTokensFromEvents;
137
- getTokenInfo(tokenAddress: string): Promise<TokenMetadata | null>;
138
- getTokenBalanceForAddress(address: string, tokenAddress: string): Promise<bigint>;
139
- getMultipleTokenBalances(address: string, tokenAddresses: string[]): Promise<Map<string, bigint>>;
140
- getAccountTokens(address: string): Promise<WarpChainAsset[]>;
141
- getTokenMetadataPublic(tokenAddress: string): Promise<TokenMetadata | null>;
142
- getChainInfo(): Promise<{
143
- chainId: string;
144
- blockTime: number;
145
- }>;
133
+ private getLogoUrl;
146
134
  }
147
135
 
148
136
  declare class WarpEvmExecutor implements AdapterWarpExecutor {
@@ -216,4 +204,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
216
204
  private parseNativeValue;
217
205
  }
218
206
 
219
- export { ArbitrumExplorers, BaseExplorers, EthereumExplorers, EvmExplorers, EvmLogoService, type ExplorerName, ExplorerUrls, NativeTokenArb, NativeTokenBase, NativeTokenEth, type TokenBalance, type TokenInfo, type TokenListResponse, type TokenMetadata$1 as TokenMetadata, WarpEvmConstants, WarpEvmDataLoader, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, createEvmAdapter, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter };
207
+ export { ArbitrumExplorers, BaseExplorers, EthereumExplorers, EvmExplorers, EvmLogoService, type ExplorerName, ExplorerUrls, NativeTokenArb, NativeTokenBase, NativeTokenEth, type TokenBalance, type TokenInfo, type TokenListResponse, type TokenMetadata, WarpEvmConstants, WarpEvmDataLoader, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, createEvmAdapter, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { WarpChainAsset, AdapterFactory, WarpClientConfig, Adapter, WarpChain, WarpChainEnv, WarpChainInfo, AdapterWarpDataLoader, WarpChainAccount, WarpDataLoaderOptions, WarpChainAction, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, Warp, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
1
+ import { WarpChainAsset, AdapterFactory, WarpClientConfig, Adapter, WarpChain, WarpChainEnv, WarpChainInfo, AdapterWarpDataLoader, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, Warp, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
2
2
  import { ethers } from 'ethers';
3
3
 
4
4
  declare const NativeTokenArb: WarpChainAsset;
@@ -88,7 +88,7 @@ declare class EvmLogoService {
88
88
  static getCacheSize(): number;
89
89
  }
90
90
 
91
- interface TokenMetadata$1 {
91
+ interface TokenMetadata {
92
92
  name: string;
93
93
  symbol: string;
94
94
  decimals: number;
@@ -97,7 +97,7 @@ interface TokenMetadata$1 {
97
97
  interface TokenBalance {
98
98
  tokenAddress: string;
99
99
  balance: bigint;
100
- metadata: TokenMetadata$1;
100
+ metadata: TokenMetadata;
101
101
  }
102
102
  interface TokenInfo {
103
103
  name?: string;
@@ -116,12 +116,6 @@ interface TokenListResponse {
116
116
  }>;
117
117
  }
118
118
 
119
- interface TokenMetadata {
120
- name: string;
121
- symbol: string;
122
- decimals: number;
123
- logoUrl?: string;
124
- }
125
119
  declare class WarpEvmDataLoader implements AdapterWarpDataLoader {
126
120
  private readonly config;
127
121
  private readonly chain;
@@ -129,20 +123,14 @@ declare class WarpEvmDataLoader implements AdapterWarpDataLoader {
129
123
  constructor(config: WarpClientConfig, chain: WarpChainInfo);
130
124
  getAccount(address: string): Promise<WarpChainAccount>;
131
125
  getAccountAssets(address: string): Promise<WarpChainAsset[]>;
126
+ getAsset(identifier: string): Promise<WarpChainAsset | null>;
127
+ getAction(identifier: string, awaitCompleted?: boolean): Promise<WarpChainAction | null>;
132
128
  getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]>;
133
129
  private getERC20TokenBalances;
134
130
  private getTokenBalance;
135
131
  private getTokenMetadata;
136
132
  private detectTokensFromEvents;
137
- getTokenInfo(tokenAddress: string): Promise<TokenMetadata | null>;
138
- getTokenBalanceForAddress(address: string, tokenAddress: string): Promise<bigint>;
139
- getMultipleTokenBalances(address: string, tokenAddresses: string[]): Promise<Map<string, bigint>>;
140
- getAccountTokens(address: string): Promise<WarpChainAsset[]>;
141
- getTokenMetadataPublic(tokenAddress: string): Promise<TokenMetadata | null>;
142
- getChainInfo(): Promise<{
143
- chainId: string;
144
- blockTime: number;
145
- }>;
133
+ private getLogoUrl;
146
134
  }
147
135
 
148
136
  declare class WarpEvmExecutor implements AdapterWarpExecutor {
@@ -216,4 +204,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
216
204
  private parseNativeValue;
217
205
  }
218
206
 
219
- export { ArbitrumExplorers, BaseExplorers, EthereumExplorers, EvmExplorers, EvmLogoService, type ExplorerName, ExplorerUrls, NativeTokenArb, NativeTokenBase, NativeTokenEth, type TokenBalance, type TokenInfo, type TokenListResponse, type TokenMetadata$1 as TokenMetadata, WarpEvmConstants, WarpEvmDataLoader, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, createEvmAdapter, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter };
207
+ export { ArbitrumExplorers, BaseExplorers, EthereumExplorers, EvmExplorers, EvmLogoService, type ExplorerName, ExplorerUrls, NativeTokenArb, NativeTokenBase, NativeTokenEth, type TokenBalance, type TokenInfo, type TokenListResponse, type TokenMetadata, WarpEvmConstants, WarpEvmDataLoader, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, createEvmAdapter, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter };
package/dist/index.js CHANGED
@@ -74,7 +74,7 @@ var FALLBACK_LOGOS = {
74
74
  "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png",
75
75
  "0x4200000000000000000000000000000000000006": "https://assets.coingecko.com/coins/images/2518/small/weth.png",
76
76
  "0x036CbD53842c5426634e7929541eC2318f3dCF7e": "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png",
77
- "0x808456652fdb597867f38412077A9182bf77359F": "https://assets.coingecko.com/coins/images/3318/small/euro-coin.png",
77
+ "0x808456652fdb597867f38412077A9182bf77359F": "https://assets.coingecko.com/coins/images/26045/standard/euro.png",
78
78
  "0xcbB7C0006F23900c38EB856149F799620fcb8A4a": "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
79
79
  }
80
80
  };
@@ -216,6 +216,143 @@ var EvmLogoService = class {
216
216
  }
217
217
  };
218
218
 
219
+ // src/tokens.ts
220
+ var KnownTokens = {
221
+ ethereum: {
222
+ mainnet: [
223
+ {
224
+ id: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
225
+ name: "USD Coin",
226
+ symbol: "USDC",
227
+ decimals: 6,
228
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
229
+ },
230
+ {
231
+ id: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
232
+ name: "Tether USD",
233
+ symbol: "USDT",
234
+ decimals: 6,
235
+ logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
236
+ },
237
+ {
238
+ id: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
239
+ name: "Wrapped Bitcoin",
240
+ symbol: "WBTC",
241
+ decimals: 8,
242
+ logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
243
+ },
244
+ {
245
+ id: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
246
+ name: "Wrapped Ether",
247
+ symbol: "WETH",
248
+ decimals: 18,
249
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
250
+ },
251
+ {
252
+ id: "0x6B175474E89094C44Da98b954EedeAC495271d0F",
253
+ name: "Dai Stablecoin",
254
+ symbol: "DAI",
255
+ decimals: 18,
256
+ logoUrl: "https://assets.coingecko.com/coins/images/9956/small/4943.png"
257
+ }
258
+ ],
259
+ testnet: [
260
+ {
261
+ id: "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
262
+ name: "USD Coin",
263
+ symbol: "USDC",
264
+ decimals: 6,
265
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
266
+ },
267
+ {
268
+ id: "0x7169D38820dfd117C3FA1f22a697dBA58d90BA06",
269
+ name: "Tether USD",
270
+ symbol: "USDT",
271
+ decimals: 6,
272
+ logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
273
+ },
274
+ {
275
+ id: "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9",
276
+ name: "Wrapped Ether",
277
+ symbol: "WETH",
278
+ decimals: 18,
279
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
280
+ }
281
+ ]
282
+ },
283
+ arbitrum: {
284
+ mainnet: [
285
+ {
286
+ id: "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8",
287
+ name: "USD Coin",
288
+ symbol: "USDC",
289
+ decimals: 6,
290
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
291
+ },
292
+ {
293
+ id: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
294
+ name: "Tether USD",
295
+ symbol: "USDT",
296
+ decimals: 6,
297
+ logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
298
+ },
299
+ {
300
+ id: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
301
+ name: "Wrapped Ether",
302
+ symbol: "WETH",
303
+ decimals: 18,
304
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
305
+ }
306
+ ]
307
+ },
308
+ base: {
309
+ mainnet: [
310
+ {
311
+ id: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
312
+ name: "USD Coin",
313
+ symbol: "USDC",
314
+ decimals: 6,
315
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
316
+ },
317
+ {
318
+ id: "0x4200000000000000000000000000000000000006",
319
+ name: "Wrapped Ether",
320
+ symbol: "WETH",
321
+ decimals: 18,
322
+ logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
323
+ },
324
+ {
325
+ id: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
326
+ name: "USD Coin",
327
+ symbol: "USDC",
328
+ decimals: 6,
329
+ logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
330
+ },
331
+ {
332
+ id: "0x808456652fdb597867f38412077A9182bf77359F",
333
+ name: "Euro Coin",
334
+ symbol: "EURC",
335
+ decimals: 6,
336
+ logoUrl: "https://assets.coingecko.com/coins/images/26045/standard/euro.png"
337
+ },
338
+ {
339
+ id: "0xcbB7C0006F23900c38EB856149F799620fcb8A4a",
340
+ name: "Coinbase Wrapped BTC",
341
+ symbol: "CBETH",
342
+ decimals: 8,
343
+ logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
344
+ }
345
+ ]
346
+ }
347
+ };
348
+ var findKnownTokenById = (chainName, id, env = "mainnet") => {
349
+ const chainTokens = KnownTokens[chainName]?.[env] || [];
350
+ return chainTokens.find((token) => token.id === id) || null;
351
+ };
352
+ var getKnownTokensForChain = (chainName, env = "mainnet") => {
353
+ return KnownTokens[chainName]?.[env] || [];
354
+ };
355
+
219
356
  // src/WarpEvmDataLoader.ts
220
357
  var ERC20_ABI = [
221
358
  "function balanceOf(address owner) view returns (uint256)",
@@ -224,111 +361,6 @@ var ERC20_ABI = [
224
361
  "function symbol() view returns (string)",
225
362
  "function totalSupply() view returns (uint256)"
226
363
  ];
227
- var KNOWN_TOKENS = {
228
- ethereum: {
229
- "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
230
- name: "USD Coin",
231
- symbol: "USDC",
232
- decimals: 6,
233
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
234
- },
235
- "0xdAC17F958D2ee523a2206206994597C13D831ec7": {
236
- name: "Tether USD",
237
- symbol: "USDT",
238
- decimals: 6,
239
- logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
240
- },
241
- "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": {
242
- name: "Wrapped Bitcoin",
243
- symbol: "WBTC",
244
- decimals: 8,
245
- logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
246
- },
247
- "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
248
- name: "Wrapped Ether",
249
- symbol: "WETH",
250
- decimals: 18,
251
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
252
- },
253
- "0x6B175474E89094C44Da98b954EedeAC495271d0F": {
254
- name: "Dai Stablecoin",
255
- symbol: "DAI",
256
- decimals: 18,
257
- logoUrl: "https://assets.coingecko.com/coins/images/9956/small/4943.png"
258
- },
259
- // Sepolia testnet tokens
260
- "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238": {
261
- name: "USD Coin",
262
- symbol: "USDC",
263
- decimals: 6,
264
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
265
- },
266
- "0x7169D38820dfd117C3FA1f22a697dBA58d90BA06": {
267
- name: "Tether USD",
268
- symbol: "USDT",
269
- decimals: 6,
270
- logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
271
- },
272
- "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9": {
273
- name: "Wrapped Ether",
274
- symbol: "WETH",
275
- decimals: 18,
276
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
277
- }
278
- },
279
- arbitrum: {
280
- "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
281
- name: "USD Coin",
282
- symbol: "USDC",
283
- decimals: 6,
284
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
285
- },
286
- "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
287
- name: "Tether USD",
288
- symbol: "USDT",
289
- decimals: 6,
290
- logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
291
- },
292
- "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": {
293
- name: "Wrapped Ether",
294
- symbol: "WETH",
295
- decimals: 18,
296
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
297
- }
298
- },
299
- base: {
300
- "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": {
301
- name: "USD Coin",
302
- symbol: "USDC",
303
- decimals: 6,
304
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
305
- },
306
- "0x4200000000000000000000000000000000000006": {
307
- name: "Wrapped Ether",
308
- symbol: "WETH",
309
- decimals: 18,
310
- logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
311
- },
312
- "0x036CbD53842c5426634e7929541eC2318f3dCF7e": {
313
- name: "USD Coin",
314
- symbol: "USDC",
315
- decimals: 6,
316
- logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
317
- },
318
- "0x808456652fdb597867f38412077A9182bf77359F": {
319
- name: "Euro Coin",
320
- symbol: "EURC",
321
- decimals: 6,
322
- logoUrl: "https://assets.coingecko.com/coins/images/3318/small/euro-coin.png"
323
- },
324
- "0xcbB7C0006F23900c38EB856149F799620fcb8A4a": {
325
- name: "Coinbase Wrapped BTC",
326
- symbol: "CBETH",
327
- decimals: 8,
328
- logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
329
- }
330
- }
331
- };
332
364
  var WarpEvmDataLoader = class {
333
365
  constructor(config, chain) {
334
366
  this.config = config;
@@ -338,47 +370,79 @@ var WarpEvmDataLoader = class {
338
370
  this.provider = new import_ethers.ethers.JsonRpcProvider(apiUrl, network);
339
371
  }
340
372
  async getAccount(address) {
373
+ const balance = await this.provider.getBalance(address);
374
+ return {
375
+ chain: this.chain.name,
376
+ address,
377
+ balance
378
+ };
379
+ }
380
+ async getAccountAssets(address) {
381
+ const account = await this.getAccount(address);
382
+ const tokenBalances = await this.getERC20TokenBalances(address);
383
+ let assets = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : [];
384
+ for (const tokenBalance of tokenBalances) {
385
+ if (tokenBalance.balance > 0n) {
386
+ const logoUrl = tokenBalance.metadata.logoUrl || await this.getLogoUrl(tokenBalance);
387
+ assets.push({
388
+ chain: this.chain.name,
389
+ identifier: tokenBalance.tokenAddress,
390
+ name: tokenBalance.metadata.name,
391
+ amount: tokenBalance.balance,
392
+ decimals: tokenBalance.metadata.decimals,
393
+ logoUrl: logoUrl || ""
394
+ });
395
+ }
396
+ }
397
+ return assets;
398
+ }
399
+ async getAsset(identifier) {
341
400
  try {
342
- const balance = await this.provider.getBalance(address);
401
+ const metadata = await this.getTokenMetadata(identifier);
402
+ if (!metadata) return null;
343
403
  return {
344
404
  chain: this.chain.name,
345
- address,
346
- balance
405
+ identifier,
406
+ name: metadata.name,
407
+ amount: 0n,
408
+ decimals: metadata.decimals,
409
+ logoUrl: metadata.logoUrl || ""
347
410
  };
348
411
  } catch (error) {
349
- throw new Error(`Failed to get account balance for ${address}: ${error}`);
412
+ return null;
350
413
  }
351
414
  }
352
- async getAccountAssets(address) {
415
+ async getAction(identifier, awaitCompleted = false) {
353
416
  try {
354
- const accountReq = this.getAccount(address);
355
- const tokenBalancesReq = this.getERC20TokenBalances(address);
356
- const [account, tokenBalances] = await Promise.all([accountReq, tokenBalancesReq]);
357
- const assets = [];
358
- if (account.balance > 0n) {
359
- assets.push({ ...this.chain.nativeToken, amount: account.balance });
360
- }
361
- for (const tokenBalance of tokenBalances) {
362
- if (tokenBalance.balance > 0n) {
363
- const logoUrl = tokenBalance.metadata.logoUrl || await EvmLogoService.getLogoUrl(
364
- this.chain.name,
365
- tokenBalance.tokenAddress,
366
- tokenBalance.metadata.name,
367
- tokenBalance.metadata.symbol
368
- );
369
- assets.push({
370
- chain: this.chain.name,
371
- identifier: tokenBalance.tokenAddress,
372
- name: tokenBalance.metadata.name,
373
- amount: tokenBalance.balance,
374
- decimals: tokenBalance.metadata.decimals,
375
- logoUrl: logoUrl || ""
376
- });
417
+ const tx = await this.provider.getTransaction(identifier);
418
+ if (!tx) return null;
419
+ const receipt = await this.provider.getTransactionReceipt(identifier);
420
+ const block = await this.provider.getBlock(tx.blockNumber || "latest");
421
+ return {
422
+ chain: this.chain.name,
423
+ id: tx.hash || identifier,
424
+ receiver: tx.to || "",
425
+ sender: tx.from,
426
+ value: tx.value,
427
+ function: tx.data && tx.data !== "0x" ? "contract_call" : "",
428
+ status: receipt?.status === 1 ? "success" : receipt?.status === 0 ? "failed" : "pending",
429
+ createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1e3).toISOString() : (/* @__PURE__ */ new Date()).toISOString(),
430
+ error: receipt?.status === 0 ? "Transaction failed" : null,
431
+ tx: {
432
+ hash: tx.hash || "",
433
+ from: tx.from,
434
+ to: tx.to || "",
435
+ value: tx.value.toString(),
436
+ data: tx.data || "0x",
437
+ gasLimit: tx.gasLimit?.toString() || "0",
438
+ gasPrice: tx.gasPrice?.toString() || "0",
439
+ blockNumber: tx.blockNumber || 0,
440
+ blockHash: tx.blockHash || "",
441
+ transactionIndex: tx.index || 0
377
442
  }
378
- }
379
- return assets;
443
+ };
380
444
  } catch (error) {
381
- throw new Error(`Failed to get account assets for ${address}: ${error}`);
445
+ return null;
382
446
  }
383
447
  }
384
448
  async getAccountActions(address, options) {
@@ -386,15 +450,16 @@ var WarpEvmDataLoader = class {
386
450
  }
387
451
  async getERC20TokenBalances(address) {
388
452
  const tokenBalances = [];
389
- const knownTokens = KNOWN_TOKENS[this.chain.name] || {};
390
- for (const [tokenAddress, metadata] of Object.entries(knownTokens)) {
453
+ const env = this.config.env === "devnet" ? "testnet" : this.config.env;
454
+ const knownTokens = getKnownTokensForChain(this.chain.name, env);
455
+ for (const token of knownTokens) {
391
456
  try {
392
- const balance = await this.getTokenBalance(address, tokenAddress);
457
+ const balance = await this.getTokenBalance(address, token.id);
393
458
  if (balance > 0n) {
394
459
  tokenBalances.push({
395
- tokenAddress,
460
+ tokenAddress: token.id,
396
461
  balance,
397
- metadata
462
+ metadata: token
398
463
  });
399
464
  }
400
465
  } catch (error) {
@@ -402,7 +467,7 @@ var WarpEvmDataLoader = class {
402
467
  }
403
468
  const additionalTokens = await this.detectTokensFromEvents(address);
404
469
  for (const tokenAddress of additionalTokens) {
405
- if (!knownTokens[tokenAddress]) {
470
+ if (!findKnownTokenById(this.chain.name, tokenAddress, env)) {
406
471
  try {
407
472
  const metadata = await this.getTokenMetadata(tokenAddress);
408
473
  const balance = await this.getTokenBalance(address, tokenAddress);
@@ -420,40 +485,32 @@ var WarpEvmDataLoader = class {
420
485
  return tokenBalances;
421
486
  }
422
487
  async getTokenBalance(address, tokenAddress) {
423
- try {
424
- const contract = new import_ethers.ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
425
- const balance = await contract.balanceOf(address);
426
- return balance;
427
- } catch (error) {
428
- throw new Error(`Failed to get token balance: ${error}`);
429
- }
488
+ const contract = new import_ethers.ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
489
+ const balance = await contract.balanceOf(address);
490
+ return balance;
430
491
  }
431
492
  async getTokenMetadata(tokenAddress) {
432
- try {
433
- const tokenInfo = await EvmLogoService.getTokenInfo(this.chain.name, tokenAddress);
434
- if (tokenInfo.name && tokenInfo.symbol && tokenInfo.decimals !== void 0) {
435
- return {
436
- name: tokenInfo.name,
437
- symbol: tokenInfo.symbol,
438
- decimals: tokenInfo.decimals,
439
- logoUrl: tokenInfo.logoURI
440
- };
441
- }
442
- const contract = new import_ethers.ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
443
- const [name, symbol, decimals] = await Promise.all([
444
- contract.name().catch(() => tokenInfo.name || "Unknown Token"),
445
- contract.symbol().catch(() => tokenInfo.symbol || "UNKNOWN"),
446
- contract.decimals().catch(() => tokenInfo.decimals || 18)
447
- ]);
493
+ const tokenInfo = await EvmLogoService.getTokenInfo(this.chain.name, tokenAddress);
494
+ if (tokenInfo.name && tokenInfo.symbol && tokenInfo.decimals !== void 0) {
448
495
  return {
449
- name: name || tokenInfo.name || "Unknown Token",
450
- symbol: symbol || tokenInfo.symbol || "UNKNOWN",
451
- decimals: decimals || tokenInfo.decimals || 18,
496
+ name: tokenInfo.name,
497
+ symbol: tokenInfo.symbol,
498
+ decimals: tokenInfo.decimals,
452
499
  logoUrl: tokenInfo.logoURI
453
500
  };
454
- } catch (error) {
455
- throw new Error(`Failed to get token metadata: ${error}`);
456
501
  }
502
+ const contract = new import_ethers.ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
503
+ const [name, symbol, decimals] = await Promise.all([
504
+ contract.name().catch(() => tokenInfo.name || "Unknown Token"),
505
+ contract.symbol().catch(() => tokenInfo.symbol || "UNKNOWN"),
506
+ contract.decimals().catch(() => tokenInfo.decimals || 18)
507
+ ]);
508
+ return {
509
+ name: name || tokenInfo.name || "Unknown Token",
510
+ symbol: symbol || tokenInfo.symbol || "UNKNOWN",
511
+ decimals: decimals || tokenInfo.decimals || 18,
512
+ logoUrl: tokenInfo.logoURI
513
+ };
457
514
  }
458
515
  async detectTokensFromEvents(address) {
459
516
  try {
@@ -462,13 +519,7 @@ var WarpEvmDataLoader = class {
462
519
  const filter = {
463
520
  fromBlock,
464
521
  toBlock: currentBlock,
465
- topics: [
466
- import_ethers.ethers.id("Transfer(address,address,uint256)"),
467
- null,
468
- // from address (any)
469
- import_ethers.ethers.zeroPadValue(address, 32)
470
- // to address (our target)
471
- ]
522
+ topics: [import_ethers.ethers.id("Transfer(address,address,uint256)"), null, import_ethers.ethers.zeroPadValue(address, 32)]
472
523
  };
473
524
  const logs = await this.provider.getLogs(filter);
474
525
  const tokenAddresses = /* @__PURE__ */ new Set();
@@ -480,56 +531,13 @@ var WarpEvmDataLoader = class {
480
531
  return [];
481
532
  }
482
533
  }
483
- // Additional utility methods for enhanced token support
484
- async getTokenInfo(tokenAddress) {
485
- try {
486
- return await this.getTokenMetadata(tokenAddress);
487
- } catch (error) {
488
- return null;
489
- }
490
- }
491
- async getTokenBalanceForAddress(address, tokenAddress) {
492
- try {
493
- return await this.getTokenBalance(address, tokenAddress);
494
- } catch (error) {
495
- throw new Error(`Failed to get token balance for ${tokenAddress}: ${error}`);
496
- }
497
- }
498
- async getMultipleTokenBalances(address, tokenAddresses) {
499
- const balances = /* @__PURE__ */ new Map();
500
- await Promise.all(
501
- tokenAddresses.map(async (tokenAddress) => {
502
- try {
503
- const balance = await this.getTokenBalance(address, tokenAddress);
504
- balances.set(tokenAddress, balance);
505
- } catch (error) {
506
- balances.set(tokenAddress, 0n);
507
- }
508
- })
534
+ async getLogoUrl(tokenBalance) {
535
+ return await EvmLogoService.getLogoUrl(
536
+ this.chain.name,
537
+ tokenBalance.tokenAddress,
538
+ tokenBalance.metadata.name,
539
+ tokenBalance.metadata.symbol
509
540
  );
510
- return balances;
511
- }
512
- async getAccountTokens(address) {
513
- return this.getAccountAssets(address);
514
- }
515
- async getTokenMetadataPublic(tokenAddress) {
516
- try {
517
- return await this.getTokenMetadata(tokenAddress);
518
- } catch (error) {
519
- return null;
520
- }
521
- }
522
- async getChainInfo() {
523
- try {
524
- const network = await this.provider.getNetwork();
525
- const latestBlock = await this.provider.getBlock("latest");
526
- return {
527
- chainId: network.chainId.toString(),
528
- blockTime: latestBlock?.timestamp ? Date.now() / 1e3 - latestBlock.timestamp : 12
529
- };
530
- } catch (error) {
531
- throw new Error(`Failed to get chain info: ${error}`);
532
- }
533
541
  }
534
542
  };
535
543