@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 +7 -19
- package/dist/index.d.ts +7 -19
- package/dist/index.js +235 -227
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +235 -227
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WarpChainAsset, AdapterFactory, WarpClientConfig, Adapter, WarpChain, WarpChainEnv, WarpChainInfo, AdapterWarpDataLoader, WarpChainAccount,
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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/
|
|
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
|
|
401
|
+
const metadata = await this.getTokenMetadata(identifier);
|
|
402
|
+
if (!metadata) return null;
|
|
343
403
|
return {
|
|
344
404
|
chain: this.chain.name,
|
|
345
|
-
|
|
346
|
-
|
|
405
|
+
identifier,
|
|
406
|
+
name: metadata.name,
|
|
407
|
+
amount: 0n,
|
|
408
|
+
decimals: metadata.decimals,
|
|
409
|
+
logoUrl: metadata.logoUrl || ""
|
|
347
410
|
};
|
|
348
411
|
} catch (error) {
|
|
349
|
-
|
|
412
|
+
return null;
|
|
350
413
|
}
|
|
351
414
|
}
|
|
352
|
-
async
|
|
415
|
+
async getAction(identifier, awaitCompleted = false) {
|
|
353
416
|
try {
|
|
354
|
-
const
|
|
355
|
-
|
|
356
|
-
const
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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
|
-
|
|
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
|
|
390
|
-
|
|
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,
|
|
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 (!
|
|
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
|
-
|
|
424
|
-
|
|
425
|
-
|
|
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
|
-
|
|
433
|
-
|
|
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:
|
|
450
|
-
symbol:
|
|
451
|
-
decimals:
|
|
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
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
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
|
|