@vleap/warps-adapter-evm 0.2.0-alpha.5 → 0.2.0-alpha.7
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.mts +7 -3
- package/dist/index.d.ts +7 -3
- package/dist/index.js +282 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +278 -27
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/README.md +0 -400
package/dist/index.d.mts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { AdapterFactory, WarpClientConfig, Adapter, WarpChainEnv, CombinedWarpBuilder, Warp, BaseWarpBuilder, WarpCacheConfig, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer,
|
|
1
|
+
import { WarpChain, AdapterFactory, WarpClientConfig, Adapter, WarpChainEnv, CombinedWarpBuilder, Warp, BaseWarpBuilder, WarpCacheConfig, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
|
|
4
|
+
declare const ChainNameArbitrum: WarpChain;
|
|
4
5
|
declare const getArbitrumAdapter: AdapterFactory;
|
|
5
6
|
|
|
7
|
+
declare const ChainNameBase: WarpChain;
|
|
6
8
|
declare const getBaseAdapter: AdapterFactory;
|
|
7
9
|
|
|
8
10
|
declare const getAllEvmAdapters: (config: WarpClientConfig, fallback?: Adapter) => Adapter[];
|
|
11
|
+
declare const getAllEvmChainNames: () => WarpChain[];
|
|
9
12
|
|
|
13
|
+
declare const ChainNameEthereum: WarpChain;
|
|
10
14
|
declare const getEthereumAdapter: AdapterFactory;
|
|
11
15
|
|
|
12
16
|
interface EvmChainConfig {
|
|
@@ -113,7 +117,7 @@ declare class WarpEvmExecutor implements AdapterWarpExecutor {
|
|
|
113
117
|
declare class WarpEvmExplorer implements AdapterWarpExplorer {
|
|
114
118
|
private readonly chain;
|
|
115
119
|
private readonly config;
|
|
116
|
-
constructor(chain:
|
|
120
|
+
constructor(chain: WarpChainInfo, config: WarpClientConfig);
|
|
117
121
|
private getExplorers;
|
|
118
122
|
private getPrimaryExplorer;
|
|
119
123
|
private getExplorerUrlByName;
|
|
@@ -150,4 +154,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
|
|
|
150
154
|
private parseNativeValue;
|
|
151
155
|
}
|
|
152
156
|
|
|
153
|
-
export { ArbitrumExplorers, BaseExplorers, EVM_CHAIN_CONFIGS, EthereumExplorers, type EvmChainConfig, EvmExplorers, type ExplorerName, ExplorerUrls, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmChainConfig, getEvmExplorerUrl };
|
|
157
|
+
export { ArbitrumExplorers, BaseExplorers, ChainNameArbitrum, ChainNameBase, ChainNameEthereum, EVM_CHAIN_CONFIGS, EthereumExplorers, type EvmChainConfig, EvmExplorers, type ExplorerName, ExplorerUrls, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmChainConfig, getEvmExplorerUrl };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { AdapterFactory, WarpClientConfig, Adapter, WarpChainEnv, CombinedWarpBuilder, Warp, BaseWarpBuilder, WarpCacheConfig, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer,
|
|
1
|
+
import { WarpChain, AdapterFactory, WarpClientConfig, Adapter, WarpChainEnv, CombinedWarpBuilder, Warp, BaseWarpBuilder, WarpCacheConfig, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
|
|
4
|
+
declare const ChainNameArbitrum: WarpChain;
|
|
4
5
|
declare const getArbitrumAdapter: AdapterFactory;
|
|
5
6
|
|
|
7
|
+
declare const ChainNameBase: WarpChain;
|
|
6
8
|
declare const getBaseAdapter: AdapterFactory;
|
|
7
9
|
|
|
8
10
|
declare const getAllEvmAdapters: (config: WarpClientConfig, fallback?: Adapter) => Adapter[];
|
|
11
|
+
declare const getAllEvmChainNames: () => WarpChain[];
|
|
9
12
|
|
|
13
|
+
declare const ChainNameEthereum: WarpChain;
|
|
10
14
|
declare const getEthereumAdapter: AdapterFactory;
|
|
11
15
|
|
|
12
16
|
interface EvmChainConfig {
|
|
@@ -113,7 +117,7 @@ declare class WarpEvmExecutor implements AdapterWarpExecutor {
|
|
|
113
117
|
declare class WarpEvmExplorer implements AdapterWarpExplorer {
|
|
114
118
|
private readonly chain;
|
|
115
119
|
private readonly config;
|
|
116
|
-
constructor(chain:
|
|
120
|
+
constructor(chain: WarpChainInfo, config: WarpClientConfig);
|
|
117
121
|
private getExplorers;
|
|
118
122
|
private getPrimaryExplorer;
|
|
119
123
|
private getExplorerUrlByName;
|
|
@@ -150,4 +154,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
|
|
|
150
154
|
private parseNativeValue;
|
|
151
155
|
}
|
|
152
156
|
|
|
153
|
-
export { ArbitrumExplorers, BaseExplorers, EVM_CHAIN_CONFIGS, EthereumExplorers, type EvmChainConfig, EvmExplorers, type ExplorerName, ExplorerUrls, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmChainConfig, getEvmExplorerUrl };
|
|
157
|
+
export { ArbitrumExplorers, BaseExplorers, ChainNameArbitrum, ChainNameBase, ChainNameEthereum, EVM_CHAIN_CONFIGS, EthereumExplorers, type EvmChainConfig, EvmExplorers, type ExplorerName, ExplorerUrls, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmChainConfig, getEvmExplorerUrl };
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,9 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
ArbitrumExplorers: () => ArbitrumExplorers,
|
|
24
24
|
BaseExplorers: () => BaseExplorers,
|
|
25
|
+
ChainNameArbitrum: () => ChainNameArbitrum,
|
|
26
|
+
ChainNameBase: () => ChainNameBase,
|
|
27
|
+
ChainNameEthereum: () => ChainNameEthereum,
|
|
25
28
|
EVM_CHAIN_CONFIGS: () => EVM_CHAIN_CONFIGS,
|
|
26
29
|
EthereumExplorers: () => EthereumExplorers,
|
|
27
30
|
EvmExplorers: () => EvmExplorers,
|
|
@@ -33,6 +36,7 @@ __export(index_exports, {
|
|
|
33
36
|
WarpEvmResults: () => WarpEvmResults,
|
|
34
37
|
WarpEvmSerializer: () => WarpEvmSerializer,
|
|
35
38
|
getAllEvmAdapters: () => getAllEvmAdapters,
|
|
39
|
+
getAllEvmChainNames: () => getAllEvmChainNames,
|
|
36
40
|
getArbitrumAdapter: () => getArbitrumAdapter,
|
|
37
41
|
getBaseAdapter: () => getBaseAdapter,
|
|
38
42
|
getEthereumAdapter: () => getEthereumAdapter,
|
|
@@ -240,9 +244,242 @@ var WarpEvmBuilder = class {
|
|
|
240
244
|
}
|
|
241
245
|
};
|
|
242
246
|
|
|
247
|
+
// src/WarpEvmDataLoader.ts
|
|
248
|
+
var import_ethers2 = require("ethers");
|
|
249
|
+
var ERC20_ABI = [
|
|
250
|
+
"function balanceOf(address owner) view returns (uint256)",
|
|
251
|
+
"function decimals() view returns (uint8)",
|
|
252
|
+
"function name() view returns (string)",
|
|
253
|
+
"function symbol() view returns (string)",
|
|
254
|
+
"function totalSupply() view returns (uint256)"
|
|
255
|
+
];
|
|
256
|
+
var KNOWN_TOKENS = {
|
|
257
|
+
ethereum: {
|
|
258
|
+
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48": {
|
|
259
|
+
name: "USD Coin",
|
|
260
|
+
symbol: "USDC",
|
|
261
|
+
decimals: 6,
|
|
262
|
+
logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
|
|
263
|
+
},
|
|
264
|
+
"0xdAC17F958D2ee523a2206206994597C13D831ec7": {
|
|
265
|
+
name: "Tether USD",
|
|
266
|
+
symbol: "USDT",
|
|
267
|
+
decimals: 6,
|
|
268
|
+
logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
|
|
269
|
+
},
|
|
270
|
+
"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599": {
|
|
271
|
+
name: "Wrapped Bitcoin",
|
|
272
|
+
symbol: "WBTC",
|
|
273
|
+
decimals: 8,
|
|
274
|
+
logoUrl: "https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png"
|
|
275
|
+
},
|
|
276
|
+
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
|
|
277
|
+
name: "Wrapped Ether",
|
|
278
|
+
symbol: "WETH",
|
|
279
|
+
decimals: 18,
|
|
280
|
+
logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
|
|
281
|
+
},
|
|
282
|
+
"0x6B175474E89094C44Da98b954EedeAC495271d0F": {
|
|
283
|
+
name: "Dai Stablecoin",
|
|
284
|
+
symbol: "DAI",
|
|
285
|
+
decimals: 18,
|
|
286
|
+
logoUrl: "https://assets.coingecko.com/coins/images/9956/small/4943.png"
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
arbitrum: {
|
|
290
|
+
"0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8": {
|
|
291
|
+
name: "USD Coin",
|
|
292
|
+
symbol: "USDC",
|
|
293
|
+
decimals: 6,
|
|
294
|
+
logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
|
|
295
|
+
},
|
|
296
|
+
"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9": {
|
|
297
|
+
name: "Tether USD",
|
|
298
|
+
symbol: "USDT",
|
|
299
|
+
decimals: 6,
|
|
300
|
+
logoUrl: "https://assets.coingecko.com/coins/images/325/small/Tether.png"
|
|
301
|
+
},
|
|
302
|
+
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1": {
|
|
303
|
+
name: "Wrapped Ether",
|
|
304
|
+
symbol: "WETH",
|
|
305
|
+
decimals: 18,
|
|
306
|
+
logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
base: {
|
|
310
|
+
"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913": {
|
|
311
|
+
name: "USD Coin",
|
|
312
|
+
symbol: "USDC",
|
|
313
|
+
decimals: 6,
|
|
314
|
+
logoUrl: "https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png"
|
|
315
|
+
},
|
|
316
|
+
"0x4200000000000000000000000000000000000006": {
|
|
317
|
+
name: "Wrapped Ether",
|
|
318
|
+
symbol: "WETH",
|
|
319
|
+
decimals: 18,
|
|
320
|
+
logoUrl: "https://assets.coingecko.com/coins/images/2518/small/weth.png"
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
var WarpEvmDataLoader = class {
|
|
325
|
+
constructor(config, chain) {
|
|
326
|
+
this.config = config;
|
|
327
|
+
this.chain = chain;
|
|
328
|
+
this.provider = new import_ethers2.ethers.JsonRpcProvider(getEvmApiUrl(this.config.env, this.chain.name));
|
|
329
|
+
this.chainConfig = getEvmChainConfig(this.chain.name, this.config.env);
|
|
330
|
+
}
|
|
331
|
+
async getAccount(address) {
|
|
332
|
+
try {
|
|
333
|
+
const balance = await this.provider.getBalance(address);
|
|
334
|
+
return {
|
|
335
|
+
address,
|
|
336
|
+
balance
|
|
337
|
+
};
|
|
338
|
+
} catch (error) {
|
|
339
|
+
throw new Error(`Failed to get account balance for ${address}: ${error}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
async getAccountAssets(address) {
|
|
343
|
+
try {
|
|
344
|
+
const assets = [];
|
|
345
|
+
const tokenBalances = await this.getERC20TokenBalances(address);
|
|
346
|
+
for (const tokenBalance of tokenBalances) {
|
|
347
|
+
if (tokenBalance.balance > 0n) {
|
|
348
|
+
assets.push({
|
|
349
|
+
identifier: tokenBalance.tokenAddress,
|
|
350
|
+
name: tokenBalance.metadata.name,
|
|
351
|
+
amount: tokenBalance.balance,
|
|
352
|
+
decimals: tokenBalance.metadata.decimals,
|
|
353
|
+
logoUrl: tokenBalance.metadata.logoUrl || ""
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return assets;
|
|
358
|
+
} catch (error) {
|
|
359
|
+
throw new Error(`Failed to get account assets for ${address}: ${error}`);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
async getERC20TokenBalances(address) {
|
|
363
|
+
const tokenBalances = [];
|
|
364
|
+
const knownTokens = KNOWN_TOKENS[this.chain.name] || {};
|
|
365
|
+
for (const [tokenAddress, metadata] of Object.entries(knownTokens)) {
|
|
366
|
+
try {
|
|
367
|
+
const balance = await this.getTokenBalance(address, tokenAddress);
|
|
368
|
+
if (balance > 0n) {
|
|
369
|
+
tokenBalances.push({
|
|
370
|
+
tokenAddress,
|
|
371
|
+
balance,
|
|
372
|
+
metadata
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
} catch (error) {
|
|
376
|
+
console.warn(`Failed to get balance for token ${tokenAddress}: ${error}`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
const additionalTokens = await this.detectTokensFromEvents(address);
|
|
380
|
+
for (const tokenAddress of additionalTokens) {
|
|
381
|
+
if (!knownTokens[tokenAddress]) {
|
|
382
|
+
try {
|
|
383
|
+
const metadata = await this.getTokenMetadata(tokenAddress);
|
|
384
|
+
const balance = await this.getTokenBalance(address, tokenAddress);
|
|
385
|
+
if (balance > 0n) {
|
|
386
|
+
tokenBalances.push({
|
|
387
|
+
tokenAddress,
|
|
388
|
+
balance,
|
|
389
|
+
metadata
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
} catch (error) {
|
|
393
|
+
console.warn(`Failed to get metadata/balance for detected token ${tokenAddress}: ${error}`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return tokenBalances;
|
|
398
|
+
}
|
|
399
|
+
async getTokenBalance(address, tokenAddress) {
|
|
400
|
+
try {
|
|
401
|
+
const contract = new import_ethers2.ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
|
|
402
|
+
const balance = await contract.balanceOf(address);
|
|
403
|
+
return balance;
|
|
404
|
+
} catch (error) {
|
|
405
|
+
throw new Error(`Failed to get token balance: ${error}`);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
async getTokenMetadata(tokenAddress) {
|
|
409
|
+
try {
|
|
410
|
+
const contract = new import_ethers2.ethers.Contract(tokenAddress, ERC20_ABI, this.provider);
|
|
411
|
+
const [name, symbol, decimals] = await Promise.all([contract.name(), contract.symbol(), contract.decimals()]);
|
|
412
|
+
return {
|
|
413
|
+
name: name || "Unknown Token",
|
|
414
|
+
symbol: symbol || "UNKNOWN",
|
|
415
|
+
decimals: decimals || 18
|
|
416
|
+
};
|
|
417
|
+
} catch (error) {
|
|
418
|
+
throw new Error(`Failed to get token metadata: ${error}`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
async detectTokensFromEvents(address) {
|
|
422
|
+
try {
|
|
423
|
+
const currentBlock = await this.provider.getBlockNumber();
|
|
424
|
+
const fromBlock = Math.max(0, currentBlock - 1e4);
|
|
425
|
+
const filter = {
|
|
426
|
+
fromBlock,
|
|
427
|
+
toBlock: currentBlock,
|
|
428
|
+
topics: [
|
|
429
|
+
import_ethers2.ethers.id("Transfer(address,address,uint256)"),
|
|
430
|
+
null,
|
|
431
|
+
// from address (any)
|
|
432
|
+
import_ethers2.ethers.zeroPadValue(address, 32)
|
|
433
|
+
// to address (our target)
|
|
434
|
+
]
|
|
435
|
+
};
|
|
436
|
+
const logs = await this.provider.getLogs(filter);
|
|
437
|
+
const tokenAddresses = /* @__PURE__ */ new Set();
|
|
438
|
+
for (const log of logs) {
|
|
439
|
+
tokenAddresses.add(log.address);
|
|
440
|
+
}
|
|
441
|
+
return Array.from(tokenAddresses);
|
|
442
|
+
} catch (error) {
|
|
443
|
+
console.warn(`Failed to detect tokens from events: ${error}`);
|
|
444
|
+
return [];
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
// Additional utility methods for enhanced token support
|
|
448
|
+
async getTokenInfo(tokenAddress) {
|
|
449
|
+
try {
|
|
450
|
+
return await this.getTokenMetadata(tokenAddress);
|
|
451
|
+
} catch (error) {
|
|
452
|
+
console.warn(`Failed to get token info for ${tokenAddress}: ${error}`);
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
async getTokenBalanceForAddress(address, tokenAddress) {
|
|
457
|
+
try {
|
|
458
|
+
return await this.getTokenBalance(address, tokenAddress);
|
|
459
|
+
} catch (error) {
|
|
460
|
+
throw new Error(`Failed to get token balance for ${tokenAddress}: ${error}`);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
async getMultipleTokenBalances(address, tokenAddresses) {
|
|
464
|
+
const balances = /* @__PURE__ */ new Map();
|
|
465
|
+
await Promise.all(
|
|
466
|
+
tokenAddresses.map(async (tokenAddress) => {
|
|
467
|
+
try {
|
|
468
|
+
const balance = await this.getTokenBalance(address, tokenAddress);
|
|
469
|
+
balances.set(tokenAddress, balance);
|
|
470
|
+
} catch (error) {
|
|
471
|
+
console.warn(`Failed to get balance for token ${tokenAddress}: ${error}`);
|
|
472
|
+
balances.set(tokenAddress, 0n);
|
|
473
|
+
}
|
|
474
|
+
})
|
|
475
|
+
);
|
|
476
|
+
return balances;
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
|
|
243
480
|
// src/WarpEvmExecutor.ts
|
|
244
481
|
var import_warps3 = require("@vleap/warps");
|
|
245
|
-
var
|
|
482
|
+
var import_ethers4 = require("ethers");
|
|
246
483
|
|
|
247
484
|
// src/constants.ts
|
|
248
485
|
var WarpEvmConstants = {
|
|
@@ -322,7 +559,7 @@ var import_warps2 = require("@vleap/warps");
|
|
|
322
559
|
|
|
323
560
|
// src/WarpEvmSerializer.ts
|
|
324
561
|
var import_warps = require("@vleap/warps");
|
|
325
|
-
var
|
|
562
|
+
var import_ethers3 = require("ethers");
|
|
326
563
|
var SplitParamsRegex = new RegExp(`${import_warps.WarpConstants.ArgParamsSeparator}(.*)`);
|
|
327
564
|
var WarpEvmSerializer = class {
|
|
328
565
|
constructor() {
|
|
@@ -330,10 +567,10 @@ var WarpEvmSerializer = class {
|
|
|
330
567
|
}
|
|
331
568
|
typedToString(value) {
|
|
332
569
|
if (typeof value === "string") {
|
|
333
|
-
if (
|
|
570
|
+
if (import_ethers3.ethers.isAddress(value)) {
|
|
334
571
|
return `address:${value}`;
|
|
335
572
|
}
|
|
336
|
-
if (
|
|
573
|
+
if (import_ethers3.ethers.isHexString(value) && !import_ethers3.ethers.isAddress(value)) {
|
|
337
574
|
return `hex:${value}`;
|
|
338
575
|
}
|
|
339
576
|
return `string:${value}`;
|
|
@@ -541,7 +778,7 @@ var WarpEvmExecutor = class {
|
|
|
541
778
|
constructor(config) {
|
|
542
779
|
this.config = config;
|
|
543
780
|
this.serializer = new WarpEvmSerializer();
|
|
544
|
-
this.provider = new
|
|
781
|
+
this.provider = new import_ethers4.ethers.JsonRpcProvider(getEvmApiUrl(config.env));
|
|
545
782
|
this.results = new WarpEvmResults(config);
|
|
546
783
|
}
|
|
547
784
|
async createTransaction(executable) {
|
|
@@ -560,9 +797,9 @@ var WarpEvmExecutor = class {
|
|
|
560
797
|
return tx;
|
|
561
798
|
}
|
|
562
799
|
async createTransferTransaction(executable) {
|
|
563
|
-
const userWallet = this.config.user?.wallets?.[executable.chain];
|
|
800
|
+
const userWallet = this.config.user?.wallets?.[executable.chain.name];
|
|
564
801
|
if (!userWallet) throw new Error("WarpEvmExecutor: createTransfer - user address not set");
|
|
565
|
-
if (!
|
|
802
|
+
if (!import_ethers4.ethers.isAddress(executable.destination)) {
|
|
566
803
|
throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`);
|
|
567
804
|
}
|
|
568
805
|
if (executable.value < 0) {
|
|
@@ -576,20 +813,20 @@ var WarpEvmExecutor = class {
|
|
|
576
813
|
return this.estimateGasAndSetDefaults(tx, userWallet);
|
|
577
814
|
}
|
|
578
815
|
async createContractCallTransaction(executable) {
|
|
579
|
-
const userWallet = this.config.user?.wallets?.[executable.chain];
|
|
816
|
+
const userWallet = this.config.user?.wallets?.[executable.chain.name];
|
|
580
817
|
if (!userWallet) throw new Error("WarpEvmExecutor: createContractCall - user address not set");
|
|
581
818
|
const action = (0, import_warps3.getWarpActionByIndex)(executable.warp, executable.action);
|
|
582
819
|
if (!action || !("func" in action) || !action.func) {
|
|
583
820
|
throw new Error("WarpEvmExecutor: Contract action must have a function name");
|
|
584
821
|
}
|
|
585
|
-
if (!
|
|
822
|
+
if (!import_ethers4.ethers.isAddress(executable.destination)) {
|
|
586
823
|
throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`);
|
|
587
824
|
}
|
|
588
825
|
if (executable.value < 0) {
|
|
589
826
|
throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`);
|
|
590
827
|
}
|
|
591
828
|
try {
|
|
592
|
-
const iface = new
|
|
829
|
+
const iface = new import_ethers4.ethers.Interface([`function ${action.func}`]);
|
|
593
830
|
const encodedData = iface.encodeFunctionData(action.func, executable.args);
|
|
594
831
|
const tx = {
|
|
595
832
|
to: executable.destination,
|
|
@@ -609,11 +846,11 @@ var WarpEvmExecutor = class {
|
|
|
609
846
|
if (!action.func) {
|
|
610
847
|
throw new Error("WarpEvmExecutor: Query action must have a function name");
|
|
611
848
|
}
|
|
612
|
-
if (!
|
|
849
|
+
if (!import_ethers4.ethers.isAddress(executable.destination)) {
|
|
613
850
|
throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`);
|
|
614
851
|
}
|
|
615
852
|
try {
|
|
616
|
-
const iface = new
|
|
853
|
+
const iface = new import_ethers4.ethers.Interface([`function ${action.func}`]);
|
|
617
854
|
const encodedData = iface.encodeFunctionData(action.func, executable.args);
|
|
618
855
|
const result = await this.provider.call({
|
|
619
856
|
to: executable.destination,
|
|
@@ -632,7 +869,7 @@ var WarpEvmExecutor = class {
|
|
|
632
869
|
success: isSuccess,
|
|
633
870
|
warp: executable.warp,
|
|
634
871
|
action: executable.action,
|
|
635
|
-
user: this.config.user?.wallets?.[executable.chain] || null,
|
|
872
|
+
user: this.config.user?.wallets?.[executable.chain.name] || null,
|
|
636
873
|
txHash: null,
|
|
637
874
|
next,
|
|
638
875
|
values,
|
|
@@ -644,7 +881,7 @@ var WarpEvmExecutor = class {
|
|
|
644
881
|
success: false,
|
|
645
882
|
warp: executable.warp,
|
|
646
883
|
action: executable.action,
|
|
647
|
-
user: this.config.user?.wallets?.[executable.chain] || null,
|
|
884
|
+
user: this.config.user?.wallets?.[executable.chain.name] || null,
|
|
648
885
|
txHash: null,
|
|
649
886
|
next: null,
|
|
650
887
|
values: [],
|
|
@@ -657,12 +894,12 @@ var WarpEvmExecutor = class {
|
|
|
657
894
|
const typedValue = this.serializer.stringToTyped(value);
|
|
658
895
|
switch (type) {
|
|
659
896
|
case "address":
|
|
660
|
-
if (!
|
|
897
|
+
if (!import_ethers4.ethers.isAddress(typedValue)) {
|
|
661
898
|
throw new Error(`Invalid address format: ${typedValue}`);
|
|
662
899
|
}
|
|
663
|
-
return
|
|
900
|
+
return import_ethers4.ethers.getAddress(typedValue);
|
|
664
901
|
case "hex":
|
|
665
|
-
if (!
|
|
902
|
+
if (!import_ethers4.ethers.isHexString(typedValue)) {
|
|
666
903
|
throw new Error(`Invalid hex format: ${typedValue}`);
|
|
667
904
|
}
|
|
668
905
|
return typedValue;
|
|
@@ -710,7 +947,7 @@ var WarpEvmExecutor = class {
|
|
|
710
947
|
return {
|
|
711
948
|
...tx,
|
|
712
949
|
gasLimit: gasEstimate,
|
|
713
|
-
gasPrice:
|
|
950
|
+
gasPrice: import_ethers4.ethers.parseUnits(WarpEvmConstants.GasPrice.Default, "wei")
|
|
714
951
|
};
|
|
715
952
|
}
|
|
716
953
|
} catch (error) {
|
|
@@ -723,7 +960,7 @@ var WarpEvmExecutor = class {
|
|
|
723
960
|
return {
|
|
724
961
|
...tx,
|
|
725
962
|
gasLimit: defaultGasLimit,
|
|
726
|
-
gasPrice:
|
|
963
|
+
gasPrice: import_ethers4.ethers.parseUnits(WarpEvmConstants.GasPrice.Default, "wei")
|
|
727
964
|
};
|
|
728
965
|
}
|
|
729
966
|
}
|
|
@@ -739,7 +976,7 @@ var WarpEvmExplorer = class {
|
|
|
739
976
|
this.config = config;
|
|
740
977
|
}
|
|
741
978
|
getExplorers() {
|
|
742
|
-
const chainExplorers = EvmExplorers[this.chain];
|
|
979
|
+
const chainExplorers = EvmExplorers[this.chain.name];
|
|
743
980
|
if (!chainExplorers) {
|
|
744
981
|
return ["Default"];
|
|
745
982
|
}
|
|
@@ -754,7 +991,7 @@ var WarpEvmExplorer = class {
|
|
|
754
991
|
return explorers[0];
|
|
755
992
|
}
|
|
756
993
|
getExplorerUrlByName(explorer) {
|
|
757
|
-
const userPreference = this.config.preferences?.explorers?.[this.chain];
|
|
994
|
+
const userPreference = this.config.preferences?.explorers?.[this.chain.name];
|
|
758
995
|
if (userPreference && !explorer) {
|
|
759
996
|
const url2 = ExplorerUrls[userPreference];
|
|
760
997
|
if (url2) return url2;
|
|
@@ -833,14 +1070,17 @@ var createEvmAdapter = (chainName, chainPrefix, chainInfos) => {
|
|
|
833
1070
|
registry: fallback.registry,
|
|
834
1071
|
explorer: new WarpEvmExplorer(chainInfos[config.env], config),
|
|
835
1072
|
abiBuilder: () => fallback.abiBuilder(),
|
|
836
|
-
brandBuilder: () => fallback.brandBuilder()
|
|
1073
|
+
brandBuilder: () => fallback.brandBuilder(),
|
|
1074
|
+
dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env])
|
|
837
1075
|
};
|
|
838
1076
|
};
|
|
839
1077
|
};
|
|
840
1078
|
|
|
841
1079
|
// src/chains/arbitrum.ts
|
|
842
|
-
var
|
|
1080
|
+
var ChainNameArbitrum = "arbitrum";
|
|
1081
|
+
var getArbitrumAdapter = createEvmAdapter(ChainNameArbitrum, "arb", {
|
|
843
1082
|
devnet: {
|
|
1083
|
+
name: ChainNameArbitrum,
|
|
844
1084
|
displayName: "Arbitrum Devnet",
|
|
845
1085
|
chainId: "421614",
|
|
846
1086
|
blockTime: 1e3,
|
|
@@ -849,6 +1089,7 @@ var getArbitrumAdapter = createEvmAdapter("arbitrum", "arb", {
|
|
|
849
1089
|
nativeToken: "ETH"
|
|
850
1090
|
},
|
|
851
1091
|
testnet: {
|
|
1092
|
+
name: ChainNameArbitrum,
|
|
852
1093
|
displayName: "Arbitrum Testnet",
|
|
853
1094
|
chainId: "421613",
|
|
854
1095
|
blockTime: 1e3,
|
|
@@ -857,6 +1098,7 @@ var getArbitrumAdapter = createEvmAdapter("arbitrum", "arb", {
|
|
|
857
1098
|
nativeToken: "ETH"
|
|
858
1099
|
},
|
|
859
1100
|
mainnet: {
|
|
1101
|
+
name: ChainNameArbitrum,
|
|
860
1102
|
displayName: "Arbitrum",
|
|
861
1103
|
chainId: "42161",
|
|
862
1104
|
blockTime: 1e3,
|
|
@@ -867,8 +1109,10 @@ var getArbitrumAdapter = createEvmAdapter("arbitrum", "arb", {
|
|
|
867
1109
|
});
|
|
868
1110
|
|
|
869
1111
|
// src/chains/base.ts
|
|
870
|
-
var
|
|
1112
|
+
var ChainNameBase = "base";
|
|
1113
|
+
var getBaseAdapter = createEvmAdapter(ChainNameBase, "base", {
|
|
871
1114
|
mainnet: {
|
|
1115
|
+
name: ChainNameBase,
|
|
872
1116
|
displayName: "Base",
|
|
873
1117
|
chainId: "8453",
|
|
874
1118
|
blockTime: 2e3,
|
|
@@ -877,7 +1121,8 @@ var getBaseAdapter = createEvmAdapter("base", "base", {
|
|
|
877
1121
|
nativeToken: "ETH"
|
|
878
1122
|
},
|
|
879
1123
|
testnet: {
|
|
880
|
-
|
|
1124
|
+
name: ChainNameBase,
|
|
1125
|
+
displayName: "Base Testnet",
|
|
881
1126
|
chainId: "84531",
|
|
882
1127
|
blockTime: 2e3,
|
|
883
1128
|
addressHrp: "0x",
|
|
@@ -885,7 +1130,8 @@ var getBaseAdapter = createEvmAdapter("base", "base", {
|
|
|
885
1130
|
nativeToken: "ETH"
|
|
886
1131
|
},
|
|
887
1132
|
devnet: {
|
|
888
|
-
|
|
1133
|
+
name: ChainNameBase,
|
|
1134
|
+
displayName: "Base Devnet",
|
|
889
1135
|
chainId: "84532",
|
|
890
1136
|
blockTime: 2e3,
|
|
891
1137
|
addressHrp: "0x",
|
|
@@ -895,8 +1141,10 @@ var getBaseAdapter = createEvmAdapter("base", "base", {
|
|
|
895
1141
|
});
|
|
896
1142
|
|
|
897
1143
|
// src/chains/ethereum.ts
|
|
898
|
-
var
|
|
1144
|
+
var ChainNameEthereum = "ethereum";
|
|
1145
|
+
var getEthereumAdapter = createEvmAdapter(ChainNameEthereum, "eth", {
|
|
899
1146
|
devnet: {
|
|
1147
|
+
name: ChainNameEthereum,
|
|
900
1148
|
displayName: "Ethereum Devnet",
|
|
901
1149
|
chainId: "11155111",
|
|
902
1150
|
blockTime: 12e3,
|
|
@@ -905,6 +1153,7 @@ var getEthereumAdapter = createEvmAdapter("ethereum", "eth", {
|
|
|
905
1153
|
nativeToken: "ETH"
|
|
906
1154
|
},
|
|
907
1155
|
testnet: {
|
|
1156
|
+
name: ChainNameEthereum,
|
|
908
1157
|
displayName: "Ethereum Testnet",
|
|
909
1158
|
chainId: "5",
|
|
910
1159
|
blockTime: 12e3,
|
|
@@ -913,6 +1162,7 @@ var getEthereumAdapter = createEvmAdapter("ethereum", "eth", {
|
|
|
913
1162
|
nativeToken: "ETH"
|
|
914
1163
|
},
|
|
915
1164
|
mainnet: {
|
|
1165
|
+
name: ChainNameEthereum,
|
|
916
1166
|
displayName: "Ethereum Mainnet",
|
|
917
1167
|
chainId: "1",
|
|
918
1168
|
blockTime: 12e3,
|
|
@@ -928,10 +1178,14 @@ var getAllEvmAdapters = (config, fallback) => [
|
|
|
928
1178
|
getArbitrumAdapter(config, fallback),
|
|
929
1179
|
getBaseAdapter(config, fallback)
|
|
930
1180
|
];
|
|
1181
|
+
var getAllEvmChainNames = () => [ChainNameArbitrum, ChainNameBase, ChainNameEthereum];
|
|
931
1182
|
// Annotate the CommonJS export names for ESM import in node:
|
|
932
1183
|
0 && (module.exports = {
|
|
933
1184
|
ArbitrumExplorers,
|
|
934
1185
|
BaseExplorers,
|
|
1186
|
+
ChainNameArbitrum,
|
|
1187
|
+
ChainNameBase,
|
|
1188
|
+
ChainNameEthereum,
|
|
935
1189
|
EVM_CHAIN_CONFIGS,
|
|
936
1190
|
EthereumExplorers,
|
|
937
1191
|
EvmExplorers,
|
|
@@ -943,6 +1197,7 @@ var getAllEvmAdapters = (config, fallback) => [
|
|
|
943
1197
|
WarpEvmResults,
|
|
944
1198
|
WarpEvmSerializer,
|
|
945
1199
|
getAllEvmAdapters,
|
|
1200
|
+
getAllEvmChainNames,
|
|
946
1201
|
getArbitrumAdapter,
|
|
947
1202
|
getBaseAdapter,
|
|
948
1203
|
getEthereumAdapter,
|