@vleap/warps-adapter-evm 0.2.0-alpha.38 → 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 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: string, chainPrefix: string, chainInfos: Record<WarpChainEnv, WarpChainInfo>) => AdapterFactory;
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: string, chainPrefix: string, chainInfos: Record<WarpChainEnv, WarpChainInfo>) => AdapterFactory;
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
@@ -1303,12 +1303,11 @@ var WarpEvmWallet = class {
1303
1303
  };
1304
1304
 
1305
1305
  // src/chains/common.ts
1306
- var createEvmAdapter = (chainName, chainPrefix, chainInfos) => {
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
1310
  chainInfo: chainInfos[config.env],
1311
- prefix: chainPrefix,
1312
1311
  builder: () => fallback.builder(),
1313
1312
  executor: new WarpEvmExecutor(config, chainInfos[config.env]),
1314
1313
  results: new WarpEvmResults(config, chainInfos[config.env]),
@@ -1332,7 +1331,7 @@ var NativeTokenArb = {
1332
1331
  decimals: 18,
1333
1332
  logoUrl: "https://vleap.ai/images/tokens/arb.svg"
1334
1333
  };
1335
- var getArbitrumAdapter = createEvmAdapter(import_warps12.WarpChainName.Arbitrum, "arb", {
1334
+ var getArbitrumAdapter = createEvmAdapter(import_warps12.WarpChainName.Arbitrum, {
1336
1335
  mainnet: {
1337
1336
  name: import_warps12.WarpChainName.Arbitrum,
1338
1337
  displayName: "Arbitrum",
@@ -1375,7 +1374,7 @@ var NativeTokenBase = {
1375
1374
  decimals: 18,
1376
1375
  logoUrl: "https://vleap.ai/images/tokens/eth.svg"
1377
1376
  };
1378
- var getBaseAdapter = createEvmAdapter(import_warps13.WarpChainName.Base, "base", {
1377
+ var getBaseAdapter = createEvmAdapter(import_warps13.WarpChainName.Base, {
1379
1378
  mainnet: {
1380
1379
  name: import_warps13.WarpChainName.Base,
1381
1380
  displayName: "Base",
@@ -1421,7 +1420,7 @@ var NativeTokenEth = {
1421
1420
  decimals: 18,
1422
1421
  logoUrl: "https://vleap.ai/images/tokens/eth.svg"
1423
1422
  };
1424
- var getEthereumAdapter = createEvmAdapter(import_warps14.WarpChainName.Ethereum, "eth", {
1423
+ var getEthereumAdapter = createEvmAdapter(import_warps14.WarpChainName.Ethereum, {
1425
1424
  mainnet: {
1426
1425
  name: import_warps14.WarpChainName.Ethereum,
1427
1426
  displayName: "Ethereum Mainnet",
@@ -1472,7 +1471,7 @@ var NativeTokenStt = {
1472
1471
  decimals: 18,
1473
1472
  logoUrl: "https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117"
1474
1473
  };
1475
- var getSomniaAdapter = createEvmAdapter(import_warps15.WarpChainName.Somnia, "eth", {
1474
+ var getSomniaAdapter = createEvmAdapter(import_warps15.WarpChainName.Somnia, {
1476
1475
  mainnet: {
1477
1476
  name: import_warps15.WarpChainName.Somnia,
1478
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 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, 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 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
@@ -1277,12 +1277,11 @@ var WarpEvmWallet = class {
1277
1277
  };
1278
1278
 
1279
1279
  // src/chains/common.ts
1280
- var createEvmAdapter = (chainName, chainPrefix, chainInfos) => {
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
1284
  chainInfo: chainInfos[config.env],
1285
- prefix: chainPrefix,
1286
1285
  builder: () => fallback.builder(),
1287
1286
  executor: new WarpEvmExecutor(config, chainInfos[config.env]),
1288
1287
  results: new WarpEvmResults(config, chainInfos[config.env]),
@@ -1306,7 +1305,7 @@ var NativeTokenArb = {
1306
1305
  decimals: 18,
1307
1306
  logoUrl: "https://vleap.ai/images/tokens/arb.svg"
1308
1307
  };
1309
- var getArbitrumAdapter = createEvmAdapter(WarpChainName6.Arbitrum, "arb", {
1308
+ var getArbitrumAdapter = createEvmAdapter(WarpChainName6.Arbitrum, {
1310
1309
  mainnet: {
1311
1310
  name: WarpChainName6.Arbitrum,
1312
1311
  displayName: "Arbitrum",
@@ -1349,7 +1348,7 @@ var NativeTokenBase = {
1349
1348
  decimals: 18,
1350
1349
  logoUrl: "https://vleap.ai/images/tokens/eth.svg"
1351
1350
  };
1352
- var getBaseAdapter = createEvmAdapter(WarpChainName7.Base, "base", {
1351
+ var getBaseAdapter = createEvmAdapter(WarpChainName7.Base, {
1353
1352
  mainnet: {
1354
1353
  name: WarpChainName7.Base,
1355
1354
  displayName: "Base",
@@ -1395,7 +1394,7 @@ var NativeTokenEth = {
1395
1394
  decimals: 18,
1396
1395
  logoUrl: "https://vleap.ai/images/tokens/eth.svg"
1397
1396
  };
1398
- var getEthereumAdapter = createEvmAdapter(WarpChainName8.Ethereum, "eth", {
1397
+ var getEthereumAdapter = createEvmAdapter(WarpChainName8.Ethereum, {
1399
1398
  mainnet: {
1400
1399
  name: WarpChainName8.Ethereum,
1401
1400
  displayName: "Ethereum Mainnet",
@@ -1446,7 +1445,7 @@ var NativeTokenStt = {
1446
1445
  decimals: 18,
1447
1446
  logoUrl: "https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117"
1448
1447
  };
1449
- var getSomniaAdapter = createEvmAdapter(WarpChainName9.Somnia, "eth", {
1448
+ var getSomniaAdapter = createEvmAdapter(WarpChainName9.Somnia, {
1450
1449
  mainnet: {
1451
1450
  name: WarpChainName9.Somnia,
1452
1451
  displayName: "Somnia Mainnet",
@@ -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 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, 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 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","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"]}
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":"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","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.38",
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.139"
41
+ "@vleap/warps": "^3.0.0-alpha.142"
42
42
  }
43
43
  }