@vleap/warps-adapter-evm 0.2.0-alpha.37 → 0.2.0-alpha.39
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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +13 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -10,7 +10,7 @@ declare const getBaseAdapter: AdapterFactory;
|
|
|
10
10
|
declare const getAllEvmAdapters: (config: WarpClientConfig, fallback?: Adapter) => Adapter[];
|
|
11
11
|
declare const getAllEvmChainNames: () => WarpChain[];
|
|
12
12
|
|
|
13
|
-
declare const createEvmAdapter: (chainName:
|
|
13
|
+
declare const createEvmAdapter: (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>) => AdapterFactory;
|
|
14
14
|
|
|
15
15
|
declare const NativeTokenEth: WarpChainAsset;
|
|
16
16
|
declare const getEthereumAdapter: AdapterFactory;
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ declare const getBaseAdapter: AdapterFactory;
|
|
|
10
10
|
declare const getAllEvmAdapters: (config: WarpClientConfig, fallback?: Adapter) => Adapter[];
|
|
11
11
|
declare const getAllEvmChainNames: () => WarpChain[];
|
|
12
12
|
|
|
13
|
-
declare const createEvmAdapter: (chainName:
|
|
13
|
+
declare const createEvmAdapter: (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>) => AdapterFactory;
|
|
14
14
|
|
|
15
15
|
declare const NativeTokenEth: WarpChainAsset;
|
|
16
16
|
declare const getEthereumAdapter: AdapterFactory;
|
package/dist/index.js
CHANGED
|
@@ -351,9 +351,9 @@ var WarpEvmDataLoader = class {
|
|
|
351
351
|
constructor(config, chain) {
|
|
352
352
|
this.config = config;
|
|
353
353
|
this.chain = chain;
|
|
354
|
-
const
|
|
354
|
+
const providerConfig = (0, import_warps7.getProviderConfig)(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
355
355
|
const network = new import_ethers.ethers.Network(this.chain.name, parseInt(this.chain.chainId));
|
|
356
|
-
this.provider = new import_ethers.ethers.JsonRpcProvider(
|
|
356
|
+
this.provider = new import_ethers.ethers.JsonRpcProvider(providerConfig.url, network);
|
|
357
357
|
this.cache = new import_warps7.WarpCache(config.cache?.type);
|
|
358
358
|
this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId));
|
|
359
359
|
}
|
|
@@ -741,9 +741,9 @@ var WarpEvmResults = class {
|
|
|
741
741
|
this.config = config;
|
|
742
742
|
this.chain = chain;
|
|
743
743
|
this.serializer = new WarpEvmSerializer();
|
|
744
|
-
const
|
|
744
|
+
const providerConfig = (0, import_warps9.getProviderConfig)(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
745
745
|
const network = new import_ethers3.ethers.Network(this.chain.name, parseInt(this.chain.chainId));
|
|
746
|
-
this.provider = new import_ethers3.ethers.JsonRpcProvider(
|
|
746
|
+
this.provider = new import_ethers3.ethers.JsonRpcProvider(providerConfig.url, network);
|
|
747
747
|
}
|
|
748
748
|
async getActionExecution(warp, actionIndex, tx) {
|
|
749
749
|
if (!tx) {
|
|
@@ -879,9 +879,9 @@ var WarpEvmExecutor = class {
|
|
|
879
879
|
this.config = config;
|
|
880
880
|
this.chain = chain;
|
|
881
881
|
this.serializer = new WarpEvmSerializer();
|
|
882
|
-
const
|
|
882
|
+
const providerConfig = (0, import_warps10.getProviderConfig)(this.config, chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
883
883
|
const network = new import_ethers4.ethers.Network(this.chain.name, parseInt(this.chain.chainId));
|
|
884
|
-
this.provider = new import_ethers4.ethers.JsonRpcProvider(
|
|
884
|
+
this.provider = new import_ethers4.ethers.JsonRpcProvider(providerConfig.url, network);
|
|
885
885
|
this.results = new WarpEvmResults(config, this.chain);
|
|
886
886
|
}
|
|
887
887
|
async createTransaction(executable) {
|
|
@@ -1215,8 +1215,8 @@ var WarpEvmWallet = class {
|
|
|
1215
1215
|
constructor(config, chain) {
|
|
1216
1216
|
this.config = config;
|
|
1217
1217
|
this.chain = chain;
|
|
1218
|
-
const
|
|
1219
|
-
this.provider = new import_ethers5.ethers.JsonRpcProvider(
|
|
1218
|
+
const providerConfig = (0, import_warps11.getProviderConfig)(config, chain.name, config.env, chain.defaultApiUrl);
|
|
1219
|
+
this.provider = new import_ethers5.ethers.JsonRpcProvider(providerConfig.url);
|
|
1220
1220
|
}
|
|
1221
1221
|
async signTransaction(tx) {
|
|
1222
1222
|
if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
|
|
@@ -1303,13 +1303,11 @@ var WarpEvmWallet = class {
|
|
|
1303
1303
|
};
|
|
1304
1304
|
|
|
1305
1305
|
// src/chains/common.ts
|
|
1306
|
-
var createEvmAdapter = (chainName,
|
|
1306
|
+
var createEvmAdapter = (chainName, chainInfos) => {
|
|
1307
1307
|
return (config, fallback) => {
|
|
1308
1308
|
if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`);
|
|
1309
1309
|
return {
|
|
1310
|
-
chain: chainName,
|
|
1311
1310
|
chainInfo: chainInfos[config.env],
|
|
1312
|
-
prefix: chainPrefix,
|
|
1313
1311
|
builder: () => fallback.builder(),
|
|
1314
1312
|
executor: new WarpEvmExecutor(config, chainInfos[config.env]),
|
|
1315
1313
|
results: new WarpEvmResults(config, chainInfos[config.env]),
|
|
@@ -1333,7 +1331,7 @@ var NativeTokenArb = {
|
|
|
1333
1331
|
decimals: 18,
|
|
1334
1332
|
logoUrl: "https://vleap.ai/images/tokens/arb.svg"
|
|
1335
1333
|
};
|
|
1336
|
-
var getArbitrumAdapter = createEvmAdapter(import_warps12.WarpChainName.Arbitrum,
|
|
1334
|
+
var getArbitrumAdapter = createEvmAdapter(import_warps12.WarpChainName.Arbitrum, {
|
|
1337
1335
|
mainnet: {
|
|
1338
1336
|
name: import_warps12.WarpChainName.Arbitrum,
|
|
1339
1337
|
displayName: "Arbitrum",
|
|
@@ -1376,7 +1374,7 @@ var NativeTokenBase = {
|
|
|
1376
1374
|
decimals: 18,
|
|
1377
1375
|
logoUrl: "https://vleap.ai/images/tokens/eth.svg"
|
|
1378
1376
|
};
|
|
1379
|
-
var getBaseAdapter = createEvmAdapter(import_warps13.WarpChainName.Base,
|
|
1377
|
+
var getBaseAdapter = createEvmAdapter(import_warps13.WarpChainName.Base, {
|
|
1380
1378
|
mainnet: {
|
|
1381
1379
|
name: import_warps13.WarpChainName.Base,
|
|
1382
1380
|
displayName: "Base",
|
|
@@ -1422,7 +1420,7 @@ var NativeTokenEth = {
|
|
|
1422
1420
|
decimals: 18,
|
|
1423
1421
|
logoUrl: "https://vleap.ai/images/tokens/eth.svg"
|
|
1424
1422
|
};
|
|
1425
|
-
var getEthereumAdapter = createEvmAdapter(import_warps14.WarpChainName.Ethereum,
|
|
1423
|
+
var getEthereumAdapter = createEvmAdapter(import_warps14.WarpChainName.Ethereum, {
|
|
1426
1424
|
mainnet: {
|
|
1427
1425
|
name: import_warps14.WarpChainName.Ethereum,
|
|
1428
1426
|
displayName: "Ethereum Mainnet",
|
|
@@ -1473,7 +1471,7 @@ var NativeTokenStt = {
|
|
|
1473
1471
|
decimals: 18,
|
|
1474
1472
|
logoUrl: "https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117"
|
|
1475
1473
|
};
|
|
1476
|
-
var getSomniaAdapter = createEvmAdapter(import_warps15.WarpChainName.Somnia,
|
|
1474
|
+
var getSomniaAdapter = createEvmAdapter(import_warps15.WarpChainName.Somnia, {
|
|
1477
1475
|
mainnet: {
|
|
1478
1476
|
name: import_warps15.WarpChainName.Somnia,
|
|
1479
1477
|
displayName: "Somnia Mainnet",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './providers'\nexport * from './tokens'\nexport * from './types'\nexport * from './WarpEvmDataLoader'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\nexport * from './WarpEvmWallet'\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n let receipt = await this.provider.getTransactionReceipt(identifier)\n\n if (awaitCompleted && !receipt) {\n receipt = await tx.wait()\n }\n\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecution,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpEvmExecutor: Contract action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n } catch (error) {\n throw new Error(`WarpEvmExecutor: Failed to encode function data for ${action.func}: ${error}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<ethers.TransactionRequest> {\n if (executable.transfers.length === 0) throw new Error('WarpEvmExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpEvmExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter((transfer) => transfer.identifier === this.chain.nativeToken!.identifier)\n const erc20Transfers = executable.transfers.filter((transfer) => transfer.identifier !== this.chain.nativeToken!.identifier)\n\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n if (transfer.amount <= 0n) throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: transfer.amount,\n data: '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpEvmExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string\n ): Promise<ethers.TransactionRequest> {\n if (!ethers.isAddress(transfer.identifier)) {\n throw new Error(`WarpEvmExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n const transferInterface = new ethers.Interface(['function transfer(address to, uint256 amount) returns (bool)'])\n\n const encodedData = transferInterface.encodeFunctionData('transfer', [executable.destination, transfer.amount])\n\n const tx: ethers.TransactionRequest = {\n to: transfer.identifier,\n value: 0n,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpEvmExecutor: Query action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid address for query: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const result = await this.provider.call({\n to: executable.destination,\n data: encodedData,\n })\n\n const decodedResult = iface.decodeFunctionResult(action.func, result)\n const isSuccess = true\n\n const { values, results } = await this.results.extractQueryResults(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n results,\n messages: applyResultsToMessages(executable.warp, results),\n }\n } catch (error) {\n return {\n success: false,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n }\n\n private async estimateGasAndSetDefaults(tx: ethers.TransactionRequest, from: string): Promise<ethers.TransactionRequest> {\n try {\n const gasEstimate = await this.provider.estimateGas({\n ...tx,\n from,\n })\n\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) throw new Error(`Gas estimate too low: ${gasEstimate}`)\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) throw new Error(`Gas estimate too high: ${gasEstimate}`)\n\n const feeData = await this.provider.getFeeData()\n\n // Handle both EIP-1559 and legacy gas pricing\n if (feeData.maxFeePerGas && feeData.maxPriorityFeePerGas) {\n // EIP-1559 pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n } catch (error) {\n // If gas estimation fails, use default values based on transaction type\n let defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Default)\n\n // Determine gas limit based on transaction type\n if (tx.data && tx.data !== '0x') {\n // Check if this is a token transfer by looking for ERC-20 transfer function signature\n if (tx.data.startsWith('0xa9059cbb')) {\n // transfer(address,uint256) function signature\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.TokenTransfer)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n }\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecution,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionResults,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecution> {\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex)\n }\n\n // Handle WarpChainAction object (from getActions)\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction)\n }\n\n // Handle ethers.TransactionReceipt object (legacy)\n return this.handleTransactionReceipt(warp, actionIndex, tx as ethers.TransactionReceipt)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex): WarpActionExecution {\n return {\n success: false,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n\n private handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction): WarpActionExecution {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n const gasUsed = tx.tx?.gasLimit || '0'\n const gasPrice = tx.tx?.gasPrice || '0'\n const blockNumber = tx.tx?.blockNumber || '0'\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n private handleTransactionReceipt(warp: Warp, actionIndex: WarpActionIndex, tx: ethers.TransactionReceipt): WarpActionExecution {\n const success = tx.status === 1\n const gasUsed = tx.gasUsed?.toString() || '0'\n const gasPrice = tx.gasPrice?.toString() || '0'\n const blockNumber = tx.blockNumber?.toString() || '0'\n const transactionHash = tx.hash\n\n const logs = tx.logs.map((log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber?.toString() || '0',\n transactionHash: log.transactionHash,\n index: log.index?.toString() || '0',\n }))\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[] }; results: WarpExecutionResults }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues }\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, results }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.results)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseResultsOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n results[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n results[key] = getNestedValue(path) || null\n } else {\n results[key] = path\n }\n }\n\n return { values, results: await evaluateResultsCommon(warp, results, actionIndex, inputs, this.serializer.coreSerializer) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const receipt = await this.provider.getTransactionReceipt(txHash)\n\n if (!receipt) {\n return { status: 'pending' }\n }\n\n return {\n status: receipt.status === 1 ? 'confirmed' : 'failed',\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<ethers.TransactionReceipt | null> {\n try {\n return await this.provider.getTransactionReceipt(txHash)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nconst SplitParamsRegex = new RegExp(`${WarpConstants.ArgParamsSeparator}(.*)`)\n\nexport class WarpEvmSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (ethers.isAddress(value)) {\n return `address:${value}`\n }\n if (ethers.isHexString(value) && !ethers.isAddress(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const chainExplorers = EvmExplorers[this.chain.name as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n return ['Default' as ExplorerName]\n }\n\n const explorers = chainExplorers[this.config.env]\n if (!explorers) {\n return ['Default' as ExplorerName]\n }\n\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = ExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = ExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = ExplorerUrls[primaryExplorer]\n return url || ExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/tx/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/block/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import {\n AdapterWarpWallet,\n getProviderUrl,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(config, chain.name, config.env, chain.defaultApiUrl)\n\n this.provider = new ethers.JsonRpcProvider(apiUrl)\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const wallet = this.getWallet()\n\n const txRequest = {\n to: tx.to,\n data: tx.data,\n value: tx.value || 0,\n gasLimit: tx.gasLimit,\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n nonce: tx.nonce,\n chainId: tx.chainId,\n }\n\n const signedTx = await wallet.signTransaction(txRequest)\n return { ...tx, signature: signedTx }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n // For multiple transactions, set sequential nonces and give earlier transactions higher priority\n if (txs.length > 1) {\n const wallet = this.getWallet()\n const address = wallet.address\n\n // Get current nonce from blockchain\n const currentNonce = await this.provider.getTransactionCount(address, 'pending')\n\n const signedTxs = []\n for (let i = 0; i < txs.length; i++) {\n const tx = { ...txs[i] }\n\n // Set sequential nonce\n tx.nonce = currentNonce + i\n\n // Give earlier transactions higher gas price for priority\n if (i > 0) {\n const priorityReduction = BigInt(i * 1000000000) // 1 gwei per transaction\n const minGasPrice = BigInt(1000000000) // 1 gwei minimum\n\n if (tx.maxFeePerGas && tx.maxPriorityFeePerGas) {\n tx.maxFeePerGas = tx.maxFeePerGas > priorityReduction ? tx.maxFeePerGas - priorityReduction : minGasPrice\n tx.maxPriorityFeePerGas =\n tx.maxPriorityFeePerGas > priorityReduction ? tx.maxPriorityFeePerGas - priorityReduction : minGasPrice\n // Remove gasPrice if it exists to avoid EIP-1559 conflict\n delete tx.gasPrice\n } else if (tx.gasPrice) {\n tx.gasPrice = tx.gasPrice > priorityReduction ? tx.gasPrice - priorityReduction : minGasPrice\n // Remove EIP-1559 fields if they exist to avoid conflict\n delete tx.maxFeePerGas\n delete tx.maxPriorityFeePerGas\n }\n }\n\n const signedTx = await this.signTransaction(tx)\n signedTxs.push(signedTx)\n }\n\n return signedTxs\n }\n\n // Single transaction - use existing logic\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const wallet = this.getWallet()\n const signature = await wallet.signMessage(message)\n\n return signature\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!tx.signature) throw new Error('Transaction must be signed before sending')\n\n const wallet = this.getWallet()\n if (!wallet) throw new Error('Wallet not initialized - no private key provided')\n\n const connectedWallet = wallet.connect(this.provider)\n const txResponse = await connectedWallet.sendTransaction(tx as any)\n return txResponse.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.fromPhrase(mnemonic)\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.createRandom()\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic: wallet.mnemonic?.phrase || '' }\n }\n\n getAddress(): string | null {\n const wallet = this.getWallet()\n return wallet.address\n }\n\n private getWallet(): ethers.Wallet {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) return new ethers.Wallet(privateKey)\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) return ethers.Wallet.fromPhrase(mnemonic) as unknown as ethers.Wallet\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["import_warps","import_warps","token","import_warps","import_warps","import_warps","BaseChain","import_warps","import_warps","EthereumChain","import_warps","import_ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","import_warps","import_ethers","import_warps","import_ethers","url","import_warps","import_ethers","import_warps","import_warps","import_warps","import_warps"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './providers'\nexport * from './tokens'\nexport * from './types'\nexport * from './WarpEvmDataLoader'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\nexport * from './WarpEvmWallet'\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(providerConfig.url, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n let receipt = await this.provider.getTransactionReceipt(identifier)\n\n if (awaitCompleted && !receipt) {\n receipt = await tx.wait()\n }\n\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecution,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(providerConfig.url, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpEvmExecutor: Contract action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n } catch (error) {\n throw new Error(`WarpEvmExecutor: Failed to encode function data for ${action.func}: ${error}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<ethers.TransactionRequest> {\n if (executable.transfers.length === 0) throw new Error('WarpEvmExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpEvmExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter((transfer) => transfer.identifier === this.chain.nativeToken!.identifier)\n const erc20Transfers = executable.transfers.filter((transfer) => transfer.identifier !== this.chain.nativeToken!.identifier)\n\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n if (transfer.amount <= 0n) throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: transfer.amount,\n data: '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpEvmExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string\n ): Promise<ethers.TransactionRequest> {\n if (!ethers.isAddress(transfer.identifier)) {\n throw new Error(`WarpEvmExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n const transferInterface = new ethers.Interface(['function transfer(address to, uint256 amount) returns (bool)'])\n\n const encodedData = transferInterface.encodeFunctionData('transfer', [executable.destination, transfer.amount])\n\n const tx: ethers.TransactionRequest = {\n to: transfer.identifier,\n value: 0n,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpEvmExecutor: Query action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid address for query: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const result = await this.provider.call({\n to: executable.destination,\n data: encodedData,\n })\n\n const decodedResult = iface.decodeFunctionResult(action.func, result)\n const isSuccess = true\n\n const { values, results } = await this.results.extractQueryResults(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n results,\n messages: applyResultsToMessages(executable.warp, results),\n }\n } catch (error) {\n return {\n success: false,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n }\n\n private async estimateGasAndSetDefaults(tx: ethers.TransactionRequest, from: string): Promise<ethers.TransactionRequest> {\n try {\n const gasEstimate = await this.provider.estimateGas({\n ...tx,\n from,\n })\n\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) throw new Error(`Gas estimate too low: ${gasEstimate}`)\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) throw new Error(`Gas estimate too high: ${gasEstimate}`)\n\n const feeData = await this.provider.getFeeData()\n\n // Handle both EIP-1559 and legacy gas pricing\n if (feeData.maxFeePerGas && feeData.maxPriorityFeePerGas) {\n // EIP-1559 pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n } catch (error) {\n // If gas estimation fails, use default values based on transaction type\n let defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Default)\n\n // Determine gas limit based on transaction type\n if (tx.data && tx.data !== '0x') {\n // Check if this is a token transfer by looking for ERC-20 transfer function signature\n if (tx.data.startsWith('0xa9059cbb')) {\n // transfer(address,uint256) function signature\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.TokenTransfer)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n }\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecution,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionResults,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(providerConfig.url, network)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecution> {\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex)\n }\n\n // Handle WarpChainAction object (from getActions)\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction)\n }\n\n // Handle ethers.TransactionReceipt object (legacy)\n return this.handleTransactionReceipt(warp, actionIndex, tx as ethers.TransactionReceipt)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex): WarpActionExecution {\n return {\n success: false,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n\n private handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction): WarpActionExecution {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n const gasUsed = tx.tx?.gasLimit || '0'\n const gasPrice = tx.tx?.gasPrice || '0'\n const blockNumber = tx.tx?.blockNumber || '0'\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n private handleTransactionReceipt(warp: Warp, actionIndex: WarpActionIndex, tx: ethers.TransactionReceipt): WarpActionExecution {\n const success = tx.status === 1\n const gasUsed = tx.gasUsed?.toString() || '0'\n const gasPrice = tx.gasPrice?.toString() || '0'\n const blockNumber = tx.blockNumber?.toString() || '0'\n const transactionHash = tx.hash\n\n const logs = tx.logs.map((log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber?.toString() || '0',\n transactionHash: log.transactionHash,\n index: log.index?.toString() || '0',\n }))\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[] }; results: WarpExecutionResults }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues }\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, results }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.results)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseResultsOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n results[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n results[key] = getNestedValue(path) || null\n } else {\n results[key] = path\n }\n }\n\n return { values, results: await evaluateResultsCommon(warp, results, actionIndex, inputs, this.serializer.coreSerializer) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const receipt = await this.provider.getTransactionReceipt(txHash)\n\n if (!receipt) {\n return { status: 'pending' }\n }\n\n return {\n status: receipt.status === 1 ? 'confirmed' : 'failed',\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<ethers.TransactionReceipt | null> {\n try {\n return await this.provider.getTransactionReceipt(txHash)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nconst SplitParamsRegex = new RegExp(`${WarpConstants.ArgParamsSeparator}(.*)`)\n\nexport class WarpEvmSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (ethers.isAddress(value)) {\n return `address:${value}`\n }\n if (ethers.isHexString(value) && !ethers.isAddress(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const chainExplorers = EvmExplorers[this.chain.name as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n return ['Default' as ExplorerName]\n }\n\n const explorers = chainExplorers[this.config.env]\n if (!explorers) {\n return ['Default' as ExplorerName]\n }\n\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = ExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = ExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = ExplorerUrls[primaryExplorer]\n return url || ExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/tx/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/block/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n this.provider = new ethers.JsonRpcProvider(providerConfig.url)\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const wallet = this.getWallet()\n\n const txRequest = {\n to: tx.to,\n data: tx.data,\n value: tx.value || 0,\n gasLimit: tx.gasLimit,\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n nonce: tx.nonce,\n chainId: tx.chainId,\n }\n\n const signedTx = await wallet.signTransaction(txRequest)\n return { ...tx, signature: signedTx }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n // For multiple transactions, set sequential nonces and give earlier transactions higher priority\n if (txs.length > 1) {\n const wallet = this.getWallet()\n const address = wallet.address\n\n // Get current nonce from blockchain\n const currentNonce = await this.provider.getTransactionCount(address, 'pending')\n\n const signedTxs = []\n for (let i = 0; i < txs.length; i++) {\n const tx = { ...txs[i] }\n\n // Set sequential nonce\n tx.nonce = currentNonce + i\n\n // Give earlier transactions higher gas price for priority\n if (i > 0) {\n const priorityReduction = BigInt(i * 1000000000) // 1 gwei per transaction\n const minGasPrice = BigInt(1000000000) // 1 gwei minimum\n\n if (tx.maxFeePerGas && tx.maxPriorityFeePerGas) {\n tx.maxFeePerGas = tx.maxFeePerGas > priorityReduction ? tx.maxFeePerGas - priorityReduction : minGasPrice\n tx.maxPriorityFeePerGas =\n tx.maxPriorityFeePerGas > priorityReduction ? tx.maxPriorityFeePerGas - priorityReduction : minGasPrice\n // Remove gasPrice if it exists to avoid EIP-1559 conflict\n delete tx.gasPrice\n } else if (tx.gasPrice) {\n tx.gasPrice = tx.gasPrice > priorityReduction ? tx.gasPrice - priorityReduction : minGasPrice\n // Remove EIP-1559 fields if they exist to avoid conflict\n delete tx.maxFeePerGas\n delete tx.maxPriorityFeePerGas\n }\n }\n\n const signedTx = await this.signTransaction(tx)\n signedTxs.push(signedTx)\n }\n\n return signedTxs\n }\n\n // Single transaction - use existing logic\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const wallet = this.getWallet()\n const signature = await wallet.signMessage(message)\n\n return signature\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!tx.signature) throw new Error('Transaction must be signed before sending')\n\n const wallet = this.getWallet()\n if (!wallet) throw new Error('Wallet not initialized - no private key provided')\n\n const connectedWallet = wallet.connect(this.provider)\n const txResponse = await connectedWallet.sendTransaction(tx as any)\n return txResponse.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.fromPhrase(mnemonic)\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.createRandom()\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic: wallet.mnemonic?.phrase || '' }\n }\n\n getAddress(): string | null {\n const wallet = this.getWallet()\n return wallet.address\n }\n\n private getWallet(): ethers.Wallet {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) return new ethers.Wallet(privateKey)\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) return ethers.Wallet.fromPhrase(mnemonic) as unknown as ethers.Wallet\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["import_warps","import_warps","token","import_warps","import_warps","import_warps","BaseChain","import_warps","import_warps","EthereumChain","import_warps","import_ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","import_warps","import_ethers","import_warps","import_ethers","url","import_warps","import_ethers","import_warps","import_warps","import_warps","import_warps"]}
|
package/dist/index.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { WarpChainName as WarpChainName6 } from "@vleap/warps";
|
|
|
4
4
|
// src/WarpEvmDataLoader.ts
|
|
5
5
|
import {
|
|
6
6
|
CacheTtl as CacheTtl2,
|
|
7
|
-
|
|
7
|
+
getProviderConfig,
|
|
8
8
|
WarpCache as WarpCache2,
|
|
9
9
|
WarpCacheKey
|
|
10
10
|
} from "@vleap/warps";
|
|
@@ -306,9 +306,9 @@ var WarpEvmDataLoader = class {
|
|
|
306
306
|
constructor(config, chain) {
|
|
307
307
|
this.config = config;
|
|
308
308
|
this.chain = chain;
|
|
309
|
-
const
|
|
309
|
+
const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
310
310
|
const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId));
|
|
311
|
-
this.provider = new ethers.JsonRpcProvider(
|
|
311
|
+
this.provider = new ethers.JsonRpcProvider(providerConfig.url, network);
|
|
312
312
|
this.cache = new WarpCache2(config.cache?.type);
|
|
313
313
|
this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId));
|
|
314
314
|
}
|
|
@@ -459,7 +459,7 @@ var WarpEvmDataLoader = class {
|
|
|
459
459
|
import {
|
|
460
460
|
applyResultsToMessages,
|
|
461
461
|
getNextInfo,
|
|
462
|
-
|
|
462
|
+
getProviderConfig as getProviderConfig3,
|
|
463
463
|
getWarpActionByIndex,
|
|
464
464
|
getWarpWalletAddressFromConfig as getWarpWalletAddressFromConfig2
|
|
465
465
|
} from "@vleap/warps";
|
|
@@ -543,7 +543,7 @@ var ExplorerUrls = {
|
|
|
543
543
|
// src/WarpEvmResults.ts
|
|
544
544
|
import {
|
|
545
545
|
evaluateResultsCommon,
|
|
546
|
-
|
|
546
|
+
getProviderConfig as getProviderConfig2,
|
|
547
547
|
getWarpWalletAddressFromConfig,
|
|
548
548
|
parseResultsOutIndex,
|
|
549
549
|
WarpConstants as WarpConstants2
|
|
@@ -711,9 +711,9 @@ var WarpEvmResults = class {
|
|
|
711
711
|
this.config = config;
|
|
712
712
|
this.chain = chain;
|
|
713
713
|
this.serializer = new WarpEvmSerializer();
|
|
714
|
-
const
|
|
714
|
+
const providerConfig = getProviderConfig2(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
715
715
|
const network = new ethers3.Network(this.chain.name, parseInt(this.chain.chainId));
|
|
716
|
-
this.provider = new ethers3.JsonRpcProvider(
|
|
716
|
+
this.provider = new ethers3.JsonRpcProvider(providerConfig.url, network);
|
|
717
717
|
}
|
|
718
718
|
async getActionExecution(warp, actionIndex, tx) {
|
|
719
719
|
if (!tx) {
|
|
@@ -849,9 +849,9 @@ var WarpEvmExecutor = class {
|
|
|
849
849
|
this.config = config;
|
|
850
850
|
this.chain = chain;
|
|
851
851
|
this.serializer = new WarpEvmSerializer();
|
|
852
|
-
const
|
|
852
|
+
const providerConfig = getProviderConfig3(this.config, chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
853
853
|
const network = new ethers4.Network(this.chain.name, parseInt(this.chain.chainId));
|
|
854
|
-
this.provider = new ethers4.JsonRpcProvider(
|
|
854
|
+
this.provider = new ethers4.JsonRpcProvider(providerConfig.url, network);
|
|
855
855
|
this.results = new WarpEvmResults(config, this.chain);
|
|
856
856
|
}
|
|
857
857
|
async createTransaction(executable) {
|
|
@@ -1180,7 +1180,7 @@ var WarpEvmExplorer = class {
|
|
|
1180
1180
|
|
|
1181
1181
|
// src/WarpEvmWallet.ts
|
|
1182
1182
|
import {
|
|
1183
|
-
|
|
1183
|
+
getProviderConfig as getProviderConfig4,
|
|
1184
1184
|
getWarpWalletMnemonicFromConfig,
|
|
1185
1185
|
getWarpWalletPrivateKeyFromConfig
|
|
1186
1186
|
} from "@vleap/warps";
|
|
@@ -1189,8 +1189,8 @@ var WarpEvmWallet = class {
|
|
|
1189
1189
|
constructor(config, chain) {
|
|
1190
1190
|
this.config = config;
|
|
1191
1191
|
this.chain = chain;
|
|
1192
|
-
const
|
|
1193
|
-
this.provider = new ethers5.JsonRpcProvider(
|
|
1192
|
+
const providerConfig = getProviderConfig4(config, chain.name, config.env, chain.defaultApiUrl);
|
|
1193
|
+
this.provider = new ethers5.JsonRpcProvider(providerConfig.url);
|
|
1194
1194
|
}
|
|
1195
1195
|
async signTransaction(tx) {
|
|
1196
1196
|
if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
|
|
@@ -1277,13 +1277,11 @@ var WarpEvmWallet = class {
|
|
|
1277
1277
|
};
|
|
1278
1278
|
|
|
1279
1279
|
// src/chains/common.ts
|
|
1280
|
-
var createEvmAdapter = (chainName,
|
|
1280
|
+
var createEvmAdapter = (chainName, chainInfos) => {
|
|
1281
1281
|
return (config, fallback) => {
|
|
1282
1282
|
if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`);
|
|
1283
1283
|
return {
|
|
1284
|
-
chain: chainName,
|
|
1285
1284
|
chainInfo: chainInfos[config.env],
|
|
1286
|
-
prefix: chainPrefix,
|
|
1287
1285
|
builder: () => fallback.builder(),
|
|
1288
1286
|
executor: new WarpEvmExecutor(config, chainInfos[config.env]),
|
|
1289
1287
|
results: new WarpEvmResults(config, chainInfos[config.env]),
|
|
@@ -1307,7 +1305,7 @@ var NativeTokenArb = {
|
|
|
1307
1305
|
decimals: 18,
|
|
1308
1306
|
logoUrl: "https://vleap.ai/images/tokens/arb.svg"
|
|
1309
1307
|
};
|
|
1310
|
-
var getArbitrumAdapter = createEvmAdapter(WarpChainName6.Arbitrum,
|
|
1308
|
+
var getArbitrumAdapter = createEvmAdapter(WarpChainName6.Arbitrum, {
|
|
1311
1309
|
mainnet: {
|
|
1312
1310
|
name: WarpChainName6.Arbitrum,
|
|
1313
1311
|
displayName: "Arbitrum",
|
|
@@ -1350,7 +1348,7 @@ var NativeTokenBase = {
|
|
|
1350
1348
|
decimals: 18,
|
|
1351
1349
|
logoUrl: "https://vleap.ai/images/tokens/eth.svg"
|
|
1352
1350
|
};
|
|
1353
|
-
var getBaseAdapter = createEvmAdapter(WarpChainName7.Base,
|
|
1351
|
+
var getBaseAdapter = createEvmAdapter(WarpChainName7.Base, {
|
|
1354
1352
|
mainnet: {
|
|
1355
1353
|
name: WarpChainName7.Base,
|
|
1356
1354
|
displayName: "Base",
|
|
@@ -1396,7 +1394,7 @@ var NativeTokenEth = {
|
|
|
1396
1394
|
decimals: 18,
|
|
1397
1395
|
logoUrl: "https://vleap.ai/images/tokens/eth.svg"
|
|
1398
1396
|
};
|
|
1399
|
-
var getEthereumAdapter = createEvmAdapter(WarpChainName8.Ethereum,
|
|
1397
|
+
var getEthereumAdapter = createEvmAdapter(WarpChainName8.Ethereum, {
|
|
1400
1398
|
mainnet: {
|
|
1401
1399
|
name: WarpChainName8.Ethereum,
|
|
1402
1400
|
displayName: "Ethereum Mainnet",
|
|
@@ -1447,7 +1445,7 @@ var NativeTokenStt = {
|
|
|
1447
1445
|
decimals: 18,
|
|
1448
1446
|
logoUrl: "https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117"
|
|
1449
1447
|
};
|
|
1450
|
-
var getSomniaAdapter = createEvmAdapter(WarpChainName9.Somnia,
|
|
1448
|
+
var getSomniaAdapter = createEvmAdapter(WarpChainName9.Somnia, {
|
|
1451
1449
|
mainnet: {
|
|
1452
1450
|
name: WarpChainName9.Somnia,
|
|
1453
1451
|
displayName: "Somnia Mainnet",
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n let receipt = await this.provider.getTransactionReceipt(identifier)\n\n if (awaitCompleted && !receipt) {\n receipt = await tx.wait()\n }\n\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecution,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpEvmExecutor: Contract action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n } catch (error) {\n throw new Error(`WarpEvmExecutor: Failed to encode function data for ${action.func}: ${error}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<ethers.TransactionRequest> {\n if (executable.transfers.length === 0) throw new Error('WarpEvmExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpEvmExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter((transfer) => transfer.identifier === this.chain.nativeToken!.identifier)\n const erc20Transfers = executable.transfers.filter((transfer) => transfer.identifier !== this.chain.nativeToken!.identifier)\n\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n if (transfer.amount <= 0n) throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: transfer.amount,\n data: '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpEvmExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string\n ): Promise<ethers.TransactionRequest> {\n if (!ethers.isAddress(transfer.identifier)) {\n throw new Error(`WarpEvmExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n const transferInterface = new ethers.Interface(['function transfer(address to, uint256 amount) returns (bool)'])\n\n const encodedData = transferInterface.encodeFunctionData('transfer', [executable.destination, transfer.amount])\n\n const tx: ethers.TransactionRequest = {\n to: transfer.identifier,\n value: 0n,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpEvmExecutor: Query action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid address for query: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const result = await this.provider.call({\n to: executable.destination,\n data: encodedData,\n })\n\n const decodedResult = iface.decodeFunctionResult(action.func, result)\n const isSuccess = true\n\n const { values, results } = await this.results.extractQueryResults(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n results,\n messages: applyResultsToMessages(executable.warp, results),\n }\n } catch (error) {\n return {\n success: false,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n }\n\n private async estimateGasAndSetDefaults(tx: ethers.TransactionRequest, from: string): Promise<ethers.TransactionRequest> {\n try {\n const gasEstimate = await this.provider.estimateGas({\n ...tx,\n from,\n })\n\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) throw new Error(`Gas estimate too low: ${gasEstimate}`)\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) throw new Error(`Gas estimate too high: ${gasEstimate}`)\n\n const feeData = await this.provider.getFeeData()\n\n // Handle both EIP-1559 and legacy gas pricing\n if (feeData.maxFeePerGas && feeData.maxPriorityFeePerGas) {\n // EIP-1559 pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n } catch (error) {\n // If gas estimation fails, use default values based on transaction type\n let defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Default)\n\n // Determine gas limit based on transaction type\n if (tx.data && tx.data !== '0x') {\n // Check if this is a token transfer by looking for ERC-20 transfer function signature\n if (tx.data.startsWith('0xa9059cbb')) {\n // transfer(address,uint256) function signature\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.TokenTransfer)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n }\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecution,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionResults,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecution> {\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex)\n }\n\n // Handle WarpChainAction object (from getActions)\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction)\n }\n\n // Handle ethers.TransactionReceipt object (legacy)\n return this.handleTransactionReceipt(warp, actionIndex, tx as ethers.TransactionReceipt)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex): WarpActionExecution {\n return {\n success: false,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n\n private handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction): WarpActionExecution {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n const gasUsed = tx.tx?.gasLimit || '0'\n const gasPrice = tx.tx?.gasPrice || '0'\n const blockNumber = tx.tx?.blockNumber || '0'\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n private handleTransactionReceipt(warp: Warp, actionIndex: WarpActionIndex, tx: ethers.TransactionReceipt): WarpActionExecution {\n const success = tx.status === 1\n const gasUsed = tx.gasUsed?.toString() || '0'\n const gasPrice = tx.gasPrice?.toString() || '0'\n const blockNumber = tx.blockNumber?.toString() || '0'\n const transactionHash = tx.hash\n\n const logs = tx.logs.map((log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber?.toString() || '0',\n transactionHash: log.transactionHash,\n index: log.index?.toString() || '0',\n }))\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[] }; results: WarpExecutionResults }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues }\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, results }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.results)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseResultsOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n results[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n results[key] = getNestedValue(path) || null\n } else {\n results[key] = path\n }\n }\n\n return { values, results: await evaluateResultsCommon(warp, results, actionIndex, inputs, this.serializer.coreSerializer) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const receipt = await this.provider.getTransactionReceipt(txHash)\n\n if (!receipt) {\n return { status: 'pending' }\n }\n\n return {\n status: receipt.status === 1 ? 'confirmed' : 'failed',\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<ethers.TransactionReceipt | null> {\n try {\n return await this.provider.getTransactionReceipt(txHash)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nconst SplitParamsRegex = new RegExp(`${WarpConstants.ArgParamsSeparator}(.*)`)\n\nexport class WarpEvmSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (ethers.isAddress(value)) {\n return `address:${value}`\n }\n if (ethers.isHexString(value) && !ethers.isAddress(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const chainExplorers = EvmExplorers[this.chain.name as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n return ['Default' as ExplorerName]\n }\n\n const explorers = chainExplorers[this.config.env]\n if (!explorers) {\n return ['Default' as ExplorerName]\n }\n\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = ExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = ExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = ExplorerUrls[primaryExplorer]\n return url || ExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/tx/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/block/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import {\n AdapterWarpWallet,\n getProviderUrl,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(config, chain.name, config.env, chain.defaultApiUrl)\n\n this.provider = new ethers.JsonRpcProvider(apiUrl)\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const wallet = this.getWallet()\n\n const txRequest = {\n to: tx.to,\n data: tx.data,\n value: tx.value || 0,\n gasLimit: tx.gasLimit,\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n nonce: tx.nonce,\n chainId: tx.chainId,\n }\n\n const signedTx = await wallet.signTransaction(txRequest)\n return { ...tx, signature: signedTx }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n // For multiple transactions, set sequential nonces and give earlier transactions higher priority\n if (txs.length > 1) {\n const wallet = this.getWallet()\n const address = wallet.address\n\n // Get current nonce from blockchain\n const currentNonce = await this.provider.getTransactionCount(address, 'pending')\n\n const signedTxs = []\n for (let i = 0; i < txs.length; i++) {\n const tx = { ...txs[i] }\n\n // Set sequential nonce\n tx.nonce = currentNonce + i\n\n // Give earlier transactions higher gas price for priority\n if (i > 0) {\n const priorityReduction = BigInt(i * 1000000000) // 1 gwei per transaction\n const minGasPrice = BigInt(1000000000) // 1 gwei minimum\n\n if (tx.maxFeePerGas && tx.maxPriorityFeePerGas) {\n tx.maxFeePerGas = tx.maxFeePerGas > priorityReduction ? tx.maxFeePerGas - priorityReduction : minGasPrice\n tx.maxPriorityFeePerGas =\n tx.maxPriorityFeePerGas > priorityReduction ? tx.maxPriorityFeePerGas - priorityReduction : minGasPrice\n // Remove gasPrice if it exists to avoid EIP-1559 conflict\n delete tx.gasPrice\n } else if (tx.gasPrice) {\n tx.gasPrice = tx.gasPrice > priorityReduction ? tx.gasPrice - priorityReduction : minGasPrice\n // Remove EIP-1559 fields if they exist to avoid conflict\n delete tx.maxFeePerGas\n delete tx.maxPriorityFeePerGas\n }\n }\n\n const signedTx = await this.signTransaction(tx)\n signedTxs.push(signedTx)\n }\n\n return signedTxs\n }\n\n // Single transaction - use existing logic\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const wallet = this.getWallet()\n const signature = await wallet.signMessage(message)\n\n return signature\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!tx.signature) throw new Error('Transaction must be signed before sending')\n\n const wallet = this.getWallet()\n if (!wallet) throw new Error('Wallet not initialized - no private key provided')\n\n const connectedWallet = wallet.connect(this.provider)\n const txResponse = await connectedWallet.sendTransaction(tx as any)\n return txResponse.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.fromPhrase(mnemonic)\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.createRandom()\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic: wallet.mnemonic?.phrase || '' }\n }\n\n getAddress(): string | null {\n const wallet = this.getWallet()\n return wallet.address\n }\n\n private getWallet(): ethers.Wallet {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) return new ethers.Wallet(privateKey)\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) return ethers.Wallet.fromPhrase(mnemonic) as unknown as ethers.Wallet\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["WarpChainName","CacheTtl","WarpCache","token","WarpChainName","WarpChainName","BaseChain","WarpChainName","WarpChainName","EthereumChain","WarpCache","CacheTtl","getProviderUrl","getWarpWalletAddressFromConfig","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","getProviderUrl","WarpConstants","ethers","ethers","getProviderUrl","ethers","WarpConstants","getProviderUrl","ethers","getWarpWalletAddressFromConfig","url","getProviderUrl","ethers","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName"]}
|
|
1
|
+
{"version":3,"sources":["../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderConfig,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(providerConfig.url, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n let receipt = await this.provider.getTransactionReceipt(identifier)\n\n if (awaitCompleted && !receipt) {\n receipt = await tx.wait()\n }\n\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderConfig,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpActionExecution,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const providerConfig = getProviderConfig(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(providerConfig.url, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) throw new Error('WarpEvmExecutor: Contract action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n } catch (error) {\n throw new Error(`WarpEvmExecutor: Failed to encode function data for ${action.func}: ${error}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<ethers.TransactionRequest> {\n if (executable.transfers.length === 0) throw new Error('WarpEvmExecutor: No transfers provided')\n if (!this.chain.nativeToken?.identifier) throw new Error('WarpEvmExecutor: No native token defined for this chain')\n\n const nativeTokenTransfers = executable.transfers.filter((transfer) => transfer.identifier === this.chain.nativeToken!.identifier)\n const erc20Transfers = executable.transfers.filter((transfer) => transfer.identifier !== this.chain.nativeToken!.identifier)\n\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n if (transfer.amount <= 0n) throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: transfer.amount,\n data: '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n if (executable.transfers.length > 1) throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n\n throw new Error('WarpEvmExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string\n ): Promise<ethers.TransactionRequest> {\n if (!ethers.isAddress(transfer.identifier)) {\n throw new Error(`WarpEvmExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n const transferInterface = new ethers.Interface(['function transfer(address to, uint256 amount) returns (bool)'])\n\n const encodedData = transferInterface.encodeFunctionData('transfer', [executable.destination, transfer.amount])\n\n const tx: ethers.TransactionRequest = {\n to: transfer.identifier,\n value: 0n,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpActionExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n if (!action.func) throw new Error('WarpEvmExecutor: Query action must have a function name')\n if (!ethers.isAddress(executable.destination)) throw new Error(`WarpEvmExecutor: Invalid address for query: ${executable.destination}`)\n\n try {\n let iface: ethers.Interface\n try {\n iface = new ethers.Interface(JSON.parse(action.abi as string))\n } catch {\n iface = new ethers.Interface([action.abi as string])\n }\n\n const nativeArgs = executable.args.map((arg) => this.serializer.coreSerializer.stringToNative(arg)[1])\n const encodedData = iface.encodeFunctionData(action.func, nativeArgs)\n\n const result = await this.provider.call({\n to: executable.destination,\n data: encodedData,\n })\n\n const decodedResult = iface.decodeFunctionResult(action.func, result)\n const isSuccess = true\n\n const { values, results } = await this.results.extractQueryResults(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n results,\n messages: applyResultsToMessages(executable.warp, results),\n }\n } catch (error) {\n return {\n success: false,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n }\n\n private async estimateGasAndSetDefaults(tx: ethers.TransactionRequest, from: string): Promise<ethers.TransactionRequest> {\n try {\n const gasEstimate = await this.provider.estimateGas({\n ...tx,\n from,\n })\n\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) throw new Error(`Gas estimate too low: ${gasEstimate}`)\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) throw new Error(`Gas estimate too high: ${gasEstimate}`)\n\n const feeData = await this.provider.getFeeData()\n\n // Handle both EIP-1559 and legacy gas pricing\n if (feeData.maxFeePerGas && feeData.maxPriorityFeePerGas) {\n // EIP-1559 pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n } catch (error) {\n // If gas estimation fails, use default values based on transaction type\n let defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Default)\n\n // Determine gas limit based on transaction type\n if (tx.data && tx.data !== '0x') {\n // Check if this is a token transfer by looking for ERC-20 transfer function signature\n if (tx.data.startsWith('0xa9059cbb')) {\n // transfer(address,uint256) function signature\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.TokenTransfer)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n }\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\n chainId: parseInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderConfig,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpActionExecution,\n WarpActionIndex,\n WarpAdapterGenericRemoteTransaction,\n WarpChainAction,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecutionResults,\n WarpNativeValue,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const providerConfig = getProviderConfig(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(providerConfig.url, network)\n }\n\n async getActionExecution(\n warp: Warp,\n actionIndex: WarpActionIndex,\n tx: WarpAdapterGenericRemoteTransaction\n ): Promise<WarpActionExecution> {\n if (!tx) {\n return this.createFailedExecution(warp, actionIndex)\n }\n\n // Handle WarpChainAction object (from getActions)\n if ('status' in tx && typeof tx.status === 'string') {\n return this.handleWarpChainAction(warp, actionIndex, tx as WarpChainAction)\n }\n\n // Handle ethers.TransactionReceipt object (legacy)\n return this.handleTransactionReceipt(warp, actionIndex, tx as ethers.TransactionReceipt)\n }\n\n private createFailedExecution(warp: Warp, actionIndex: WarpActionIndex): WarpActionExecution {\n return {\n success: false,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: '',\n tx: null,\n next: null,\n values: { string: [], native: [] },\n results: {},\n messages: {},\n }\n }\n\n private handleWarpChainAction(warp: Warp, actionIndex: WarpActionIndex, tx: WarpChainAction): WarpActionExecution {\n const success = tx.status === 'success'\n const transactionHash = tx.id || tx.tx?.hash || ''\n const gasUsed = tx.tx?.gasLimit || '0'\n const gasPrice = tx.tx?.gasPrice || '0'\n const blockNumber = tx.tx?.blockNumber || '0'\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n private handleTransactionReceipt(warp: Warp, actionIndex: WarpActionIndex, tx: ethers.TransactionReceipt): WarpActionExecution {\n const success = tx.status === 1\n const gasUsed = tx.gasUsed?.toString() || '0'\n const gasPrice = tx.gasPrice?.toString() || '0'\n const blockNumber = tx.blockNumber?.toString() || '0'\n const transactionHash = tx.hash\n\n const logs = tx.logs.map((log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber?.toString() || '0',\n transactionHash: log.transactionHash,\n index: log.index?.toString() || '0',\n }))\n\n const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])]\n const stringValues = rawValues.map(String)\n\n return {\n success,\n warp,\n action: actionIndex,\n user: getWarpWalletAddressFromConfig(this.config, this.chain.name),\n txHash: transactionHash,\n tx,\n next: null,\n values: { string: stringValues, native: rawValues },\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: unknown[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: WarpNativeValue[] }; results: WarpExecutionResults }> {\n const stringValues = typedValues.map((t) => this.serializer.typedToString(t))\n const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n const values = { string: stringValues, native: nativeValues }\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, results }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: unknown = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = (value as Record<string, unknown>)[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.results)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseResultsOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n results[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n results[key] = getNestedValue(path) || null\n } else {\n results[key] = path\n }\n }\n\n return { values, results: await evaluateResultsCommon(warp, results, actionIndex, inputs, this.serializer.coreSerializer) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const receipt = await this.provider.getTransactionReceipt(txHash)\n\n if (!receipt) {\n return { status: 'pending' }\n }\n\n return {\n status: receipt.status === 1 ? 'confirmed' : 'failed',\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<ethers.TransactionReceipt | null> {\n try {\n return await this.provider.getTransactionReceipt(txHash)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nconst SplitParamsRegex = new RegExp(`${WarpConstants.ArgParamsSeparator}(.*)`)\n\nexport class WarpEvmSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (ethers.isAddress(value)) {\n return `address:${value}`\n }\n if (ethers.isHexString(value) && !ethers.isAddress(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const chainExplorers = EvmExplorers[this.chain.name as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n return ['Default' as ExplorerName]\n }\n\n const explorers = chainExplorers[this.config.env]\n if (!explorers) {\n return ['Default' as ExplorerName]\n }\n\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = ExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = ExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = ExplorerUrls[primaryExplorer]\n return url || ExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/tx/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/block/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import {\n AdapterWarpWallet,\n getProviderConfig,\n getWarpWalletMnemonicFromConfig,\n getWarpWalletPrivateKeyFromConfig,\n WarpAdapterGenericTransaction,\n WarpChainInfo,\n WarpClientConfig,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n const providerConfig = getProviderConfig(config, chain.name, config.env, chain.defaultApiUrl)\n this.provider = new ethers.JsonRpcProvider(providerConfig.url)\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n\n const wallet = this.getWallet()\n\n const txRequest = {\n to: tx.to,\n data: tx.data,\n value: tx.value || 0,\n gasLimit: tx.gasLimit,\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n nonce: tx.nonce,\n chainId: tx.chainId,\n }\n\n const signedTx = await wallet.signTransaction(txRequest)\n return { ...tx, signature: signedTx }\n }\n\n async signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]> {\n if (txs.length === 0) return []\n\n // For multiple transactions, set sequential nonces and give earlier transactions higher priority\n if (txs.length > 1) {\n const wallet = this.getWallet()\n const address = wallet.address\n\n // Get current nonce from blockchain\n const currentNonce = await this.provider.getTransactionCount(address, 'pending')\n\n const signedTxs = []\n for (let i = 0; i < txs.length; i++) {\n const tx = { ...txs[i] }\n\n // Set sequential nonce\n tx.nonce = currentNonce + i\n\n // Give earlier transactions higher gas price for priority\n if (i > 0) {\n const priorityReduction = BigInt(i * 1000000000) // 1 gwei per transaction\n const minGasPrice = BigInt(1000000000) // 1 gwei minimum\n\n if (tx.maxFeePerGas && tx.maxPriorityFeePerGas) {\n tx.maxFeePerGas = tx.maxFeePerGas > priorityReduction ? tx.maxFeePerGas - priorityReduction : minGasPrice\n tx.maxPriorityFeePerGas =\n tx.maxPriorityFeePerGas > priorityReduction ? tx.maxPriorityFeePerGas - priorityReduction : minGasPrice\n // Remove gasPrice if it exists to avoid EIP-1559 conflict\n delete tx.gasPrice\n } else if (tx.gasPrice) {\n tx.gasPrice = tx.gasPrice > priorityReduction ? tx.gasPrice - priorityReduction : minGasPrice\n // Remove EIP-1559 fields if they exist to avoid conflict\n delete tx.maxFeePerGas\n delete tx.maxPriorityFeePerGas\n }\n }\n\n const signedTx = await this.signTransaction(tx)\n signedTxs.push(signedTx)\n }\n\n return signedTxs\n }\n\n // Single transaction - use existing logic\n return Promise.all(txs.map(async (tx) => this.signTransaction(tx)))\n }\n\n async signMessage(message: string): Promise<string> {\n const wallet = this.getWallet()\n const signature = await wallet.signMessage(message)\n\n return signature\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') throw new Error('Invalid transaction object')\n if (!tx.signature) throw new Error('Transaction must be signed before sending')\n\n const wallet = this.getWallet()\n if (!wallet) throw new Error('Wallet not initialized - no private key provided')\n\n const connectedWallet = wallet.connect(this.provider)\n const txResponse = await connectedWallet.sendTransaction(tx as any)\n return txResponse.hash\n }\n\n async sendTransactions(txs: WarpAdapterGenericTransaction[]): Promise<string[]> {\n return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)))\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.fromPhrase(mnemonic)\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.createRandom()\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic: wallet.mnemonic?.phrase || '' }\n }\n\n getAddress(): string | null {\n const wallet = this.getWallet()\n return wallet.address\n }\n\n private getWallet(): ethers.Wallet {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (privateKey) return new ethers.Wallet(privateKey)\n\n const mnemonic = getWarpWalletMnemonicFromConfig(this.config, this.chain.name)\n if (mnemonic) return ethers.Wallet.fromPhrase(mnemonic) as unknown as ethers.Wallet\n\n throw new Error('No private key or mnemonic provided')\n }\n}\n","import { Adapter, AdapterFactory, WarpChain, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (chainName: WarpChain, chainInfos: Record<WarpChainEnv, WarpChainInfo>): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chainInfo: chainInfos[config.env],\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":";AAAA,SAAyC,iBAAAA,sBAAqB;;;ACA9D;AAAA,EAEE,YAAAC;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,OAOK;AACP,SAAS,cAAc;;;ACbvB,SAAS,gBAA2B;AAG7B,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAK1B,YAAY,OAAkB,SAAiB;AAC7C,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,eAA0C;AAC9C,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,gBAAe,sBAAsB;AAClE,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,uCAAuC,SAAS,MAAM,EAAE;AAAA,MAC1E;AAEA,YAAM,YAA8B,MAAM,SAAS,KAAK;AACxD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,SAA+C;AAC7D,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,WAAW,iBAAiB,KAAK,OAAO,IAAI,iBAAiB;AAGnE,UAAM,cAAc,KAAK,MAAM,IAAkB,QAAQ;AACzD,QAAI,aAAa;AACf,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,aAAa;AAC1C,YAAM,QAAQ,UAAU,OAAO,KAAK,CAACC,WAAwBA,OAAM,QAAQ,YAAY,MAAM,iBAAiB,KAAK;AAGnH,UAAI,SAAS,MAAM,YAAY,KAAK,SAAS;AAC3C,eAAO;AAAA,MACT;AAGA,UAAI,OAAO;AACT,aAAK,MAAM,IAAI,UAAU,OAAO,SAAS,OAAO;AAAA,MAClD,OAAO;AAEL,aAAK,MAAM,IAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AAAA,MACvD;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AAEd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAKb;AACR,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,WAAW,oBAAoB,KAAK,OAAO,IAAI,iBAAiB;AAGtE,UAAM,iBAAiB,KAAK,MAAM,IAK/B,QAAQ;AACX,QAAI,mBAAmB,MAAM;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,OAAO;AAC1C,QAAI,CAAC,OAAO;AAEV,WAAK,MAAM,IAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,WAAW;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,UAAU,MAAM;AAAA,MAChB,SAAS,MAAM;AAAA,IACjB;AAGA,SAAK,MAAM,IAAI,UAAU,UAAU,SAAS,OAAO;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,SAAyD;AAC3E,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,WAAW,kBAAkB,KAAK,OAAO,IAAI,iBAAiB;AAGpE,UAAM,mBAAmB,KAAK,MAAM,IAA4B,QAAQ;AACxE,QAAI,qBAAqB,MAAM;AAC7B,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,OAAO;AAC1C,QAAI,CAAC,OAAO,YAAY,YAAY;AAElC,WAAK,MAAM,IAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,aAAqC,CAAC;AAC5C,eAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,MAAM,WAAW,UAAU,GAAG;AACzE,iBAAW,OAAO,IAAK,KAAkC;AAAA,IAC3D;AAGA,SAAK,MAAM,IAAI,UAAU,YAAY,SAAS,OAAO;AACrD,WAAO;AAAA,EACT;AACF;AA3Ha,gBACa,yBAAyB;AAD5C,IAAM,iBAAN;;;ACHP,SAAoC,qBAAqB;AAEzD,IAAM,gBAA2B,cAAc;AAExC,IAAM,iBAAmC;AAAA,EAC9C;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;AC7BA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAM,YAAuBA,eAAc;AAEpC,IAAM,aAA+B;AAAA,EAC1C;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;ACrCA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAMC,aAAuBD,eAAc;AAEpC,IAAM,oBAAsC;AAAA,EACjD;AAAA,IACE,OAAOC;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;AC7BA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAM,gBAA2BA,eAAc;AAExC,IAAM,iBAAmC;AAAA,EAC9C;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;AC7CA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAMC,iBAA2BD,eAAc;AAExC,IAAM,wBAA0C;AAAA,EACrD;AAAA,IACE,OAAOC;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;ACtBO,IAAM,cAAmE;AAAA,EAC9E,UAAU;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAEO,IAAM,qBAAqB,CAAC,OAAkB,KAAmB,OAAsC;AAC5G,QAAM,cAAc,YAAY,KAAK,IAAI,GAAG,KAAK,CAAC;AAClD,SAAO,YAAY,KAAK,CAAC,UAAU,MAAM,eAAe,EAAE,KAAK;AACjE;AAEO,IAAM,yBAAyB,CAAC,WAAmB,MAAc,cAAgC;AACtG,SAAO,YAAY,SAAS,IAAI,GAAG,KAAK,CAAC;AAC3C;;;APJA,IAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,oBAAN,MAAyD;AAAA,EAK9D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,UAAM,iBAAiB,kBAAkB,KAAK,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAChH,UAAM,UAAU,IAAI,OAAO,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,OAAO,CAAC;AAChF,SAAK,WAAW,IAAI,OAAO,gBAAgB,eAAe,KAAK,OAAO;AACtE,SAAK,QAAQ,IAAIC,WAAU,OAAO,OAAO,IAAI;AAC7C,SAAK,iBAAiB,IAAI,eAAe,KAAK,OAAO,SAAS,KAAK,MAAM,OAAO,CAAC;AAAA,EACnF;AAAA,EAEA,MAAM,WAAW,SAA4C;AAC3D,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW,OAAO;AAEtD,WAAO;AAAA,MACL,OAAO,KAAK,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAA4C;AACjE,UAAM,UAAU,MAAM,KAAK,WAAW,OAAO;AAC7C,UAAM,gBAAgB,MAAM,KAAK,sBAAsB,OAAO;AAE9D,QAAI,SAA2B,QAAQ,UAAU,IAAI,CAAC,EAAE,GAAG,KAAK,MAAM,aAAa,QAAQ,QAAQ,QAAQ,CAAC,IAAI,CAAC;AAEjH,eAAW,gBAAgB,eAAe;AACxC,UAAI,aAAa,UAAU,IAAI;AAC7B,eAAO,KAAK;AAAA,UACV,OAAO,KAAK,MAAM;AAAA,UAClB,YAAY,aAAa;AAAA,UACzB,MAAM,aAAa;AAAA,UACnB,QAAQ,aAAa;AAAA,UACrB,QAAQ,aAAa;AAAA,UACrB,UAAU,aAAa;AAAA,UACvB,SAAS,aAAa,WAAW;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,YAAoD;AACjE,QAAI;AACF,UAAI,eAAe,KAAK,MAAM,YAAY,YAAY;AACpD,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,YAAM,WAAW,aAAa,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,MAAM,UAAU;AAChF,YAAM,cAAc,KAAK,MAAM,IAAoB,QAAQ;AAC3D,UAAI,aAAa;AACf,eAAO;AAAA,MACT;AAEA,YAAM,aAAa,mBAAmB,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU;AAElF,UAAI,YAAY;AACd,eAAO;AAAA,UACL,OAAO,KAAK,MAAM;AAAA,UAClB;AAAA,UACA,MAAM,WAAW;AAAA,UACjB,QAAQ,WAAW;AAAA,UACnB,QAAQ;AAAA,UACR,UAAU,WAAW;AAAA,UACrB,SAAS,WAAW;AAAA,QACtB;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,KAAK,iBAAiB,UAAU;AAEvD,YAAM,QAAwB;AAAA,QAC5B,OAAO,KAAK,MAAM;AAAA,QAClB;AAAA,QACA,MAAM,SAAS;AAAA,QACf,QAAQ,SAAS;AAAA,QACjB,QAAQ;AAAA,QACR,UAAU,SAAS;AAAA,QACnB,SAAS,SAAS,WAAW;AAAA,MAC/B;AAEA,WAAK,MAAM,IAAI,UAAU,OAAOC,UAAS,OAAO;AAEhD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,YAAoB,iBAAiB,OAAwC;AAC3F,QAAI;AACF,YAAM,KAAK,MAAM,KAAK,SAAS,eAAe,UAAU;AACxD,UAAI,CAAC,GAAI,QAAO;AAEhB,UAAI,UAAU,MAAM,KAAK,SAAS,sBAAsB,UAAU;AAElE,UAAI,kBAAkB,CAAC,SAAS;AAC9B,kBAAU,MAAM,GAAG,KAAK;AAAA,MAC1B;AAEA,YAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,GAAG,eAAe,QAAQ;AAErE,aAAO;AAAA,QACL,OAAO,KAAK,MAAM;AAAA,QAClB,IAAI,GAAG,QAAQ;AAAA,QACf,UAAU,GAAG,MAAM;AAAA,QACnB,QAAQ,GAAG;AAAA,QACX,OAAO,GAAG;AAAA,QACV,UAAU,GAAG,QAAQ,GAAG,SAAS,OAAO,kBAAkB;AAAA,QAC1D,QAAQ,SAAS,WAAW,IAAI,YAAY,SAAS,WAAW,IAAI,WAAW;AAAA,QAC/E,WAAW,OAAO,YAAY,IAAI,KAAK,OAAO,MAAM,SAAS,IAAI,GAAI,EAAE,YAAY,KAAI,oBAAI,KAAK,GAAE,YAAY;AAAA,QAC9G,OAAO,SAAS,WAAW,IAAI,uBAAuB;AAAA,QACtD,IAAI;AAAA,UACF,MAAM,GAAG,QAAQ;AAAA,UACjB,MAAM,GAAG;AAAA,UACT,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,GAAG,MAAM,SAAS;AAAA,UACzB,MAAM,GAAG,QAAQ;AAAA,UACjB,UAAU,GAAG,UAAU,SAAS,KAAK;AAAA,UACrC,UAAU,GAAG,UAAU,SAAS,KAAK;AAAA,UACrC,aAAa,GAAG,eAAe;AAAA,UAC/B,WAAW,GAAG,aAAa;AAAA,UAC3B,kBAAkB,GAAG,SAAS;AAAA,QAChC;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,SAAiB,SAA6D;AACpG,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAc,sBAAsB,SAA0C;AAC5E,UAAM,MAAM,KAAK,OAAO,QAAQ,YAAY,YAAY;AACxD,UAAM,SAAS,uBAAuB,KAAK,MAAM,MAAM,GAAG;AAC1D,UAAM,cAAc,OAAO,IAAI,CAAC,UAAU,KAAK,gBAAgB,SAAS,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,CAAC;AACzG,UAAM,WAAW,MAAM,QAAQ,IAAI,WAAW;AAE9C,WAAO,SACJ,IAAI,CAAC,SAAS,WAAW,EAAE,SAAS,OAAO,OAAO,KAAK,EAAE,EAAE,EAC3D,OAAO,CAAC,EAAE,QAAQ,MAAM,UAAU,EAAE,EACpC,IAAI,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,MAC5B,cAAc,MAAM;AAAA,MACpB;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,UAAU,MAAM,YAAY;AAAA,MAC5B,SAAS,MAAM,WAAW;AAAA,IAC5B,EAAE;AAAA,EACN;AAAA,EAEA,MAAc,gBAAgB,SAAiB,cAAuC;AACpF,UAAM,WAAW,IAAI,OAAO,SAAS,cAAc,WAAW,KAAK,QAAQ;AAC3E,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,iBAAiB,cAAoG;AAEjI,UAAM,kBAAkB,MAAM,KAAK,eAAe,iBAAiB,YAAY;AAC/E,QAAI,iBAAiB;AACnB,aAAO;AAAA,IACT;AAGA,UAAM,WAAW,IAAI,OAAO,SAAS,cAAc,WAAW,KAAK,QAAQ;AAC3E,UAAM,CAAC,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,MACjD,SAAS,KAAK,EAAE,MAAM,MAAM,eAAe;AAAA,MAC3C,SAAS,OAAO,EAAE,MAAM,MAAM,SAAS;AAAA,MACvC,SAAS,SAAS,EAAE,MAAM,MAAM,EAAE;AAAA,IACpC,CAAC;AAED,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,QAAQ,UAAU;AAAA,MAClB,UAAU,YAAY;AAAA,MACtB,SAAS;AAAA,IACX;AAAA,EACF;AACF;;;AQ7NA;AAAA,EAEE;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA;AAAA,EACA,kCAAAC;AAAA,OAOK;AACP,SAAS,UAAAC,eAAc;;;ACdhB,IAAM,mBAAmB;AAAA,EAC9B,UAAU;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,eAAe;AAAA;AAAA,IACf,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;AAEO,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,sBAAmB;AACnB,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,uBAAoB;AALV,SAAAA;AAAA,GAAA;AAQL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,qBAAkB;AAClB,EAAAA,mBAAA,wBAAqB;AACrB,EAAAA,mBAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,cAAW;AACX,EAAAA,eAAA,qBAAkB;AAClB,EAAAA,eAAA,oBAAiB;AACjB,EAAAA,eAAA,2BAAwB;AAJd,SAAAA;AAAA,GAAA;AASL,IAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,IACR,SAAS,CAAC,6BAA6B,6BAA6B,6BAA4B;AAAA,IAChG,SAAS,CAAC,4CAAoC,4CAAmC;AAAA,IACjF,QAAQ,CAAC,4CAAoC,4CAAmC;AAAA,EAClF;AAAA,EACA,UAAU;AAAA,IACR,SAAS,CAAC,2BAA4B,8CAAoC;AAAA,IAC1E,SAAS,CAAC,0CAAmC,6DAA2C;AAAA,IACxF,QAAQ,CAAC,0CAAmC,6DAA2C;AAAA,EACzF;AAAA,EACA,MAAM;AAAA,IACJ,SAAS,CAAC,2BAAwB,sCAA4B;AAAA,IAC9D,SAAS,CAAC,0CAA+B,qDAAmC;AAAA,IAC5E,QAAQ,CAAC,0CAA+B,qDAAmC;AAAA,EAC7E;AACF;AAEO,IAAM,eAA6C;AAAA,EACxD,CAAC,2BAA2B,GAAG;AAAA,EAC/B,CAAC,0CAAkC,GAAG;AAAA,EACtC,CAAC,2BAA2B,GAAG;AAAA,EAC/B,CAAC,6BAA4B,GAAG;AAAA,EAChC,CAAC,4CAAmC,GAAG;AAAA,EAEvC,CAAC,yBAA0B,GAAG;AAAA,EAC9B,CAAC,wCAAiC,GAAG;AAAA,EACrC,CAAC,8CAAoC,GAAG;AAAA,EACxC,CAAC,6DAA2C,GAAG;AAAA,EAE/C,CAAC,yBAAsB,GAAG;AAAA,EAC1B,CAAC,wCAA6B,GAAG;AAAA,EACjC,CAAC,sCAA4B,GAAG;AAAA,EAChC,CAAC,qDAAmC,GAAG;AACzC;;;AC7EA;AAAA,EAEE;AAAA,EACA,qBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EASA,iBAAAC;AAAA,OAGK;AACP,SAAS,UAAAC,eAAc;;;AClBvB;AAAA,EAKE;AAAA,EAEA;AAAA,OACK;AACP,SAAS,UAAAC,eAAc;AAEvB,IAAM,mBAAmB,IAAI,OAAO,GAAG,cAAc,kBAAkB,MAAM;AAEtE,IAAM,oBAAN,MAAyD;AAAA,EAG9D,cAAc;AACZ,SAAK,iBAAiB,IAAI,eAAe;AAAA,EAC3C;AAAA,EAEA,cAAc,OAAoB;AAChC,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAIA,QAAO,UAAU,KAAK,GAAG;AAC3B,eAAO,WAAW,KAAK;AAAA,MACzB;AACA,UAAIA,QAAO,YAAY,KAAK,KAAK,CAACA,QAAO,UAAU,KAAK,GAAG;AACzD,eAAO,OAAO,KAAK;AAAA,MACrB;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,OAAO,UAAU,KAAK,GAAG;AAC3B,YAAI,SAAS,KAAK,SAAS,IAAK,QAAO,SAAS,KAAK;AACrD,YAAI,SAAS,KAAK,SAAS,MAAO,QAAO,UAAU,KAAK;AACxD,YAAI,SAAS,KAAK,SAAS,WAAY,QAAO,UAAU,KAAK;AAC7D,eAAO,UAAU,KAAK;AAAA,MACxB;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,WAAW,MAAM,SAAS,CAAC;AAAA,IACpC;AACA,QAAI,OAAO,UAAU,WAAW;AAC9B,aAAO,WAAW,KAAK;AAAA,IACzB;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,YAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,EAAE,MAAM,cAAc,kBAAkB,EAAE,CAAC,CAAC;AACrG,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,EAAE,MAAM,cAAc,kBAAkB,EAAE,CAAC,CAAC;AACtG,aAAO,QAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAAA,IACzC;AACA,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO;AAAA,IACT;AACA,WAAO,UAAU,OAAO,KAAK,CAAC;AAAA,EAChC;AAAA,EAEA,cAAc,OAAoD;AAChE,UAAM,cAAc,KAAK,cAAc,KAAK;AAC5C,UAAM,CAAC,MAAM,GAAG,UAAU,IAAI,YAAY,MAAM,cAAc,kBAAkB;AAChF,UAAM,cAAc,WAAW,KAAK,cAAc,kBAAkB;AACpE,WAAO,CAAC,MAAM,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAAA,EACxD;AAAA,EAEA,cAAc,MAA2B,OAA6B;AACpE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,KAAwB;AAAA,MACxC,KAAK;AACH,eAAO,OAAO,KAAwB;AAAA,MACxC,KAAK;AACH,eAAO,QAAQ,KAAK;AAAA,MACtB,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB;AACE,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7C,cAAI,CAAC,SAAU,QAAO,CAAC;AACvB,gBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,iBAAO,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,UAAU,IAAI,CAAC;AAAA,QAC/D;AACA,eAAO,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,aAAa,MAAuD;AAClE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEA,cAAc,OAAoB;AAChC,UAAM,QAAQ,MAAM,MAAM,cAAc,oBAAoB,CAAC;AAC7D,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO;AAAA,IACT;AAEA,UAAM,CAAC,MAAM,WAAW,IAAI;AAE5B,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,WAAW;AAAA,MAC3B,KAAK;AACH,eAAO,OAAO,WAAW;AAAA,MAC3B,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7C,cAAI,CAAC,SAAU,QAAO,CAAC;AACvB,gBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,iBAAO,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;AAAA,QACtE;AACA,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAc,OAAgC;AACrE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,eAAO,UAAU;AAAA,MACnB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AACF;;;ADpJO,IAAM,iBAAN,MAAmD;AAAA,EAIxD,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,aAAa,IAAI,kBAAkB;AACxC,UAAM,iBAAiBC,mBAAkB,KAAK,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAChH,UAAM,UAAU,IAAIC,QAAO,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,OAAO,CAAC;AAChF,SAAK,WAAW,IAAIA,QAAO,gBAAgB,eAAe,KAAK,OAAO;AAAA,EACxE;AAAA,EAEA,MAAM,mBACJ,MACA,aACA,IAC8B;AAC9B,QAAI,CAAC,IAAI;AACP,aAAO,KAAK,sBAAsB,MAAM,WAAW;AAAA,IACrD;AAGA,QAAI,YAAY,MAAM,OAAO,GAAG,WAAW,UAAU;AACnD,aAAO,KAAK,sBAAsB,MAAM,aAAa,EAAqB;AAAA,IAC5E;AAGA,WAAO,KAAK,yBAAyB,MAAM,aAAa,EAA+B;AAAA,EACzF;AAAA,EAEQ,sBAAsB,MAAY,aAAmD;AAC3F,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,+BAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAAA,MACjE,QAAQ;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MACjC,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEQ,sBAAsB,MAAY,aAA8B,IAA0C;AAChH,UAAM,UAAU,GAAG,WAAW;AAC9B,UAAM,kBAAkB,GAAG,MAAM,GAAG,IAAI,QAAQ;AAChD,UAAM,UAAU,GAAG,IAAI,YAAY;AACnC,UAAM,WAAW,GAAG,IAAI,YAAY;AACpC,UAAM,cAAc,GAAG,IAAI,eAAe;AAE1C,UAAM,YAAY,CAAC,iBAAiB,aAAa,SAAS,QAAQ;AAClE,UAAM,eAAe,UAAU,IAAI,MAAM;AAEzC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,+BAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAAA,MACjE,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,cAAc,QAAQ,UAAU;AAAA,MAClD,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEQ,yBAAyB,MAAY,aAA8B,IAAoD;AAC7H,UAAM,UAAU,GAAG,WAAW;AAC9B,UAAM,UAAU,GAAG,SAAS,SAAS,KAAK;AAC1C,UAAM,WAAW,GAAG,UAAU,SAAS,KAAK;AAC5C,UAAM,cAAc,GAAG,aAAa,SAAS,KAAK;AAClD,UAAM,kBAAkB,GAAG;AAE3B,UAAM,OAAO,GAAG,KAAK,IAAI,CAAC,SAAS;AAAA,MACjC,SAAS,IAAI;AAAA,MACb,QAAQ,CAAC,GAAG,IAAI,MAAM;AAAA,MACtB,MAAM,IAAI;AAAA,MACV,aAAa,IAAI,aAAa,SAAS,KAAK;AAAA,MAC5C,iBAAiB,IAAI;AAAA,MACrB,OAAO,IAAI,OAAO,SAAS,KAAK;AAAA,IAClC,EAAE;AAEF,UAAM,YAAY,CAAC,iBAAiB,aAAa,SAAS,UAAU,GAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAE;AACpG,UAAM,eAAe,UAAU,IAAI,MAAM;AAEzC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,+BAA+B,KAAK,QAAQ,KAAK,MAAM,IAAI;AAAA,MACjE,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,EAAE,QAAQ,cAAc,QAAQ,UAAU;AAAA,MAClD,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,MACA,aACA,aACA,QACqG;AACrG,UAAM,eAAe,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,cAAc,CAAC,CAAC;AAC5E,UAAM,eAAe,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC;AAC/E,UAAM,SAAS,EAAE,QAAQ,cAAc,QAAQ,aAAa;AAC5D,QAAI,UAAgC,CAAC;AAErC,QAAI,CAAC,KAAK,QAAS,QAAO,EAAE,QAAQ,QAAQ;AAE5C,UAAM,iBAAiB,CAAC,SAA0B;AAChD,YAAM,UAAU,KACb,MAAM,GAAG,EACT,MAAM,CAAC,EACP,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC;AAC7B,UAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,UAAI,QAAiB,aAAa,QAAQ,CAAC,CAAC;AAC5C,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,gBAAS,MAAkC,QAAQ,CAAC,CAAC;AAAA,MACvD;AACA,aAAO;AAAA,IACT;AAEA,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,OAAO,GAAG;AACtD,UAAI,KAAK,WAAWC,eAAc,UAAU,MAAM,EAAG;AACrD,YAAM,qBAAqB,qBAAqB,IAAI;AACpD,UAAI,uBAAuB,QAAQ,uBAAuB,aAAa;AACrE,gBAAQ,GAAG,IAAI;AACf;AAAA,MACF;AACA,UAAI,KAAK,WAAW,MAAM,KAAK,SAAS,SAAS,KAAK,WAAW,MAAM,GAAG;AACxE,gBAAQ,GAAG,IAAI,eAAe,IAAI,KAAK;AAAA,MACzC,OAAO;AACL,gBAAQ,GAAG,IAAI;AAAA,MACjB;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,SAAS,MAAM,sBAAsB,MAAM,SAAS,aAAa,QAAQ,KAAK,WAAW,cAAc,EAAE;AAAA,EAC5H;AAAA,EAEA,MAAM,qBACJ,QACiG;AACjG,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,MAAM;AAEhE,UAAI,CAAC,SAAS;AACZ,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B;AAEA,aAAO;AAAA,QACL,QAAQ,QAAQ,WAAW,IAAI,cAAc;AAAA,QAC7C,aAAa,QAAQ;AAAA,QACrB,SAAS,QAAQ;AAAA,MACnB;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,QAA2D;AACrF,QAAI;AACF,aAAO,MAAM,KAAK,SAAS,sBAAsB,MAAM;AAAA,IACzD,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AFjLO,IAAM,kBAAN,MAAqD;AAAA,EAK1D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,aAAa,IAAI,kBAAkB;AACxC,UAAM,iBAAiBC,mBAAkB,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAC3G,UAAM,UAAU,IAAIC,QAAO,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,OAAO,CAAC;AAChF,SAAK,WAAW,IAAIA,QAAO,gBAAgB,eAAe,KAAK,OAAO;AACtE,SAAK,UAAU,IAAI,eAAe,QAAQ,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,MAAM,kBAAkB,YAAgE;AACtF,UAAM,SAAS,qBAAqB,WAAW,MAAM,WAAW,MAAM;AAEtE,QAAI,KAAuC;AAC3C,QAAI,OAAO,SAAS,YAAY;AAC9B,WAAK,MAAM,KAAK,0BAA0B,UAAU;AAAA,IACtD,WAAW,OAAO,SAAS,YAAY;AACrC,WAAK,MAAM,KAAK,8BAA8B,UAAU;AAAA,IAC1D,WAAW,OAAO,SAAS,SAAS;AAClC,YAAM,IAAI,MAAM,sFAAsF;AAAA,IACxG,WAAW,OAAO,SAAS,WAAW;AACpC,YAAM,IAAI,MAAM,wFAAwF;AAAA,IAC1G;AAEA,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,yCAAyC,OAAO,IAAI,GAAG;AAEhF,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,0BAA0B,YAAgE;AAC9F,UAAM,aAAaC,gCAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AACpF,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,wDAAwD;AAEzF,QAAI,CAACD,QAAO,UAAU,WAAW,WAAW,GAAG;AAC7C,YAAM,IAAI,MAAM,iDAAiD,WAAW,WAAW,EAAE;AAAA,IAC3F;AAEA,QAAI,WAAW,aAAa,WAAW,UAAU,SAAS,GAAG;AAC3D,aAAO,KAAK,+BAA+B,YAAY,UAAU;AAAA,IACnE;AAEA,UAAM,KAAgC;AAAA,MACpC,IAAI,WAAW;AAAA,MACf,OAAO,WAAW;AAAA,MAClB,MAAM,WAAW,OAAO,KAAK,WAAW,cAAc,WAAW,IAAI,IAAI;AAAA,IAC3E;AAEA,WAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,EACtD;AAAA,EAEA,MAAM,8BAA8B,YAAgE;AAClG,UAAM,aAAaC,gCAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AACpF,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,4DAA4D;AAE7F,UAAM,SAAS,qBAAqB,WAAW,MAAM,WAAW,MAAM;AACtE,QAAI,CAAC,UAAU,EAAE,UAAU,WAAW,CAAC,OAAO,KAAM,OAAM,IAAI,MAAM,4DAA4D;AAChI,QAAI,CAACD,QAAO,UAAU,WAAW,WAAW,EAAG,OAAM,IAAI,MAAM,8CAA8C,WAAW,WAAW,EAAE;AAErI,QAAI;AACF,UAAI;AACJ,UAAI;AACF,gBAAQ,IAAIA,QAAO,UAAU,KAAK,MAAM,OAAO,GAAa,CAAC;AAAA,MAC/D,QAAQ;AACN,gBAAQ,IAAIA,QAAO,UAAU,CAAC,OAAO,GAAa,CAAC;AAAA,MACrD;AAEA,YAAM,aAAa,WAAW,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,eAAe,eAAe,GAAG,EAAE,CAAC,CAAC;AACrG,YAAM,cAAc,MAAM,mBAAmB,OAAO,MAAM,UAAU;AAEpE,YAAM,KAAgC;AAAA,QACpC,IAAI,WAAW;AAAA,QACf,OAAO,WAAW;AAAA,QAClB,MAAM;AAAA,MACR;AAEA,aAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,IACtD,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,uDAAuD,OAAO,IAAI,KAAK,KAAK,EAAE;AAAA,IAChG;AAAA,EACF;AAAA,EAEA,MAAc,+BAA+B,YAA4B,YAAwD;AAC/H,QAAI,WAAW,UAAU,WAAW,EAAG,OAAM,IAAI,MAAM,wCAAwC;AAC/F,QAAI,CAAC,KAAK,MAAM,aAAa,WAAY,OAAM,IAAI,MAAM,yDAAyD;AAElH,UAAM,uBAAuB,WAAW,UAAU,OAAO,CAAC,aAAa,SAAS,eAAe,KAAK,MAAM,YAAa,UAAU;AACjI,UAAM,iBAAiB,WAAW,UAAU,OAAO,CAAC,aAAa,SAAS,eAAe,KAAK,MAAM,YAAa,UAAU;AAE3H,QAAI,qBAAqB,WAAW,KAAK,eAAe,WAAW,GAAG;AACpE,YAAM,WAAW,qBAAqB,CAAC;AAEvC,UAAI,SAAS,UAAU,GAAI,OAAM,IAAI,MAAM,gEAAgE;AAE3G,YAAM,KAAgC;AAAA,QACpC,IAAI,WAAW;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,MAAM;AAAA,MACR;AAEA,aAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,IACtD;AAEA,QAAI,qBAAqB,WAAW,KAAK,eAAe,WAAW,GAAG;AACpE,aAAO,KAAK,0BAA0B,YAAY,eAAe,CAAC,GAAG,UAAU;AAAA,IACjF;AAEA,QAAI,WAAW,UAAU,SAAS,EAAG,OAAM,IAAI,MAAM,6DAA6D;AAElH,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EAEA,MAAc,0BACZ,YACA,UACA,YACoC;AACpC,QAAI,CAACA,QAAO,UAAU,SAAS,UAAU,GAAG;AAC1C,YAAM,IAAI,MAAM,2CAA2C,SAAS,UAAU,EAAE;AAAA,IAClF;AAEA,UAAM,oBAAoB,IAAIA,QAAO,UAAU,CAAC,8DAA8D,CAAC;AAE/G,UAAM,cAAc,kBAAkB,mBAAmB,YAAY,CAAC,WAAW,aAAa,SAAS,MAAM,CAAC;AAE9G,UAAM,KAAgC;AAAA,MACpC,IAAI,SAAS;AAAA,MACb,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAEA,WAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,EACtD;AAAA,EAEA,MAAM,aAAa,YAA0D;AAC3E,UAAM,SAAS,qBAAqB,WAAW,MAAM,WAAW,MAAM;AACtE,QAAI,OAAO,SAAS,QAAS,OAAM,IAAI,MAAM,0DAA0D,OAAO,IAAI,EAAE;AACpH,QAAI,CAAC,OAAO,KAAM,OAAM,IAAI,MAAM,yDAAyD;AAC3F,QAAI,CAACA,QAAO,UAAU,WAAW,WAAW,EAAG,OAAM,IAAI,MAAM,+CAA+C,WAAW,WAAW,EAAE;AAEtI,QAAI;AACF,UAAI;AACJ,UAAI;AACF,gBAAQ,IAAIA,QAAO,UAAU,KAAK,MAAM,OAAO,GAAa,CAAC;AAAA,MAC/D,QAAQ;AACN,gBAAQ,IAAIA,QAAO,UAAU,CAAC,OAAO,GAAa,CAAC;AAAA,MACrD;AAEA,YAAM,aAAa,WAAW,KAAK,IAAI,CAAC,QAAQ,KAAK,WAAW,eAAe,eAAe,GAAG,EAAE,CAAC,CAAC;AACrG,YAAM,cAAc,MAAM,mBAAmB,OAAO,MAAM,UAAU;AAEpE,YAAM,SAAS,MAAM,KAAK,SAAS,KAAK;AAAA,QACtC,IAAI,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAED,YAAM,gBAAgB,MAAM,qBAAqB,OAAO,MAAM,MAAM;AACpE,YAAM,YAAY;AAElB,YAAM,EAAE,QAAQ,QAAQ,IAAI,MAAM,KAAK,QAAQ;AAAA,QAC7C,WAAW;AAAA,QACX;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAEA,YAAM,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,WAAW,MAAM,WAAW,QAAQ,OAAO;AAErF,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,QACnB,MAAMC,gCAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AAAA,QACvE,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,uBAAuB,WAAW,MAAM,OAAO;AAAA,MAC3D;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,QACnB,MAAMA,gCAA+B,KAAK,QAAQ,WAAW,MAAM,IAAI;AAAA,QACvE,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,QACjC,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,0BAA0B,IAA+B,MAAkD;AACvH,QAAI;AACF,YAAM,cAAc,MAAM,KAAK,SAAS,YAAY;AAAA,QAClD,GAAG;AAAA,QACH;AAAA,MACF,CAAC;AAED,UAAI,cAAc,OAAO,iBAAiB,WAAW,WAAW,EAAG,OAAM,IAAI,MAAM,yBAAyB,WAAW,EAAE;AACzH,UAAI,cAAc,OAAO,iBAAiB,WAAW,WAAW,EAAG,OAAM,IAAI,MAAM,0BAA0B,WAAW,EAAE;AAE1H,YAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAG/C,UAAI,QAAQ,gBAAgB,QAAQ,sBAAsB;AAExD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,SAAS,KAAK,MAAM,OAAO;AAAA,UACpC,UAAU;AAAA,UACV,cAAc,QAAQ;AAAA,UACtB,sBAAsB,QAAQ;AAAA,QAChC;AAAA,MACF,WAAW,QAAQ,UAAU;AAE3B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,SAAS,KAAK,MAAM,OAAO;AAAA,UACpC,UAAU;AAAA,UACV,UAAU,QAAQ;AAAA,QACpB;AAAA,MACF,OAAO;AAEL,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,SAAS,KAAK,MAAM,OAAO;AAAA,UACpC,UAAU;AAAA,UACV,UAAUD,QAAO,WAAW,iBAAiB,SAAS,SAAS,KAAK;AAAA,QACtE;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AAEd,UAAI,kBAAkB,OAAO,iBAAiB,SAAS,OAAO;AAG9D,UAAI,GAAG,QAAQ,GAAG,SAAS,MAAM;AAE/B,YAAI,GAAG,KAAK,WAAW,YAAY,GAAG;AAEpC,4BAAkB,OAAO,iBAAiB,SAAS,aAAa;AAAA,QAClE,OAAO;AACL,4BAAkB,OAAO,iBAAiB,SAAS,YAAY;AAAA,QACjE;AAAA,MACF,OAAO;AACL,0BAAkB,OAAO,iBAAiB,SAAS,QAAQ;AAAA,MAC7D;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,SAAS,SAAS,KAAK,MAAM,OAAO;AAAA,QACpC,UAAU;AAAA,QACV,UAAUA,QAAO,WAAW,iBAAiB,SAAS,SAAS,KAAK;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,SAAiB,WAAoC;AACvE,QAAI;AACF,YAAM,mBAAmBA,QAAO,cAAc,SAAS,SAAS;AAChE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAAA,IACtD;AAAA,EACF;AACF;;;AIlSO,IAAM,kBAAN,MAAqD;AAAA,EAC1D,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEK,eAAwC;AAC9C,UAAM,iBAAiB,aAAa,KAAK,MAAM,IAAiC;AAChF,QAAI,CAAC,gBAAgB;AACnB,aAAO,CAAC,SAAyB;AAAA,IACnC;AAEA,UAAM,YAAY,eAAe,KAAK,OAAO,GAAG;AAChD,QAAI,CAAC,WAAW;AACd,aAAO,CAAC,SAAyB;AAAA,IACnC;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,qBAAmC;AACzC,UAAM,YAAY,KAAK,aAAa;AACpC,WAAO,UAAU,CAAC;AAAA,EACpB;AAAA,EAEQ,qBAAqB,UAAiC;AAC5D,UAAM,iBAAiB,KAAK,OAAO,aAAa,YAAY,KAAK,MAAM,IAAI;AAE3E,QAAI,kBAAkB,CAAC,UAAU;AAC/B,YAAME,OAAM,aAAa,cAA8B;AACvD,UAAIA,KAAK,QAAOA;AAAA,IAClB;AAEA,QAAI,UAAU;AACZ,YAAMA,OAAM,aAAa,QAAQ;AACjC,UAAIA,KAAK,QAAOA;AAAA,IAClB;AAEA,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,UAAM,MAAM,aAAa,eAAe;AACxC,WAAO,OAAO,aAAa,eAAe;AAAA,EAC5C;AAAA,EAEA,cAAc,SAAiB,UAAiC;AAC9D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,YAAY,OAAO;AAAA,EACtC;AAAA,EAEA,kBAAkB,MAAc,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,OAAO,IAAI;AAAA,EAC9B;AAAA,EAEA,YAAY,aAA8B,UAAiC;AACzE,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,UAAU,WAAW;AAAA,EACxC;AAAA,EAEA,YAAY,YAAoB,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,UAAU,UAAU;AAAA,EACvC;AAAA,EAEA,eAAe,SAAiB,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,YAAY,OAAO;AAAA,EACtC;AAAA,EAEA,kBAA2C;AACzC,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,kBAAkB,MAAwC;AACxD,UAAM,YAAY,KAAK,aAAa;AACpC,WAAO,UAAU,KAAK,CAAC,aAAa,SAAS,YAAY,MAAM,KAAK,YAAY,CAAC;AAAA,EACnF;AAAA,EAEA,eAAe,SAA+C;AAC5D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,YAAY,OAAO;AAAA,MAC5C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,MAA4C;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,OAAO,IAAI;AAAA,MACpC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,YAAkD;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,UAAU,UAAU;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,SAA+C;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,YAAY,OAAO;AAAA,MAC5C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,aAA4D;AACvE,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,UAAU,WAAW;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;ACrJA;AAAA,EAEE,qBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,UAAAC,eAAc;AAEhB,IAAM,gBAAN,MAAiD;AAAA,EAGtD,YACU,QACA,OACR;AAFQ;AACA;AAER,UAAM,iBAAiBD,mBAAkB,QAAQ,MAAM,MAAM,OAAO,KAAK,MAAM,aAAa;AAC5F,SAAK,WAAW,IAAIC,QAAO,gBAAgB,eAAe,GAAG;AAAA,EAC/D;AAAA,EAEA,MAAM,gBAAgB,IAA2E;AAC/F,QAAI,CAAC,MAAM,OAAO,OAAO,SAAU,OAAM,IAAI,MAAM,4BAA4B;AAE/E,UAAM,SAAS,KAAK,UAAU;AAE9B,UAAM,YAAY;AAAA,MAChB,IAAI,GAAG;AAAA,MACP,MAAM,GAAG;AAAA,MACT,OAAO,GAAG,SAAS;AAAA,MACnB,UAAU,GAAG;AAAA,MACb,cAAc,GAAG;AAAA,MACjB,sBAAsB,GAAG;AAAA,MACzB,OAAO,GAAG;AAAA,MACV,SAAS,GAAG;AAAA,IACd;AAEA,UAAM,WAAW,MAAM,OAAO,gBAAgB,SAAS;AACvD,WAAO,EAAE,GAAG,IAAI,WAAW,SAAS;AAAA,EACtC;AAAA,EAEA,MAAM,iBAAiB,KAAgF;AACrG,QAAI,IAAI,WAAW,EAAG,QAAO,CAAC;AAG9B,QAAI,IAAI,SAAS,GAAG;AAClB,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,UAAU,OAAO;AAGvB,YAAM,eAAe,MAAM,KAAK,SAAS,oBAAoB,SAAS,SAAS;AAE/E,YAAM,YAAY,CAAC;AACnB,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAM,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE;AAGvB,WAAG,QAAQ,eAAe;AAG1B,YAAI,IAAI,GAAG;AACT,gBAAM,oBAAoB,OAAO,IAAI,GAAU;AAC/C,gBAAM,cAAc,OAAO,GAAU;AAErC,cAAI,GAAG,gBAAgB,GAAG,sBAAsB;AAC9C,eAAG,eAAe,GAAG,eAAe,oBAAoB,GAAG,eAAe,oBAAoB;AAC9F,eAAG,uBACD,GAAG,uBAAuB,oBAAoB,GAAG,uBAAuB,oBAAoB;AAE9F,mBAAO,GAAG;AAAA,UACZ,WAAW,GAAG,UAAU;AACtB,eAAG,WAAW,GAAG,WAAW,oBAAoB,GAAG,WAAW,oBAAoB;AAElF,mBAAO,GAAG;AACV,mBAAO,GAAG;AAAA,UACZ;AAAA,QACF;AAEA,cAAM,WAAW,MAAM,KAAK,gBAAgB,EAAE;AAC9C,kBAAU,KAAK,QAAQ;AAAA,MACzB;AAEA,aAAO;AAAA,IACT;AAGA,WAAO,QAAQ,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,gBAAgB,EAAE,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,YAAY,SAAkC;AAClD,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,YAAY,MAAM,OAAO,YAAY,OAAO;AAElD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,gBAAgB,IAAoD;AACxE,QAAI,CAAC,MAAM,OAAO,OAAO,SAAU,OAAM,IAAI,MAAM,4BAA4B;AAC/E,QAAI,CAAC,GAAG,UAAW,OAAM,IAAI,MAAM,2CAA2C;AAE9E,UAAM,SAAS,KAAK,UAAU;AAC9B,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,kDAAkD;AAE/E,UAAM,kBAAkB,OAAO,QAAQ,KAAK,QAAQ;AACpD,UAAM,aAAa,MAAM,gBAAgB,gBAAgB,EAAS;AAClE,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,MAAM,iBAAiB,KAAyD;AAC9E,WAAO,QAAQ,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,gBAAgB,EAAE,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,UAA6E;AAClF,UAAM,SAASA,QAAO,OAAO,WAAW,QAAQ;AAChD,WAAO,EAAE,SAAS,OAAO,SAAS,YAAY,OAAO,YAAY,SAAS;AAAA,EAC5E;AAAA,EAEA,WAAsE;AACpE,UAAM,SAASA,QAAO,OAAO,aAAa;AAC1C,WAAO,EAAE,SAAS,OAAO,SAAS,YAAY,OAAO,YAAY,UAAU,OAAO,UAAU,UAAU,GAAG;AAAA,EAC3G;AAAA,EAEA,aAA4B;AAC1B,UAAM,SAAS,KAAK,UAAU;AAC9B,WAAO,OAAO;AAAA,EAChB;AAAA,EAEQ,YAA2B;AACjC,UAAM,aAAa,kCAAkC,KAAK,QAAQ,KAAK,MAAM,IAAI;AACjF,QAAI,WAAY,QAAO,IAAIA,QAAO,OAAO,UAAU;AAEnD,UAAM,WAAW,gCAAgC,KAAK,QAAQ,KAAK,MAAM,IAAI;AAC7E,QAAI,SAAU,QAAOA,QAAO,OAAO,WAAW,QAAQ;AAEtD,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACF;;;ACjIO,IAAM,mBAAmB,CAAC,WAAsB,eAAoE;AACzH,SAAO,CAAC,QAA0B,aAAuB;AACvD,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,GAAG,SAAS,sCAAsC;AAEjF,WAAO;AAAA,MACL,WAAW,WAAW,OAAO,GAAG;AAAA,MAChC,SAAS,MAAM,SAAS,QAAQ;AAAA,MAChC,UAAU,IAAI,gBAAgB,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MAC5D,SAAS,IAAI,eAAe,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MAC1D,YAAY,IAAI,kBAAkB;AAAA,MAClC,UAAU,SAAS;AAAA,MACnB,UAAU,IAAI,gBAAgB,WAAW,OAAO,GAAG,GAAG,MAAM;AAAA,MAC5D,YAAY,MAAM,SAAS,WAAW;AAAA,MACtC,cAAc,MAAM,SAAS,aAAa;AAAA,MAC1C,YAAY,IAAI,kBAAkB,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MAChE,QAAQ,IAAI,cAAc,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,IAC1D;AAAA,EACF;AACF;;;AfvBO,IAAM,iBAAiC;AAAA,EAC5C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,qBAAqC,iBAAiBA,eAAc,UAAU;AAAA,EACzF,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;AgB3CD,SAAyC,iBAAAC,sBAAqB;AAGvD,IAAM,kBAAkC;AAAA,EAC7C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,iBAAiC,iBAAiBA,eAAc,MAAM;AAAA,EACjF,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;AC3CD,SAA6B,iBAAAC,uBAAuC;;;ACApE,SAAyC,iBAAAC,sBAAqB;AAGvD,IAAM,iBAAiC;AAAA,EAC5C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,qBAAqC,iBAAiBA,eAAc,UAAU;AAAA,EACzF,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;AC3CD,SAAyC,iBAAAC,sBAAqB;AAGvD,IAAM,kBAAkC;AAAA,EAC7C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,iBAAiC;AAAA,EAC5C,OAAOA,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,mBAAmC,iBAAiBA,eAAc,QAAQ;AAAA,EACrF,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AACF,CAAC;;;AF9CM,IAAM,oBAAoB,CAAC,QAA0B,aAAkC;AAAA,EAC5F,mBAAmB,QAAQ,QAAQ;AAAA,EACnC,eAAe,QAAQ,QAAQ;AAAA,EAC/B,mBAAmB,QAAQ,QAAQ;AAAA,EACnC,iBAAiB,QAAQ,QAAQ;AACnC;AAEO,IAAM,sBAAsB,MAAmB;AAAA,EACpDC,gBAAc;AAAA,EACdA,gBAAc;AAAA,EACdA,gBAAc;AAAA,EACdA,gBAAc;AAChB;","names":["WarpChainName","CacheTtl","WarpCache","token","WarpChainName","WarpChainName","BaseChain","WarpChainName","WarpChainName","EthereumChain","WarpCache","CacheTtl","getProviderConfig","getWarpWalletAddressFromConfig","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","getProviderConfig","WarpConstants","ethers","ethers","getProviderConfig","ethers","WarpConstants","getProviderConfig","ethers","getWarpWalletAddressFromConfig","url","getProviderConfig","ethers","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vleap/warps-adapter-evm",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.39",
|
|
4
4
|
"description": "EVM adapter for Warps SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -38,6 +38,6 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"ethers": "^6.15.0",
|
|
41
|
-
"@vleap/warps": "^3.0.0-alpha.
|
|
41
|
+
"@vleap/warps": "^3.0.0-alpha.142"
|
|
42
42
|
}
|
|
43
43
|
}
|