@vleap/warps-adapter-evm 0.2.0-alpha.2 → 0.2.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.js +51 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +47 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WarpChainEnv, AdapterFactory,
|
|
1
|
+
import { WarpChainEnv, AdapterFactory, WarpClientConfig, Adapter, CombinedWarpBuilder, Warp, BaseWarpBuilder, WarpCacheConfig, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
|
|
4
4
|
interface EvmChainConfig {
|
|
@@ -21,8 +21,6 @@ declare const getSupportedEvmChains: () => string[];
|
|
|
21
21
|
declare const getSupportedEnvironments: (chain: string) => WarpChainEnv[];
|
|
22
22
|
|
|
23
23
|
declare const WarpEvmConstants: {
|
|
24
|
-
ChainName: string;
|
|
25
|
-
ChainPrefix: string;
|
|
26
24
|
Ether: {
|
|
27
25
|
Identifier: string;
|
|
28
26
|
DisplayName: string;
|
|
@@ -42,7 +40,7 @@ declare const WarpEvmConstants: {
|
|
|
42
40
|
Medium: string;
|
|
43
41
|
High: string;
|
|
44
42
|
};
|
|
45
|
-
|
|
43
|
+
Networks: {
|
|
46
44
|
Ethereum: {
|
|
47
45
|
ChainId: string;
|
|
48
46
|
Name: string;
|
|
@@ -72,7 +70,10 @@ declare const WarpEvmConstants: {
|
|
|
72
70
|
};
|
|
73
71
|
};
|
|
74
72
|
|
|
75
|
-
declare const
|
|
73
|
+
declare const getEthereumAdapter: AdapterFactory;
|
|
74
|
+
declare const getArbitrumAdapter: AdapterFactory;
|
|
75
|
+
declare const getBaseAdapter: AdapterFactory;
|
|
76
|
+
declare const getAllEvmAdapters: (config: WarpClientConfig, fallback?: Adapter) => Adapter[];
|
|
76
77
|
|
|
77
78
|
declare class WarpEvmBuilder implements CombinedWarpBuilder {
|
|
78
79
|
private readonly config;
|
|
@@ -136,4 +137,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
|
|
|
136
137
|
private parseNativeValue;
|
|
137
138
|
}
|
|
138
139
|
|
|
139
|
-
export { EVM_CHAIN_CONFIGS, type EvmChainConfig, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer,
|
|
140
|
+
export { EVM_CHAIN_CONFIGS, type EvmChainConfig, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmBlockTime, getEvmChainConfig, getEvmChainId, getEvmExplorerUrl, getEvmNativeToken, getEvmRegistryAddress, getSupportedEnvironments, getSupportedEvmChains };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WarpChainEnv, AdapterFactory,
|
|
1
|
+
import { WarpChainEnv, AdapterFactory, WarpClientConfig, Adapter, CombinedWarpBuilder, Warp, BaseWarpBuilder, WarpCacheConfig, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
|
|
2
2
|
import { ethers } from 'ethers';
|
|
3
3
|
|
|
4
4
|
interface EvmChainConfig {
|
|
@@ -21,8 +21,6 @@ declare const getSupportedEvmChains: () => string[];
|
|
|
21
21
|
declare const getSupportedEnvironments: (chain: string) => WarpChainEnv[];
|
|
22
22
|
|
|
23
23
|
declare const WarpEvmConstants: {
|
|
24
|
-
ChainName: string;
|
|
25
|
-
ChainPrefix: string;
|
|
26
24
|
Ether: {
|
|
27
25
|
Identifier: string;
|
|
28
26
|
DisplayName: string;
|
|
@@ -42,7 +40,7 @@ declare const WarpEvmConstants: {
|
|
|
42
40
|
Medium: string;
|
|
43
41
|
High: string;
|
|
44
42
|
};
|
|
45
|
-
|
|
43
|
+
Networks: {
|
|
46
44
|
Ethereum: {
|
|
47
45
|
ChainId: string;
|
|
48
46
|
Name: string;
|
|
@@ -72,7 +70,10 @@ declare const WarpEvmConstants: {
|
|
|
72
70
|
};
|
|
73
71
|
};
|
|
74
72
|
|
|
75
|
-
declare const
|
|
73
|
+
declare const getEthereumAdapter: AdapterFactory;
|
|
74
|
+
declare const getArbitrumAdapter: AdapterFactory;
|
|
75
|
+
declare const getBaseAdapter: AdapterFactory;
|
|
76
|
+
declare const getAllEvmAdapters: (config: WarpClientConfig, fallback?: Adapter) => Adapter[];
|
|
76
77
|
|
|
77
78
|
declare class WarpEvmBuilder implements CombinedWarpBuilder {
|
|
78
79
|
private readonly config;
|
|
@@ -136,4 +137,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
|
|
|
136
137
|
private parseNativeValue;
|
|
137
138
|
}
|
|
138
139
|
|
|
139
|
-
export { EVM_CHAIN_CONFIGS, type EvmChainConfig, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer,
|
|
140
|
+
export { EVM_CHAIN_CONFIGS, type EvmChainConfig, WarpEvmBuilder, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmBlockTime, getEvmChainConfig, getEvmChainId, getEvmExplorerUrl, getEvmNativeToken, getEvmRegistryAddress, getSupportedEnvironments, getSupportedEvmChains };
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,10 @@ __export(index_exports, {
|
|
|
27
27
|
WarpEvmExplorer: () => WarpEvmExplorer,
|
|
28
28
|
WarpEvmResults: () => WarpEvmResults,
|
|
29
29
|
WarpEvmSerializer: () => WarpEvmSerializer,
|
|
30
|
-
|
|
30
|
+
getAllEvmAdapters: () => getAllEvmAdapters,
|
|
31
|
+
getArbitrumAdapter: () => getArbitrumAdapter,
|
|
32
|
+
getBaseAdapter: () => getBaseAdapter,
|
|
33
|
+
getEthereumAdapter: () => getEthereumAdapter,
|
|
31
34
|
getEvmApiUrl: () => getEvmApiUrl,
|
|
32
35
|
getEvmBlockTime: () => getEvmBlockTime,
|
|
33
36
|
getEvmChainConfig: () => getEvmChainConfig,
|
|
@@ -164,13 +167,13 @@ var getSupportedEnvironments = (chain) => {
|
|
|
164
167
|
|
|
165
168
|
// src/constants.ts
|
|
166
169
|
var WarpEvmConstants = {
|
|
167
|
-
|
|
168
|
-
ChainPrefix: "evm",
|
|
170
|
+
// Native token configuration
|
|
169
171
|
Ether: {
|
|
170
172
|
Identifier: "ETH",
|
|
171
173
|
DisplayName: "Ether",
|
|
172
174
|
Decimals: 18
|
|
173
175
|
},
|
|
176
|
+
// Gas configuration
|
|
174
177
|
GasLimit: {
|
|
175
178
|
Default: 21e3,
|
|
176
179
|
ContractCall: 1e5,
|
|
@@ -189,7 +192,8 @@ var WarpEvmConstants = {
|
|
|
189
192
|
High: "50000000000"
|
|
190
193
|
// 50 gwei
|
|
191
194
|
},
|
|
192
|
-
|
|
195
|
+
// Supported networks
|
|
196
|
+
Networks: {
|
|
193
197
|
Ethereum: {
|
|
194
198
|
ChainId: "1",
|
|
195
199
|
Name: "Ethereum",
|
|
@@ -206,12 +210,14 @@ var WarpEvmConstants = {
|
|
|
206
210
|
BlockTime: 2
|
|
207
211
|
}
|
|
208
212
|
},
|
|
213
|
+
// Validation rules
|
|
209
214
|
Validation: {
|
|
210
215
|
AddressLength: 42,
|
|
211
216
|
HexPrefix: "0x",
|
|
212
217
|
MinGasLimit: 21e3,
|
|
213
218
|
MaxGasLimit: 3e7
|
|
214
219
|
},
|
|
220
|
+
// Timeout configuration
|
|
215
221
|
Timeouts: {
|
|
216
222
|
DefaultRpcTimeout: 3e4,
|
|
217
223
|
// 30 seconds
|
|
@@ -632,8 +638,19 @@ var WarpEvmExecutor = class {
|
|
|
632
638
|
executable.action,
|
|
633
639
|
executable.resolvedInputs
|
|
634
640
|
);
|
|
635
|
-
const
|
|
636
|
-
|
|
641
|
+
const mockAdapter = {
|
|
642
|
+
chain: "ethereum",
|
|
643
|
+
prefix: "eth",
|
|
644
|
+
builder: () => ({}),
|
|
645
|
+
executor: {},
|
|
646
|
+
results: {},
|
|
647
|
+
serializer: {},
|
|
648
|
+
registry: {},
|
|
649
|
+
explorer: () => ({}),
|
|
650
|
+
abiBuilder: () => ({}),
|
|
651
|
+
brandBuilder: () => ({})
|
|
652
|
+
};
|
|
653
|
+
const next = (0, import_warps3.getNextInfo)(this.config, mockAdapter, executable.warp, executable.action, results);
|
|
637
654
|
return {
|
|
638
655
|
success: isSuccess,
|
|
639
656
|
warp: executable.warp,
|
|
@@ -755,21 +772,31 @@ var WarpEvmExplorer = class {
|
|
|
755
772
|
};
|
|
756
773
|
|
|
757
774
|
// src/main.ts
|
|
758
|
-
var
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
775
|
+
var getEthereumAdapter = createEvmAdapter("ethereum", "eth");
|
|
776
|
+
var getArbitrumAdapter = createEvmAdapter("arbitrum", "arb");
|
|
777
|
+
var getBaseAdapter = createEvmAdapter("base", "base");
|
|
778
|
+
var getAllEvmAdapters = (config, fallback) => [
|
|
779
|
+
getEthereumAdapter(config, fallback),
|
|
780
|
+
getArbitrumAdapter(config, fallback),
|
|
781
|
+
getBaseAdapter(config, fallback)
|
|
782
|
+
];
|
|
783
|
+
function createEvmAdapter(chainName, chainPrefix) {
|
|
784
|
+
return (config, fallback) => {
|
|
785
|
+
if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`);
|
|
786
|
+
return {
|
|
787
|
+
chain: chainName,
|
|
788
|
+
prefix: chainPrefix,
|
|
789
|
+
builder: () => new WarpEvmBuilder(config),
|
|
790
|
+
executor: new WarpEvmExecutor(config),
|
|
791
|
+
results: new WarpEvmResults(config),
|
|
792
|
+
serializer: new WarpEvmSerializer(),
|
|
793
|
+
registry: fallback.registry,
|
|
794
|
+
explorer: (chainInfo) => new WarpEvmExplorer(chainInfo),
|
|
795
|
+
abiBuilder: () => fallback.abiBuilder(),
|
|
796
|
+
brandBuilder: () => fallback.brandBuilder()
|
|
797
|
+
};
|
|
771
798
|
};
|
|
772
|
-
}
|
|
799
|
+
}
|
|
773
800
|
// Annotate the CommonJS export names for ESM import in node:
|
|
774
801
|
0 && (module.exports = {
|
|
775
802
|
EVM_CHAIN_CONFIGS,
|
|
@@ -779,7 +806,10 @@ var getEvmAdapter = (config, fallback) => {
|
|
|
779
806
|
WarpEvmExplorer,
|
|
780
807
|
WarpEvmResults,
|
|
781
808
|
WarpEvmSerializer,
|
|
782
|
-
|
|
809
|
+
getAllEvmAdapters,
|
|
810
|
+
getArbitrumAdapter,
|
|
811
|
+
getBaseAdapter,
|
|
812
|
+
getEthereumAdapter,
|
|
783
813
|
getEvmApiUrl,
|
|
784
814
|
getEvmBlockTime,
|
|
785
815
|
getEvmChainConfig,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/constants.ts","../src/WarpEvmBuilder.ts","../src/WarpEvmExecutor.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/main.ts"],"sourcesContent":["export * from './config'\nexport * from './constants'\nexport * from './main'\nexport * from './WarpEvmBuilder'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\n","import { WarpChainEnv } from '@vleap/warps'\n\n// EVM Chain configurations\nexport interface EvmChainConfig {\n apiUrl: string\n explorerUrl: string\n chainId: string\n registryAddress: string\n nativeToken: string\n blockTime?: number\n}\n\n// Predefined chain configurations\nexport const EVM_CHAIN_CONFIGS: Record<string, Record<WarpChainEnv, EvmChainConfig>> = {\n ethereum: {\n mainnet: {\n apiUrl: 'https://eth-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://etherscan.io',\n chainId: '1',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n testnet: {\n apiUrl: 'https://eth-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.etherscan.io',\n chainId: '11155111',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n },\n arbitrum: {\n mainnet: {\n apiUrl: 'https://arb-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://arbiscan.io',\n chainId: '42161',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n testnet: {\n apiUrl: 'https://arb-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.arbiscan.io',\n chainId: '421614',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n },\n base: {\n mainnet: {\n apiUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n chainId: '8453',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n testnet: {\n apiUrl: 'https://sepolia.base.org',\n explorerUrl: 'https://sepolia.basescan.org',\n chainId: '84532',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n },\n}\n\n// Default chain (Ethereum)\nconst DEFAULT_CHAIN = 'ethereum'\n\nexport const getEvmChainConfig = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): EvmChainConfig => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n throw new Error(`Unsupported EVM chain: ${chain}`)\n }\n\n const config = chainConfigs[env]\n if (!config) {\n throw new Error(`Unsupported environment ${env} for chain ${chain}`)\n }\n\n return config\n}\n\nexport const getEvmApiUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).apiUrl\n}\n\nexport const getEvmExplorerUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).explorerUrl\n}\n\nexport const getEvmChainId = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).chainId\n}\n\nexport const getEvmRegistryAddress = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).registryAddress\n}\n\nexport const getEvmNativeToken = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).nativeToken\n}\n\nexport const getEvmBlockTime = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): number => {\n return getEvmChainConfig(chain, env).blockTime || 12\n}\n\n// Helper function to get all supported chains\nexport const getSupportedEvmChains = (): string[] => {\n return Object.keys(EVM_CHAIN_CONFIGS)\n}\n\n// Helper function to get all supported environments for a chain\nexport const getSupportedEnvironments = (chain: string): WarpChainEnv[] => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n return []\n }\n return Object.keys(chainConfigs) as WarpChainEnv[]\n}\n","export const WarpEvmConstants = {\n ChainName: 'evm',\n ChainPrefix: 'evm',\n Ether: {\n Identifier: 'ETH',\n DisplayName: 'Ether',\n Decimals: 18,\n },\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000', // 20 gwei\n Low: '10000000000', // 10 gwei\n Medium: '20000000000', // 20 gwei\n High: '50000000000', // 50 gwei\n },\n Network: {\n Ethereum: {\n ChainId: '1',\n Name: 'Ethereum',\n BlockTime: 12,\n },\n Arbitrum: {\n ChainId: '42161',\n Name: 'Arbitrum',\n BlockTime: 1,\n },\n Base: {\n ChainId: '8453',\n Name: 'Base',\n BlockTime: 2,\n },\n },\n Validation: {\n AddressLength: 42,\n HexPrefix: '0x',\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n Timeouts: {\n DefaultRpcTimeout: 30000, // 30 seconds\n GasEstimationTimeout: 10000, // 10 seconds\n QueryTimeout: 15000, // 15 seconds\n },\n}\n","import { BaseWarpBuilder, CombinedWarpBuilder, Warp, WarpCacheConfig, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\n\nexport class WarpEvmBuilder implements CombinedWarpBuilder {\n private warp: Partial<Warp> = {}\n private actions: any[] = []\n\n constructor(private readonly config: WarpClientConfig) {}\n\n async createFromRaw(encoded: string): Promise<Warp> {\n try {\n const decoded = JSON.parse(encoded)\n return decoded as Warp\n } catch (error) {\n throw new Error(`Failed to decode warp from raw data: ${error}`)\n }\n }\n\n setTitle(title: string): BaseWarpBuilder {\n this.warp.title = title\n return this\n }\n\n setDescription(description: string): BaseWarpBuilder {\n this.warp.description = description\n return this\n }\n\n setPreview(preview: string): BaseWarpBuilder {\n this.warp.preview = preview\n return this\n }\n\n setActions(actions: any[]): BaseWarpBuilder {\n this.actions = actions\n return this\n }\n\n addAction(action: any): BaseWarpBuilder {\n this.actions.push(action)\n return this\n }\n\n async build(): Promise<Warp> {\n if (!this.warp.title) {\n throw new Error('Warp title is required')\n }\n\n return {\n protocol: 'warp',\n name: this.warp.name || 'evm-warp',\n title: this.warp.title,\n description: this.warp.description || null,\n preview: this.warp.preview || null,\n actions: this.actions,\n meta: {\n chain: 'evm',\n hash: ethers.keccak256(ethers.toUtf8Bytes(this.warp.title)),\n creator: this.config.user?.wallets?.evm || '',\n createdAt: new Date().toISOString(),\n },\n } as Warp\n }\n\n createInscriptionTransaction(warp: Warp): ethers.TransactionRequest {\n const warpData = JSON.stringify(warp)\n const data = ethers.toUtf8Bytes(warpData)\n\n return {\n data: ethers.hexlify(data),\n }\n }\n\n async createFromTransaction(tx: ethers.TransactionResponse, validate?: boolean): Promise<Warp> {\n if (!tx.data || tx.data === '0x') {\n throw new Error('Transaction has no data')\n }\n\n try {\n const data = ethers.toUtf8String(tx.data)\n const warp = JSON.parse(data)\n\n if (validate) {\n if (!warp.protocol || warp.protocol !== 'warp') {\n throw new Error('Invalid warp protocol')\n }\n if (!warp.title) {\n throw new Error('Warp title is required')\n }\n }\n\n return warp as Warp\n } catch (error) {\n throw new Error(`Failed to create warp from transaction: ${error}`)\n }\n }\n\n async createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null> {\n try {\n const provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env))\n const tx = await provider.getTransaction(hash)\n\n if (!tx) {\n return null\n }\n\n return await this.createFromTransaction(tx)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getWarpActionByIndex,\n WarpActionInputType,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\nimport { WarpEvmConstants } from './constants'\nimport { getEvmAdapter } from './main'\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(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\n this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(config.env))\n this.results = new WarpEvmResults(config)\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 = this.config.user?.wallets?.[executable.chain.name]\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Transfer value cannot be negative: ${executable.value}`)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = this.config.user?.wallets?.[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 // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`)\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 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 adapter = getEvmAdapter(this.config)\n const next = getNextInfo(this.config, adapter, executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: 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: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: null,\n next: null,\n values: [],\n results: {},\n messages: {},\n }\n }\n }\n\n async preprocessInput(chain: WarpChainInfo, input: string, type: WarpActionInputType, value: string): Promise<string> {\n const typedValue = this.serializer.stringToTyped(value)\n\n switch (type) {\n case 'address':\n if (!ethers.isAddress(typedValue)) {\n throw new Error(`Invalid address format: ${typedValue}`)\n }\n return ethers.getAddress(typedValue)\n case 'hex':\n if (!ethers.isHexString(typedValue)) {\n throw new Error(`Invalid hex format: ${typedValue}`)\n }\n return typedValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n const bigIntValue = BigInt(typedValue)\n if (bigIntValue < 0) {\n throw new Error(`Negative value not allowed for type ${type}: ${typedValue}`)\n }\n return bigIntValue.toString()\n default:\n return String(typedValue)\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 gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\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 defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\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 throw new Error('Not implemented')\n }\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\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\n constructor(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\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: this.config.user?.wallets?.evm || null,\n txHash: transactionHash,\n next: null,\n values: [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[]; 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, 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, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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 } from '@vleap/warps'\nimport { getEvmExplorerUrl } from './config'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n private readonly chainInfo: WarpChainInfo\n private readonly chainName: string\n\n constructor(chainInfo: WarpChainInfo, chainName: string = 'ethereum') {\n this.chainInfo = chainInfo\n this.chainName = chainName\n }\n\n getAccountUrl(address: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/tx/${hash}`\n }\n}\n","import { Adapter, AdapterFactory, WarpClientConfig } from '@vleap/warps'\nimport { WarpChainInfo } from '@vleap/warps/src/types'\nimport { WarpEvmBuilder } from './WarpEvmBuilder'\nimport { WarpEvmExecutor } from './WarpEvmExecutor'\nimport { WarpEvmExplorer } from './WarpEvmExplorer'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\nimport { WarpEvmConstants } from './constants'\n\nexport const getEvmAdapter: AdapterFactory = (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error('EVM adapter requires a fallback adapter')\n\n return {\n chain: WarpEvmConstants.ChainName,\n prefix: WarpEvmConstants.ChainPrefix,\n builder: () => new WarpEvmBuilder(config),\n executor: new WarpEvmExecutor(config),\n results: new WarpEvmResults(config),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: (chainInfo: WarpChainInfo) => new WarpEvmExplorer(chainInfo),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n }\n}\n"],"mappings":"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","names":["import_warps","import_ethers","import_warps","import_ethers"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/config.ts","../src/constants.ts","../src/WarpEvmBuilder.ts","../src/WarpEvmExecutor.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/main.ts"],"sourcesContent":["export * from './config'\nexport * from './constants'\nexport * from './main'\nexport * from './WarpEvmBuilder'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\n","import { WarpChainEnv } from '@vleap/warps'\n\n// EVM Chain configurations\nexport interface EvmChainConfig {\n apiUrl: string\n explorerUrl: string\n chainId: string\n registryAddress: string\n nativeToken: string\n blockTime?: number\n}\n\n// Predefined chain configurations\nexport const EVM_CHAIN_CONFIGS: Record<string, Record<WarpChainEnv, EvmChainConfig>> = {\n ethereum: {\n mainnet: {\n apiUrl: 'https://eth-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://etherscan.io',\n chainId: '1',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n testnet: {\n apiUrl: 'https://eth-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.etherscan.io',\n chainId: '11155111',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n },\n arbitrum: {\n mainnet: {\n apiUrl: 'https://arb-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://arbiscan.io',\n chainId: '42161',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n testnet: {\n apiUrl: 'https://arb-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.arbiscan.io',\n chainId: '421614',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n },\n base: {\n mainnet: {\n apiUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n chainId: '8453',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n testnet: {\n apiUrl: 'https://sepolia.base.org',\n explorerUrl: 'https://sepolia.basescan.org',\n chainId: '84532',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n },\n}\n\n// Default chain (Ethereum)\nconst DEFAULT_CHAIN = 'ethereum'\n\nexport const getEvmChainConfig = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): EvmChainConfig => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n throw new Error(`Unsupported EVM chain: ${chain}`)\n }\n\n const config = chainConfigs[env]\n if (!config) {\n throw new Error(`Unsupported environment ${env} for chain ${chain}`)\n }\n\n return config\n}\n\nexport const getEvmApiUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).apiUrl\n}\n\nexport const getEvmExplorerUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).explorerUrl\n}\n\nexport const getEvmChainId = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).chainId\n}\n\nexport const getEvmRegistryAddress = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).registryAddress\n}\n\nexport const getEvmNativeToken = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).nativeToken\n}\n\nexport const getEvmBlockTime = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): number => {\n return getEvmChainConfig(chain, env).blockTime || 12\n}\n\n// Helper function to get all supported chains\nexport const getSupportedEvmChains = (): string[] => {\n return Object.keys(EVM_CHAIN_CONFIGS)\n}\n\n// Helper function to get all supported environments for a chain\nexport const getSupportedEnvironments = (chain: string): WarpChainEnv[] => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n return []\n }\n return Object.keys(chainConfigs) as WarpChainEnv[]\n}\n","export const WarpEvmConstants = {\n // Native token configuration\n Ether: {\n Identifier: 'ETH',\n DisplayName: 'Ether',\n Decimals: 18,\n },\n\n // Gas configuration\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n Approve: 46000,\n Swap: 200000,\n },\n\n GasPrice: {\n Default: '20000000000', // 20 gwei\n Low: '10000000000', // 10 gwei\n Medium: '20000000000', // 20 gwei\n High: '50000000000', // 50 gwei\n },\n\n // Supported networks\n Networks: {\n Ethereum: {\n ChainId: '1',\n Name: 'Ethereum',\n BlockTime: 12,\n },\n Arbitrum: {\n ChainId: '42161',\n Name: 'Arbitrum',\n BlockTime: 1,\n },\n Base: {\n ChainId: '8453',\n Name: 'Base',\n BlockTime: 2,\n },\n },\n\n // Validation rules\n Validation: {\n AddressLength: 42,\n HexPrefix: '0x',\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n\n // Timeout configuration\n Timeouts: {\n DefaultRpcTimeout: 30000, // 30 seconds\n GasEstimationTimeout: 10000, // 10 seconds\n QueryTimeout: 15000, // 15 seconds\n },\n}\n","import { BaseWarpBuilder, CombinedWarpBuilder, Warp, WarpCacheConfig, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\n\nexport class WarpEvmBuilder implements CombinedWarpBuilder {\n private warp: Partial<Warp> = {}\n private actions: any[] = []\n\n constructor(private readonly config: WarpClientConfig) {}\n\n async createFromRaw(encoded: string): Promise<Warp> {\n try {\n const decoded = JSON.parse(encoded)\n return decoded as Warp\n } catch (error) {\n throw new Error(`Failed to decode warp from raw data: ${error}`)\n }\n }\n\n setTitle(title: string): BaseWarpBuilder {\n this.warp.title = title\n return this\n }\n\n setDescription(description: string): BaseWarpBuilder {\n this.warp.description = description\n return this\n }\n\n setPreview(preview: string): BaseWarpBuilder {\n this.warp.preview = preview\n return this\n }\n\n setActions(actions: any[]): BaseWarpBuilder {\n this.actions = actions\n return this\n }\n\n addAction(action: any): BaseWarpBuilder {\n this.actions.push(action)\n return this\n }\n\n async build(): Promise<Warp> {\n if (!this.warp.title) {\n throw new Error('Warp title is required')\n }\n\n return {\n protocol: 'warp',\n name: this.warp.name || 'evm-warp',\n title: this.warp.title,\n description: this.warp.description || null,\n preview: this.warp.preview || null,\n actions: this.actions,\n meta: {\n chain: 'evm',\n hash: ethers.keccak256(ethers.toUtf8Bytes(this.warp.title)),\n creator: this.config.user?.wallets?.evm || '',\n createdAt: new Date().toISOString(),\n },\n } as Warp\n }\n\n createInscriptionTransaction(warp: Warp): ethers.TransactionRequest {\n const warpData = JSON.stringify(warp)\n const data = ethers.toUtf8Bytes(warpData)\n\n return {\n data: ethers.hexlify(data),\n }\n }\n\n async createFromTransaction(tx: ethers.TransactionResponse, validate?: boolean): Promise<Warp> {\n if (!tx.data || tx.data === '0x') {\n throw new Error('Transaction has no data')\n }\n\n try {\n const data = ethers.toUtf8String(tx.data)\n const warp = JSON.parse(data)\n\n if (validate) {\n if (!warp.protocol || warp.protocol !== 'warp') {\n throw new Error('Invalid warp protocol')\n }\n if (!warp.title) {\n throw new Error('Warp title is required')\n }\n }\n\n return warp as Warp\n } catch (error) {\n throw new Error(`Failed to create warp from transaction: ${error}`)\n }\n }\n\n async createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null> {\n try {\n const provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env))\n const tx = await provider.getTransaction(hash)\n\n if (!tx) {\n return null\n }\n\n return await this.createFromTransaction(tx)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getWarpActionByIndex,\n WarpActionInputType,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\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(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\n this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(config.env))\n this.results = new WarpEvmResults(config)\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 = this.config.user?.wallets?.[executable.chain.name]\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Transfer value cannot be negative: ${executable.value}`)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = this.config.user?.wallets?.[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 // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`)\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 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 // Create a mock adapter for getNextInfo (only needs prefix and chain)\n const mockAdapter = {\n chain: 'ethereum' as any,\n prefix: 'eth',\n builder: () => ({}) as any,\n executor: {} as any,\n results: {} as any,\n serializer: {} as any,\n registry: {} as any,\n explorer: () => ({}) as any,\n abiBuilder: () => ({}) as any,\n brandBuilder: () => ({}) as any,\n }\n const next = getNextInfo(this.config, mockAdapter, executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: 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: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: null,\n next: null,\n values: [],\n results: {},\n messages: {},\n }\n }\n }\n\n async preprocessInput(chain: WarpChainInfo, input: string, type: WarpActionInputType, value: string): Promise<string> {\n const typedValue = this.serializer.stringToTyped(value)\n\n switch (type) {\n case 'address':\n if (!ethers.isAddress(typedValue)) {\n throw new Error(`Invalid address format: ${typedValue}`)\n }\n return ethers.getAddress(typedValue)\n case 'hex':\n if (!ethers.isHexString(typedValue)) {\n throw new Error(`Invalid hex format: ${typedValue}`)\n }\n return typedValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n const bigIntValue = BigInt(typedValue)\n if (bigIntValue < 0) {\n throw new Error(`Negative value not allowed for type ${type}: ${typedValue}`)\n }\n return bigIntValue.toString()\n default:\n return String(typedValue)\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 gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\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 defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\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 throw new Error('Not implemented')\n }\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\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\n constructor(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\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: this.config.user?.wallets?.evm || null,\n txHash: transactionHash,\n next: null,\n values: [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[]; 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, 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, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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 } from '@vleap/warps'\nimport { getEvmExplorerUrl } from './config'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n private readonly chainInfo: WarpChainInfo\n private readonly chainName: string\n\n constructor(chainInfo: WarpChainInfo, chainName: string = 'ethereum') {\n this.chainInfo = chainInfo\n this.chainName = chainName\n }\n\n getAccountUrl(address: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/tx/${hash}`\n }\n}\n","import { Adapter, AdapterFactory, WarpClientConfig } from '@vleap/warps'\nimport { WarpChainInfo } from '@vleap/warps/src/types'\nimport { WarpEvmBuilder } from './WarpEvmBuilder'\nimport { WarpEvmExecutor } from './WarpEvmExecutor'\nimport { WarpEvmExplorer } from './WarpEvmExplorer'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter('ethereum', 'eth')\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter('arbitrum', 'arb')\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter('base', 'base')\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n]\n\nfunction createEvmAdapter(chainName: string, chainPrefix: string): 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 prefix: chainPrefix,\n builder: () => new WarpEvmBuilder(config),\n executor: new WarpEvmExecutor(config),\n results: new WarpEvmResults(config),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: (chainInfo: WarpChainInfo) => new WarpEvmExplorer(chainInfo),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n }\n }\n}\n"],"mappings":"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","names":["import_warps","import_ethers","import_warps","import_ethers"]}
|
package/dist/index.mjs
CHANGED
|
@@ -122,13 +122,13 @@ var getSupportedEnvironments = (chain) => {
|
|
|
122
122
|
|
|
123
123
|
// src/constants.ts
|
|
124
124
|
var WarpEvmConstants = {
|
|
125
|
-
|
|
126
|
-
ChainPrefix: "evm",
|
|
125
|
+
// Native token configuration
|
|
127
126
|
Ether: {
|
|
128
127
|
Identifier: "ETH",
|
|
129
128
|
DisplayName: "Ether",
|
|
130
129
|
Decimals: 18
|
|
131
130
|
},
|
|
131
|
+
// Gas configuration
|
|
132
132
|
GasLimit: {
|
|
133
133
|
Default: 21e3,
|
|
134
134
|
ContractCall: 1e5,
|
|
@@ -147,7 +147,8 @@ var WarpEvmConstants = {
|
|
|
147
147
|
High: "50000000000"
|
|
148
148
|
// 50 gwei
|
|
149
149
|
},
|
|
150
|
-
|
|
150
|
+
// Supported networks
|
|
151
|
+
Networks: {
|
|
151
152
|
Ethereum: {
|
|
152
153
|
ChainId: "1",
|
|
153
154
|
Name: "Ethereum",
|
|
@@ -164,12 +165,14 @@ var WarpEvmConstants = {
|
|
|
164
165
|
BlockTime: 2
|
|
165
166
|
}
|
|
166
167
|
},
|
|
168
|
+
// Validation rules
|
|
167
169
|
Validation: {
|
|
168
170
|
AddressLength: 42,
|
|
169
171
|
HexPrefix: "0x",
|
|
170
172
|
MinGasLimit: 21e3,
|
|
171
173
|
MaxGasLimit: 3e7
|
|
172
174
|
},
|
|
175
|
+
// Timeout configuration
|
|
173
176
|
Timeouts: {
|
|
174
177
|
DefaultRpcTimeout: 3e4,
|
|
175
178
|
// 30 seconds
|
|
@@ -601,8 +604,19 @@ var WarpEvmExecutor = class {
|
|
|
601
604
|
executable.action,
|
|
602
605
|
executable.resolvedInputs
|
|
603
606
|
);
|
|
604
|
-
const
|
|
605
|
-
|
|
607
|
+
const mockAdapter = {
|
|
608
|
+
chain: "ethereum",
|
|
609
|
+
prefix: "eth",
|
|
610
|
+
builder: () => ({}),
|
|
611
|
+
executor: {},
|
|
612
|
+
results: {},
|
|
613
|
+
serializer: {},
|
|
614
|
+
registry: {},
|
|
615
|
+
explorer: () => ({}),
|
|
616
|
+
abiBuilder: () => ({}),
|
|
617
|
+
brandBuilder: () => ({})
|
|
618
|
+
};
|
|
619
|
+
const next = getNextInfo(this.config, mockAdapter, executable.warp, executable.action, results);
|
|
606
620
|
return {
|
|
607
621
|
success: isSuccess,
|
|
608
622
|
warp: executable.warp,
|
|
@@ -724,21 +738,31 @@ var WarpEvmExplorer = class {
|
|
|
724
738
|
};
|
|
725
739
|
|
|
726
740
|
// src/main.ts
|
|
727
|
-
var
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
741
|
+
var getEthereumAdapter = createEvmAdapter("ethereum", "eth");
|
|
742
|
+
var getArbitrumAdapter = createEvmAdapter("arbitrum", "arb");
|
|
743
|
+
var getBaseAdapter = createEvmAdapter("base", "base");
|
|
744
|
+
var getAllEvmAdapters = (config, fallback) => [
|
|
745
|
+
getEthereumAdapter(config, fallback),
|
|
746
|
+
getArbitrumAdapter(config, fallback),
|
|
747
|
+
getBaseAdapter(config, fallback)
|
|
748
|
+
];
|
|
749
|
+
function createEvmAdapter(chainName, chainPrefix) {
|
|
750
|
+
return (config, fallback) => {
|
|
751
|
+
if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`);
|
|
752
|
+
return {
|
|
753
|
+
chain: chainName,
|
|
754
|
+
prefix: chainPrefix,
|
|
755
|
+
builder: () => new WarpEvmBuilder(config),
|
|
756
|
+
executor: new WarpEvmExecutor(config),
|
|
757
|
+
results: new WarpEvmResults(config),
|
|
758
|
+
serializer: new WarpEvmSerializer(),
|
|
759
|
+
registry: fallback.registry,
|
|
760
|
+
explorer: (chainInfo) => new WarpEvmExplorer(chainInfo),
|
|
761
|
+
abiBuilder: () => fallback.abiBuilder(),
|
|
762
|
+
brandBuilder: () => fallback.brandBuilder()
|
|
763
|
+
};
|
|
740
764
|
};
|
|
741
|
-
}
|
|
765
|
+
}
|
|
742
766
|
export {
|
|
743
767
|
EVM_CHAIN_CONFIGS,
|
|
744
768
|
WarpEvmBuilder,
|
|
@@ -747,7 +771,10 @@ export {
|
|
|
747
771
|
WarpEvmExplorer,
|
|
748
772
|
WarpEvmResults,
|
|
749
773
|
WarpEvmSerializer,
|
|
750
|
-
|
|
774
|
+
getAllEvmAdapters,
|
|
775
|
+
getArbitrumAdapter,
|
|
776
|
+
getBaseAdapter,
|
|
777
|
+
getEthereumAdapter,
|
|
751
778
|
getEvmApiUrl,
|
|
752
779
|
getEvmBlockTime,
|
|
753
780
|
getEvmChainConfig,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/constants.ts","../src/WarpEvmBuilder.ts","../src/WarpEvmExecutor.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/main.ts"],"sourcesContent":["import { WarpChainEnv } from '@vleap/warps'\n\n// EVM Chain configurations\nexport interface EvmChainConfig {\n apiUrl: string\n explorerUrl: string\n chainId: string\n registryAddress: string\n nativeToken: string\n blockTime?: number\n}\n\n// Predefined chain configurations\nexport const EVM_CHAIN_CONFIGS: Record<string, Record<WarpChainEnv, EvmChainConfig>> = {\n ethereum: {\n mainnet: {\n apiUrl: 'https://eth-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://etherscan.io',\n chainId: '1',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n testnet: {\n apiUrl: 'https://eth-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.etherscan.io',\n chainId: '11155111',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n },\n arbitrum: {\n mainnet: {\n apiUrl: 'https://arb-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://arbiscan.io',\n chainId: '42161',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n testnet: {\n apiUrl: 'https://arb-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.arbiscan.io',\n chainId: '421614',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n },\n base: {\n mainnet: {\n apiUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n chainId: '8453',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n testnet: {\n apiUrl: 'https://sepolia.base.org',\n explorerUrl: 'https://sepolia.basescan.org',\n chainId: '84532',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n },\n}\n\n// Default chain (Ethereum)\nconst DEFAULT_CHAIN = 'ethereum'\n\nexport const getEvmChainConfig = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): EvmChainConfig => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n throw new Error(`Unsupported EVM chain: ${chain}`)\n }\n\n const config = chainConfigs[env]\n if (!config) {\n throw new Error(`Unsupported environment ${env} for chain ${chain}`)\n }\n\n return config\n}\n\nexport const getEvmApiUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).apiUrl\n}\n\nexport const getEvmExplorerUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).explorerUrl\n}\n\nexport const getEvmChainId = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).chainId\n}\n\nexport const getEvmRegistryAddress = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).registryAddress\n}\n\nexport const getEvmNativeToken = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).nativeToken\n}\n\nexport const getEvmBlockTime = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): number => {\n return getEvmChainConfig(chain, env).blockTime || 12\n}\n\n// Helper function to get all supported chains\nexport const getSupportedEvmChains = (): string[] => {\n return Object.keys(EVM_CHAIN_CONFIGS)\n}\n\n// Helper function to get all supported environments for a chain\nexport const getSupportedEnvironments = (chain: string): WarpChainEnv[] => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n return []\n }\n return Object.keys(chainConfigs) as WarpChainEnv[]\n}\n","export const WarpEvmConstants = {\n ChainName: 'evm',\n ChainPrefix: 'evm',\n Ether: {\n Identifier: 'ETH',\n DisplayName: 'Ether',\n Decimals: 18,\n },\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000', // 20 gwei\n Low: '10000000000', // 10 gwei\n Medium: '20000000000', // 20 gwei\n High: '50000000000', // 50 gwei\n },\n Network: {\n Ethereum: {\n ChainId: '1',\n Name: 'Ethereum',\n BlockTime: 12,\n },\n Arbitrum: {\n ChainId: '42161',\n Name: 'Arbitrum',\n BlockTime: 1,\n },\n Base: {\n ChainId: '8453',\n Name: 'Base',\n BlockTime: 2,\n },\n },\n Validation: {\n AddressLength: 42,\n HexPrefix: '0x',\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n Timeouts: {\n DefaultRpcTimeout: 30000, // 30 seconds\n GasEstimationTimeout: 10000, // 10 seconds\n QueryTimeout: 15000, // 15 seconds\n },\n}\n","import { BaseWarpBuilder, CombinedWarpBuilder, Warp, WarpCacheConfig, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\n\nexport class WarpEvmBuilder implements CombinedWarpBuilder {\n private warp: Partial<Warp> = {}\n private actions: any[] = []\n\n constructor(private readonly config: WarpClientConfig) {}\n\n async createFromRaw(encoded: string): Promise<Warp> {\n try {\n const decoded = JSON.parse(encoded)\n return decoded as Warp\n } catch (error) {\n throw new Error(`Failed to decode warp from raw data: ${error}`)\n }\n }\n\n setTitle(title: string): BaseWarpBuilder {\n this.warp.title = title\n return this\n }\n\n setDescription(description: string): BaseWarpBuilder {\n this.warp.description = description\n return this\n }\n\n setPreview(preview: string): BaseWarpBuilder {\n this.warp.preview = preview\n return this\n }\n\n setActions(actions: any[]): BaseWarpBuilder {\n this.actions = actions\n return this\n }\n\n addAction(action: any): BaseWarpBuilder {\n this.actions.push(action)\n return this\n }\n\n async build(): Promise<Warp> {\n if (!this.warp.title) {\n throw new Error('Warp title is required')\n }\n\n return {\n protocol: 'warp',\n name: this.warp.name || 'evm-warp',\n title: this.warp.title,\n description: this.warp.description || null,\n preview: this.warp.preview || null,\n actions: this.actions,\n meta: {\n chain: 'evm',\n hash: ethers.keccak256(ethers.toUtf8Bytes(this.warp.title)),\n creator: this.config.user?.wallets?.evm || '',\n createdAt: new Date().toISOString(),\n },\n } as Warp\n }\n\n createInscriptionTransaction(warp: Warp): ethers.TransactionRequest {\n const warpData = JSON.stringify(warp)\n const data = ethers.toUtf8Bytes(warpData)\n\n return {\n data: ethers.hexlify(data),\n }\n }\n\n async createFromTransaction(tx: ethers.TransactionResponse, validate?: boolean): Promise<Warp> {\n if (!tx.data || tx.data === '0x') {\n throw new Error('Transaction has no data')\n }\n\n try {\n const data = ethers.toUtf8String(tx.data)\n const warp = JSON.parse(data)\n\n if (validate) {\n if (!warp.protocol || warp.protocol !== 'warp') {\n throw new Error('Invalid warp protocol')\n }\n if (!warp.title) {\n throw new Error('Warp title is required')\n }\n }\n\n return warp as Warp\n } catch (error) {\n throw new Error(`Failed to create warp from transaction: ${error}`)\n }\n }\n\n async createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null> {\n try {\n const provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env))\n const tx = await provider.getTransaction(hash)\n\n if (!tx) {\n return null\n }\n\n return await this.createFromTransaction(tx)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getWarpActionByIndex,\n WarpActionInputType,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\nimport { WarpEvmConstants } from './constants'\nimport { getEvmAdapter } from './main'\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(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\n this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(config.env))\n this.results = new WarpEvmResults(config)\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 = this.config.user?.wallets?.[executable.chain.name]\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Transfer value cannot be negative: ${executable.value}`)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = this.config.user?.wallets?.[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 // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`)\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 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 adapter = getEvmAdapter(this.config)\n const next = getNextInfo(this.config, adapter, executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: 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: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: null,\n next: null,\n values: [],\n results: {},\n messages: {},\n }\n }\n }\n\n async preprocessInput(chain: WarpChainInfo, input: string, type: WarpActionInputType, value: string): Promise<string> {\n const typedValue = this.serializer.stringToTyped(value)\n\n switch (type) {\n case 'address':\n if (!ethers.isAddress(typedValue)) {\n throw new Error(`Invalid address format: ${typedValue}`)\n }\n return ethers.getAddress(typedValue)\n case 'hex':\n if (!ethers.isHexString(typedValue)) {\n throw new Error(`Invalid hex format: ${typedValue}`)\n }\n return typedValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n const bigIntValue = BigInt(typedValue)\n if (bigIntValue < 0) {\n throw new Error(`Negative value not allowed for type ${type}: ${typedValue}`)\n }\n return bigIntValue.toString()\n default:\n return String(typedValue)\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 gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\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 defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\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 throw new Error('Not implemented')\n }\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\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\n constructor(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\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: this.config.user?.wallets?.evm || null,\n txHash: transactionHash,\n next: null,\n values: [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[]; 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, 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, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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 } from '@vleap/warps'\nimport { getEvmExplorerUrl } from './config'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n private readonly chainInfo: WarpChainInfo\n private readonly chainName: string\n\n constructor(chainInfo: WarpChainInfo, chainName: string = 'ethereum') {\n this.chainInfo = chainInfo\n this.chainName = chainName\n }\n\n getAccountUrl(address: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/tx/${hash}`\n }\n}\n","import { Adapter, AdapterFactory, WarpClientConfig } from '@vleap/warps'\nimport { WarpChainInfo } from '@vleap/warps/src/types'\nimport { WarpEvmBuilder } from './WarpEvmBuilder'\nimport { WarpEvmExecutor } from './WarpEvmExecutor'\nimport { WarpEvmExplorer } from './WarpEvmExplorer'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\nimport { WarpEvmConstants } from './constants'\n\nexport const getEvmAdapter: AdapterFactory = (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error('EVM adapter requires a fallback adapter')\n\n return {\n chain: WarpEvmConstants.ChainName,\n prefix: WarpEvmConstants.ChainPrefix,\n builder: () => new WarpEvmBuilder(config),\n executor: new WarpEvmExecutor(config),\n results: new WarpEvmResults(config),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: (chainInfo: WarpChainInfo) => new WarpEvmExplorer(chainInfo),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n }\n}\n"],"mappings":"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","names":["ethers","WarpConstants","ethers","WarpConstants","ethers"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/constants.ts","../src/WarpEvmBuilder.ts","../src/WarpEvmExecutor.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/main.ts"],"sourcesContent":["import { WarpChainEnv } from '@vleap/warps'\n\n// EVM Chain configurations\nexport interface EvmChainConfig {\n apiUrl: string\n explorerUrl: string\n chainId: string\n registryAddress: string\n nativeToken: string\n blockTime?: number\n}\n\n// Predefined chain configurations\nexport const EVM_CHAIN_CONFIGS: Record<string, Record<WarpChainEnv, EvmChainConfig>> = {\n ethereum: {\n mainnet: {\n apiUrl: 'https://eth-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://etherscan.io',\n chainId: '1',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n testnet: {\n apiUrl: 'https://eth-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.etherscan.io',\n chainId: '11155111',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\n },\n },\n arbitrum: {\n mainnet: {\n apiUrl: 'https://arb-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://arbiscan.io',\n chainId: '42161',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n testnet: {\n apiUrl: 'https://arb-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.arbiscan.io',\n chainId: '421614',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\n },\n },\n base: {\n mainnet: {\n apiUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n chainId: '8453',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n testnet: {\n apiUrl: 'https://sepolia.base.org',\n explorerUrl: 'https://sepolia.basescan.org',\n chainId: '84532',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n },\n}\n\n// Default chain (Ethereum)\nconst DEFAULT_CHAIN = 'ethereum'\n\nexport const getEvmChainConfig = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): EvmChainConfig => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n throw new Error(`Unsupported EVM chain: ${chain}`)\n }\n\n const config = chainConfigs[env]\n if (!config) {\n throw new Error(`Unsupported environment ${env} for chain ${chain}`)\n }\n\n return config\n}\n\nexport const getEvmApiUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).apiUrl\n}\n\nexport const getEvmExplorerUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).explorerUrl\n}\n\nexport const getEvmChainId = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).chainId\n}\n\nexport const getEvmRegistryAddress = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).registryAddress\n}\n\nexport const getEvmNativeToken = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).nativeToken\n}\n\nexport const getEvmBlockTime = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): number => {\n return getEvmChainConfig(chain, env).blockTime || 12\n}\n\n// Helper function to get all supported chains\nexport const getSupportedEvmChains = (): string[] => {\n return Object.keys(EVM_CHAIN_CONFIGS)\n}\n\n// Helper function to get all supported environments for a chain\nexport const getSupportedEnvironments = (chain: string): WarpChainEnv[] => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n return []\n }\n return Object.keys(chainConfigs) as WarpChainEnv[]\n}\n","export const WarpEvmConstants = {\n // Native token configuration\n Ether: {\n Identifier: 'ETH',\n DisplayName: 'Ether',\n Decimals: 18,\n },\n\n // Gas configuration\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n Approve: 46000,\n Swap: 200000,\n },\n\n GasPrice: {\n Default: '20000000000', // 20 gwei\n Low: '10000000000', // 10 gwei\n Medium: '20000000000', // 20 gwei\n High: '50000000000', // 50 gwei\n },\n\n // Supported networks\n Networks: {\n Ethereum: {\n ChainId: '1',\n Name: 'Ethereum',\n BlockTime: 12,\n },\n Arbitrum: {\n ChainId: '42161',\n Name: 'Arbitrum',\n BlockTime: 1,\n },\n Base: {\n ChainId: '8453',\n Name: 'Base',\n BlockTime: 2,\n },\n },\n\n // Validation rules\n Validation: {\n AddressLength: 42,\n HexPrefix: '0x',\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n\n // Timeout configuration\n Timeouts: {\n DefaultRpcTimeout: 30000, // 30 seconds\n GasEstimationTimeout: 10000, // 10 seconds\n QueryTimeout: 15000, // 15 seconds\n },\n}\n","import { BaseWarpBuilder, CombinedWarpBuilder, Warp, WarpCacheConfig, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\n\nexport class WarpEvmBuilder implements CombinedWarpBuilder {\n private warp: Partial<Warp> = {}\n private actions: any[] = []\n\n constructor(private readonly config: WarpClientConfig) {}\n\n async createFromRaw(encoded: string): Promise<Warp> {\n try {\n const decoded = JSON.parse(encoded)\n return decoded as Warp\n } catch (error) {\n throw new Error(`Failed to decode warp from raw data: ${error}`)\n }\n }\n\n setTitle(title: string): BaseWarpBuilder {\n this.warp.title = title\n return this\n }\n\n setDescription(description: string): BaseWarpBuilder {\n this.warp.description = description\n return this\n }\n\n setPreview(preview: string): BaseWarpBuilder {\n this.warp.preview = preview\n return this\n }\n\n setActions(actions: any[]): BaseWarpBuilder {\n this.actions = actions\n return this\n }\n\n addAction(action: any): BaseWarpBuilder {\n this.actions.push(action)\n return this\n }\n\n async build(): Promise<Warp> {\n if (!this.warp.title) {\n throw new Error('Warp title is required')\n }\n\n return {\n protocol: 'warp',\n name: this.warp.name || 'evm-warp',\n title: this.warp.title,\n description: this.warp.description || null,\n preview: this.warp.preview || null,\n actions: this.actions,\n meta: {\n chain: 'evm',\n hash: ethers.keccak256(ethers.toUtf8Bytes(this.warp.title)),\n creator: this.config.user?.wallets?.evm || '',\n createdAt: new Date().toISOString(),\n },\n } as Warp\n }\n\n createInscriptionTransaction(warp: Warp): ethers.TransactionRequest {\n const warpData = JSON.stringify(warp)\n const data = ethers.toUtf8Bytes(warpData)\n\n return {\n data: ethers.hexlify(data),\n }\n }\n\n async createFromTransaction(tx: ethers.TransactionResponse, validate?: boolean): Promise<Warp> {\n if (!tx.data || tx.data === '0x') {\n throw new Error('Transaction has no data')\n }\n\n try {\n const data = ethers.toUtf8String(tx.data)\n const warp = JSON.parse(data)\n\n if (validate) {\n if (!warp.protocol || warp.protocol !== 'warp') {\n throw new Error('Invalid warp protocol')\n }\n if (!warp.title) {\n throw new Error('Warp title is required')\n }\n }\n\n return warp as Warp\n } catch (error) {\n throw new Error(`Failed to create warp from transaction: ${error}`)\n }\n }\n\n async createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null> {\n try {\n const provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env))\n const tx = await provider.getTransaction(hash)\n\n if (!tx) {\n return null\n }\n\n return await this.createFromTransaction(tx)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getWarpActionByIndex,\n WarpActionInputType,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\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(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\n this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(config.env))\n this.results = new WarpEvmResults(config)\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 = this.config.user?.wallets?.[executable.chain.name]\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Transfer value cannot be negative: ${executable.value}`)\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = this.config.user?.wallets?.[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 // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`)\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 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 // Create a mock adapter for getNextInfo (only needs prefix and chain)\n const mockAdapter = {\n chain: 'ethereum' as any,\n prefix: 'eth',\n builder: () => ({}) as any,\n executor: {} as any,\n results: {} as any,\n serializer: {} as any,\n registry: {} as any,\n explorer: () => ({}) as any,\n abiBuilder: () => ({}) as any,\n brandBuilder: () => ({}) as any,\n }\n const next = getNextInfo(this.config, mockAdapter, executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: 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: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: null,\n next: null,\n values: [],\n results: {},\n messages: {},\n }\n }\n }\n\n async preprocessInput(chain: WarpChainInfo, input: string, type: WarpActionInputType, value: string): Promise<string> {\n const typedValue = this.serializer.stringToTyped(value)\n\n switch (type) {\n case 'address':\n if (!ethers.isAddress(typedValue)) {\n throw new Error(`Invalid address format: ${typedValue}`)\n }\n return ethers.getAddress(typedValue)\n case 'hex':\n if (!ethers.isHexString(typedValue)) {\n throw new Error(`Invalid hex format: ${typedValue}`)\n }\n return typedValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n const bigIntValue = BigInt(typedValue)\n if (bigIntValue < 0) {\n throw new Error(`Negative value not allowed for type ${type}: ${typedValue}`)\n }\n return bigIntValue.toString()\n default:\n return String(typedValue)\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 gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\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 defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\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 throw new Error('Not implemented')\n }\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\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\n constructor(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\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: this.config.user?.wallets?.evm || null,\n txHash: transactionHash,\n next: null,\n values: [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[]; 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, 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, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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 } from '@vleap/warps'\nimport { getEvmExplorerUrl } from './config'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n private readonly chainInfo: WarpChainInfo\n private readonly chainName: string\n\n constructor(chainInfo: WarpChainInfo, chainName: string = 'ethereum') {\n this.chainInfo = chainInfo\n this.chainName = chainName\n }\n\n getAccountUrl(address: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/tx/${hash}`\n }\n}\n","import { Adapter, AdapterFactory, WarpClientConfig } from '@vleap/warps'\nimport { WarpChainInfo } from '@vleap/warps/src/types'\nimport { WarpEvmBuilder } from './WarpEvmBuilder'\nimport { WarpEvmExecutor } from './WarpEvmExecutor'\nimport { WarpEvmExplorer } from './WarpEvmExplorer'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter('ethereum', 'eth')\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter('arbitrum', 'arb')\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter('base', 'base')\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n]\n\nfunction createEvmAdapter(chainName: string, chainPrefix: string): 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 prefix: chainPrefix,\n builder: () => new WarpEvmBuilder(config),\n executor: new WarpEvmExecutor(config),\n results: new WarpEvmResults(config),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: (chainInfo: WarpChainInfo) => new WarpEvmExplorer(chainInfo),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n }\n }\n}\n"],"mappings":"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","names":["ethers","WarpConstants","ethers","WarpConstants","ethers"]}
|