@vleap/warps-adapter-evm 0.2.0-alpha.31 → 0.2.0-alpha.33
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 +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -207,8 +207,10 @@ declare class WarpEvmResults implements AdapterWarpResults {
|
|
|
207
207
|
constructor(config: WarpClientConfig, chain: WarpChainInfo);
|
|
208
208
|
getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution>;
|
|
209
209
|
extractQueryResults(warp: Warp, typedValues: any[], actionIndex: number, inputs: ResolvedInput[]): Promise<{
|
|
210
|
-
values:
|
|
211
|
-
|
|
210
|
+
values: {
|
|
211
|
+
string: string[];
|
|
212
|
+
native: any[];
|
|
213
|
+
};
|
|
212
214
|
results: WarpExecutionResults;
|
|
213
215
|
}>;
|
|
214
216
|
getTransactionStatus(txHash: string): Promise<{
|
package/dist/index.d.ts
CHANGED
|
@@ -207,8 +207,10 @@ declare class WarpEvmResults implements AdapterWarpResults {
|
|
|
207
207
|
constructor(config: WarpClientConfig, chain: WarpChainInfo);
|
|
208
208
|
getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution>;
|
|
209
209
|
extractQueryResults(warp: Warp, typedValues: any[], actionIndex: number, inputs: ResolvedInput[]): Promise<{
|
|
210
|
-
values:
|
|
211
|
-
|
|
210
|
+
values: {
|
|
211
|
+
string: string[];
|
|
212
|
+
native: any[];
|
|
213
|
+
};
|
|
212
214
|
results: WarpExecutionResults;
|
|
213
215
|
}>;
|
|
214
216
|
getTransactionStatus(txHash: string): Promise<{
|
package/dist/index.js
CHANGED
|
@@ -750,12 +750,14 @@ var WarpEvmResults = class {
|
|
|
750
750
|
const transactionHash = tx.hash;
|
|
751
751
|
const logs = tx.logs.map((log) => ({
|
|
752
752
|
address: log.address,
|
|
753
|
-
topics: log.topics,
|
|
753
|
+
topics: [...log.topics],
|
|
754
754
|
data: log.data,
|
|
755
755
|
blockNumber: log.blockNumber?.toString() || "0",
|
|
756
756
|
transactionHash: log.transactionHash,
|
|
757
757
|
index: log.index?.toString() || "0"
|
|
758
758
|
}));
|
|
759
|
+
const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice, ...logs.length > 0 ? logs : []];
|
|
760
|
+
const stringValues = rawValues.map((v) => String(v));
|
|
759
761
|
return {
|
|
760
762
|
success,
|
|
761
763
|
warp,
|
|
@@ -764,21 +766,21 @@ var WarpEvmResults = class {
|
|
|
764
766
|
txHash: transactionHash,
|
|
765
767
|
tx,
|
|
766
768
|
next: null,
|
|
767
|
-
values:
|
|
768
|
-
valuesRaw: [transactionHash, blockNumber, gasUsed, gasPrice, ...logs.length > 0 ? logs : []],
|
|
769
|
+
values: { string: stringValues, native: rawValues },
|
|
769
770
|
results: {},
|
|
770
771
|
messages: {}
|
|
771
772
|
};
|
|
772
773
|
}
|
|
773
774
|
async extractQueryResults(warp, typedValues, actionIndex, inputs) {
|
|
774
|
-
const
|
|
775
|
-
const
|
|
775
|
+
const stringValues = typedValues.map((t) => this.serializer.typedToString(t));
|
|
776
|
+
const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1]);
|
|
777
|
+
const values = { string: stringValues, native: nativeValues };
|
|
776
778
|
let results = {};
|
|
777
|
-
if (!warp.results) return { values,
|
|
779
|
+
if (!warp.results) return { values, results };
|
|
778
780
|
const getNestedValue = (path) => {
|
|
779
781
|
const indices = path.split(".").slice(1).map((i) => parseInt(i) - 1);
|
|
780
782
|
if (indices.length === 0) return void 0;
|
|
781
|
-
let value =
|
|
783
|
+
let value = nativeValues[indices[0]];
|
|
782
784
|
for (let i = 1; i < indices.length; i++) {
|
|
783
785
|
if (value === void 0 || value === null) return void 0;
|
|
784
786
|
value = value[indices[i]];
|
|
@@ -798,7 +800,7 @@ var WarpEvmResults = class {
|
|
|
798
800
|
results[key] = path;
|
|
799
801
|
}
|
|
800
802
|
}
|
|
801
|
-
return { values,
|
|
803
|
+
return { values, results: await (0, import_warps9.evaluateResultsCommon)(warp, results, actionIndex, inputs, this.serializer.coreSerializer) };
|
|
802
804
|
}
|
|
803
805
|
async getTransactionStatus(txHash) {
|
|
804
806
|
try {
|
|
@@ -953,7 +955,7 @@ var WarpEvmExecutor = class {
|
|
|
953
955
|
});
|
|
954
956
|
const decodedResult = iface.decodeFunctionResult(action.func, result);
|
|
955
957
|
const isSuccess = true;
|
|
956
|
-
const { values,
|
|
958
|
+
const { values, results } = await this.results.extractQueryResults(
|
|
957
959
|
executable.warp,
|
|
958
960
|
decodedResult,
|
|
959
961
|
executable.action,
|
|
@@ -969,7 +971,6 @@ var WarpEvmExecutor = class {
|
|
|
969
971
|
tx: null,
|
|
970
972
|
next,
|
|
971
973
|
values,
|
|
972
|
-
valuesRaw,
|
|
973
974
|
results,
|
|
974
975
|
messages: (0, import_warps10.applyResultsToMessages)(executable.warp, results)
|
|
975
976
|
};
|
|
@@ -982,8 +983,7 @@ var WarpEvmExecutor = class {
|
|
|
982
983
|
txHash: null,
|
|
983
984
|
tx: null,
|
|
984
985
|
next: null,
|
|
985
|
-
values: [],
|
|
986
|
-
valuesRaw: [],
|
|
986
|
+
values: { string: [], native: [] },
|
|
987
987
|
results: {},
|
|
988
988
|
messages: {}
|
|
989
989
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './providers'\nexport * from './tokens'\nexport * from './types'\nexport * from './WarpEvmDataLoader'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\nexport * from './WarpEvmWallet'\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n const receipt = await this.provider.getTransactionReceipt(identifier)\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Handle token transfers\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n // Native token transfer\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) {\n throw new Error('WarpEvmExecutor: Contract action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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) {\n throw new Error('WarpEvmExecutor: No transfers provided')\n }\n\n // Check if we have a native token defined for this chain\n if (!this.chain.nativeToken?.identifier) {\n throw new Error('WarpEvmExecutor: No native token defined for this chain')\n }\n\n // Separate native token transfers from ERC-20 token transfers\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 // Handle single native token transfer\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n // Validate native token amount\n if (transfer.amount <= 0n) {\n throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n }\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 // Handle single ERC-20 token transfer\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n // Handle multiple transfers (not yet supported)\n if (executable.transfers.length > 1) {\n throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n }\n\n // This should never happen, but just in case\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 // ERC-20 transfer function signature: transfer(address to, uint256 amount)\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, // Token contract address\n value: 0n, // No native token value for ERC-20 transfers\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') {\n throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n }\n if (!action.func) {\n throw new Error('WarpEvmExecutor: Query action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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, valuesRaw, 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 valuesRaw,\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: [],\n valuesRaw: [],\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 // Validate gas estimate\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) {\n throw new Error(`Gas estimate too low: ${gasEstimate}`)\n }\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) {\n throw new Error(`Gas estimate too high: ${gasEstimate}`)\n }\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: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async signMessage(message: string, privateKey: string): Promise<string> {\n try {\n const wallet = new ethers.Wallet(privateKey)\n const signature = await wallet.signMessage(message)\n return signature\n } catch (error) {\n throw new Error(`Failed to sign message: ${error}`)\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecution,\n WarpExecutionResults,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n\n async getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution> {\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 return {\n success,\n warp,\n action: 0,\n user: getWarpWalletAddressFromConfig(this.config, 'evm'),\n txHash: transactionHash,\n tx,\n next: null,\n values: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n valuesRaw: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: any[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: any[]; valuesRaw: any[]; results: WarpExecutionResults }> {\n const values = typedValues.map((t) => this.serializer.typedToString(t))\n const valuesRaw = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, valuesRaw, 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: any = valuesRaw[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = value[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, valuesRaw, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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 { AdapterWarpWallet, getWarpWalletPrivateKeyFromConfig, WarpAdapterGenericTransaction, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private wallet: ethers.Wallet | null = null\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n this.provider = new ethers.JsonRpcProvider(chain.defaultApiUrl || 'https://rpc.sepolia.org')\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\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 signMessage(message: string): Promise<string> {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\n return await wallet.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n if (!tx.signature) {\n throw new Error('Transaction must be signed before sending')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey).connect(this.provider)\n const txResponse = await wallet.sendTransaction(tx as any)\n return txResponse.hash\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 privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) return null\n const wallet = new ethers.Wallet(privateKey)\n return wallet.address\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["import_warps","import_warps","token","import_warps","import_warps","import_warps","BaseChain","import_warps","import_warps","EthereumChain","import_warps","import_ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","import_warps","import_ethers","import_warps","import_ethers","url","import_warps","import_ethers","import_warps","import_warps","import_warps","import_warps"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["export * from './chains'\nexport * from './constants'\nexport * from './providers'\nexport * from './tokens'\nexport * from './types'\nexport * from './WarpEvmDataLoader'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\nexport * from './WarpEvmWallet'\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n const receipt = await this.provider.getTransactionReceipt(identifier)\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Handle token transfers\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n // Native token transfer\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) {\n throw new Error('WarpEvmExecutor: Contract action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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) {\n throw new Error('WarpEvmExecutor: No transfers provided')\n }\n\n // Check if we have a native token defined for this chain\n if (!this.chain.nativeToken?.identifier) {\n throw new Error('WarpEvmExecutor: No native token defined for this chain')\n }\n\n // Separate native token transfers from ERC-20 token transfers\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 // Handle single native token transfer\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n // Validate native token amount\n if (transfer.amount <= 0n) {\n throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n }\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 // Handle single ERC-20 token transfer\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n // Handle multiple transfers (not yet supported)\n if (executable.transfers.length > 1) {\n throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n }\n\n // This should never happen, but just in case\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 // ERC-20 transfer function signature: transfer(address to, uint256 amount)\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, // Token contract address\n value: 0n, // No native token value for ERC-20 transfers\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') {\n throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n }\n if (!action.func) {\n throw new Error('WarpEvmExecutor: Query action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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 // Validate gas estimate\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) {\n throw new Error(`Gas estimate too low: ${gasEstimate}`)\n }\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) {\n throw new Error(`Gas estimate too high: ${gasEstimate}`)\n }\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: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async signMessage(message: string, privateKey: string): Promise<string> {\n try {\n const wallet = new ethers.Wallet(privateKey)\n const signature = await wallet.signMessage(message)\n return signature\n } catch (error) {\n throw new Error(`Failed to sign message: ${error}`)\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecution,\n WarpExecutionResults,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n\n async getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution> {\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((v) => String(v))\n\n return {\n success,\n warp,\n action: 0,\n user: getWarpWalletAddressFromConfig(this.config, 'evm'),\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: any[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: any[] }; 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: any = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = value[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 { AdapterWarpWallet, getWarpWalletPrivateKeyFromConfig, WarpAdapterGenericTransaction, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private wallet: ethers.Wallet | null = null\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n this.provider = new ethers.JsonRpcProvider(chain.defaultApiUrl || 'https://rpc.sepolia.org')\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\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 signMessage(message: string): Promise<string> {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\n return await wallet.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n if (!tx.signature) {\n throw new Error('Transaction must be signed before sending')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey).connect(this.provider)\n const txResponse = await wallet.sendTransaction(tx as any)\n return txResponse.hash\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 privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) return null\n const wallet = new ethers.Wallet(privateKey)\n return wallet.address\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["import_warps","import_warps","token","import_warps","import_warps","import_warps","BaseChain","import_warps","import_warps","EthereumChain","import_warps","import_ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","import_warps","import_ethers","import_warps","import_ethers","url","import_warps","import_ethers","import_warps","import_warps","import_warps","import_warps"]}
|
package/dist/index.mjs
CHANGED
|
@@ -720,12 +720,14 @@ var WarpEvmResults = class {
|
|
|
720
720
|
const transactionHash = tx.hash;
|
|
721
721
|
const logs = tx.logs.map((log) => ({
|
|
722
722
|
address: log.address,
|
|
723
|
-
topics: log.topics,
|
|
723
|
+
topics: [...log.topics],
|
|
724
724
|
data: log.data,
|
|
725
725
|
blockNumber: log.blockNumber?.toString() || "0",
|
|
726
726
|
transactionHash: log.transactionHash,
|
|
727
727
|
index: log.index?.toString() || "0"
|
|
728
728
|
}));
|
|
729
|
+
const rawValues = [transactionHash, blockNumber, gasUsed, gasPrice, ...logs.length > 0 ? logs : []];
|
|
730
|
+
const stringValues = rawValues.map((v) => String(v));
|
|
729
731
|
return {
|
|
730
732
|
success,
|
|
731
733
|
warp,
|
|
@@ -734,21 +736,21 @@ var WarpEvmResults = class {
|
|
|
734
736
|
txHash: transactionHash,
|
|
735
737
|
tx,
|
|
736
738
|
next: null,
|
|
737
|
-
values:
|
|
738
|
-
valuesRaw: [transactionHash, blockNumber, gasUsed, gasPrice, ...logs.length > 0 ? logs : []],
|
|
739
|
+
values: { string: stringValues, native: rawValues },
|
|
739
740
|
results: {},
|
|
740
741
|
messages: {}
|
|
741
742
|
};
|
|
742
743
|
}
|
|
743
744
|
async extractQueryResults(warp, typedValues, actionIndex, inputs) {
|
|
744
|
-
const
|
|
745
|
-
const
|
|
745
|
+
const stringValues = typedValues.map((t) => this.serializer.typedToString(t));
|
|
746
|
+
const nativeValues = typedValues.map((t) => this.serializer.typedToNative(t)[1]);
|
|
747
|
+
const values = { string: stringValues, native: nativeValues };
|
|
746
748
|
let results = {};
|
|
747
|
-
if (!warp.results) return { values,
|
|
749
|
+
if (!warp.results) return { values, results };
|
|
748
750
|
const getNestedValue = (path) => {
|
|
749
751
|
const indices = path.split(".").slice(1).map((i) => parseInt(i) - 1);
|
|
750
752
|
if (indices.length === 0) return void 0;
|
|
751
|
-
let value =
|
|
753
|
+
let value = nativeValues[indices[0]];
|
|
752
754
|
for (let i = 1; i < indices.length; i++) {
|
|
753
755
|
if (value === void 0 || value === null) return void 0;
|
|
754
756
|
value = value[indices[i]];
|
|
@@ -768,7 +770,7 @@ var WarpEvmResults = class {
|
|
|
768
770
|
results[key] = path;
|
|
769
771
|
}
|
|
770
772
|
}
|
|
771
|
-
return { values,
|
|
773
|
+
return { values, results: await evaluateResultsCommon(warp, results, actionIndex, inputs, this.serializer.coreSerializer) };
|
|
772
774
|
}
|
|
773
775
|
async getTransactionStatus(txHash) {
|
|
774
776
|
try {
|
|
@@ -923,7 +925,7 @@ var WarpEvmExecutor = class {
|
|
|
923
925
|
});
|
|
924
926
|
const decodedResult = iface.decodeFunctionResult(action.func, result);
|
|
925
927
|
const isSuccess = true;
|
|
926
|
-
const { values,
|
|
928
|
+
const { values, results } = await this.results.extractQueryResults(
|
|
927
929
|
executable.warp,
|
|
928
930
|
decodedResult,
|
|
929
931
|
executable.action,
|
|
@@ -939,7 +941,6 @@ var WarpEvmExecutor = class {
|
|
|
939
941
|
tx: null,
|
|
940
942
|
next,
|
|
941
943
|
values,
|
|
942
|
-
valuesRaw,
|
|
943
944
|
results,
|
|
944
945
|
messages: applyResultsToMessages(executable.warp, results)
|
|
945
946
|
};
|
|
@@ -952,8 +953,7 @@ var WarpEvmExecutor = class {
|
|
|
952
953
|
txHash: null,
|
|
953
954
|
tx: null,
|
|
954
955
|
next: null,
|
|
955
|
-
values: [],
|
|
956
|
-
valuesRaw: [],
|
|
956
|
+
values: { string: [], native: [] },
|
|
957
957
|
results: {},
|
|
958
958
|
messages: {}
|
|
959
959
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n const receipt = await this.provider.getTransactionReceipt(identifier)\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Handle token transfers\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n // Native token transfer\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) {\n throw new Error('WarpEvmExecutor: Contract action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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) {\n throw new Error('WarpEvmExecutor: No transfers provided')\n }\n\n // Check if we have a native token defined for this chain\n if (!this.chain.nativeToken?.identifier) {\n throw new Error('WarpEvmExecutor: No native token defined for this chain')\n }\n\n // Separate native token transfers from ERC-20 token transfers\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 // Handle single native token transfer\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n // Validate native token amount\n if (transfer.amount <= 0n) {\n throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n }\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 // Handle single ERC-20 token transfer\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n // Handle multiple transfers (not yet supported)\n if (executable.transfers.length > 1) {\n throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n }\n\n // This should never happen, but just in case\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 // ERC-20 transfer function signature: transfer(address to, uint256 amount)\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, // Token contract address\n value: 0n, // No native token value for ERC-20 transfers\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') {\n throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n }\n if (!action.func) {\n throw new Error('WarpEvmExecutor: Query action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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, valuesRaw, 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 valuesRaw,\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: [],\n valuesRaw: [],\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 // Validate gas estimate\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) {\n throw new Error(`Gas estimate too low: ${gasEstimate}`)\n }\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) {\n throw new Error(`Gas estimate too high: ${gasEstimate}`)\n }\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: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async signMessage(message: string, privateKey: string): Promise<string> {\n try {\n const wallet = new ethers.Wallet(privateKey)\n const signature = await wallet.signMessage(message)\n return signature\n } catch (error) {\n throw new Error(`Failed to sign message: ${error}`)\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecution,\n WarpExecutionResults,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n\n async getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution> {\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 return {\n success,\n warp,\n action: 0,\n user: getWarpWalletAddressFromConfig(this.config, 'evm'),\n txHash: transactionHash,\n tx,\n next: null,\n values: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n valuesRaw: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: any[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: any[]; valuesRaw: any[]; results: WarpExecutionResults }> {\n const values = typedValues.map((t) => this.serializer.typedToString(t))\n const valuesRaw = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, valuesRaw, 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: any = valuesRaw[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = value[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, valuesRaw, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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 { AdapterWarpWallet, getWarpWalletPrivateKeyFromConfig, WarpAdapterGenericTransaction, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private wallet: ethers.Wallet | null = null\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n this.provider = new ethers.JsonRpcProvider(chain.defaultApiUrl || 'https://rpc.sepolia.org')\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\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 signMessage(message: string): Promise<string> {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\n return await wallet.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n if (!tx.signature) {\n throw new Error('Transaction must be signed before sending')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey).connect(this.provider)\n const txResponse = await wallet.sendTransaction(tx as any)\n return txResponse.hash\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 privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) return null\n const wallet = new ethers.Wallet(privateKey)\n return wallet.address\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["WarpChainName","CacheTtl","WarpCache","token","WarpChainName","WarpChainName","BaseChain","WarpChainName","WarpChainName","EthereumChain","WarpCache","CacheTtl","getProviderUrl","getWarpWalletAddressFromConfig","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","getProviderUrl","WarpConstants","ethers","ethers","getProviderUrl","ethers","WarpConstants","getProviderUrl","ethers","getWarpWalletAddressFromConfig","url","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, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n logoUrl: 'https://vleap.ai/images/chains/arbitrum.svg',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n const receipt = await this.provider.getTransactionReceipt(identifier)\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Handle token transfers\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n // Native token transfer\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) {\n throw new Error('WarpEvmExecutor: Contract action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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) {\n throw new Error('WarpEvmExecutor: No transfers provided')\n }\n\n // Check if we have a native token defined for this chain\n if (!this.chain.nativeToken?.identifier) {\n throw new Error('WarpEvmExecutor: No native token defined for this chain')\n }\n\n // Separate native token transfers from ERC-20 token transfers\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 // Handle single native token transfer\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n // Validate native token amount\n if (transfer.amount <= 0n) {\n throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n }\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 // Handle single ERC-20 token transfer\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n // Handle multiple transfers (not yet supported)\n if (executable.transfers.length > 1) {\n throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n }\n\n // This should never happen, but just in case\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 // ERC-20 transfer function signature: transfer(address to, uint256 amount)\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, // Token contract address\n value: 0n, // No native token value for ERC-20 transfers\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') {\n throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n }\n if (!action.func) {\n throw new Error('WarpEvmExecutor: Query action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\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 // Validate gas estimate\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) {\n throw new Error(`Gas estimate too low: ${gasEstimate}`)\n }\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) {\n throw new Error(`Gas estimate too high: ${gasEstimate}`)\n }\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: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: BigInt(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: BigInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async signMessage(message: string, privateKey: string): Promise<string> {\n try {\n const wallet = new ethers.Wallet(privateKey)\n const signature = await wallet.signMessage(message)\n return signature\n } catch (error) {\n throw new Error(`Failed to sign message: ${error}`)\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecution,\n WarpExecutionResults,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n\n async getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution> {\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((v) => String(v))\n\n return {\n success,\n warp,\n action: 0,\n user: getWarpWalletAddressFromConfig(this.config, 'evm'),\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: any[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: { string: string[]; native: any[] }; 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: any = nativeValues[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = value[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 { AdapterWarpWallet, getWarpWalletPrivateKeyFromConfig, WarpAdapterGenericTransaction, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private wallet: ethers.Wallet | null = null\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n this.provider = new ethers.JsonRpcProvider(chain.defaultApiUrl || 'https://rpc.sepolia.org')\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\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 signMessage(message: string): Promise<string> {\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey)\n return await wallet.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n if (!tx.signature) {\n throw new Error('Transaction must be signed before sending')\n }\n\n const privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) throw new Error('Wallet not initialized - no private key provided')\n\n const wallet = new ethers.Wallet(privateKey).connect(this.provider)\n const txResponse = await wallet.sendTransaction(tx as any)\n return txResponse.hash\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 privateKey = getWarpWalletPrivateKeyFromConfig(this.config, this.chain.name)\n if (!privateKey) return null\n const wallet = new ethers.Wallet(privateKey)\n return wallet.address\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n logoUrl: 'https://vleap.ai/images/chains/base.svg',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n logoUrl: 'https://vleap.ai/images/chains/ethereum.svg',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n logoUrl: 'https://vleap.ai/images/chains/somnia.png',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["WarpChainName","CacheTtl","WarpCache","token","WarpChainName","WarpChainName","BaseChain","WarpChainName","WarpChainName","EthereumChain","WarpCache","CacheTtl","getProviderUrl","getWarpWalletAddressFromConfig","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","getProviderUrl","WarpConstants","ethers","ethers","getProviderUrl","ethers","WarpConstants","getProviderUrl","ethers","getWarpWalletAddressFromConfig","url","ethers","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vleap/warps-adapter-evm",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.33",
|
|
4
4
|
"description": "EVM adapter for Warps SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -38,6 +38,6 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"ethers": "^6.15.0",
|
|
41
|
-
"@vleap/warps": "^3.0.0-alpha.
|
|
41
|
+
"@vleap/warps": "^3.0.0-alpha.116"
|
|
42
42
|
}
|
|
43
43
|
}
|