@1llet.xyz/erc4337-gasless-sdk 0.4.72 → 0.4.73
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 +8 -13
- package/dist/index.d.ts +8 -13
- package/dist/index.js +1130 -1213
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1121 -1212
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/BundlerClient.ts","../src/TokenService.ts","../src/UserOpBuilder.ts","../src/AccountAbstraction.ts","../src/constants/bundler.ts","../src/chains/Evm/Base.ts","../src/chains/Evm/Avalanche.ts","../src/chains/Evm/Optimism.ts","../src/chains/Evm/Gnosis.ts","../src/chains/Evm/Binance.ts","../src/chains/Evm/Polygon.ts","../src/chains/Evm/Arbitrum.ts","../src/chains/Evm/Unichain.ts","../src/chains/Evm/Monad.ts","../src/chains/NoEvm/Stellar.ts","../src/services/StellarService.ts","../src/constants/facilitator.ts","../src/constants/abis.ts","../src/utils/cctp.ts","../src/chains/Evm/WorldChain.ts","../src/chains/Evm/Ethereum.ts","../src/chains/index.ts","../src/constants/chainsInformation.ts","../src/services/cctp.ts","../src/services/near.ts","../src/services/stargate.ts","../src/services/stacks.ts","../src/services/Router.ts","../src/services/uniswap.ts","../src/services/TransferManager.ts","../src/index.ts","../src/chains.ts","../src/chains/Evm/BaseSepolia.ts","../src/constants/chains.ts"],"names":["encodeFunctionData","hash","mainnet","base","optimism","gnosis","arbitrum","polygon","unichain","avalanche","monad","worldchain","privateKeyToAccount","createPublicClient","http","createWalletClient","init_cctp","StellarService","FACILITATOR_NETWORKS","TransferManager","erc20Abi","padHex","getAddress","getNearQuote","uniswapService","parseUnits","BASE_SEPOLIA","baseSepolia","bsc"],"mappings":"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","file":"index.mjs","sourcesContent":["export const factoryAbi = [\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"salt\", type: \"uint256\" },\n ],\n name: \"getAccountAddress\",\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"salt\", type: \"uint256\" },\n ],\n name: \"isAccountDeployed\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"salt\", type: \"uint256\" },\n ],\n name: \"createAccount\",\n outputs: [{ name: \"account\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const entryPointAbi = [\n {\n inputs: [\n { name: \"sender\", type: \"address\" },\n { name: \"key\", type: \"uint192\" },\n ],\n name: \"getNonce\",\n outputs: [{ name: \"nonce\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const smartAccountAbi = [\n {\n inputs: [\n { name: \"target\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"data\", type: \"bytes\" },\n ],\n name: \"execute\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"targets\", type: \"address[]\" },\n { name: \"values\", type: \"uint256[]\" },\n { name: \"datas\", type: \"bytes[]\" },\n ],\n name: \"executeBatch\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const erc20Abi = [\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","import { type Address, type Hash } from \"viem\";\nimport { type ChainConfig, type EvmChainConfig, type UserOperation, type GasEstimate, type UserOpReceipt, type ApprovalSupportResult } from \"./types\";\n\nexport class BundlerClient {\n private bundlerUrl: string;\n private entryPointAddress: Address;\n\n constructor(config: EvmChainConfig, entryPointAddress: Address) {\n this.bundlerUrl = config.bundlerUrl;\n this.entryPointAddress = entryPointAddress;\n }\n\n private async call(method: string, params: any[]): Promise<any> {\n const response = await fetch(this.bundlerUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method,\n params,\n }),\n });\n\n const result = await response.json();\n if (result.error) {\n throw new Error(result.error.message);\n }\n return result.result;\n }\n\n async estimateGas(userOp: Partial<UserOperation>): Promise<GasEstimate> {\n const result = await this.call(\"eth_estimateUserOperationGas\", [\n {\n sender: userOp.sender,\n nonce: userOp.nonce ? \"0x\" + userOp.nonce.toString(16) : \"0x0\",\n initCode: userOp.initCode || \"0x\",\n callData: userOp.callData || \"0x\",\n paymasterAndData: userOp.paymasterAndData || \"0x\",\n signature: \"0x\",\n },\n this.entryPointAddress,\n ]);\n\n console.log(\"DEBUG: estimateGas result:\", result);\n\n return {\n callGasLimit: result.callGasLimit,\n verificationGasLimit: result.verificationGasLimit,\n preVerificationGas: result.preVerificationGas,\n maxFeePerGas: result.maxFeePerGas,\n maxPriorityFeePerGas: result.maxPriorityFeePerGas,\n paymasterAndData: result.paymasterAndData,\n };\n }\n\n async sendUserOperation(userOp: UserOperation): Promise<Hash> {\n return await this.call(\"eth_sendUserOperation\", [\n {\n sender: userOp.sender,\n nonce: \"0x\" + userOp.nonce.toString(16),\n initCode: userOp.initCode,\n callData: userOp.callData,\n callGasLimit: \"0x\" + userOp.callGasLimit.toString(16),\n verificationGasLimit: \"0x\" + userOp.verificationGasLimit.toString(16),\n preVerificationGas: \"0x\" + userOp.preVerificationGas.toString(16),\n maxFeePerGas: \"0x\" + userOp.maxFeePerGas.toString(16),\n maxPriorityFeePerGas: \"0x\" + userOp.maxPriorityFeePerGas.toString(16),\n paymasterAndData: userOp.paymasterAndData,\n signature: userOp.signature,\n },\n this.entryPointAddress,\n ]);\n }\n\n async waitForUserOperation(userOpHash: Hash, timeout = 60000): Promise<UserOpReceipt> {\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeout) {\n const result = await this.call(\"eth_getUserOperationReceipt\", [userOpHash]);\n\n if (result) {\n return result as UserOpReceipt;\n }\n\n // Wait 2 seconds before polling again\n await new Promise((resolve) => setTimeout(resolve, 2000));\n }\n\n throw new Error(\"Timeout waiting for UserOperation\");\n }\n\n async requestApprovalSupport(token: Address, owner: Address, spender: Address, amount: bigint): Promise<ApprovalSupportResult> {\n return await this.call(\"pm_requestApprovalSupport\", [\n token,\n owner,\n spender,\n amount.toString()\n ]);\n }\n\n async scheduleUserOp(userOp: UserOperation, condition: { token: string, minAmount: string }): Promise<{ status: string, taskId: string }> {\n return await this.call(\"bundler_scheduleUserOp\", [\n {\n sender: userOp.sender,\n nonce: \"0x\" + userOp.nonce.toString(16),\n initCode: userOp.initCode,\n callData: userOp.callData,\n callGasLimit: \"0x\" + userOp.callGasLimit.toString(16),\n verificationGasLimit: \"0x\" + userOp.verificationGasLimit.toString(16),\n preVerificationGas: \"0x\" + userOp.preVerificationGas.toString(16),\n maxFeePerGas: \"0x\" + userOp.maxFeePerGas.toString(16),\n maxPriorityFeePerGas: \"0x\" + userOp.maxPriorityFeePerGas.toString(16),\n paymasterAndData: userOp.paymasterAndData,\n signature: userOp.signature,\n },\n condition\n ]);\n }\n}\n","import { type Address, type PublicClient, encodeFunctionData } from \"viem\";\nimport { type ChainConfig, type Token } from \"./types\";\nimport { erc20Abi } from \"./constants\";\n\nexport class TokenService {\n private tokens: Map<string, Token> = new Map();\n private publicClient: PublicClient;\n\n constructor(chainConfig: ChainConfig, publicClient: PublicClient) {\n this.publicClient = publicClient;\n\n chainConfig.tokens.forEach(token => {\n this.tokens.set(token.symbol.toUpperCase(), token);\n });\n }\n\n /**\n * Resolve token address from symbol or return address if provided\n */\n getTokenAddress(token: string | Address): Address {\n\n\n if (token.startsWith(\"0x\")) return token as Address;\n const info = this.tokens.get(token.toUpperCase());\n if (!info) throw new Error(`Token ${token} not found in chain config`);\n return info.address;\n }\n\n /**\n * Get balance of a token for an account\n */\n async getBalance(token: string | Address, account: Address): Promise<bigint> {\n const address = this.getTokenAddress(token);\n\n if (address === \"0x0000000000000000000000000000000000000000\") {\n return await this.publicClient.getBalance({ address: account });\n }\n return await this.publicClient.readContract({\n address,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [account],\n }) as bigint;\n }\n\n /**\n * Get allowance (ERC-20 only)\n */\n async getAllowance(token: string | Address, owner: Address, spender: Address): Promise<bigint> {\n const address = this.getTokenAddress(token);\n\n if (address === \"0x0000000000000000000000000000000000000000\") {\n return 0n;\n }\n\n return await this.publicClient.readContract({\n address,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [owner, spender],\n }) as bigint;\n }\n\n /**\n * Encode transfer data\n */\n encodeTransfer(recipient: Address, amount: bigint): `0x${string}` {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [recipient, amount]\n });\n }\n\n /**\n * Encode transferFrom data\n */\n encodeTransferFrom(sender: Address, recipient: Address, amount: bigint): `0x${string}` {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transferFrom\",\n args: [sender, recipient, amount]\n });\n }\n\n /**\n * Encode approve data\n */\n encodeApprove(spender: Address, amount: bigint): `0x${string}` {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amount]\n });\n }\n}\n","import {\n type Address,\n type Hex,\n type PublicClient,\n encodeFunctionData,\n encodeAbiParameters,\n keccak256\n} from \"viem\";\nimport { type ChainConfig, type UserOperation } from \"./types\";\nimport { BundlerClient } from \"./BundlerClient\";\nimport { factoryAbi, smartAccountAbi, entryPointAbi } from \"./constants\";\n\nexport class UserOpBuilder {\n private chainConfig: ChainConfig;\n private bundlerClient: BundlerClient;\n private publicClient: PublicClient;\n private entryPointAddress: Address;\n private factoryAddress: Address;\n\n constructor(\n chainConfig: ChainConfig,\n bundlerClient: BundlerClient,\n publicClient: PublicClient\n ) {\n this.chainConfig = chainConfig;\n this.bundlerClient = bundlerClient;\n this.publicClient = publicClient;\n\n this.entryPointAddress = (chainConfig as any).entryPointAddress!;\n this.factoryAddress = (chainConfig as any).factoryAddress!;\n }\n\n async getNonce(smartAccountAddress: Address): Promise<bigint> {\n return await this.publicClient.readContract({\n address: this.entryPointAddress,\n abi: entryPointAbi,\n functionName: \"getNonce\",\n args: [smartAccountAddress, 0n],\n }) as bigint;\n }\n\n buildInitCode(owner: Address): Hex {\n const createAccountData = encodeFunctionData({\n abi: factoryAbi,\n functionName: \"createAccount\",\n args: [owner, 0n],\n });\n return `${this.factoryAddress}${createAccountData.slice(2)}` as Hex;\n }\n\n async isAccountDeployed(smartAccountAddress: Address): Promise<boolean> {\n const code = await this.publicClient.getCode({\n address: smartAccountAddress,\n });\n return code !== undefined && code !== \"0x\";\n }\n\n async buildUserOperationBatch(\n owner: Address,\n smartAccountAddress: Address,\n transactions: { target: Address; value: bigint; data: Hex }[]\n ): Promise<UserOperation> {\n const isDeployed = await this.isAccountDeployed(smartAccountAddress);\n const initCode = isDeployed ? \"0x\" : this.buildInitCode(owner);\n\n const targets = transactions.map((tx) => tx.target);\n const values = transactions.map((tx) => tx.value);\n const datas = transactions.map((tx) => tx.data);\n\n const callData = encodeFunctionData({\n abi: smartAccountAbi,\n functionName: \"executeBatch\",\n args: [targets, values, datas],\n });\n\n const nonce = await this.getNonce(smartAccountAddress);\n\n const partialOp = {\n sender: smartAccountAddress,\n nonce,\n initCode: initCode as Hex,\n callData,\n paymasterAndData: ((this.chainConfig as any).paymasterAddress || \"0x\") as Hex,\n };\n\n const gasEstimate = await this.bundlerClient.estimateGas(partialOp);\n\n return {\n ...partialOp,\n callGasLimit: BigInt(gasEstimate.callGasLimit),\n verificationGasLimit: BigInt(gasEstimate.verificationGasLimit),\n preVerificationGas: BigInt(gasEstimate.preVerificationGas),\n maxFeePerGas: BigInt(gasEstimate.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(gasEstimate.maxPriorityFeePerGas),\n paymasterAndData: (gasEstimate.paymasterAndData || partialOp.paymasterAndData) as Hex,\n signature: \"0x\",\n };\n }\n\n async buildDeployUserOp(\n owner: Address,\n smartAccountAddress: Address\n ): Promise<UserOperation> {\n const isDeployed = await this.isAccountDeployed(smartAccountAddress);\n if (isDeployed) throw new Error(\"Account already deployed\");\n\n const initCode = this.buildInitCode(owner);\n const callData = \"0x\";\n const nonce = await this.getNonce(smartAccountAddress);\n\n const partialOp = {\n sender: smartAccountAddress,\n nonce,\n initCode: initCode as Hex,\n callData: callData as Hex,\n paymasterAndData: ((this.chainConfig as any).paymasterAddress || \"0x\") as Hex,\n };\n\n const gasEstimate = await this.bundlerClient.estimateGas(partialOp);\n\n return {\n ...partialOp,\n callGasLimit: BigInt(gasEstimate.callGasLimit),\n verificationGasLimit: BigInt(gasEstimate.verificationGasLimit),\n preVerificationGas: BigInt(gasEstimate.preVerificationGas),\n maxFeePerGas: BigInt(gasEstimate.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(gasEstimate.maxPriorityFeePerGas),\n paymasterAndData: (gasEstimate.paymasterAndData || partialOp.paymasterAndData) as Hex,\n signature: \"0x\",\n };\n }\n\n getUserOpHash(userOp: UserOperation): Hex {\n const packed = encodeAbiParameters(\n [\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"bytes32\" },\n { type: \"bytes32\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"bytes32\" },\n ],\n [\n userOp.sender,\n userOp.nonce,\n keccak256(userOp.initCode),\n keccak256(userOp.callData),\n userOp.callGasLimit,\n userOp.verificationGasLimit,\n userOp.preVerificationGas,\n userOp.maxFeePerGas,\n userOp.maxPriorityFeePerGas,\n keccak256(userOp.paymasterAndData),\n ]\n );\n\n const packedHash = keccak256(packed);\n\n return keccak256(\n encodeAbiParameters(\n [{ type: \"bytes32\" }, { type: \"address\" }, { type: \"uint256\" }],\n [packedHash, this.entryPointAddress, BigInt(this.chainConfig.chain.id)]\n )\n );\n }\n}\n","import {\n type Address,\n createPublicClient,\n createWalletClient,\n decodeErrorResult,\n type Hash,\n type Hex,\n http,\n type LocalAccount,\n type PublicClient,\n type WalletClient\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { factoryAbi, } from \"./constants\";\nimport { type ApprovalSupportResult, type ChainConfig, type EvmChainConfig, type UserOperation, type UserOpReceipt } from \"./types\";\nimport { BundlerClient } from \"./BundlerClient\";\nimport { TokenService } from \"./TokenService\";\nimport { UserOpBuilder } from \"./UserOpBuilder\";\n\n/**\n * ERC-4337 Account Abstraction Client\n */\nexport class AccountAbstraction {\n private owner: Address | null = null;\n private smartAccountAddress: Address | null = null;\n private chainConfig: EvmChainConfig;\n private publicClient: PublicClient;\n private bundlerClient: BundlerClient;\n private walletClient: WalletClient | null = null;\n\n // Services\n private tokenService: TokenService;\n private userOpBuilder: UserOpBuilder;\n\n // Resolved addresses\n private entryPointAddress: Address;\n private factoryAddress: Address;\n\n constructor(chainConfig: EvmChainConfig) {\n this.chainConfig = chainConfig;\n\n // Validation\n if (!chainConfig.entryPointAddress) throw new Error(\"EntryPoint address required\");\n this.entryPointAddress = chainConfig.entryPointAddress;\n if (!chainConfig.factoryAddress) throw new Error(\"Factory address required\");\n this.factoryAddress = chainConfig.factoryAddress;\n\n // Setup Clients\n const rpcUrl = chainConfig.rpcUrl || chainConfig.chain.rpcUrls.default.http[0];\n this.publicClient = createPublicClient({\n chain: chainConfig.chain,\n transport: http(rpcUrl),\n });\n\n this.bundlerClient = new BundlerClient(chainConfig, this.entryPointAddress);\n\n // Setup Services\n this.tokenService = new TokenService(chainConfig, this.publicClient);\n this.userOpBuilder = new UserOpBuilder(chainConfig, this.bundlerClient, this.publicClient);\n }\n\n getBundlerClient(): BundlerClient {\n return this.bundlerClient;\n }\n\n getChainId(): number {\n return this.chainConfig.chain.id;\n }\n\n getPublicClient(): PublicClient {\n return this.publicClient;\n }\n\n async buildUserOperation(transaction: { target: Address; value: bigint; data: Hex }): Promise<UserOperation> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.userOpBuilder.buildUserOperationBatch(this.owner, this.smartAccountAddress, [transaction]);\n }\n\n async buildBatchUserOperation(transactions: { target: Address; value: bigint; data: Hex }[]): Promise<UserOperation> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.userOpBuilder.buildUserOperationBatch(this.owner, this.smartAccountAddress, transactions);\n }\n\n async connect(signer?: Hex | WalletClient): Promise<{ owner: Address; smartAccount: Address }> {\n // Mode 1: Private Key (Local Signer)\n if (typeof signer === 'string') {\n const account: LocalAccount = privateKeyToAccount(signer);\n this.owner = account.address;\n\n const rpcUrl = this.chainConfig.rpcUrl || this.chainConfig.chain.rpcUrls.default.http[0];\n this.walletClient = createWalletClient({\n account,\n chain: this.chainConfig.chain,\n transport: http(rpcUrl)\n });\n\n } else if (signer && typeof signer === 'object') {\n // Mode 2: External Wallet Client (e.g. Wagmi)\n this.walletClient = signer as WalletClient;\n if (!this.walletClient.account) throw new Error(\"WalletClient must have an account\");\n this.owner = this.walletClient.account.address;\n\n } else {\n // Mode 3: External Provider (MetaMask window.ethereum)\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask is not installed and no private key provided\");\n }\n\n // Request account access\n const accounts = (await window.ethereum.request({\n method: \"eth_requestAccounts\",\n })) as string[];\n\n if (!accounts || accounts.length === 0) throw new Error(\"No accounts found\");\n\n // Check network\n const chainId = (await window.ethereum.request({\n method: \"eth_chainId\",\n })) as string;\n const targetChainId = this.chainConfig.chain.id;\n\n if (parseInt(chainId, 16) !== targetChainId) {\n try {\n await window.ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: \"0x\" + targetChainId.toString(16) }],\n });\n } catch (switchError: unknown) {\n const error = switchError as { code?: number };\n if (error.code === 4902) {\n await window.ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: \"0x\" + targetChainId.toString(16),\n chainName: this.chainConfig.chain.name,\n nativeCurrency: this.chainConfig.chain.nativeCurrency,\n rpcUrls: [this.chainConfig.rpcUrl || this.chainConfig.chain.rpcUrls.default.http[0]],\n blockExplorerUrls: this.chainConfig.chain.blockExplorers?.default?.url\n ? [this.chainConfig.chain.blockExplorers.default.url]\n : [],\n },\n ],\n });\n } else {\n throw switchError;\n }\n }\n }\n\n this.owner = accounts[0] as Address;\n // No walletClient needed, we use window.ethereum directly\n }\n\n this.smartAccountAddress = await this.getSmartAccountAddress(this.owner!);\n\n return {\n owner: this.owner!,\n smartAccount: this.smartAccountAddress,\n };\n }\n\n // --- Account Management ---\n\n async isAccountDeployed(): Promise<boolean> {\n if (!this.smartAccountAddress) return false;\n const code = await this.publicClient.getBytecode({ address: this.smartAccountAddress });\n return code !== undefined;\n }\n\n async deployAccount(): Promise<UserOpReceipt> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.sendTransaction({\n target: this.smartAccountAddress,\n value: 0n,\n data: \"0x\"\n });\n }\n\n /**\n * Get the Smart Account address for an owner\n */\n async getSmartAccountAddress(owner: Address): Promise<Address> {\n try {\n const address = await this.publicClient.readContract({\n address: this.factoryAddress,\n abi: factoryAbi,\n functionName: \"getAccountAddress\",\n args: [owner, 0n],\n }) as Address;\n return address;\n } catch (e) {\n // Fallback: Try createAccount (SimpleAccountFactory style) via simulation\n try {\n const { result } = await this.publicClient.simulateContract({\n address: this.factoryAddress,\n abi: factoryAbi,\n functionName: \"createAccount\",\n args: [owner, 0n],\n account: \"0x0000000000000000000000000000000000000000\" // Zero address or random for simulation\n });\n return result as Address;\n } catch (inner) {\n // If both fail, throw the original error or a combined one\n throw e;\n }\n }\n }\n\n // --- Token Methods (Delegated) ---\n\n getTokenAddress(token: string | Address): Address {\n return this.tokenService.getTokenAddress(token);\n }\n\n async getBalance(token: string | Address): Promise<bigint> {\n if (!this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.tokenService.getBalance(token, this.smartAccountAddress);\n }\n\n async getEoaBalance(token: string | Address): Promise<bigint> {\n if (!this.owner) throw new Error(\"Not connected\");\n return this.tokenService.getBalance(token, this.owner);\n }\n\n\n\n async getAllowance(token: string | Address = \"USDC\"): Promise<bigint> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.tokenService.getAllowance(token, this.owner, this.smartAccountAddress);\n }\n\n /**\n * Get comprehensive state of the account for a specific token\n * Useful for UI initialization\n */\n async getAccountState(token: string | Address) {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n const tokenAddress = this.getTokenAddress(token);\n const isNative = tokenAddress === \"0x0000000000000000000000000000000000000000\";\n\n const [balance, eoaBalance, allowance, isDeployed] = await Promise.all([\n this.getBalance(token),\n this.getEoaBalance(token),\n isNative ? 0n : this.getAllowance(token).catch(() => 0n), // Handle native/error gracefully\n this.isAccountDeployed()\n ]);\n\n return {\n owner: this.owner,\n smartAccount: this.smartAccountAddress,\n balance,\n eoaBalance,\n allowance,\n isDeployed\n };\n }\n\n // --- Transactions ---\n\n async sendTransaction(\n tx: { target: Address; value?: bigint; data?: Hex }\n ): Promise<UserOpReceipt> {\n return this.sendBatchTransaction([tx]);\n }\n\n async sendBatchTransaction(\n txs: { target: Address; value?: bigint; data?: Hex }[]\n ): Promise<UserOpReceipt> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n // Normalize\n const transactions = txs.map(tx => ({\n target: tx.target,\n value: tx.value ?? 0n,\n data: tx.data ?? \"0x\"\n }));\n\n try {\n const userOp = await this.userOpBuilder.buildUserOperationBatch(\n this.owner,\n this.smartAccountAddress,\n transactions\n );\n const signed = await this.signUserOperation(userOp);\n const hash = await this.sendUserOperation(signed);\n return await this.waitForUserOperation(hash);\n } catch (error) {\n throw this.decodeError(error);\n }\n }\n\n async deposit(amount: bigint): Promise<Hash> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n if (this.walletClient) {\n return await this.walletClient.sendTransaction({\n account: this.walletClient.account!,\n to: this.smartAccountAddress,\n value: amount,\n chain: this.chainConfig.chain\n });\n }\n\n return await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{\n from: this.owner,\n to: this.smartAccountAddress,\n value: \"0x\" + amount.toString(16)\n }]\n }) as Hash;\n }\n\n /**\n * Smart Transfer: Automatically chooses best method (SA vs EOA) based on balances.\n * Supports strict fee handling.\n */\n async smartTransfer(\n token: Address | string,\n recipient: Address,\n amount: bigint,\n fee?: { amount: bigint; recipient: Address }\n ): Promise<UserOpReceipt | { receipt: { transactionHash: Hash } }> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n const tokenAddress = this.getTokenAddress(token);\n const isNative = tokenAddress === \"0x0000000000000000000000000000000000000000\";\n\n // Refresh State\n const [saBal, eoaBal, allowance] = await Promise.all([\n this.getBalance(token),\n this.getEoaBalance(token),\n isNative ? 0n : this.getAllowance(token).catch(() => 0n)\n ]);\n\n const totalNeeded = amount + (fee?.amount || 0n);\n\n // Strategy 1: Smart Account Pay (Preferred)\n if (saBal >= totalNeeded) {\n const txs = [];\n\n // Transfer to Recipient\n if (isNative) {\n txs.push({ target: recipient, value: amount, data: \"0x\" as Hex });\n } else {\n txs.push({ target: tokenAddress, value: 0n, data: this.tokenService.encodeTransfer(recipient, amount) });\n }\n\n // Transfer Fee\n if (fee && fee.amount > 0n) {\n if (isNative) {\n txs.push({ target: fee.recipient, value: fee.amount, data: \"0x\" as Hex });\n } else {\n txs.push({ target: tokenAddress, value: 0n, data: this.tokenService.encodeTransfer(fee.recipient, fee.amount) });\n }\n }\n console.log(\"SmartTransfer: Using Smart Account\");\n return this.sendBatchTransaction(txs);\n }\n\n // Strategy 2: EOA Pay (Fallback / Pull)\n if (eoaBal >= totalNeeded) {\n if (isNative) {\n // Native EOA Transfer (Direct)\n console.log(\"SmartTransfer: Using EOA (Native)\");\n if (this.walletClient) {\n const hash = await this.walletClient.sendTransaction({\n account: this.walletClient.account!,\n to: recipient,\n value: amount,\n chain: this.chainConfig.chain\n });\n return { receipt: { transactionHash: hash } };\n }\n const hash = await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{ from: this.owner, to: recipient, value: \"0x\" + amount.toString(16) }]\n }) as Hash;\n return { receipt: { transactionHash: hash } };\n } else {\n // ERC-20 EOA Pull (TransferFrom)\n console.log(\"SmartTransfer: Using EOA (Pull)\");\n // Check allowance\n if (allowance < totalNeeded) {\n // Infinite approval standard: maxUint256\n throw new Error(`Approval required. Please approve ${token} usage.`);\n }\n\n const txs = [];\n // Pull to Recipient\n txs.push({\n target: tokenAddress,\n value: 0n,\n data: this.tokenService.encodeTransferFrom(this.owner, recipient, amount)\n });\n\n // Pull Fee\n if (fee && fee.amount > 0n) {\n txs.push({\n target: tokenAddress,\n value: 0n,\n data: this.tokenService.encodeTransferFrom(this.owner, fee.recipient, fee.amount)\n });\n }\n return this.sendBatchTransaction(txs);\n }\n }\n\n throw new Error(`Insufficient funds.`);\n }\n\n async transfer(\n token: Address | string,\n recipient: Address,\n amount: bigint\n ): Promise<UserOpReceipt> {\n const tokenAddress = this.getTokenAddress(token);\n\n if (tokenAddress === \"0x0000000000000000000000000000000000000000\") {\n return this.sendTransaction({\n target: recipient,\n value: amount,\n data: \"0x\"\n });\n }\n\n // ERC-20\n const data = this.tokenService.encodeTransfer(recipient, amount);\n return this.sendTransaction({\n target: tokenAddress,\n value: 0n,\n data\n });\n }\n\n /**\n * Approve a token for the Smart Account\n */\n async approveToken(\n token: Address,\n spender: Address,\n amount: bigint = 115792089237316195423570985008687907853269984665640564039457584007913129639935n\n ): Promise<Hash | \"NOT_NEEDED\"> {\n if (!this.owner) throw new Error(\"Not connected\");\n\n const support = await this.requestApprovalSupport(token, spender, amount);\n\n if (support.type === \"approve\") {\n const data = this.tokenService.encodeApprove(spender, amount);\n\n if (this.walletClient) {\n return await this.walletClient.sendTransaction({\n account: this.walletClient.account!,\n to: token,\n data,\n chain: this.chainConfig.chain\n });\n }\n\n return await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{\n from: this.owner,\n to: token,\n data,\n }]\n }) as Hash;\n }\n\n if (support.type === \"permit\") throw new Error(\"Permit not yet supported\");\n return \"NOT_NEEDED\";\n }\n\n // --- Core Bridge to Bundler/UserOp ---\n\n async signUserOperation(userOp: UserOperation): Promise<UserOperation> {\n if (!this.owner) throw new Error(\"Not connected\");\n\n const userOpHash = this.userOpBuilder.getUserOpHash(userOp);\n let signature: Hex;\n\n if (this.walletClient) {\n signature = await this.walletClient.signMessage({\n account: this.walletClient.account!,\n message: { raw: userOpHash } // Sign hash directly\n });\n } else {\n signature = (await window.ethereum!.request({\n method: \"personal_sign\",\n params: [userOpHash, this.owner],\n })) as Hex;\n }\n\n return { ...userOp, signature };\n }\n\n async sendUserOperation(userOp: UserOperation): Promise<Hash> {\n return this.bundlerClient.sendUserOperation(userOp);\n }\n\n async waitForUserOperation(hash: Hash, timeout = 60000) {\n return this.bundlerClient.waitForUserOperation(hash, timeout);\n }\n\n // Internal but exposed via BundlerClient originally\n async requestApprovalSupport(token: Address, spender: Address, amount: bigint): Promise<ApprovalSupportResult> {\n if (!this.owner) throw new Error(\"Not connected\");\n return this.bundlerClient.requestApprovalSupport(token, this.owner, spender, amount);\n }\n\n // Error Decoding (Private)\n private decodeError(error: any): Error {\n const msg = error?.message || \"\";\n const hexMatch = msg.match(/(0x[0-9a-fA-F]+)/);\n\n if (hexMatch) {\n try {\n const decoded = decodeErrorResult({\n abi: [{ inputs: [{ name: \"message\", type: \"string\" }], name: \"Error\", type: \"error\" }],\n data: hexMatch[0] as Hex\n });\n if (decoded.errorName === \"Error\") return new Error(`Smart Account Error: ${decoded.args[0]}`);\n } catch (e) { /* ignore */ }\n }\n\n if (msg.includes(\"AA21\")) return new Error(\"Smart Account: Native transfer failed (ETH missing?)\");\n if (msg.includes(\"AA25\")) return new Error(\"Smart Account: Invalid account nonce\");\n\n return error instanceof Error ? error : new Error(String(error));\n }\n\n // Getters\n getOwner() { return this.owner; }\n getSmartAccount() { return this.smartAccountAddress; }\n}\n\n// Global window types for MetaMask\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on: (event: string, callback: (args: unknown) => void) => void;\n removeListener: (event: string, callback: (args: unknown) => void) => void;\n };\n }\n}\n","export const DEFAULT_BUNDLER_URL = \"https://bundler-erc-4337.vercel.app\";\nexport const BUNDLER_URL = process.env.NEXT_PUBLIC_BUNDLER_URL || process.env.BUNDLER_URL || DEFAULT_BUNDLER_URL;\n","import { base } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const BASE: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n coingeckoId: \"usd-coin\",\n supportsStargate: true\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: base,\n rpcUrl: \"https://base-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=base`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xe2584152891E4769025807DEa0cD611F135aDC68\",\n paymasterAddress: \"0x1e13Eb16C565E3f3FDe49A011755e50410bb1F95\"\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 6,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:base.omft.near\",\n name: \"ETH\",\n decimals: 18\n }\n ],\n needMemo: false\n },\n stargateInformation: {\n support: true,\n }\n }\n}\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { avalanche } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const AVALANCHE: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n coingeckoId: \"usd-coin\",\n supportsStargate: true\n },\n {\n name: \"AVAX\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"avalanche-2\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7\",\n coingeckoId: \"tether\"\n }\n ],\n evm: {\n chain: avalanche,\n rpcUrl: avalanche.rpcUrls.default.http[0],\n supports7702: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=avalanche`,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x5D1D71FE2De5D1C52c7c11311332eC7f0CBf88aF\",\n paymasterAddress: \"0x6c0de464F2203FE089FF719Acf425dFfE6ac1EE5\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 1,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:43114_3atVJH3r5c4GqiSYmg9fECvjc47o\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:43114_11111111111111111111\",\n name: \"AVAX\",\n decimals: 18\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:43114_372BeH7ENZieCaabwkbWkBiTTgXp\",\n name: \"USDT\",\n decimals: 6\n }\n ],\n needMemo: false\n },\n stargateInformation: {\n support: true,\n }\n }\n}\n","import { optimism } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const OPTIMISM: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0x94b008aa00579c1307b0ef2c499ad98a8ce58e58\",\n coingeckoId: \"tether\"\n },\n {\n name: \"OP\",\n decimals: 18,\n address: \"0x4200000000000000000000000000000000000042\",\n coingeckoId: \"optimism\"\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: optimism,\n rpcUrl: \"https://mainnet.optimism.io\",\n supports7702: false,\n erc4337: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=optimism`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x3CE963866d3Be7Fe4354DBe892Aab52a0a18aeb2\",\n paymasterAddress: \"0x0dB771d11F84E8541AA651363DF14E4401d01216\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 2,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_A2ewyUyDp6qsue1jqZsGypkCxRJ\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_359RPSJVdTxwTJT9TyGssr2rFoWo\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_vLAiSt9KfUGKpw5cD3vsSyNYBo7\",\n name: \"OP\",\n decimals: 18\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_11111111111111111111\",\n name: \"ETH\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n}\n","import { gnosis } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const GNOSIS: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0x4ECaBa5870353805a9F068101A40E0f32ed605C6\",\n coingeckoId: \"tether\"\n },\n {\n name: \"EURe\",\n decimals: 18,\n address: \"0x420CA0f9B9b604cE0fd9C18EF134C705e5Fa3430\",\n coingeckoId: \"monerium-eur-money\"\n },\n {\n name: \"GNO\",\n decimals: 18,\n address: \"0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb\",\n coingeckoId: \"gnosis\"\n },\n {\n name: \"WETH\",\n decimals: 18,\n address: \"0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1\",\n coingeckoId: \"ethereum\"\n },\n {\n name: \"XDAI\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"xdai\"\n }\n ],\n evm: {\n chain: gnosis,\n rpcUrl: gnosis.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=gnosis`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xC8a2Fb1f2E686417A131E09be3320cb5431CcD90\",\n paymasterAddress: \"0x4C36C70d68a7c26326711e8268bb163E3784fA96\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: false,\n domain: 0,\n },\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:gnosis-0x2a22f9c3b484c3629090feed35f17ff8f88f76f0.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:gnosis-0x4ecaba5870353805a9f068101a40e0f32ed605c6.omft.near\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep141:gnosis-0x420ca0f9b9b604ce0fd9c18ef134c705e5fa3430.omft.near\",\n name: \"EURe\",\n decimals: 18\n },\n {\n assetId: \"nep141:gnosis-0x9c58bacc331c9aa871afd802db6379a98e80cedb.omft.near\",\n name: \"GNO\",\n decimals: 18\n },\n {\n assetId: \"nep141:gnosis-0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1.omft.near\",\n name: \"WETH\",\n decimals: 18\n },\n {\n assetId: \"nep141:gnosis.omft.near\",\n name: \"XDAI\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n};\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { bsc } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const BNB: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 18,\n address: \"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d\", // BSC Mainnet USDC\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 18,\n address: \"0x55d398326f99059fF775485246999027B3197955\", // BSC Mainnet USDT\n coingeckoId: \"tether\"\n },\n {\n name: \"BNB\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\", // Native\n coingeckoId: \"binancecoin\"\n },\n ],\n evm: {\n chain: bsc,\n rpcUrl: \"https://bsc-dataseed.binance.org\",\n supports7702: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=bsc`,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x2d5dBD90d3aB35614cdf686a67A9889E56B20b27\",\n paymasterAddress: \"0x460593321DdbE4e1038666Ad07Fc1F817dfA02DB\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: false,\n domain: 0,\n },\n },\n nearIntentInformation: {\n support: true,\n needMemo: false,\n assetsId: [\n {\n name: \"USDC\",\n assetId: \"nep245:v2_1.omni.hot.tg:56_2w93GqMcEmQFDru84j3HZZWt557r\",\n decimals: 18,\n },\n {\n name: \"USDT\",\n assetId: \"nep245:v2_1.omni.hot.tg:56_2CMMyVTGZkeyNZTSvS5sarzfir6g\",\n decimals: 18,\n },\n {\n name: \"BNB\",\n assetId: \"nep245:v2_1.omni.hot.tg:56_11111111111111111111\",\n decimals: 18,\n }\n ],\n },\n },\n};\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { polygon } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const POLYGON: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"POL\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"polygon-ecosystem-token\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n coingeckoId: \"tether\"\n }\n ],\n evm: {\n chain: polygon,\n rpcUrl: \"https://polygon-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n supports7702: true,\n erc4337: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=polygon`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x31D1C59fcf5B78FE2a86187a53c84DcDa5B80EF6\",\n paymasterAddress: \"0x24C82C9381F4615f1a73a5CdBB0Ffd5a432fA54C\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 7,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:137_qiStmoQJDQPTebaPjgx5VBxZv6L\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:137_11111111111111111111\",\n name: \"POL\",\n decimals: 18\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:137_3hpYoaLtt8MP1Z2GH1U473DMRKgr\",\n name: \"USDT\",\n decimals: 6\n }\n ],\n needMemo: false\n }\n }\n}\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { arbitrum } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const ARBITRUM: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n coingeckoId: \"tether\"\n },\n {\n name: \"ARB\",\n decimals: 18,\n address: \"0x912CE59144191C1204E64559FE8253a0e49E6548\",\n coingeckoId: \"arbitrum\"\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: arbitrum,\n rpcUrl: \"https://arb-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=arbitrum`,\n supports7702: true,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xEEba846e0177CD7b2F023feaa44F9B2a9183327A\",\n paymasterAddress: \"0x41d236E76eCEC3b90554d0b504ac2EEce93A2AE1\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: true,\n domain: 3,\n },\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:arb-0xaf88d065e77c8cc2239327c5edb3a432268e5831.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:arb-0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9.omft.near\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep141:arb.omft.near\",\n name: \"ETH\",\n decimals: 18\n },\n {\n assetId: \"nep141:arb-0x912ce59144191c1204e64559fe8253a0e49e6548.omft.near\",\n name: \"ARB\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n};\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { unichain } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const UNICHAIN: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x078D782b760474a361dDA0AF3839290b0EF57AD6\",\n coingeckoId: \"usd-coin\"\n }\n ],\n evm: {\n chain: unichain,\n rpcUrl: \"https://unichain-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=unichain`,\n supports7702: true,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xB2E45aCbB68f3e98C87B6df16625f22e11728556\",\n paymasterAddress: \"0x7A92b3Fee017E3E181a51D9045AACE30eC2B387D\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 10,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: null\n }\n}\n","import { monad } from \"viem/chains\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const Monad: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x754704Bc059F8C67012fEd69BC8A327a5aafb603\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0xe7cd86e13AC4309349F30B3435a9d337750fC82D\",\n coingeckoId: \"tether\"\n },\n {\n name: \"MON\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"monad\"\n }\n ],\n evm: {\n chain: monad,\n rpcUrl: monad.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=monad`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xaaeA6D8f377e62599Aad75376F0C5e4F7EBF8f84\",\n paymasterAddress: \"0xeA82B63e8dE3BFBd321A681D4511BC596E323162\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n cCTPInformation: {\n supportCCTP: true,\n domain: 15,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:143_2dmLwYWkCQKyTjeUPAsGJuiVLbFx\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:143_4EJiJxSALvGoTZbnc8K7Ft9533et\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:143_11111111111111111111\",\n name: \"MON\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n}\n","\nimport { Networks } from \"stellar-sdk\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const STELLAR: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 7,\n address: \"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"XLM\",\n decimals: 7,\n address: \"native\",\n coingeckoId: \"stellar\"\n }\n ],\n nonEvm: {\n networkPassphrase: Networks.PUBLIC,\n serverURL: \"https://horizon.stellar.org\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:1100_111bzQBB65GxAPAVoxqmMcgYo5oS3txhqs1Uh1cgahKQUeTUq1TJu\",\n name: \"USDC\",\n decimals: 7\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:1100_111bzQBB5v7AhLyPMDwS8uJgQV24KaAPXtwyVWu2KXbbfQU6NXRCz\",\n name: \"XLM\",\n decimals: 6\n }\n ],\n needMemo: true\n }\n }\n};\n","import * as StellarSdk from \"stellar-sdk\";\nimport { STELLAR } from \"../chains/NoEvm/Stellar\";\n\nexport class StellarService {\n server: StellarSdk.Horizon.Server;\n network: string;\n\n constructor() {\n if (!STELLAR.nonEvm?.serverURL || !STELLAR.nonEvm?.networkPassphrase) {\n throw new Error(\"Stellar Non-EVM config missing or incomplete\");\n }\n this.server = new StellarSdk.Horizon.Server(STELLAR.nonEvm.serverURL);\n this.network = STELLAR.nonEvm.networkPassphrase;\n }\n\n /**\n * Get balance for a specific token (or all if not specified)\n * Returns string representation\n */\n async getBalance(address: string, tokenName: string = \"XLM\"): Promise<string> {\n try {\n const account = await this.server.loadAccount(address);\n\n // Find asset definition\n const assetDef = STELLAR.assets.find(a => a.name === tokenName);\n if (!assetDef) throw new Error(`Asset ${tokenName} not configured`);\n\n const isNative = assetDef.address === \"native\";\n\n const balanceLine = account.balances.find((b: any) => {\n if (isNative) {\n return b.asset_type === \"native\";\n }\n return b.asset_code === tokenName && b.asset_issuer === assetDef.address;\n });\n\n return balanceLine ? balanceLine.balance : \"0\";\n } catch (e: any) {\n if (e.response && e.response.status === 404) {\n return \"0\"; // Account not active\n }\n throw e;\n }\n }\n\n /**\n * Build and Sign a Transfer Transaction\n */\n async buildTransferXdr(\n senderPk: string,\n recipient: string,\n amount: string,\n tokenName: string = \"XLM\",\n memo?: string\n ): Promise<string> {\n const keypair = StellarSdk.Keypair.fromSecret(senderPk);\n const sourceAddress = keypair.publicKey();\n\n // Check if account exists\n let account;\n try {\n account = await this.server.loadAccount(sourceAddress);\n } catch (e: any) {\n throw new Error(`Stellar Account ${sourceAddress} not valid or not active.`);\n }\n\n const asset = this.getAsset(tokenName);\n\n const txBuilder = new StellarSdk.TransactionBuilder(account, {\n fee: StellarSdk.BASE_FEE,\n networkPassphrase: this.network\n });\n\n txBuilder.addOperation(StellarSdk.Operation.payment({\n destination: recipient,\n asset: asset,\n amount: amount\n }));\n\n if (memo) {\n // Simple text memo support for now\n txBuilder.addMemo(StellarSdk.Memo.text(memo));\n }\n\n txBuilder.setTimeout(30);\n\n const builtTx = txBuilder.build();\n builtTx.sign(keypair);\n\n return builtTx.toXDR();\n }\n\n /**\n * Submit Signed XDR\n */\n async submitXdr(xdr: string) {\n // Construct transaction from XDR to submit\n const tx = StellarSdk.TransactionBuilder.fromXDR(xdr, this.network);\n return this.server.submitTransaction(tx);\n }\n\n public getAsset(tokenName: string): StellarSdk.Asset {\n const assetDef = STELLAR.assets.find(a => a.name === tokenName);\n if (!assetDef) {\n // Default fallback if not found? Or throw.\n if (tokenName === \"XLM\") return StellarSdk.Asset.native();\n throw new Error(`Asset ${tokenName} not found in configuration`);\n }\n\n if (assetDef.address === \"native\") {\n return StellarSdk.Asset.native();\n }\n\n return new StellarSdk.Asset(assetDef.name, assetDef.address);\n }\n\n public getKeypair(pk: string) {\n return StellarSdk.Keypair.fromSecret(pk);\n }\n}\n","\nimport { base, optimism, gnosis, arbitrum, polygon, unichain, avalanche, worldchain, monad, mainnet } from \"viem/chains\";\nimport { ChainKey } from \"@/types/chain\";\nimport { FacilitatorNetworkConfig } from \"@/services/config\";\n\nexport type FacilitatorChainKey = ChainKey;\n\nexport const PlatformFees = {\n DEV: 0,\n EVM_TO_OTHER: 0.02,\n DEFAULT: 0.02\n};\n\n// Dummy addresses for simulation\nexport const DUMMY_EVM_ADDRESS = \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"; // Vitalik (just a valid address)\nexport const DUMMY_STELLAR_ADDRESS = \"GB7BDSZU2Y27LYNLJLVEGW5TIVYQ6362DS5QZ5F6S27S227227227AAA\";\n\nexport const calculateFee = (isDev: boolean = false): number => {\n return isDev ? PlatformFees.DEV : PlatformFees.DEFAULT;\n};\n\nexport const FACILITATOR_NETWORKS: Record<string, FacilitatorNetworkConfig> = {\n Ethereum: {\n chainId: mainnet.id,\n chain: mainnet,\n usdc: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 0,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: mainnet.rpcUrls.default.http[0]\n },\n Base: {\n chainId: 8453,\n chain: base,\n usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 6,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://base-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\n },\n Optimism: {\n chainId: 10,\n chain: optimism,\n usdc: \"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 2,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://opt-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\" // Assuming same key works or public\n },\n Gnosis: {\n chainId: 100,\n chain: gnosis,\n usdc: \"0x2a22f9c3b48403ebD92cF06fF916b322a30dB834\",\n usdcName: \"USDC\",\n usdcVersion: \"2\",\n domain: 0,\n tokenMessenger: \"0x0000000000000000000000000000000000000000\",\n messageTransmitter: \"0x0000000000000000000000000000000000000000\",\n rpcUrl: \"https://rpc.gnosischain.com\"\n },\n Arbitrum: {\n chainId: 42161,\n chain: arbitrum,\n usdc: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 3,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://arb-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\n },\n Polygon: {\n chainId: 137,\n chain: polygon,\n usdc: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 7,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://polygon-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\n },\n Unichain: {\n chainId: unichain.id,\n chain: unichain,\n usdc: \"0x078D782b760474a361dDA0AF3839290b0EF57AD6\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 10,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: unichain.rpcUrls.default.http[0]\n },\n Avalanche: {\n chainId: avalanche.id,\n chain: avalanche,\n usdc: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 1,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: avalanche.rpcUrls.default.http[0]\n },\n Worldchain: {\n chainId: worldchain.id,\n chain: worldchain,\n usdc: \"0x79A02482A880bCe3F13E09da970dC34dB4cD24D1\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 13,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: worldchain.rpcUrls.default.http[0]\n },\n Monad: {\n chainId: monad.id,\n chain: monad,\n usdc: \"0x754704Bc059F8C67012fEd69BC8A327a5aafb603\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 15,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: monad.rpcUrls.default.http[0]\n }\n};\n","export const usdcErc3009Abi = [\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"transferWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const tokenMessengerAbi = [\n {\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"destinationCaller\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" }, // Suspected wrapper arg\n { name: \"minFinalityThreshold\", type: \"uint32\" } // Suspected wrapper arg\n ],\n name: \"depositForBurn\",\n outputs: [{ name: \"_nonce\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n // Alternative overload often used:\n {\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n ],\n name: \"depositForBurn\",\n outputs: [{ name: \"_nonce\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n }\n] as const;\n\nexport const messageTransmitterAbi = [\n {\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n name: \"receiveMessage\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","import axios from \"axios\";\n\nexport const createRetrieveAttestation = async (\n transactionHash: string,\n chainId: string,\n timeout = 60000\n) => {\n const baseUrl = \"https://iris-api.circle.com\";\n\n const url = `${baseUrl}/v2/messages/${chainId}?transactionHash=${transactionHash}`;\n\n const start = Date.now();\n const FIVE_SECONDS = 5000;\n\n while (true) {\n const elapsed = Date.now() - start;\n if (elapsed > timeout) {\n throw new Error(\n \"Timeout: Attestation not retrieved within the expected time.\"\n );\n }\n\n try {\n const response = await axios.get(url);\n\n const message = response.data?.messages?.[0];\n if (message?.status === \"complete\") {\n console.log(\"Attestation retrieved successfully!\");\n return message;\n }\n\n console.log(\"Waiting for attestation...\");\n } catch (error: any) {\n const status = error.response?.status;\n\n if (status === 404) {\n console.log(\"Waiting for attestation...\");\n } else {\n console.error(\"Error fetching attestation:\", error.message);\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, FIVE_SECONDS));\n }\n};\n","\nimport { worldchain } from \"viem/chains\";\nimport { Address } from \"abitype\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const WORLD_CHAIN: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x79A02482A880bCe3F13E09da970dC34dB4cD24D1\",\n coingeckoId: \"usd-coin\"\n }\n ],\n evm: {\n chain: worldchain,\n rpcUrl: worldchain.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: false,\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n cCTPInformation: {\n supportCCTP: true,\n domain: 14,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: null\n }\n}\n","import { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler.js\";\nimport { mainnet } from \"viem/chains\";\n\nexport const ETHEREUM: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n coingeckoId: \"usd-coin\",\n supportsStargate: true\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: mainnet,\n rpcUrl: mainnet.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=ethereum`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xe2584152891E4769025807DEa0cD611F135aDC68\",\n paymasterAddress: \"0x1e13Eb16C565E3f3FDe49A011755e50410bb1F95\"\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 0,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:eth.omft.near\",\n name: \"ETH\",\n decimals: 18\n }\n ],\n needMemo: false\n },\n stargateInformation: {\n support: false,\n }\n }\n}\n","import { OPTIMISM } from \"./Evm/Optimism.js\";\nimport { ARBITRUM } from \"./Evm/Arbitrum.js\";\nimport { BASE } from \"./Evm/Base.js\";\nimport { UNICHAIN } from \"./Evm/Unichain.js\";\nimport { POLYGON } from \"./Evm/Polygon.js\";\nimport { AVALANCHE } from \"./Evm/Avalanche.js\";\nimport { WORLD_CHAIN } from \"./Evm/WorldChain.js\";\nimport { STELLAR } from \"./NoEvm/Stellar.js\";\nimport { Monad } from \"./Evm/Monad.js\";\nimport { BNB } from \"./Evm/Binance.js\";\nimport { GNOSIS } from \"./Evm/Gnosis.js\";\nimport { ETHEREUM } from \"./Evm/Ethereum.js\";\n\nexport {\n OPTIMISM,\n ARBITRUM,\n BASE,\n UNICHAIN,\n POLYGON,\n AVALANCHE,\n WORLD_CHAIN,\n STELLAR,\n Monad,\n BNB,\n GNOSIS,\n ETHEREUM\n}","import { ChainConfig } from \"@/types/chain\";\nimport * as Chains from \"@/chains/index\";\n\nexport const NETWORKS: Record<string, ChainConfig> = {\n Optimism: Chains.OPTIMISM,\n Arbitrum: Chains.ARBITRUM,\n Base: Chains.BASE,\n Unichain: Chains.UNICHAIN,\n Polygon: Chains.POLYGON,\n Avalanche: Chains.AVALANCHE,\n WorldChain: Chains.WORLD_CHAIN,\n Stellar: Chains.STELLAR,\n Monad: Chains.Monad,\n BNB: Chains.BNB,\n Gnosis: Chains.GNOSIS,\n Ethereum: Chains.ETHEREUM\n};\n","import {\n createPublicClient,\n createWalletClient,\n http,\n parseSignature,\n padHex,\n maxUint256,\n Address\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport {\n FacilitatorChainKey,\n calculateFee\n} from \"@/constants/facilitator\";\nimport { FACILITATOR_NETWORKS } from \"@/constants/facilitator\";\nimport { usdcErc3009Abi } from \"@/constants/abis\";\nimport { tokenMessengerAbi, messageTransmitterAbi } from \"@/constants/abis\";\nimport { SettleResponse, FacilitatorPaymentPayload, CrossChainConfig } from \"@/services/types\";\nimport { createRetrieveAttestation } from \"@/utils/cctp\";\nimport { BridgeStrategy, BridgeContext } from \"./types\";\nimport { NETWORKS } from \"@/constants/chainsInformation\";\nimport { ChainKey } from \"@/types/chain\";\n\n\n\n/** Converts an address to bytes32 format for CCTP mintRecipient */\nconst addressToBytes32 = (address: Address): `0x${string}` => {\n return padHex(address, { size: 32 });\n};\n\nexport class CCTPStrategy implements BridgeStrategy {\n name = \"CCTP\";\n\n canHandle(context: BridgeContext): boolean {\n const { sourceChain, destChain, sourceToken, destToken } = context;\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) return false;\n\n const sourceCCTP = sourceConfig.crossChainInformation?.circleInformation?.cCTPInformation?.supportCCTP;\n const destCCTP = destConfig.crossChainInformation?.circleInformation?.cCTPInformation?.supportCCTP;\n\n // Default to USDC if destToken is missing (backward compatibility) \n let targetToken = destToken;\n if (!targetToken) {\n if (sourceToken && sourceToken !== \"USDC\") {\n targetToken = sourceToken;\n } else {\n targetToken = \"USDC\";\n }\n }\n\n return !!(sourceCCTP && destCCTP && targetToken === \"USDC\" && (sourceToken === \"USDC\" || !sourceToken));\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { paymentPayload, sourceChain, destChain, amount, recipient } = context;\n\n const destConfig = NETWORKS[destChain];\n const destinationDomain = destConfig.crossChainInformation?.circleInformation?.cCTPInformation?.domain;\n\n if (destinationDomain === undefined) {\n return {\n success: false,\n errorReason: \"Destination chain does not have CCTP domain configured\"\n };\n }\n\n const crossChainConfig: CrossChainConfig = {\n destinationChain: destChain as FacilitatorChainKey,\n destinationDomain: destinationDomain,\n mintRecipient: recipient as Address\n };\n\n return processCCTPSettlement(\n context,\n crossChainConfig\n );\n }\n}\n\nexport async function processCCTPSettlement(\n context: BridgeContext,\n crossChainConfig: CrossChainConfig\n): Promise<SettleResponse> {\n const { paymentPayload, sourceChain, amount, recipient, facilitatorPrivateKey, depositTxHash } = context;\n\n console.log(`[SDK v0.4.22] Processing CCTP. DepositHash: ${depositTxHash} (${typeof depositTxHash})`);\n\n if (!facilitatorPrivateKey) {\n return {\n success: false,\n errorReason: \"Facilitator Private Key not provided in context\"\n };\n }\n\n const networkConfig = FACILITATOR_NETWORKS[sourceChain];\n if (!networkConfig) {\n return {\n success: false,\n errorReason: `Unsupported chain: ${sourceChain}`\n };\n }\n\n // Step 1: Check Facilitator Balance or Verify Deposit (Push Model)\n const facilitatorAccount = privateKeyToAccount(facilitatorPrivateKey as `0x${string}`);\n\n const fromAddress = context.senderAddress || (paymentPayload?.authorization?.from);\n\n if (!fromAddress) {\n return { success: false, errorReason: \"Sender address is missing\" };\n }\n\n const usdcAddress = networkConfig.usdc;\n const amountBigInt = BigInt(Math.floor(parseFloat(amount) * 1_000_000)); // USDC 6 decimals\n\n const publicClient = createPublicClient({\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n\n // ... (rest of logic) ...\n\n // Step 4: Execute CCTP on Source Chain\n // If depositTxHash is verified, we proceed to fetch attestation.\n\n // Replacing the execute call argument:\n // return executeCCTPBridge(..., fromAddress as Address);\n\n // A. If depositTxHash is provided (Step 2: Verification)\n if (depositTxHash) {\n console.log(`[CCTP] Verifying deposit hash: ${depositTxHash}`);\n try {\n const receipt = await publicClient.waitForTransactionReceipt({ hash: depositTxHash as `0x${string}` });\n\n if (receipt.status !== \"success\") {\n throw new Error(\"Deposit transaction failed on-chain\");\n }\n } catch (e) {\n return {\n success: false,\n errorReason: `Invalid deposit transaction: ${e instanceof Error ? e.message : \"Unknown error\"}`\n };\n }\n\n // B. Check Balance (Wait logic) - Only check if we have a hash implying a deposit matched\n let facilitatorBalance = BigInt(0);\n const maxRetries = 5;\n\n for (let i = 0; i < maxRetries; i++) {\n facilitatorBalance = await publicClient.readContract({\n address: usdcAddress,\n abi: usdcErc3009Abi,\n functionName: \"balanceOf\",\n args: [facilitatorAccount.address]\n }) as bigint;\n\n if (facilitatorBalance >= amountBigInt) break;\n await new Promise(r => setTimeout(r, 2000));\n }\n\n if (facilitatorBalance < amountBigInt) {\n return {\n success: false,\n errorReason: \"Deposit verified but facilitator balance insufficient (Funds sent to wrong address?)\"\n };\n }\n\n } else {\n // No hash provided -> Always Prompt for Deposit (Strict Push Model)\n console.log(\"[SDK v0.4.22] No deposit hash. Returning PENDING_USER_DEPOSIT.\");\n return {\n success: true,\n data: {\n depositAddress: facilitatorAccount.address,\n amountToDeposit: amountBigInt.toString(),\n chainId: networkConfig.chainId\n },\n attestation: {\n message: \"PENDING_USER_DEPOSIT_v22\",\n attestation: \"0x\"\n },\n transactionHash: \"PENDING_USER_DEPOSIT_v22\"\n };\n }\n\n // Funds are present, proceed to bridge\n const transferHash = (depositTxHash as `0x${string}`) || \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n return executeCCTPBridge(sourceChain, amount, crossChainConfig, facilitatorPrivateKey, recipient as Address, transferHash, fromAddress as Address);\n}\n\nexport async function executeCCTPBridge(\n sourceChain: FacilitatorChainKey,\n amount: string,\n crossChainConfig: CrossChainConfig,\n facilitatorPrivateKey: string,\n recipient: Address | undefined,\n transferHash: `0x${string}`,\n payerAddress: Address\n): Promise<SettleResponse> {\n if (!facilitatorPrivateKey) {\n return { success: false, errorReason: \"Facilitator Private Key not provided\" };\n }\n\n const networkConfig = FACILITATOR_NETWORKS[sourceChain];\n if (!networkConfig) {\n return { success: false, errorReason: `Unsupported chain: ${sourceChain}` };\n }\n\n // Setup clients\n const facilitatorAccount = privateKeyToAccount(facilitatorPrivateKey as `0x${string}`);\n const publicClient = createPublicClient({\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n const walletClient = createWalletClient({\n account: facilitatorAccount,\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n\n // Convert human readable string (e.g. \"0.01\") to atomic units (6 decimals)\n const amountBigInt = BigInt(Math.floor(parseFloat(amount) * 1_000_000));\n const feeRaw = calculateFee();\n const fee = BigInt(Math.floor(feeRaw * 1_000_000));\n const minRequired = fee;\n\n if (amountBigInt <= minRequired) {\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: `Amount too small. Minimum required: ${Number(minRequired) / 1_000_000} USDC (to cover bridge fees)`\n };\n }\n\n // Re-verify Balance (Double Check)\n let facilitatorBalance = BigInt(0);\n const maxRetries = 2;\n\n for (let i = 0; i < maxRetries; i++) {\n facilitatorBalance = await publicClient.readContract({\n address: networkConfig.usdc,\n abi: usdcErc3009Abi,\n functionName: \"balanceOf\",\n args: [facilitatorAccount.address]\n }) as bigint;\n\n if (facilitatorBalance >= amountBigInt) break;\n\n console.log(`[CCTP] Balance lag detected. Retrying ${i + 1}/${maxRetries}... (Has: ${facilitatorBalance}, Needs: ${amountBigInt})`);\n await new Promise(resolve => setTimeout(resolve, 3000)); // Wait 3s\n }\n\n if (facilitatorBalance < amountBigInt) {\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: `Insufficient facilitator balance after retries. Has: ${facilitatorBalance}, Needs: ${amountBigInt}`\n };\n }\n\n // Step 2: Approve TokenMessenger\n try {\n const approveHash = await walletClient.writeContract({\n chain: networkConfig.chain,\n address: networkConfig.usdc,\n abi: usdcErc3009Abi,\n functionName: \"approve\",\n args: [networkConfig.tokenMessenger, maxUint256]\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n } catch (e) {\n console.error(\"Approval failed\", e);\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: \"Approval failed\"\n };\n }\n\n // Step 3: DepositForBurn\n const targetRecipient = recipient || crossChainConfig.mintRecipient;\n const mintRecipient = addressToBytes32(targetRecipient);\n\n // Dynamic maxFee calculation (1%, min 200 wei)\n const maxFee = amountBigInt > BigInt(100)\n ? BigInt(Math.floor(Math.max(Number(amountBigInt) / 100, 200)))\n : BigInt(200);\n\n let burnHash: `0x${string}`;\n try {\n burnHash = await walletClient.writeContract({\n chain: networkConfig.chain,\n address: networkConfig.tokenMessenger,\n abi: tokenMessengerAbi,\n functionName: \"depositForBurn\",\n args: [\n amountBigInt - fee, // Deduct 0.02 USDC Fee\n crossChainConfig.destinationDomain,\n mintRecipient,\n networkConfig.usdc,\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as `0x${string}`,\n maxFee,\n 1000 // minFinalityThreshold\n ]\n });\n\n const burnReceipt = await publicClient.waitForTransactionReceipt({ hash: burnHash });\n if (burnReceipt.status !== \"success\") throw new Error(\"Burn execution failed\");\n\n } catch (e) {\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: e instanceof Error ? e.message : \"Burn failed\"\n };\n }\n\n // Step 4: Wait for Attestation\n let attestationResponse;\n try {\n attestationResponse = await createRetrieveAttestation(\n burnHash,\n networkConfig.domain.toString(),\n 120000 // 2 min timeout\n );\n } catch (e) {\n console.warn(\"Attestation timeout\", e);\n return {\n success: true, // Functionally a \"pending\" state \n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n errorReason: \"Attestation timeout. Funds burned but not minted.\"\n };\n }\n\n if (!attestationResponse) {\n return {\n success: false,\n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n errorReason: \"Attestation failed to retireve\"\n };\n }\n\n\n // Step 5: Mint (receiveMessage) on Destination Chain\n let mintHash: `0x${string}` | undefined;\n try {\n const destNetworkConfig = FACILITATOR_NETWORKS[crossChainConfig.destinationChain as FacilitatorChainKey];\n if (!destNetworkConfig) throw new Error(`Unsupported destination chain: ${crossChainConfig.destinationChain}`);\n\n const destWalletClient = createWalletClient({\n account: facilitatorAccount,\n chain: destNetworkConfig.chain,\n transport: http(destNetworkConfig.rpcUrl)\n });\n\n const destPublicClient = createPublicClient({\n chain: destNetworkConfig.chain,\n transport: http(destNetworkConfig.rpcUrl)\n });\n\n console.log(`[CCTP] Minting on ${crossChainConfig.destinationChain}...`);\n\n mintHash = await destWalletClient.writeContract({\n chain: destNetworkConfig.chain,\n address: destNetworkConfig.messageTransmitter,\n abi: messageTransmitterAbi,\n functionName: \"receiveMessage\",\n args: [\n attestationResponse.message.startsWith(\"0x\")\n ? attestationResponse.message as `0x${string}`\n : `0x${attestationResponse.message}` as `0x${string}`,\n attestationResponse.attestation.startsWith(\"0x\")\n ? attestationResponse.attestation as `0x${string}`\n : `0x${attestationResponse.attestation}` as `0x${string}`\n ]\n });\n\n console.log(`[CCTP] Mint tx sent: ${mintHash}`);\n await destPublicClient.waitForTransactionReceipt({ hash: mintHash });\n console.log(`[CCTP] Mint confirmed!`);\n\n } catch (e) {\n console.error(\"Mint failed\", e);\n return {\n success: true,\n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n errorReason: \"Mint execution failed (Gas error on Dest?)\"\n };\n }\n\n return {\n success: true,\n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n mintTransactionHash: mintHash,\n payer: payerAddress,\n fee: fee.toString(),\n netAmount: amountBigInt.toString(),\n attestation: {\n message: attestationResponse.message,\n attestation: attestationResponse.attestation\n }\n };\n}\n","import { OpenAPI, OneClickService, QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript';\nimport { NETWORKS } from \"@/constants/chainsInformation\";\nimport { ChainKey } from \"@/types/chain\";\nimport { SettleResponse, FacilitatorPaymentPayload } from \"@/services/types\";\nimport { BridgeStrategy, BridgeContext } from \"./types\";\nimport { StellarService } from \"./StellarService\";\nimport { PlatformFees, DUMMY_EVM_ADDRESS, DUMMY_STELLAR_ADDRESS, calculateFee } from \"@/constants/facilitator\";\n\n// Initialize API\nOpenAPI.BASE = 'https://1click.chaindefuser.com';\n// OpenAPI.TOKEN = process.env.ONE_CLICK_JWT; // Optional if not needed for public quotes\n\nexport class NearStrategy implements BridgeStrategy {\n name = \"NearIntents\";\n\n canHandle(context: BridgeContext): boolean {\n const { sourceChain, destChain } = context;\n // Basic check: Near support on both (Removed source===dest check to allow swaps)\n\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) return false;\n\n const sourceNear = sourceConfig.crossChainInformation.nearIntentInformation?.support;\n const destNear = destConfig.crossChainInformation.nearIntentInformation?.support;\n\n return !!(sourceNear && destNear);\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { sourceChain, destChain, amount, recipient, destToken, sourceToken, senderAddress, depositTxHash, paymentPayload } = context;\n\n // 0. Handle Stellar Source (Push)\n if (sourceChain === \"Stellar\" && paymentPayload?.signedXDR) {\n const signedXDR = paymentPayload.signedXDR;\n\n console.log(\"[NearStrategy] Submitting Stellar User -> Facilitator TX...\");\n\n try {\n const stellarService = new StellarService();\n const result = await stellarService.submitXdr(signedXDR);\n const pullHash = result.hash;\n console.log(\"[NearStrategy] Pull Success (Stellar):\", pullHash);\n\n return {\n success: true,\n transactionHash: pullHash,\n data: {\n completed: true,\n message: \"Stellar Transaction Submitted. Bridge in progress.\"\n }\n };\n } catch (e: any) {\n console.error(\"Stellar Submit Error\", e);\n return { success: false, errorReason: \"Stellar Submit Failed: \" + (e.message || \"Unknown\") };\n }\n }\n\n // 1. Verify Deposit if Hash Provided\n if (depositTxHash) {\n console.log(`[NearStrategy] Verifying deposit hash: ${depositTxHash}`);\n\n // Stellar Verification\n if (sourceChain === \"Stellar\") {\n try {\n const { StellarService } = await import(\"./StellarService\");\n const stellarService = new StellarService();\n // We need to fetch the tx\n // StellarService doesn't have `getTransaction` yet, only submit.\n // Need to check if StellarService has server access (it does, public prop).\n const tx = await stellarService.server.transactions().transaction(depositTxHash).call();\n\n if (tx.successful) {\n // Fetch operations to find the payment destination (deposit address)\n const operations = await stellarService.server.operations().forTransaction(depositTxHash).call();\n const paymentOp = operations.records.find((op: any) => op.type === 'payment' || op.type === 'path_payment_strict_send' || op.type === 'path_payment_strict_receive');\n\n let depositAddress = \"\";\n let memo = \"\";\n\n if (paymentOp) {\n // @ts-ignore\n depositAddress = paymentOp.to || paymentOp.funder || \"\"; // 'to' is standard for payment\n }\n\n if (tx.memo_type === 'text' || tx.memo_type === 'id') {\n memo = tx.memo || \"\";\n }\n\n if (depositAddress) {\n console.log(`[NearStrategy] Submitting deposit to 1-Click: ${depositTxHash} -> ${depositAddress} (Memo: ${memo})`);\n try {\n await OneClickService.submitDepositTx({\n txHash: depositTxHash,\n depositAddress: depositAddress,\n memo: memo || undefined\n });\n console.log(\"[NearStrategy] Deposit submitted successfully.\");\n } catch (e: any) {\n console.error(\"[NearStrategy] Failed to submit deposit to 1-Click:\", e.message);\n // We don't fail the whole verification if this fails, but it's risky. \n // Ideally we should retry or fail. For now log error.\n }\n } else {\n console.error(\"[NearStrategy] Could not determine deposit address from Stellar operations.\");\n }\n\n return {\n success: true,\n transactionHash: depositTxHash,\n netAmount: amount,\n data: { completed: true }\n };\n } else {\n return { success: false, errorReason: \"Stellar Transaction Failed\" };\n }\n } catch (e: any) {\n console.error(\"Stellar Verification Error\", e);\n return { success: false, errorReason: `Stellar Verification Failed: ${e.message}` };\n }\n }\n\n // We need RPC to verify. Using FACILITATOR_NETWORKS for convenience as it has clean RPCs\n const { createPublicClient, http } = await import(\"viem\");\n const { FACILITATOR_NETWORKS } = await import(\"@/constants/facilitator\");\n\n const networkConfig = FACILITATOR_NETWORKS[sourceChain];\n if (!networkConfig) {\n return { success: false, errorReason: `Unsupported source chain for verification: ${sourceChain}` };\n }\n\n const publicClient = createPublicClient({\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n\n try {\n console.log(`[NearStrategy] Waiting for receipt...`);\n // @ts-ignore\n const receipt = await publicClient.waitForTransactionReceipt({ hash: depositTxHash as `0x${string}` });\n console.log(`[NearStrategy] Receipt found. Status: ${receipt.status}`);\n\n if (receipt.status === \"success\") {\n\n // Get Transaction to find 'to' address\n const tx = await publicClient.getTransaction({ hash: depositTxHash as `0x${string}` });\n const depositAddress = tx.to;\n\n if (depositAddress) {\n console.log(`[NearStrategy] Submitting deposit to 1-Click: ${depositTxHash} -> ${depositAddress}`);\n try {\n await OneClickService.submitDepositTx({\n txHash: depositTxHash,\n depositAddress: depositAddress\n });\n console.log(\"[NearStrategy] Deposit submitted successfully.\");\n } catch (e: any) {\n console.error(\"[NearStrategy] Failed to submit deposit to 1-Click:\", e.message);\n }\n }\n\n return {\n success: true,\n transactionHash: depositTxHash,\n netAmount: amount, // rough estimate or we can re-quote if needed\n data: {\n // Info for UI\n completed: true\n }\n };\n } else {\n console.error(`[NearStrategy] Transaction failed. Status: ${receipt.status}`);\n return { success: false, errorReason: `Transaction Reverted on-chain (Status: ${receipt.status})` };\n }\n } catch (e: any) {\n console.error(`[NearStrategy] Verification Error:`, e);\n return { success: false, errorReason: `Verification Error: ${e.message}` };\n }\n }\n\n // 2. No Hash -> Get Quote & Prompt Deposit\n try {\n const quoteResult = await getNearQuote(\n sourceChain,\n destChain,\n amount,\n destToken,\n sourceToken,\n recipient,\n senderAddress // refund address\n );\n\n // Return success with the deposit address. \n return {\n success: true,\n transactionHash: \"PENDING_USER_DEPOSIT\",\n netAmount: quoteResult.amountAtomicNet,\n data: {\n depositAddress: quoteResult.depositAddress,\n amountToDeposit: quoteResult.amountAtomicNet,\n sourceToken: sourceToken || \"USDC\",\n memo: (quoteResult.quote.quote as any).depositMemo || (quoteResult.quote.quote as any).memo\n }\n } as any; // Casting as any to avoid strict type issues if SettleResponse doesn't have `data` yet\n\n } catch (e: any) {\n return { success: false, errorReason: e.message };\n }\n }\n}\n\nexport async function getNearQuote(\n sourceChain: ChainKey,\n destChain: ChainKey,\n amount: string,\n destToken?: string,\n sourceToken?: string,\n recipient?: string,\n senderAddress?: string,\n options?: { dry?: boolean }\n) {\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) {\n throw new Error(\"Invalid chain configuration\");\n }\n\n const sourceAssetInfo = sourceConfig.crossChainInformation.nearIntentInformation?.assetsId.find(\n (a) => a.name === (sourceToken || \"USDC\")\n ) || sourceConfig.crossChainInformation.nearIntentInformation?.assetsId[0];\n\n const destAssetInfo = destConfig.crossChainInformation.nearIntentInformation?.assetsId.find(\n (a) => a.name === (destToken || \"USDC\")\n ) || destConfig.crossChainInformation.nearIntentInformation?.assetsId[0];\n\n const sourceAsset = sourceAssetInfo?.assetId;\n const destAsset = destAssetInfo?.assetId;\n\n if (!sourceAsset || !destAsset) {\n throw new Error(\"Near Intents not supported for these assets\");\n }\n\n const decimals = sourceAssetInfo?.decimals || (sourceChain === \"Stellar\" ? 7 : 6);\n const amountAtomicTotal = Math.floor(parseFloat(amount) * Math.pow(10, decimals));\n const isDev = process.env.NEXT_PUBLIC_ENVIROMENT === \"development\" || process.env.NODE_ENV === \"development\";\n // Fee is hardcoded here, should be dynamic or 0.02 as per previous logic\n const feeValue = isDev ? 0 : 0.02;\n\n const feeUnits = Math.floor(feeValue * Math.pow(10, decimals));\n const amountAtomicNet = (amountAtomicTotal - feeUnits).toString();\n\n if (BigInt(amountAtomicNet) <= 0) {\n throw new Error(\"Amount too small to cover fees\");\n }\n\n // Recipient on destination\n if (!recipient) {\n throw new Error(\"Recipient address is required for NEAR Quote\");\n }\n\n // Refund address on source (sender)\n const refundAddress = senderAddress || recipient;\n\n console.log(`[NearService] Requesting Quote: ${sourceChain} -> ${destChain}`, JSON.stringify({ amount, sourceAsset, destAsset, options }, null, 2));\n\n const quoteRequest: QuoteRequest = {\n dry: options?.dry || false,\n swapType: QuoteRequest.swapType.EXACT_INPUT,\n slippageTolerance: 100,\n originAsset: sourceAsset as string,\n depositType: QuoteRequest.depositType.ORIGIN_CHAIN,\n depositMode: sourceChain === \"Stellar\" ? QuoteRequest.depositMode.MEMO : undefined,\n destinationAsset: destAsset as string,\n amount: amountAtomicNet,\n refundTo: refundAddress,\n refundType: QuoteRequest.refundType.ORIGIN_CHAIN,\n recipient: recipient,\n recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,\n deadline: new Date(Date.now() + 3 * 60 * 1000).toISOString(),\n referral: \"1llet\",\n quoteWaitingTimeMs: 10000,\n };\n\n console.log(`[NearService] Final QuoteRequest:`, JSON.stringify(quoteRequest, null, 2));\n\n const quote = await OneClickService.getQuote(quoteRequest);\n\n if (!options?.dry && !quote.quote?.depositAddress) {\n throw new Error(\"No deposit address returned from 1-Click Quote\");\n }\n\n return {\n quote,\n depositAddress: quote.quote?.depositAddress || \"\",\n amountAtomicTotal: BigInt(amountAtomicTotal),\n amountAtomicNet\n };\n}\n\nexport async function getNearSimulation(\n sourceChain: ChainKey,\n destChain: ChainKey,\n amount: string,\n destToken?: string,\n sourceToken?: string\n) {\n console.log(\">>> [Bridge Quote] Simulation Request:\", { sourceChain, destChain, amount, destToken, sourceToken });\n\n if (!amount || isNaN(parseFloat(amount))) {\n throw new Error(\"Invalid amount\");\n }\n\n const amountNum = parseFloat(amount);\n const isDev = process.env.NEXT_PUBLIC_ENVIROMENT === \"development\" || process.env.NODE_ENV === \"development\";\n // User logic: const FEE = IS_DEV ? PlatformFess.DEV : PlatformFess.EVM_TO_OTHER\n const usedFee = isDev ? PlatformFees.DEV : PlatformFees.EVM_TO_OTHER;\n\n // Hardcoded min amount check as per snippet\n const MIN_AMOUNT = usedFee;\n\n // Determine decimals from config to ensure precision (e.g. Stellar USDC is 7)\n const sourceConfig = NETWORKS[sourceChain];\n const sourceAssetInfo = sourceConfig?.crossChainInformation?.nearIntentInformation?.assetsId.find(\n (a) => a.name === (sourceToken || \"USDC\")\n ) || sourceConfig?.crossChainInformation?.nearIntentInformation?.assetsId[0];\n const decimals = sourceAssetInfo?.decimals || (sourceChain === \"Stellar\" ? 7 : 6);\n\n const netAmountBridged = (amountNum - usedFee).toFixed(decimals);\n\n if (parseFloat(netAmountBridged) <= 0) {\n return {\n success: false,\n error: `Insufficient amount (${amountNum}) to cover fee (${usedFee})`,\n minAmount: MIN_AMOUNT\n };\n }\n\n const sender = sourceChain === \"Stellar\" ? DUMMY_STELLAR_ADDRESS : DUMMY_EVM_ADDRESS;\n const recipient = destChain === \"Stellar\" ? DUMMY_STELLAR_ADDRESS : DUMMY_EVM_ADDRESS;\n\n try {\n const quoteResult = await getNearQuote(\n sourceChain,\n destChain,\n amount,\n destToken,\n sourceToken,\n recipient,\n sender,\n { dry: true }\n );\n\n // console.log(\">>> [Bridge Quote] API Response:\", JSON.stringify(quoteResult.quote, null, 2));\n\n return {\n success: true,\n amountSent: amountNum,\n protocolFee: usedFee,\n netAmountBridged: parseFloat(netAmountBridged),\n // @ts-ignore - access safe property\n estimatedReceived: quoteResult.quote?.quote?.amountOutFormatted || \"0\",\n minAmount: MIN_AMOUNT\n };\n\n } catch (error: any) {\n console.error(\">>> [Bridge Quote] Error:\", error);\n return {\n success: false,\n error: error.message || \"Unknown quote error\",\n minAmount: MIN_AMOUNT\n };\n }\n}\n","import { BridgeStrategy, BridgeContext } from \"./types\";\nimport { SettleResponse } from \"@/services/types\";\nimport { NETWORKS } from \"@/constants/chainsInformation\";\n\n// Stargate API Base URL\nconst STARGATE_API_URL = \"https://stargate.finance/api/v1/quotes\";\n\nexport class StargateStrategy implements BridgeStrategy {\n name = \"StargateFinance\";\n\n canHandle(context: BridgeContext): boolean {\n const { sourceChain, destChain, sourceToken } = context;\n\n // Override: Force Stargate for Base -> Avalanche (USDC)\n if (sourceChain === \"Base\" && destChain === \"Avalanche\" && sourceToken === \"USDC\") {\n return true;\n }\n\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) return false;\n\n // Check Chain Support\n const sourceStargate = sourceConfig.crossChainInformation.stargateInformation?.support;\n const destStargate = destConfig.crossChainInformation.stargateInformation?.support;\n\n if (!sourceStargate || !destStargate) return false;\n\n // Check Token Support\n // Find asset config for the token\n const sourceAsset = sourceConfig.assets.find(a => a.name === (sourceToken || \"USDC\"));\n const destAsset = destConfig.assets.find(a => a.name === (context.destToken || \"USDC\"));\n\n // Both assets must explicitly support Stargate\n return !!(sourceAsset?.supportsStargate && destAsset?.supportsStargate);\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { sourceChain, destChain, amount, recipient, destToken, sourceToken, senderAddress } = context;\n\n console.log(`[StargateStrategy] Executing ${sourceChain} -> ${destChain} for ${amount} ${sourceToken}`);\n\n // Get configurations\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) {\n return { success: false, errorReason: \"Invalid chain configuration\" };\n }\n\n const sourceAsset = sourceConfig.assets.find(a => a.name === (sourceToken || \"USDC\"));\n const destAsset = destConfig.assets.find(a => a.name === (destToken || \"USDC\"));\n\n if (!sourceAsset || !destAsset) {\n return { success: false, errorReason: \"Invalid asset configuration\" };\n }\n\n const decimals = sourceAsset.decimals;\n const amountAtomic = Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\n\n // 0.5% slippage default\n const minAmountAtomic = Math.floor(parseFloat(amountAtomic) * 0.995).toString();\n\n const srcChainKey = sourceChain.toLowerCase();\n const dstChainKey = destChain.toLowerCase();\n\n const url = new URL(STARGATE_API_URL);\n url.searchParams.append(\"srcToken\", sourceAsset.address as string);\n url.searchParams.append(\"dstToken\", destAsset.address as string);\n url.searchParams.append(\"srcAddress\", senderAddress || recipient);\n url.searchParams.append(\"dstAddress\", recipient);\n url.searchParams.append(\"srcChainKey\", srcChainKey);\n url.searchParams.append(\"dstChainKey\", dstChainKey);\n url.searchParams.append(\"srcAmount\", amountAtomic);\n url.searchParams.append(\"dstAmountMin\", minAmountAtomic);\n\n console.log(`[StargateStrategy] Fetching quote from: ${url.toString()}`);\n\n try {\n const response = await fetch(url.toString());\n const data = await response.json();\n\n if (!response.ok) {\n console.error(\"[StargateStrategy] API Error:\", data);\n return { success: false, errorReason: `Stargate API Error: ${JSON.stringify(data)}` };\n }\n\n console.log(\"[StargateStrategy] Quote received:\", JSON.stringify(data, null, 2));\n\n // Find a valid quote. Prefer 'taxi' (immediate), then 'bus'.\n const quotes = data.quotes || [];\n if (quotes.length === 0) {\n return { success: false, errorReason: \"No routes found from Stargate API\" };\n }\n\n const selectedQuote = quotes.find((q: any) => q.route === 'stargate/v2/taxi') || quotes[0];\n console.log(`[StargateStrategy] Selected Route: ${selectedQuote.route}`);\n\n // Extract 'bridge' step\n const bridgeStep = selectedQuote.steps.find((s: any) => s.type === 'bridge');\n if (!bridgeStep || !bridgeStep.transaction) {\n return { success: false, errorReason: \"No bridge transaction found in quote\" };\n }\n\n const txData = bridgeStep.transaction;\n const approvalTx = selectedQuote.steps.find((s: any) => s.type === 'approve')?.transaction;\n\n return {\n success: true,\n transactionHash: \"PENDING_USER_SIGNATURE\",\n netAmount: amount,\n estimatedReceived: selectedQuote.dstAmount,\n data: {\n strategy: \"Stargate\",\n quote: selectedQuote,\n // Normalized Transaction Data for execution\n txTarget: txData.to,\n txData: txData.data,\n txValue: txData.value,\n // Metadata\n approvalRequired: approvalTx ? {\n target: approvalTx.to,\n data: approvalTx.data,\n value: approvalTx.value\n } : null\n }\n };\n\n } catch (e: any) {\n console.error(\"[StargateStrategy] Execution Error:\", e);\n return { success: false, errorReason: e.message };\n }\n }\n}\n\nexport async function getStargateSimulation(\n sourceChain: string,\n destChain: string,\n amount: string,\n recipient: string\n) {\n if (sourceChain === \"Base\" && destChain === \"Avalanche\") {\n // Proceed\n } else {\n // Simple validation or just let API fail?\n // Since we call this explicitly, we assume caller verified.\n }\n\n const { TransferManager } = await import(\"./TransferManager\");\n // We can reuse the class logic but better to just use static or duplicate\n // for separate Simulation vs Execution logic.\n // Actually, execute() returns quote data.\n\n // Let's implement standalone fetch.\n const sourceConfig = NETWORKS[sourceChain as any];\n const destConfig = NETWORKS[destChain as any];\n\n if (!sourceConfig || !destConfig) {\n return { success: false, error: \"Invalid Simulation Config\" };\n }\n\n const sourceAsset = sourceConfig.assets.find(a => a.name === \"USDC\");\n const destAsset = destConfig.assets.find(a => a.name === \"USDC\");\n\n if (!sourceAsset || !destAsset) {\n return { success: false, error: \"USDC not found on chains\" };\n }\n\n const decimals = sourceAsset.decimals;\n const amountAtomic = Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\n const minAmountAtomic = Math.floor(parseFloat(amountAtomic) * 0.995).toString();\n\n const srcChainKey = sourceChain.toLowerCase();\n const dstChainKey = destChain.toLowerCase();\n\n const url = new URL(STARGATE_API_URL);\n url.searchParams.append(\"srcToken\", sourceAsset.address as string);\n url.searchParams.append(\"dstToken\", destAsset.address as string);\n url.searchParams.append(\"srcAddress\", recipient || \"0x000000000000000000000000000000000000dEaD\");\n url.searchParams.append(\"dstAddress\", recipient || \"0x000000000000000000000000000000000000dEaD\");\n url.searchParams.append(\"srcChainKey\", srcChainKey);\n url.searchParams.append(\"dstChainKey\", dstChainKey);\n url.searchParams.append(\"srcAmount\", amountAtomic);\n url.searchParams.append(\"dstAmountMin\", minAmountAtomic);\n\n try {\n const response = await fetch(url.toString());\n const data = await response.json();\n\n if (!response.ok) {\n return { success: false, error: \"Stargate API Error\" };\n }\n\n const quotes = data.quotes || [];\n if (quotes.length === 0) return { success: false, error: \"No Stargate routes found\" };\n\n const selectedQuote = quotes.find((q: any) => q.route === 'stargate/v2/taxi') || quotes[0];\n\n // Stargate doesn't charge \"Protocol Fee\" in the same way (it's gas/slippage). \n // We can show Fee = (SrcAmount - DstAmount)\n const srcAmt = BigInt(selectedQuote.srcAmount);\n const dstAmt = BigInt(selectedQuote.dstAmount);\n const fees = srcAmt - dstAmt;\n const feeFormatted = (Number(fees) / Math.pow(10, decimals)).toFixed(6);\n\n const estimatedReceived = (Number(dstAmt) / Math.pow(10, destAsset.decimals)).toFixed(6);\n\n return {\n success: true,\n amountSent: parseFloat(amount),\n protocolFee: feeFormatted, // Fee in USDC\n netAmountBridged: parseFloat(amount), // Technically amount sent\n estimatedReceived: estimatedReceived,\n minAmount: \"0\"\n };\n } catch (e: any) {\n return { success: false, error: e.message };\n }\n}\n","import { BridgeStrategy, BridgeContext, SettleResponse } from \"./types\";\nimport { encodeFunctionData, parseUnits, getAddress, createPublicClient, createWalletClient, http, Hash, toHex, padHex } from \"viem\";\nimport { mainnet } from \"viem/chains\";\nimport { NETWORKS } from \"@/constants/chainsInformation\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { erc20Abi } from \"viem\";\n\n// Official Stacks xReserve Bridge Address on Ethereum (Mainnet)\n// Source: https://docs.stacks.co/learn/bridging/usdcx/contracts\nexport const STACKS_BRIDGE_ADDRESS_ETH = \"0x8888888199b2Df864bf678259607d6D5EBb4e3Ce\" as const;\n\n// Verified ABI for Stacks Bridge Deposit (depositToRemote)\nconst stacksBridgeAbi = [\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n { \"internalType\": \"uint32\", \"name\": \"remoteDomain\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"remoteRecipient\", \"type\": \"bytes32\" },\n { \"internalType\": \"address\", \"name\": \"localToken\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"maxFee\", \"type\": \"uint256\" }\n ],\n \"name\": \"depositToRemote\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const;\n\nexport class StacksStrategy implements BridgeStrategy {\n name = \"Stacks\";\n\n canHandle(context: BridgeContext): boolean {\n // Can handle ETH -> Stacks\n return context.sourceChain === \"Ethereum\" && context.destChain === \"Stacks\";\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { amount, recipient, facilitatorPrivateKey, sourceChain } = context;\n\n if (sourceChain !== \"Ethereum\") {\n return { success: false, errorReason: \"Stacks Strategy only supports financing from Ethereum\" };\n }\n\n if (!facilitatorPrivateKey) {\n return { success: false, errorReason: \"Private Key required for Stacks Bridge execution\" };\n }\n\n const networkConfig = NETWORKS[sourceChain];\n if (!networkConfig || !networkConfig.evm) {\n return { success: false, errorReason: `Unsupported chain or missing EVM config: ${sourceChain}` };\n }\n\n try {\n const account = privateKeyToAccount(facilitatorPrivateKey as `0x${string}`);\n const client = createWalletClient({\n account,\n chain: networkConfig.evm.chain,\n transport: http(networkConfig.evm.rpcUrl as string)\n });\n const publicClient = createPublicClient({\n chain: networkConfig.evm.chain,\n transport: http(networkConfig.evm.rpcUrl as string)\n });\n\n // 1. Approve USDC\n // Official USDC Address on Ethereum\n const usdcAddress = getAddress(\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\");\n const amountBigInt = parseUnits(amount, 6); // USDC 6 decimals\n\n // Check allowance\n const allowance = await publicClient.readContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [account.address, STACKS_BRIDGE_ADDRESS_ETH]\n });\n\n if (allowance < amountBigInt) {\n console.log(\"[Stacks] Approving bridge...\");\n const approveHash = await client.writeContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [STACKS_BRIDGE_ADDRESS_ETH, amountBigInt],\n chain: networkConfig.evm.chain\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n console.log(\"[Stacks] Approved.\");\n }\n\n // 2. Call Deposit (depositToRemote)\n // Stacks Remote Domain usually defaults to a specific ID in Hyperlane/Circle registry.\n // CAUTION: Ensure this ID is correct for Mainnet. Common ID for Stacks might be needed.\n // Using placeholder logic or standard domain assumption.\n const REMOTE_DOMAIN_STACKS = 10003; // Placeholder/Default\n\n // Format Recipient to bytes32\n // Note: Stacks addresses are typically alphanumeric (base58check). \n // The bridge likely expects the decoded hash or the bytes32 representation.\n // If recipient is NOT hex, we might need conversion. \n // For this implementation, assuming recipient is passed in a format compatible with bytes32 or hex.\n let recipientBytes32: `0x${string}`;\n if (recipient.startsWith(\"0x\")) {\n recipientBytes32 = padHex(recipient as `0x${string}`, { size: 32 });\n } else {\n // Determine if we need to decode or just hex encoding of the string\n // If it's a standard Stacks Address (SP...), it cannot simply be hexed.\n // It needs base58 decoding. Accessing a library or assuming Hex for now.\n // Fallback: Use toHex(string) ? No, that's ascii to hex.\n // We'll trust the input is valid or try to pad.\n // Assuming the caller resolved the address to a hex compatible format?\n // Or simply `toHex` of the string for now if no lib available.\n // WARNING: This assumes valid hex input or tries to convert.\n try {\n recipientBytes32 = padHex(toHex(recipient), { size: 32 });\n } catch (e) {\n // If simple conversion fails, maybe it's already a clean string?\n // Just zero-padding might not work for base58.\n throw new Error(\"Invalid Stacks Recipient Format. Must be Hex or convertible.\");\n }\n }\n\n console.log(`[Stacks] Depositing ${amount} USDC to ${recipient} (Domain ${REMOTE_DOMAIN_STACKS})...`);\n\n const hash = await client.writeContract({\n address: STACKS_BRIDGE_ADDRESS_ETH,\n abi: stacksBridgeAbi,\n functionName: \"depositToRemote\",\n args: [\n amountBigInt,\n REMOTE_DOMAIN_STACKS,\n recipientBytes32,\n usdcAddress,\n 0n // maxFee (0 for now, or estimated)\n ],\n chain: networkConfig.evm.chain\n });\n\n console.log(`[Stacks] Deposit Tx: ${hash}`);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n\n if (receipt.status === \"success\") {\n return {\n success: true,\n transactionHash: hash,\n netAmount: amountBigInt.toString(),\n };\n } else {\n return {\n success: false,\n transactionHash: hash,\n errorReason: \"Stacks Deposit Transaction Reverted\"\n };\n }\n\n } catch (error) {\n return {\n success: false,\n errorReason: error instanceof Error ? error.message : \"Using Stacks Bridge failed\"\n };\n }\n }\n}\n","import { AccountAbstraction } from \"../AccountAbstraction.js\";\nimport { UserOperation } from \"../types\";\nimport { parseUnits, formatUnits } from \"viem\";\n\nexport interface MultiHopStep {\n aa: AccountAbstraction;\n buildUserOp: () => Promise<UserOperation>; // Function to build the UserOp\n waitCondition?: () => Promise<boolean>; // Polling condition (e.g., balance check)\n description: string;\n}\n\nexport class RouterService {\n\n /**\n * Orchestrates a Multi-Hop transfer by signing ALL UserOps upfront (Reverse Order),\n * and then executing them sequentially (Forward Order) with polling support.\n * \n * @param steps Array of MultiHopStep ordered by execution (Source -> Intermediate -> Dest)\n * @param onLog Optional callback for logging progress\n */\n async executeMultiHop(\n steps: MultiHopStep[],\n onLog: (msg: string) => void = console.log\n ) {\n onLog(\"[Router] Orchestrating Multi-Hop Sequence...\");\n\n const signedOps: { stepIndex: number, signedOp: UserOperation }[] = [];\n\n // 1. PHASE 1: PREPARATION & REVERSE SIGNING\n // We iterate backwards to sign the last step first (e.g. Step 2, then Step 1)\n onLog(\"[Router] Phase 1: Preparation & Upfront Signing (Reverse Order)...\");\n\n for (let i = steps.length - 1; i >= 0; i--) {\n const step = steps[i];\n onLog(`[Router] Preparing Step ${i + 1}: ${step.description}...`);\n\n try {\n // Build\n const userOp = await step.buildUserOp();\n\n // Sign\n onLog(`[Router] Please sign Step ${i + 1} (${step.description})...`);\n const signedOp = await step.aa.signUserOperation(userOp);\n\n // Store\n signedOps.unshift({ stepIndex: i, signedOp }); // Add to front to maintain 0,1 order in array\n onLog(`[Router] Step ${i + 1} Signed Successfully.`);\n } catch (err: any) {\n onLog(`[Router] Error preparing Step ${i + 1}: ${err.message}`);\n throw err;\n }\n }\n\n // 2. PHASE 2: SEQUENTIAL EXECUTION\n onLog(\"[Router] Phase 2: Sequential Execution (Forward Order)...\");\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const signedOp = signedOps[i].signedOp;\n\n // Wait Condition (if exists, checking BEFORE execution? No, usually AFTER previous step)\n // Actually, waitCondition usually implies \"Wait for funds to arrive BEFORE executing this step\"\n // EXCEPT for the first step.\n\n if (step.waitCondition) {\n onLog(`[Router] Step ${i + 1} requires waiting (e.g. for funds)...`);\n const success = await this.pollCondition(step.waitCondition, onLog);\n if (!success) throw new Error(`Timeout waiting for condition at Step ${i + 1}`);\n }\n\n onLog(`[Router] Executing Step ${i + 1}...`);\n try {\n const hash = await step.aa.sendUserOperation(signedOp);\n onLog(`[Router] Step ${i + 1} Sent! Hash: ${hash}`);\n\n // Wait for receipt to ensure step succeeded before proceeding\n onLog(`[Router] Waiting for Step ${i + 1} confirmation...`);\n const receipt = await step.aa.waitForUserOperation(hash);\n\n if (!receipt.success) {\n throw new Error(`Step ${i + 1} Failed on-chain!`);\n }\n onLog(`[Router] Step ${i + 1} Confirmed.`);\n\n } catch (err: any) {\n onLog(`[Router] Execution Failed at Step ${i + 1}: ${err.message}`);\n throw err;\n }\n }\n\n onLog(\"[Router] Multi-Hop Sequence Completed Successfully! 🚀\");\n return true;\n }\n\n private async pollCondition(condition: () => Promise<boolean>, onLog: (msg: string) => void): Promise<boolean> {\n const timeout = 60000 * 10; // 10 mins\n const interval = 5000;\n let elapsed = 0;\n\n while (elapsed < timeout) {\n try {\n const passed = await condition();\n if (passed) return true;\n } catch (e: any) {\n // Ignore transient RPC errors\n onLog(`[Router] Polling check failed (retrying): ${e.message}`);\n }\n\n await new Promise(r => setTimeout(r, interval));\n elapsed += interval;\n if (elapsed % 20000 === 0) onLog(`[Router] Still waiting... (${Math.floor(elapsed / 1000)}s)`);\n }\n return false;\n }\n}\n","import { createPublicClient, http, encodeFunctionData, parseAbi, Address, type Hex } from \"viem\";\nimport { base } from \"viem/chains\";\n\n// Constants for Base Mainnet\nconst UNISWAP_V3_ROUTER = \"0x2626664c2603336E57B271c5C0b26F421741e481\"; // SwapRouter02\nconst UNISWAP_V3_QUOTER = \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\"; // QuoterV2\nconst USDC_ADDRESS = \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\"; // Base USDC\nconst WETH_ADDRESS = \"0x4200000000000000000000000000000000000006\"; // Base WETH\n\n// ABIs\nconst QUOTER_ABI = parseAbi([\n \"function quoteExactOutputSingle((address tokenIn, address tokenOut, uint256 amount, uint24 fee, uint160 sqrtPriceLimitX96) params) external returns (uint256 amountIn, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)\"\n]);\n\nconst ROUTER_ABI = parseAbi([\n \"function exactOutputSingle((address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 amountOut, uint256 amountInMaximum, uint160 sqrtPriceLimitX96) params) external payable returns (uint256 amountIn)\"\n]);\n\nexport class UniswapService {\n private publicClient;\n\n constructor() {\n this.publicClient = createPublicClient({\n chain: base,\n transport: http(\"https://mainnet.base.org\") // Default public RPC\n });\n }\n\n /**\n * Get amount of USDC needed to buy exact amount of ETH\n * @param amountETHWei Amount of ETH (Wei) needed\n */\n async quoteUSDCForETH(amountETHWei: bigint): Promise<bigint> {\n // We want to buy WETH (which is unwrapped to ETH by router or we just keep WETH? \n // Stargate needs NATIVE ETH in msg.value.\n // SwapRouter02 executes swap. If output is WETH, we need to unwrap.\n // OR SwapRouter02 has multicall to unwrapWETH9.\n\n // Simpler: Just swap for WETH.\n // Wait, Stargate needs MSG.VALUE. Smart Account needs to have ETH balance.\n // If we swap to WETH, SA has WETH, not ETH.\n // We need router to unwrap. router.unwrapWETH9(0, recipient).\n\n // For Quoting, we quote USDC -> WETH.\n const poolFee = 500; // 0.05% for USDC/WETH usually? Or 3000 (0.3%)?\n // Base USDC/ETH is likely 0.05% (500) or 0.01% (100). Let's use 500 first.\n\n try {\n const params = {\n tokenIn: USDC_ADDRESS as Address,\n tokenOut: WETH_ADDRESS as Address,\n amount: amountETHWei,\n fee: 500,\n sqrtPriceLimitX96: 0n\n };\n\n const result = await this.publicClient.readContract({\n address: UNISWAP_V3_QUOTER,\n abi: QUOTER_ABI,\n functionName: \"quoteExactOutputSingle\",\n args: [params]\n }) as [bigint, bigint, number, bigint];\n\n const amountIn = result[0];\n // Add 5% slippage/buffer to avoid reverts on small fluctuations\n return amountIn * 105n / 100n;\n } catch (e) {\n console.error(\"Quote failed\", e);\n throw new Error(\"Failed to quote USDC for ETH swap\");\n }\n }\n\n /**\n * Build tx data for swapping USDC -> ETH\n * Uses SwapRouter02.exactOutputSingle + unwrapWETH9\n */\n buildSwapData(recipient: Address, amountOutETH: bigint, maxAmountInUSDC: bigint): Hex {\n // We need to encode a Multicall:\n // 1. exactOutputSingle(USDC -> WETH) -> Router keeps WETH (recipient = 0x0...02 ?) or Router?\n // 2. unwrapWETH9(minAmount, recipient)\n\n // SwapRouter02 standard pattern for \"Swap to ETH\":\n // 1. Swap USDC -> WETH (recipient = Router)\n // 2. UnwrapWETH9 (recipient = User)\n\n const swapParams = {\n tokenIn: USDC_ADDRESS as Address,\n tokenOut: WETH_ADDRESS as Address,\n fee: 500,\n recipient: UNISWAP_V3_ROUTER as Address, // Router must hold WETH to unwrap it\n amountOut: amountOutETH,\n amountInMaximum: maxAmountInUSDC,\n sqrtPriceLimitX96: 0n\n };\n\n // Note: For SwapRouter02, if you want to unwrap, you usually set recipient to 0x000...000 during the swap if processing internally,\n // OR simply set recipient to ROUTER, then call unwrap.\n // But verifying standard Router02 multicall:\n // call[0]: exactOutputSingle(...) recipient = 0x0000..0000 (indicates msg.sender usually? No, in router context usually it means Router holds it)\n // call[1]: unwrapWETH9(0, finalRecipient)\n\n // Let's assume standard SwapRouter02 behavior supports Multicall.\n // We need to encode the function calls.\n\n const swapCalldata = encodeFunctionData({\n abi: ROUTER_ABI,\n functionName: \"exactOutputSingle\",\n args: [swapParams]\n });\n\n const unwrapCalldata = encodeFunctionData({\n abi: parseAbi([\"function unwrapWETH9(uint256 amountMinimum, address recipient) payable\"]),\n functionName: \"unwrapWETH9\",\n args: [amountOutETH, recipient]\n });\n\n const multicallCalldata = encodeFunctionData({\n abi: parseAbi([\"function multicall(bytes[] data) payable returns (bytes[])\"]),\n functionName: \"multicall\",\n args: [[swapCalldata, unwrapCalldata]]\n });\n\n return multicallCalldata;\n }\n\n getRouterAddress(): Address {\n return UNISWAP_V3_ROUTER;\n }\n\n getUSDCAddress(): Address {\n return USDC_ADDRESS;\n }\n}\n\nexport const uniswapService = new UniswapService();\n","import { BridgeStrategy, BridgeContext } from \"./types\";\nimport { CCTPStrategy } from \"./cctp\";\nimport { NearStrategy } from \"./near\";\nimport { StargateStrategy } from \"./stargate\";\nimport { StacksStrategy } from \"./stacks\";\nimport { SettleResponse } from \"@/services/types\";\nimport { RouterService, MultiHopStep } from \"./Router\";\nimport { AccountAbstraction } from \"../AccountAbstraction\";\nimport { parseUnits, formatUnits, encodeFunctionData, erc20Abi, getAddress } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { CHAIN_ID_TO_KEY } from \"../constants/chains\";\nimport { OPTIMISM } from \"../chains/Evm/Optimism\";\nimport { uniswapService } from \"./uniswap\"; // Assuming we have this exported or need to import class\n// We need uniswapService instance. It is exported from index, but let's check import paths.\n// Ideally TransferManager should have access to services.\n\n/*\n * NOTE: For this implementation, we are hardcoding the logic for the specific\n * Base -> Optimism -> Base demonstration as requested.\n * In a future iteration, this should be generalized into a PathFinder service.\n */\n\n// Define Optimism Sepolia config locally as it's missing in SDK exports currently\nconst OP_SEPOLIA_CHAIN_ID = 11155420;\nconst OP_SEPOLIA_CONFIG: any = {\n chain: {\n id: 11155420,\n name: \"Optimism Sepolia\",\n nativeCurrency: { name: \"Ether\", symbol: \"ETH\", decimals: 18 },\n rpcUrls: { default: { http: [\"https://sepolia.optimism.io\"] } },\n testnet: true\n },\n rpcUrl: \"https://sepolia.optimism.io\",\n // bundlerUrl will be constructed dynamically\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xe2584152891E4769025807DEa0cD611F135aDC68\",\n paymasterAddress: OPTIMISM.evm?.paymasterAddress,\n tokens: []\n};\n\n\nexport class TransferManager {\n private strategies: BridgeStrategy[];\n private router: RouterService;\n\n constructor() {\n this.strategies = [\n new CCTPStrategy(),\n new StargateStrategy(),\n new StargateStrategy(),\n new NearStrategy(),\n new StacksStrategy()\n ];\n this.router = new RouterService();\n }\n\n async execute(context: BridgeContext, logCallback?: (msg: string) => void): Promise<SettleResponse> {\n const log = logCallback || console.log;\n\n // 1. Check Same Chain (Direct Transfer)\n if (context.sourceChain === context.destChain && context.sourceToken === context.destToken) {\n log(`[TransferManager] Same Chain detected. Signal Direct Transfer.`);\n return {\n success: true,\n transactionHash: \"DIRECT_TRANSFER_REQUIRED\",\n data: {\n action: \"DIRECT_TRANSFER\",\n amount: context.amount,\n token: context.sourceToken,\n recipient: context.recipient\n }\n };\n }\n\n // 2. CHECK MULTI-HOP DEMO CONDITION (Loopback: Base -> ... -> Base)\n // Or specifically Base -> Optimism -> Base if that's what the user wants.\n // For now, if Source == Base and Dest == Base (which is handled by Same Chain above ?? No, above handles \"Same Chain AND Same Token\")\n // The demo is Base -> Optimism -> Base. The final destination is Base.\n // So sourceChain == destChain.\n // The condition above checks `context.sourceToken === context.destToken` too.\n // In the demo, we are sending USDC to USDC.\n // So `sourceChain === destChain` AND `sourceToken === destToken` triggers Direct Transfer.\n // BUT the user explicitely wants to test the \"Hop\".\n\n // We can allow the user to FORCE multi-hop via a flag in context, or detect a specific route request.\n // The frontend `handleMultiHopTest` sets up a specific test. \n // We can expose a `testMultiHop` method or detect a special \"Intermediate\" param if we want.\n\n // Assuming context might have a special flag or we just expose `orchestrateMultiHopDemo` separately?\n // To keep `execute` clean, I'll check for a flag `forceMultiHop` in context (needs type update) OR\n // just expose `orchestrateMultiHop` on TransferManager for the frontend to call directly.\n // The user said \"SDK determines the route\".\n // If I ask for Base -> Base, it SHOULD just be a transfer.\n // The \"Multi-Hop\" is physically moving funds to another chain and back.\n // That's usually not efficient unless arbitrage.\n\n // Use Case: The user wants to TEST.\n // I will add a method `executeMultiHopDemo` to TransferManager.\n\n const strategies = this.strategies;\n\n // 3. Normal Strategy Routing\n const stargateStrategy = strategies.find(s => s instanceof StargateStrategy);\n if (stargateStrategy && stargateStrategy.canHandle(context)) {\n log(`[TransferManager] Routing to: ${stargateStrategy.name} (Stargate)`);\n return stargateStrategy.execute(context);\n }\n\n const cctpStrategy = strategies.find(s => s instanceof CCTPStrategy);\n if (cctpStrategy && cctpStrategy.canHandle(context)) {\n log(`[TransferManager] Routing to: ${cctpStrategy.name} (CCTP)`);\n return cctpStrategy.execute(context);\n }\n\n const nearStrategy = strategies.find(s => s instanceof NearStrategy);\n if (nearStrategy && nearStrategy.canHandle(context)) {\n log(`[TransferManager] Routing to: ${nearStrategy.name} (Near)`);\n return nearStrategy.execute(context);\n }\n\n return {\n success: false,\n errorReason: `No suitable transfer strategy found for ${context.sourceChain} -> ${context.destChain}`\n };\n }\n\n /**\n * Special method to orchestrate the Base -> Optimism -> Base demo flow\n * entirely within the SDK.\n */\n async executeMultiHopDemo(\n context: BridgeContext,\n sourceAA: AccountAbstraction, // We need the actual AA instance to sign\n logCallback?: (msg: string) => void,\n overrides?: { bundlerUrl?: string }\n ): Promise<boolean> {\n const log = logCallback || console.log;\n log(\"[TransferManager] Calculating Multi-Hop Route...\");\n\n // 1. Determine Network (Mainnet vs Testnet)\n const isTestnet = context.sourceChain === \"Base\" && (sourceAA.getChainId() === 84532 || (context as any).sourceChainId === 84532); // Using heuristics or explicit ID if available\n // Better: check sourceAA chain ID\n const sourceChainId = await sourceAA.getPublicClient().getChainId();\n const isSepolia = sourceChainId === 84532;\n\n const baseUrl = overrides?.bundlerUrl || \"https://bundler.1llet.xyz\";\n\n const interChainName = \"Optimism\";\n let intermediateConfig: any;\n let opUsdc: `0x${string}`;\n\n if (isSepolia) {\n log(`[TransferManager] Detected Testnet (Base Sepolia). Using Optimism Sepolia.`);\n intermediateConfig = {\n tokens: [],\n ...OP_SEPOLIA_CONFIG,\n bundlerUrl: `${baseUrl}/rpc?chain=optimismSepolia`\n };\n // SDK might need a way to get bundler URL. I'll use the default one.\n opUsdc = getAddress(\"0x5fd84259d66Cd46123540766Be93DFE6D43130D7\");\n } else {\n log(`[TransferManager] Detected Mainnet (Base). Using Optimism Mainnet.`);\n intermediateConfig = {\n tokens: [], // Default empty\n ...OPTIMISM.evm,\n bundlerUrl: `${baseUrl}/rpc?chain=optimism`\n };\n if (!intermediateConfig.tokens) intermediateConfig.tokens = []; // Ensure it exists\n opUsdc = getAddress(\"0x0b2C639c533813f4Aa9D7837CAf992c92bdE5162\");\n }\n\n // 2. Setup Intermediate AA (Calculated only for Refund purposes now)\n const intermediateAA = new AccountAbstraction(intermediateConfig);\n await intermediateAA.connect();\n const interAddress = (await intermediateAA.getSmartAccount())!;\n log(`[TransferManager] Refund Address (Intermediate SA): ${interAddress}`);\n\n const stargate = new StargateStrategy();\n const { getNearQuote } = await import(\"./near\"); // Helper import\n const { uniswapService } = await import(\"./uniswap\"); // Helper import\n\n // --- STEP PLANNING (Optimized: Direct Deposit) ---\n\n // 1. Calculate Near Quote (Optimism -> Base) FIRST to get Deposit Address\n // We estimate amount received on Optimism from Step 1 manually (Stargate usually 1:1 minus fee).\n // Let's assume 0.06% fee + gas. Safe estimate: 99%.\n\n const parsedInputAmount = parseUnits(context.amount, 6);\n const estimatedOpAmount = parsedInputAmount * 99n / 100n; // 1% Buffer for Stargate fees\n const humanEstimatedOpAmount = formatUnits(estimatedOpAmount, 6);\n\n log(`[TransferManager] Planning Optimism -> Base (Near) for ~${humanEstimatedOpAmount} USDC...`);\n\n const nearQuote = await getNearQuote(\n \"Optimism\",\n \"Base\",\n humanEstimatedOpAmount,\n \"USDC\",\n \"USDC\",\n context.recipient || context.senderAddress || (await sourceAA.getSmartAccount())!, // Final Recipient on Base\n interAddress // Refund Address on Optimism (Intermediate SA)\n );\n\n if (!nearQuote?.depositAddress) throw new Error(\"Planning Failed (No Near Deposit Address)\");\n log(`[TransferManager] Near Deposit Address: ${nearQuote.depositAddress}`);\n\n // 2. Plan Step 1 (Base -> Optimism -> Near Deposit Address)\n log(\"[TransferManager] Planning Base -> Optimism (Stargate Direct)...\");\n const sgResult = await stargate.execute({\n ...context,\n destChain: \"Optimism\",\n recipient: nearQuote.depositAddress // DIRECTLY to Near\n });\n\n if (!sgResult.success) throw new Error(`Step 1 Planning Failed: ${sgResult.errorReason}`);\n const { txTarget, txData, txValue, approvalRequired } = sgResult.data;\n\n // --- BUILDER (Step 1 Only) ---\n const buildStep1 = async () => {\n const requiredValue = BigInt(txValue || 0);\n let autoSwapTxs: any[] = [];\n\n if (requiredValue > 0n) {\n const nativeBalance = await sourceAA.getBalance(\"0x0000000000000000000000000000000000000000\");\n if (nativeBalance < requiredValue) {\n log(`[TransferManager] Auto-Swap: Need ETH for fee.`);\n const missingETH = (requiredValue * 110n / 100n) - nativeBalance;\n const usdcNeeded = await uniswapService.quoteUSDCForETH(missingETH);\n\n const routerAddress = uniswapService.getRouterAddress();\n if (!routerAddress) throw new Error(\"Uniswap Router not found\");\n\n // Pull Logic\n const tokenAddr = getAddress(context.sourceToken === \"USDC\" ? \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\" : \"0x0\");\n\n const parsedTransferAmount = parseUnits(context.amount, 6);\n const tokenBalance = await sourceAA.getBalance(tokenAddr);\n const totalRequiredUSDC = parsedTransferAmount + usdcNeeded;\n const amountToPull = totalRequiredUSDC > tokenBalance ? totalRequiredUSDC - tokenBalance : 0n;\n\n if (amountToPull > 0n) {\n const owner = sourceAA.getOwner();\n const smartAccount = await sourceAA.getSmartAccount();\n if (!owner || !smartAccount) throw new Error(\"Owner/SA not found for Pull\");\n\n const allowance = await sourceAA.getAllowance(tokenAddr);\n if (allowance < amountToPull) throw new Error(`Auto-Swap: Approval needed (${formatUnits(amountToPull, 6)} USDC).`);\n\n log(`[TransferManager] Auto-Swap: Pulling ${formatUnits(amountToPull, 6)} USDC...`);\n autoSwapTxs.push({\n target: tokenAddr,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transferFrom\",\n args: [owner, smartAccount, amountToPull]\n }),\n value: 0n\n });\n }\n\n const swapData = uniswapService.buildSwapData((await sourceAA.getSmartAccount())! as `0x${string}`, missingETH, usdcNeeded);\n const approveSwapData = encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [routerAddress as `0x${string}`, usdcNeeded]\n });\n\n autoSwapTxs.push({ target: tokenAddr, data: approveSwapData, value: 0n });\n autoSwapTxs.push({ target: routerAddress, data: swapData, value: 0n });\n }\n }\n\n const batch = [...autoSwapTxs];\n if (approvalRequired) {\n batch.push({\n target: approvalRequired.target,\n data: approvalRequired.data,\n value: BigInt(approvalRequired.value || 0)\n });\n }\n batch.push({\n target: txTarget,\n data: txData,\n value: BigInt(txValue || 0)\n });\n\n // Note: sendBatchTransaction builds and signs and sends.\n // But Router expects us to return a UserOp to be signed.\n // `buildUserOperation` usually takes a single call.\n // Does `AccountAbstraction` have `buildBatchUserOperation`? No.\n // Usually `buildUserOperation` handles batch if `data` encodes `executeBatch`.\n // BUT `AccountAbstraction.ts` implementation of `buildUserOperation` takes { target, data, value }.\n // To do batch, we need to manually encode `executeBatch` or use a helper.\n // `sendBatchTransaction` does this internally.\n\n // I will assume for this SDK refactor that we just want to create the UserOp.\n // I need to use `sourceAA.encodeBatch(batch)` if it exists, or manually.\n // Let's check `AccountAbstraction.ts` or just use single tx for now if simpler?\n // No, auto-swap needs batch.\n\n // HACK: I will use `sendBatchTransaction` logic but stop at building.\n // Since `AccountAbstraction` doesn't expose `buildBatchUserOp` easily, \n /// call `buildUserOperation` with the BATCH encoded data.\n /// I'll optimistically assume `sourceAA` has a `buildBatchUserOperation` or I can access the encoder.\n /// Actually, `sourceAA` is likely an instance of the class in SDK.\n\n // For now, I will wrap it in a helper or failover to single (Step 1 without swap if complicated).\n // But Step 1 IS Stargate, usually implies approval + call = Batch.\n // The SDK `AccountAbstraction` MUST support batch construction.\n\n // I will return a PROMISE that resolves to the UserOp.\n\n // Let's assume `sourceAA.buildBatchUserOperation(batch)` exists. If not, I'll add it to AA class or fix later.\n // (I'll check AA class if I can).\n return sourceAA.buildBatchUserOperation(batch);\n };\n\n // 3. Construct Steps (Single Step now!)\n const steps: MultiHopStep[] = [\n {\n aa: sourceAA,\n buildUserOp: buildStep1,\n description: \"Base -> Optimism (Stargate -> Near Direct)\"\n }\n ];\n\n // 4. EXECUTE\n return this.router.executeMultiHop(steps, log);\n }\n\n /**\n * Specialized method for Unichain -> Stacks flow.\n * 1. Unichain -> Ethereum (CCTP)\n * 2. Ethereum -> Stacks (Stacks Bridge)\n */\n async executeUnichainToStacks(\n context: BridgeContext,\n sourceAA: AccountAbstraction,\n ethPrivateKey: string, // Needed for Stacks Bridge execution on Ethereum (Facilitator/Intermediary EOA)\n logCallback?: (msg: string) => void\n ): Promise<SettleResponse> {\n const log = logCallback || console.log;\n log(\"[TransferManager] Starting Unichain -> Stacks Flow...\");\n\n const cctpStrategy = this.strategies.find(s => s instanceof CCTPStrategy)!;\n const stacksStrategy = this.strategies.find(s => s instanceof StacksStrategy)!;\n\n // 1. Check if Resume Flow (Already on Ethereum)\n if (context.sourceChain === \"Ethereum\") {\n log(\"[TransferManager] Source is Ethereum. Executing Stacks Bridge Step...\");\n return stacksStrategy.execute({\n ...context,\n facilitatorPrivateKey: ethPrivateKey\n });\n }\n\n // 2. Unichain -> Ethereum (CCTP)\n if (context.sourceChain === \"Unichain\") {\n log(\"[TransferManager] Step 1: Unichain -> Ethereum (via CCTP)\");\n\n // Derive ETH address from the provided private key (which serves as the \"Facilitator\" user EOA)\n const ethAccount = privateKeyToAccount(ethPrivateKey as `0x${string}`);\n const ethAddress = ethAccount.address;\n\n const cctpResult = await cctpStrategy.execute({\n ...context,\n destChain: \"Ethereum\",\n destToken: \"USDC\",\n recipient: ethAddress, // Send to Facilitator's ETH Wallet\n facilitatorPrivateKey: ethPrivateKey // Using same key for Unichain CCTP signing if compatible\n });\n\n if (!cctpResult.success) {\n return cctpResult;\n }\n\n log(\"[TransferManager] CCTP Step Initiated.\");\n\n // Check if CCTP actually finished (Funds Minted on Ethereum)\n // CCTP Strategy usually waits for attestation. If it returns success with a mintTransactionHash, we are good to go.\n if (cctpResult.mintTransactionHash) {\n log(\"[TransferManager] CCTP Complete (Funds on Ethereum). Proceeding to Stacks Step...\");\n\n // Execute Step 2: Ethereum -> Stacks\n const stacksResult = await stacksStrategy.execute({\n ...context,\n sourceChain: \"Ethereum\", // Context update for next leg\n amount: cctpResult.netAmount || context.amount, // Use actual net amount received\n facilitatorPrivateKey: ethPrivateKey\n });\n\n return {\n success: stacksResult.success,\n transactionHash: stacksResult.transactionHash, // The final Stacks Tx\n data: {\n cctpStep: cctpResult,\n stacksStep: stacksResult\n },\n netAmount: stacksResult.netAmount,\n errorReason: stacksResult.errorReason\n };\n } else {\n // Funds are burned but attestation/mint timed out or is pending user action.\n log(\"[TransferManager] CCTP Pending (Attestation/Mint not final yet). Please resume later.\");\n return {\n ...cctpResult,\n attestation: {\n message: \"CCTP Initiated but not finalized (Timeout or Pending). Resume with sourceChain='Ethereum' once funds arrive.\",\n attestation: cctpResult.attestation?.attestation || \"\"\n }\n };\n }\n }\n\n return {\n success: false,\n errorReason: \"Unsupported Route for Unichain->Stacks Helper\"\n };\n }\n}\n\nfunction getBlockAddress(addr: string): `0x${string}` {\n return getAddress(addr);\n}\n","// Core\nexport { AccountAbstraction } from \"./AccountAbstraction\";\nexport { BundlerClient } from \"./BundlerClient\";\nexport { BASE } from \"./chains/Evm/Base.js\";\nexport { AVALANCHE } from \"./chains/Evm/Avalanche.js\";\nexport { OPTIMISM } from \"./chains/Evm/Optimism.js\";\n\n// Config & Registry\nexport * from \"./chains\";\n\n// Types\nexport type { ChainConfig, Token, UserOperation, UserOpReceipt, GasEstimate, ApprovalSupportResult } from \"./types\";\n\n// Constants (ABIs)\nexport { erc20Abi, smartAccountAbi, entryPointAbi } from \"./constants\";\nexport { CHAIN_ID_TO_KEY } from \"./constants/chains\";\nexport * from \"./services/StellarService\";\nexport { STELLAR } from \"./chains/NoEvm/Stellar\";\n// Services\nexport { TransferManager } from \"./services/TransferManager\";\nexport { NearStrategy, getNearSimulation, getNearQuote } from \"./services/near\";\nexport { CCTPStrategy } from \"./services/cctp\";\nexport { StargateStrategy, getStargateSimulation } from \"./services/stargate\";\nexport { uniswapService, UniswapService } from \"./services/uniswap\";\nexport { RouterService } from './services/Router.js';\n","import { type ChainConfig } from \"./types\";\nimport { type ChainConfig as ChainConfigData } from \"./types/chain\";\nimport { BASE } from \"./chains/Evm/Base\";\nimport { GNOSIS } from \"./chains/Evm/Gnosis\";\nimport { OPTIMISM } from \"./chains/Evm/Optimism\";\nimport { BASE_SEPOLIA as BASE_SEPOLIA_DATA } from \"./chains/Evm/BaseSepolia\";\nimport { AVALANCHE } from \"./chains/Evm/Avalanche\";\nimport { BNB } from \"./chains/Evm/Binance\";\nimport { POLYGON } from \"./chains/Evm/Polygon\";\nimport { ARBITRUM } from \"./chains/Evm/Arbitrum\";\nimport { UNICHAIN } from \"./chains/Evm/Unichain\";\nimport { Monad as MONAD } from \"./chains/Evm/Monad\";\nimport {\n base,\n baseSepolia,\n gnosis,\n optimism,\n avalanche,\n bsc,\n polygon,\n arbitrum,\n unichain,\n monad\n} from \"viem/chains\";\n\nimport { STELLAR } from \"./chains/NoEvm/Stellar\";\n\nfunction mapToSDKConfig(data: ChainConfigData): ChainConfig {\n if (data.nonEvm) {\n return {\n chain: { id: 9000, name: \"Stellar\" }, // Custom ID for Stellar\n tokens: data.assets.map(a => ({\n symbol: a.name,\n decimals: a.decimals,\n address: a.address!\n }))\n };\n }\n if (!data.evm) throw new Error(\"Non-EVM config used in EVM SDK\");\n return {\n chain: data.evm.chain,\n rpcUrl: data.evm.rpcUrl || undefined,\n bundlerUrl: data.evm.bundlerUrl!,\n entryPointAddress: data.evm.entryPointAddress,\n factoryAddress: data.evm.factoryAddress,\n paymasterAddress: data.evm.paymasterAddress,\n tokens: data.assets.map(a => ({\n symbol: a.name,\n decimals: a.decimals,\n address: a.address as `0x${string}`\n }))\n };\n}\n\nexport const BASE_MAINNET: ChainConfig = mapToSDKConfig(BASE);\nexport const OPTIMISM_MAINNET: ChainConfig = mapToSDKConfig(OPTIMISM);\nexport const GNOSIS_MAINNET: ChainConfig = mapToSDKConfig(GNOSIS);\nexport const BASE_SEPOLIA: ChainConfig = mapToSDKConfig(BASE_SEPOLIA_DATA);\nexport const AVALANCHE_MAINNET: ChainConfig = mapToSDKConfig(AVALANCHE);\nexport const BSC_MAINNET: ChainConfig = mapToSDKConfig(BNB);\nexport const POLYGON_MAINNET: ChainConfig = mapToSDKConfig(POLYGON);\nexport const ARBITRUM_MAINNET: ChainConfig = mapToSDKConfig(ARBITRUM);\nexport const UNICHAIN_MAINNET: ChainConfig = mapToSDKConfig(UNICHAIN);\nexport const MONAD_MAINNET: ChainConfig = mapToSDKConfig(MONAD);\nexport const STELLAR_MAINNET: ChainConfig = mapToSDKConfig(STELLAR);\n\nexport const CHAIN_CONFIGS: Record<number, ChainConfig> = {\n [base.id]: BASE_MAINNET,\n [baseSepolia.id]: BASE_SEPOLIA,\n [gnosis.id]: GNOSIS_MAINNET,\n [optimism.id]: OPTIMISM_MAINNET,\n [avalanche.id]: AVALANCHE_MAINNET,\n [bsc.id]: BSC_MAINNET,\n [polygon.id]: POLYGON_MAINNET,\n [arbitrum.id]: ARBITRUM_MAINNET,\n [unichain.id]: UNICHAIN_MAINNET,\n [monad.id]: MONAD_MAINNET,\n 9000: STELLAR_MAINNET\n};\n\n","import { baseSepolia } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const BASE_SEPOLIA: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: baseSepolia,\n rpcUrl: \"https://sepolia.base.org\",\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=baseSepolia`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x9406Cc6185a346906296840746125a0E44976454\",\n // Paymaster optional\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: false,\n domain: 0, // Mock\n },\n },\n nearIntentInformation: {\n support: false, // Assuming false for testnet unless known\n assetsId: [],\n needMemo: false\n }\n }\n}\n","import {\n base,\n baseSepolia,\n gnosis,\n optimism,\n optimismSepolia,\n arbitrum,\n polygon,\n bsc,\n avalanche,\n unichain,\n monad,\n mainnet\n} from \"viem/chains\";\n\nexport const CHAIN_ID_TO_KEY: Record<string, string> = {\n [mainnet.id]: \"Ethereum\",\n [base.id]: \"Base\",\n [baseSepolia.id]: \"Base\",\n [gnosis.id]: \"Gnosis\",\n [optimism.id]: \"Optimism\",\n [optimismSepolia.id]: \"Optimism\",\n [arbitrum.id]: \"Arbitrum\",\n [polygon.id]: \"Polygon\",\n [bsc.id]: \"Binance\",\n [avalanche.id]: \"Avalanche\",\n [unichain.id]: \"Unichain\",\n [monad.id]: \"Monad\",\n \"9000\": \"Stellar\"\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants/bundler.ts","../src/chains/Evm/Base.ts","../src/chains/Evm/Avalanche.ts","../src/chains/Evm/Optimism.ts","../src/chains/Evm/Unichain.ts","../src/chains/Evm/Gnosis.ts","../src/chains/Evm/Binance.ts","../src/chains/Evm/Polygon.ts","../src/chains/Evm/Arbitrum.ts","../src/chains/Evm/Monad.ts","../src/chains/NoEvm/Stellar.ts","../src/chains/NoEvm/Stacks.ts","../src/services/StellarService.ts","../src/constants/facilitator.ts","../src/constants/abis.ts","../src/utils/cctp.ts","../src/chains/Evm/WorldChain.ts","../src/chains/Evm/Ethereum.ts","../src/chains/index.ts","../src/constants/chainsInformation.ts","../src/services/cctp.ts","../src/services/near.ts","../src/services/stargate.ts","../src/services/stacks.ts","../src/services/Router.ts","../src/services/TransferManager.ts","../src/constants.ts","../src/BundlerClient.ts","../src/TokenService.ts","../src/UserOpBuilder.ts","../src/AccountAbstraction.ts","../src/index.ts","../src/chains.ts","../src/chains/Evm/BaseSepolia.ts","../src/constants/chains.ts","../src/services/uniswap.ts"],"names":["mainnet","base","optimism","gnosis","arbitrum","polygon","unichain","avalanche","monad","worldchain","privateKeyToAccount","createPublicClient","http","createWalletClient","init_cctp","StellarService","FACILITATOR_NETWORKS","TransferManager","erc20Abi","padHex","hash","parseUnits","encodeFunctionData","BASE_SEPOLIA","baseSepolia","bsc"],"mappings":"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","file":"index.mjs","sourcesContent":["export const DEFAULT_BUNDLER_URL = \"https://bundler-erc-4337.vercel.app\";\nexport const BUNDLER_URL = process.env.NEXT_PUBLIC_BUNDLER_URL || process.env.BUNDLER_URL || DEFAULT_BUNDLER_URL;\n","import { base } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const BASE: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n coingeckoId: \"usd-coin\",\n supportsStargate: true\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: base,\n rpcUrl: \"https://base-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=base`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xe2584152891E4769025807DEa0cD611F135aDC68\",\n paymasterAddress: \"0x1e13Eb16C565E3f3FDe49A011755e50410bb1F95\"\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 6,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:base-0x833589fcd6edb6e08f4c7c32d4f71b54bda02913.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:base.omft.near\",\n name: \"ETH\",\n decimals: 18\n }\n ],\n needMemo: false\n },\n stargateInformation: {\n support: true,\n }\n }\n}\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { avalanche } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const AVALANCHE: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n coingeckoId: \"usd-coin\",\n supportsStargate: true\n },\n {\n name: \"AVAX\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"avalanche-2\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7\",\n coingeckoId: \"tether\"\n }\n ],\n evm: {\n chain: avalanche,\n rpcUrl: avalanche.rpcUrls.default.http[0],\n supports7702: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=avalanche`,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x5D1D71FE2De5D1C52c7c11311332eC7f0CBf88aF\",\n paymasterAddress: \"0x6c0de464F2203FE089FF719Acf425dFfE6ac1EE5\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 1,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:43114_3atVJH3r5c4GqiSYmg9fECvjc47o\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:43114_11111111111111111111\",\n name: \"AVAX\",\n decimals: 18\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:43114_372BeH7ENZieCaabwkbWkBiTTgXp\",\n name: \"USDT\",\n decimals: 6\n }\n ],\n needMemo: false\n },\n stargateInformation: {\n support: true,\n }\n }\n}\n","import { optimism } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const OPTIMISM: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0x94b008aa00579c1307b0ef2c499ad98a8ce58e58\",\n coingeckoId: \"tether\"\n },\n {\n name: \"OP\",\n decimals: 18,\n address: \"0x4200000000000000000000000000000000000042\",\n coingeckoId: \"optimism\"\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: optimism,\n rpcUrl: \"https://mainnet.optimism.io\",\n supports7702: false,\n erc4337: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=optimism`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x3CE963866d3Be7Fe4354DBe892Aab52a0a18aeb2\",\n paymasterAddress: \"0x0dB771d11F84E8541AA651363DF14E4401d01216\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 2,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_A2ewyUyDp6qsue1jqZsGypkCxRJ\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_359RPSJVdTxwTJT9TyGssr2rFoWo\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_vLAiSt9KfUGKpw5cD3vsSyNYBo7\",\n name: \"OP\",\n decimals: 18\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:10_11111111111111111111\",\n name: \"ETH\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n}\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { unichain } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const UNICHAIN: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x078D782b760474a361dDA0AF3839290b0EF57AD6\",\n coingeckoId: \"usd-coin\"\n }\n ],\n evm: {\n chain: unichain,\n rpcUrl: \"https://unichain-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=unichain`,\n supports7702: true,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xB2E45aCbB68f3e98C87B6df16625f22e11728556\",\n paymasterAddress: \"0x7A92b3Fee017E3E181a51D9045AACE30eC2B387D\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 10,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: null\n }\n}\n","import { gnosis } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const GNOSIS: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x2a22f9c3b484c3629090FeED35F17Ff8F88f76F0\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0x4ECaBa5870353805a9F068101A40E0f32ed605C6\",\n coingeckoId: \"tether\"\n },\n {\n name: \"EURe\",\n decimals: 18,\n address: \"0x420CA0f9B9b604cE0fd9C18EF134C705e5Fa3430\",\n coingeckoId: \"monerium-eur-money\"\n },\n {\n name: \"GNO\",\n decimals: 18,\n address: \"0x9C58BAcC331c9aa871AFD802DB6379a98e80CEdb\",\n coingeckoId: \"gnosis\"\n },\n {\n name: \"WETH\",\n decimals: 18,\n address: \"0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1\",\n coingeckoId: \"ethereum\"\n },\n {\n name: \"XDAI\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"xdai\"\n }\n ],\n evm: {\n chain: gnosis,\n rpcUrl: gnosis.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=gnosis`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xC8a2Fb1f2E686417A131E09be3320cb5431CcD90\",\n paymasterAddress: \"0x4C36C70d68a7c26326711e8268bb163E3784fA96\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: false,\n domain: 0,\n },\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:gnosis-0x2a22f9c3b484c3629090feed35f17ff8f88f76f0.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:gnosis-0x4ecaba5870353805a9f068101a40e0f32ed605c6.omft.near\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep141:gnosis-0x420ca0f9b9b604ce0fd9c18ef134c705e5fa3430.omft.near\",\n name: \"EURe\",\n decimals: 18\n },\n {\n assetId: \"nep141:gnosis-0x9c58bacc331c9aa871afd802db6379a98e80cedb.omft.near\",\n name: \"GNO\",\n decimals: 18\n },\n {\n assetId: \"nep141:gnosis-0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1.omft.near\",\n name: \"WETH\",\n decimals: 18\n },\n {\n assetId: \"nep141:gnosis.omft.near\",\n name: \"XDAI\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n};\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { bsc } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const BNB: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 18,\n address: \"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d\", // BSC Mainnet USDC\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 18,\n address: \"0x55d398326f99059fF775485246999027B3197955\", // BSC Mainnet USDT\n coingeckoId: \"tether\"\n },\n {\n name: \"BNB\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\", // Native\n coingeckoId: \"binancecoin\"\n },\n ],\n evm: {\n chain: bsc,\n rpcUrl: \"https://bsc-dataseed.binance.org\",\n supports7702: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=bsc`,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x2d5dBD90d3aB35614cdf686a67A9889E56B20b27\",\n paymasterAddress: \"0x460593321DdbE4e1038666Ad07Fc1F817dfA02DB\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: false,\n domain: 0,\n },\n },\n nearIntentInformation: {\n support: true,\n needMemo: false,\n assetsId: [\n {\n name: \"USDC\",\n assetId: \"nep245:v2_1.omni.hot.tg:56_2w93GqMcEmQFDru84j3HZZWt557r\",\n decimals: 18,\n },\n {\n name: \"USDT\",\n assetId: \"nep245:v2_1.omni.hot.tg:56_2CMMyVTGZkeyNZTSvS5sarzfir6g\",\n decimals: 18,\n },\n {\n name: \"BNB\",\n assetId: \"nep245:v2_1.omni.hot.tg:56_11111111111111111111\",\n decimals: 18,\n }\n ],\n },\n },\n};\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { polygon } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const POLYGON: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"POL\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"polygon-ecosystem-token\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n coingeckoId: \"tether\"\n }\n ],\n evm: {\n chain: polygon,\n rpcUrl: \"https://polygon-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n supports7702: true,\n erc4337: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=polygon`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x31D1C59fcf5B78FE2a86187a53c84DcDa5B80EF6\",\n paymasterAddress: \"0x24C82C9381F4615f1a73a5CdBB0Ffd5a432fA54C\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 7,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:137_qiStmoQJDQPTebaPjgx5VBxZv6L\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:137_11111111111111111111\",\n name: \"POL\",\n decimals: 18\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:137_3hpYoaLtt8MP1Z2GH1U473DMRKgr\",\n name: \"USDT\",\n decimals: 6\n }\n ],\n needMemo: false\n }\n }\n}\n","import { BUNDLER_URL } from \"../../constants/bundler\";\nimport { arbitrum } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const ARBITRUM: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n coingeckoId: \"tether\"\n },\n {\n name: \"ARB\",\n decimals: 18,\n address: \"0x912CE59144191C1204E64559FE8253a0e49E6548\",\n coingeckoId: \"arbitrum\"\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: arbitrum,\n rpcUrl: \"https://arb-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=arbitrum`,\n supports7702: true,\n erc4337: false,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xEEba846e0177CD7b2F023feaa44F9B2a9183327A\",\n paymasterAddress: \"0x41d236E76eCEC3b90554d0b504ac2EEce93A2AE1\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: true,\n domain: 3,\n },\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:arb-0xaf88d065e77c8cc2239327c5edb3a432268e5831.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:arb-0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9.omft.near\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep141:arb.omft.near\",\n name: \"ETH\",\n decimals: 18\n },\n {\n assetId: \"nep141:arb-0x912ce59144191c1204e64559fe8253a0e49e6548.omft.near\",\n name: \"ARB\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n};\n","import { monad } from \"viem/chains\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const Monad: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x754704Bc059F8C67012fEd69BC8A327a5aafb603\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"USDT\",\n decimals: 6,\n address: \"0xe7cd86e13AC4309349F30B3435a9d337750fC82D\",\n coingeckoId: \"tether\"\n },\n {\n name: \"MON\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"monad\"\n }\n ],\n evm: {\n chain: monad,\n rpcUrl: monad.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: false,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=monad`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xaaeA6D8f377e62599Aad75376F0C5e4F7EBF8f84\",\n paymasterAddress: \"0xeA82B63e8dE3BFBd321A681D4511BC596E323162\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n cCTPInformation: {\n supportCCTP: true,\n domain: 15,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:143_2dmLwYWkCQKyTjeUPAsGJuiVLbFx\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:143_4EJiJxSALvGoTZbnc8K7Ft9533et\",\n name: \"USDT\",\n decimals: 6\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:143_11111111111111111111\",\n name: \"MON\",\n decimals: 18\n }\n ],\n needMemo: false\n }\n }\n}\n","\nimport { Networks } from \"stellar-sdk\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const STELLAR: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 7,\n address: \"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"XLM\",\n decimals: 7,\n address: \"native\",\n coingeckoId: \"stellar\"\n }\n ],\n nonEvm: {\n networkPassphrase: Networks.PUBLIC,\n serverURL: \"https://horizon.stellar.org\",\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep245:v2_1.omni.hot.tg:1100_111bzQBB65GxAPAVoxqmMcgYo5oS3txhqs1Uh1cgahKQUeTUq1TJu\",\n name: \"USDC\",\n decimals: 7\n },\n {\n assetId: \"nep245:v2_1.omni.hot.tg:1100_111bzQBB5v7AhLyPMDwS8uJgQV24KaAPXtwyVWu2KXbbfQU6NXRCz\",\n name: \"XLM\",\n decimals: 6\n }\n ],\n needMemo: true\n }\n }\n};\n","import { ChainConfig } from \"../../types/chain\";\n\nexport const STACKS: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"SP2ZNGJ15SD91GWW54B2Q1V31749666c2Q01\", // Placeholder or real Stacks token ID\n coingeckoId: \"usd-coin\"\n }\n ],\n nonEvm: {\n serverURL: \"https://api.mainnet.hiro.so\"\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n },\n nearIntentInformation: null\n }\n}\n","import * as StellarSdk from \"stellar-sdk\";\nimport { STELLAR } from \"../chains/NoEvm/Stellar\";\n\nexport class StellarService {\n server: StellarSdk.Horizon.Server;\n network: string;\n\n constructor() {\n if (!STELLAR.nonEvm?.serverURL || !STELLAR.nonEvm?.networkPassphrase) {\n throw new Error(\"Stellar Non-EVM config missing or incomplete\");\n }\n this.server = new StellarSdk.Horizon.Server(STELLAR.nonEvm.serverURL);\n this.network = STELLAR.nonEvm.networkPassphrase;\n }\n\n /**\n * Get balance for a specific token (or all if not specified)\n * Returns string representation\n */\n async getBalance(address: string, tokenName: string = \"XLM\"): Promise<string> {\n try {\n const account = await this.server.loadAccount(address);\n\n // Find asset definition\n const assetDef = STELLAR.assets.find(a => a.name === tokenName);\n if (!assetDef) throw new Error(`Asset ${tokenName} not configured`);\n\n const isNative = assetDef.address === \"native\";\n\n const balanceLine = account.balances.find((b: any) => {\n if (isNative) {\n return b.asset_type === \"native\";\n }\n return b.asset_code === tokenName && b.asset_issuer === assetDef.address;\n });\n\n return balanceLine ? balanceLine.balance : \"0\";\n } catch (e: any) {\n if (e.response && e.response.status === 404) {\n return \"0\"; // Account not active\n }\n throw e;\n }\n }\n\n /**\n * Build and Sign a Transfer Transaction\n */\n async buildTransferXdr(\n senderPk: string,\n recipient: string,\n amount: string,\n tokenName: string = \"XLM\",\n memo?: string\n ): Promise<string> {\n const keypair = StellarSdk.Keypair.fromSecret(senderPk);\n const sourceAddress = keypair.publicKey();\n\n // Check if account exists\n let account;\n try {\n account = await this.server.loadAccount(sourceAddress);\n } catch (e: any) {\n throw new Error(`Stellar Account ${sourceAddress} not valid or not active.`);\n }\n\n const asset = this.getAsset(tokenName);\n\n const txBuilder = new StellarSdk.TransactionBuilder(account, {\n fee: StellarSdk.BASE_FEE,\n networkPassphrase: this.network\n });\n\n txBuilder.addOperation(StellarSdk.Operation.payment({\n destination: recipient,\n asset: asset,\n amount: amount\n }));\n\n if (memo) {\n // Simple text memo support for now\n txBuilder.addMemo(StellarSdk.Memo.text(memo));\n }\n\n txBuilder.setTimeout(30);\n\n const builtTx = txBuilder.build();\n builtTx.sign(keypair);\n\n return builtTx.toXDR();\n }\n\n /**\n * Submit Signed XDR\n */\n async submitXdr(xdr: string) {\n // Construct transaction from XDR to submit\n const tx = StellarSdk.TransactionBuilder.fromXDR(xdr, this.network);\n return this.server.submitTransaction(tx);\n }\n\n public getAsset(tokenName: string): StellarSdk.Asset {\n const assetDef = STELLAR.assets.find(a => a.name === tokenName);\n if (!assetDef) {\n // Default fallback if not found? Or throw.\n if (tokenName === \"XLM\") return StellarSdk.Asset.native();\n throw new Error(`Asset ${tokenName} not found in configuration`);\n }\n\n if (assetDef.address === \"native\") {\n return StellarSdk.Asset.native();\n }\n\n return new StellarSdk.Asset(assetDef.name, assetDef.address);\n }\n\n public getKeypair(pk: string) {\n return StellarSdk.Keypair.fromSecret(pk);\n }\n}\n","\nimport { base, optimism, gnosis, arbitrum, polygon, unichain, avalanche, worldchain, monad, mainnet } from \"viem/chains\";\nimport { ChainKey } from \"@/types/chain\";\nimport { FacilitatorNetworkConfig } from \"@/services/config\";\n\nexport type FacilitatorChainKey = ChainKey;\n\nexport const PlatformFees = {\n DEV: 0,\n EVM_TO_OTHER: 0.02,\n DEFAULT: 0.02\n};\n\n// Dummy addresses for simulation\nexport const DUMMY_EVM_ADDRESS = \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"; // Vitalik (just a valid address)\nexport const DUMMY_STELLAR_ADDRESS = \"GB7BDSZU2Y27LYNLJLVEGW5TIVYQ6362DS5QZ5F6S27S227227227AAA\";\n\nexport const calculateFee = (isDev: boolean = false): number => {\n return isDev ? PlatformFees.DEV : PlatformFees.DEFAULT;\n};\n\nexport const FACILITATOR_NETWORKS: Record<string, FacilitatorNetworkConfig> = {\n Ethereum: {\n chainId: mainnet.id,\n chain: mainnet,\n usdc: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 0,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: mainnet.rpcUrls.default.http[0]\n },\n Base: {\n chainId: 8453,\n chain: base,\n usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 6,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://base-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\n },\n Optimism: {\n chainId: 10,\n chain: optimism,\n usdc: \"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 2,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://opt-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\" // Assuming same key works or public\n },\n Gnosis: {\n chainId: 100,\n chain: gnosis,\n usdc: \"0x2a22f9c3b48403ebD92cF06fF916b322a30dB834\",\n usdcName: \"USDC\",\n usdcVersion: \"2\",\n domain: 0,\n tokenMessenger: \"0x0000000000000000000000000000000000000000\",\n messageTransmitter: \"0x0000000000000000000000000000000000000000\",\n rpcUrl: \"https://rpc.gnosischain.com\"\n },\n Arbitrum: {\n chainId: 42161,\n chain: arbitrum,\n usdc: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 3,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://arb-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\n },\n Polygon: {\n chainId: 137,\n chain: polygon,\n usdc: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 7,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: \"https://polygon-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\n },\n Unichain: {\n chainId: unichain.id,\n chain: unichain,\n usdc: \"0x078D782b760474a361dDA0AF3839290b0EF57AD6\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 10,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: unichain.rpcUrls.default.http[0]\n },\n Avalanche: {\n chainId: avalanche.id,\n chain: avalanche,\n usdc: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 1,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: avalanche.rpcUrls.default.http[0]\n },\n Worldchain: {\n chainId: worldchain.id,\n chain: worldchain,\n usdc: \"0x79A02482A880bCe3F13E09da970dC34dB4cD24D1\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 13,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: worldchain.rpcUrls.default.http[0]\n },\n Monad: {\n chainId: monad.id,\n chain: monad,\n usdc: \"0x754704Bc059F8C67012fEd69BC8A327a5aafb603\",\n usdcName: \"USD Coin\",\n usdcVersion: \"2\",\n domain: 15,\n tokenMessenger: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n messageTransmitter: \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\",\n rpcUrl: monad.rpcUrls.default.http[0]\n }\n};\n","export const usdcErc3009Abi = [\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"transferWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const tokenMessengerAbi = [\n {\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"destinationCaller\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" }, // Suspected wrapper arg\n { name: \"minFinalityThreshold\", type: \"uint32\" } // Suspected wrapper arg\n ],\n name: \"depositForBurn\",\n outputs: [{ name: \"_nonce\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n // Alternative overload often used:\n {\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n ],\n name: \"depositForBurn\",\n outputs: [{ name: \"_nonce\", type: \"uint64\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n }\n] as const;\n\nexport const messageTransmitterAbi = [\n {\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n name: \"receiveMessage\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","import axios from \"axios\";\n\nexport const createRetrieveAttestation = async (\n transactionHash: string,\n chainId: string,\n timeout = 60000\n) => {\n const baseUrl = \"https://iris-api.circle.com\";\n\n const url = `${baseUrl}/v2/messages/${chainId}?transactionHash=${transactionHash}`;\n\n const start = Date.now();\n const FIVE_SECONDS = 5000;\n\n while (true) {\n const elapsed = Date.now() - start;\n if (elapsed > timeout) {\n throw new Error(\n \"Timeout: Attestation not retrieved within the expected time.\"\n );\n }\n\n try {\n const response = await axios.get(url);\n\n const message = response.data?.messages?.[0];\n if (message?.status === \"complete\") {\n console.log(\"Attestation retrieved successfully!\");\n return message;\n }\n\n console.log(\"Waiting for attestation...\");\n } catch (error: any) {\n const status = error.response?.status;\n\n if (status === 404) {\n console.log(\"Waiting for attestation...\");\n } else {\n console.error(\"Error fetching attestation:\", error.message);\n }\n }\n\n await new Promise((resolve) => setTimeout(resolve, FIVE_SECONDS));\n }\n};\n","\nimport { worldchain } from \"viem/chains\";\nimport { Address } from \"abitype\";\nimport { ChainConfig } from \"../../types/chain.js\";\n\nexport const WORLD_CHAIN: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x79A02482A880bCe3F13E09da970dC34dB4cD24D1\",\n coingeckoId: \"usd-coin\"\n }\n ],\n evm: {\n chain: worldchain,\n rpcUrl: worldchain.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: false,\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n cCTPInformation: {\n supportCCTP: true,\n domain: 14,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: null\n }\n}\n","import { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler.js\";\nimport { mainnet } from \"viem/chains\";\n\nexport const ETHEREUM: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n coingeckoId: \"usd-coin\",\n supportsStargate: true\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: mainnet,\n rpcUrl: mainnet.rpcUrls.default.http[0],\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=ethereum`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0xe2584152891E4769025807DEa0cD611F135aDC68\",\n paymasterAddress: \"0x1e13Eb16C565E3f3FDe49A011755e50410bb1F95\"\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: true,\n cCTPInformation: {\n supportCCTP: true,\n domain: 0,\n },\n aproxFromFee: 0,\n },\n nearIntentInformation: {\n support: true,\n assetsId: [\n {\n assetId: \"nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near\",\n name: \"USDC\",\n decimals: 6\n },\n {\n assetId: \"nep141:eth.omft.near\",\n name: \"ETH\",\n decimals: 18\n }\n ],\n needMemo: false\n },\n stargateInformation: {\n support: false,\n }\n }\n}\n","import { OPTIMISM } from \"./Evm/Optimism.js\";\nimport { ARBITRUM } from \"./Evm/Arbitrum.js\";\nimport { BASE } from \"./Evm/Base.js\";\nimport { UNICHAIN } from \"./Evm/Unichain.js\";\nimport { POLYGON } from \"./Evm/Polygon.js\";\nimport { AVALANCHE } from \"./Evm/Avalanche.js\";\nimport { WORLD_CHAIN } from \"./Evm/WorldChain.js\";\nimport { STELLAR } from \"./NoEvm/Stellar.js\";\nimport { Monad } from \"./Evm/Monad.js\";\nimport { BNB } from \"./Evm/Binance.js\";\nimport { GNOSIS } from \"./Evm/Gnosis.js\";\nimport { ETHEREUM } from \"./Evm/Ethereum.js\";\nimport { STACKS } from \"./NoEvm/Stacks.js\";\n\nexport {\n OPTIMISM,\n ARBITRUM,\n BASE,\n UNICHAIN,\n POLYGON,\n AVALANCHE,\n WORLD_CHAIN,\n STELLAR,\n Monad,\n BNB,\n GNOSIS,\n ETHEREUM,\n STACKS\n}","import { ChainConfig } from \"@/types/chain\";\nimport * as Chains from \"@/chains/index\";\n\nexport const NETWORKS: Record<string, ChainConfig> = {\n Optimism: Chains.OPTIMISM,\n Arbitrum: Chains.ARBITRUM,\n Base: Chains.BASE,\n Unichain: Chains.UNICHAIN,\n Polygon: Chains.POLYGON,\n Avalanche: Chains.AVALANCHE,\n WorldChain: Chains.WORLD_CHAIN,\n Stellar: Chains.STELLAR,\n Monad: Chains.Monad,\n BNB: Chains.BNB,\n Gnosis: Chains.GNOSIS,\n Ethereum: Chains.ETHEREUM\n};\n","import {\n createPublicClient,\n createWalletClient,\n http,\n parseSignature,\n padHex,\n maxUint256,\n Address\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport {\n FacilitatorChainKey,\n calculateFee\n} from \"@/constants/facilitator\";\nimport { FACILITATOR_NETWORKS } from \"@/constants/facilitator\";\nimport { usdcErc3009Abi } from \"@/constants/abis\";\nimport { tokenMessengerAbi, messageTransmitterAbi } from \"@/constants/abis\";\nimport { SettleResponse, FacilitatorPaymentPayload, CrossChainConfig } from \"@/services/types\";\nimport { createRetrieveAttestation } from \"@/utils/cctp\";\nimport { BridgeStrategy, BridgeContext } from \"./types\";\nimport { NETWORKS } from \"@/constants/chainsInformation\";\nimport { ChainKey } from \"@/types/chain\";\n\n\n\n/** Converts an address to bytes32 format for CCTP mintRecipient */\nconst addressToBytes32 = (address: Address): `0x${string}` => {\n return padHex(address, { size: 32 });\n};\n\nexport class CCTPStrategy implements BridgeStrategy {\n name = \"CCTP\";\n\n canHandle(context: BridgeContext): boolean {\n const { sourceChain, destChain, sourceToken, destToken } = context;\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) return false;\n\n const sourceCCTP = sourceConfig.crossChainInformation?.circleInformation?.cCTPInformation?.supportCCTP;\n const destCCTP = destConfig.crossChainInformation?.circleInformation?.cCTPInformation?.supportCCTP;\n\n // Default to USDC if destToken is missing (backward compatibility) \n let targetToken = destToken;\n if (!targetToken) {\n if (sourceToken && sourceToken !== \"USDC\") {\n targetToken = sourceToken;\n } else {\n targetToken = \"USDC\";\n }\n }\n\n return !!(sourceCCTP && destCCTP && targetToken === \"USDC\" && (sourceToken === \"USDC\" || !sourceToken));\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { paymentPayload, sourceChain, destChain, amount, recipient } = context;\n\n const destConfig = NETWORKS[destChain];\n const destinationDomain = destConfig.crossChainInformation?.circleInformation?.cCTPInformation?.domain;\n\n if (destinationDomain === undefined) {\n return {\n success: false,\n errorReason: \"Destination chain does not have CCTP domain configured\"\n };\n }\n\n const crossChainConfig: CrossChainConfig = {\n destinationChain: destChain as FacilitatorChainKey,\n destinationDomain: destinationDomain,\n mintRecipient: recipient as Address\n };\n\n return processCCTPSettlement(\n context,\n crossChainConfig\n );\n }\n}\n\nexport async function processCCTPSettlement(\n context: BridgeContext,\n crossChainConfig: CrossChainConfig\n): Promise<SettleResponse> {\n const { paymentPayload, sourceChain, amount, recipient, facilitatorPrivateKey, depositTxHash } = context;\n\n console.log(`[SDK v0.4.22] Processing CCTP. DepositHash: ${depositTxHash} (${typeof depositTxHash})`);\n\n if (!facilitatorPrivateKey) {\n return {\n success: false,\n errorReason: \"Facilitator Private Key not provided in context\"\n };\n }\n\n const networkConfig = FACILITATOR_NETWORKS[sourceChain];\n if (!networkConfig) {\n return {\n success: false,\n errorReason: `Unsupported chain: ${sourceChain}`\n };\n }\n\n // Step 1: Check Facilitator Balance or Verify Deposit (Push Model)\n const facilitatorAccount = privateKeyToAccount(facilitatorPrivateKey as `0x${string}`);\n\n const fromAddress = context.senderAddress || (paymentPayload?.authorization?.from);\n\n if (!fromAddress) {\n return { success: false, errorReason: \"Sender address is missing\" };\n }\n\n const usdcAddress = networkConfig.usdc;\n const amountBigInt = BigInt(Math.floor(parseFloat(amount) * 1_000_000)); // USDC 6 decimals\n\n const publicClient = createPublicClient({\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n\n // ... (rest of logic) ...\n\n // Step 4: Execute CCTP on Source Chain\n // If depositTxHash is verified, we proceed to fetch attestation.\n\n // Replacing the execute call argument:\n // return executeCCTPBridge(..., fromAddress as Address);\n\n // A. If depositTxHash is provided (Step 2: Verification)\n if (depositTxHash) {\n console.log(`[CCTP] Verifying deposit hash: ${depositTxHash}`);\n try {\n const receipt = await publicClient.waitForTransactionReceipt({ hash: depositTxHash as `0x${string}` });\n\n if (receipt.status !== \"success\") {\n throw new Error(\"Deposit transaction failed on-chain\");\n }\n } catch (e) {\n return {\n success: false,\n errorReason: `Invalid deposit transaction: ${e instanceof Error ? e.message : \"Unknown error\"}`\n };\n }\n\n // B. Check Balance (Wait logic) - Only check if we have a hash implying a deposit matched\n let facilitatorBalance = BigInt(0);\n const maxRetries = 5;\n\n for (let i = 0; i < maxRetries; i++) {\n facilitatorBalance = await publicClient.readContract({\n address: usdcAddress,\n abi: usdcErc3009Abi,\n functionName: \"balanceOf\",\n args: [facilitatorAccount.address]\n }) as bigint;\n\n if (facilitatorBalance >= amountBigInt) break;\n await new Promise(r => setTimeout(r, 2000));\n }\n\n if (facilitatorBalance < amountBigInt) {\n return {\n success: false,\n errorReason: \"Deposit verified but facilitator balance insufficient (Funds sent to wrong address?)\"\n };\n }\n\n } else {\n // No hash provided -> Always Prompt for Deposit (Strict Push Model)\n console.log(\"[SDK v0.4.22] No deposit hash. Returning PENDING_USER_DEPOSIT.\");\n return {\n success: true,\n data: {\n depositAddress: facilitatorAccount.address,\n amountToDeposit: amountBigInt.toString(),\n chainId: networkConfig.chainId\n },\n attestation: {\n message: \"PENDING_USER_DEPOSIT_v22\",\n attestation: \"0x\"\n },\n transactionHash: \"PENDING_USER_DEPOSIT_v22\"\n };\n }\n\n // Funds are present, proceed to bridge\n const transferHash = (depositTxHash as `0x${string}`) || \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n return executeCCTPBridge(sourceChain, amount, crossChainConfig, facilitatorPrivateKey, recipient as Address, transferHash, fromAddress as Address);\n}\n\nexport async function executeCCTPBridge(\n sourceChain: FacilitatorChainKey,\n amount: string,\n crossChainConfig: CrossChainConfig,\n facilitatorPrivateKey: string,\n recipient: Address | undefined,\n transferHash: `0x${string}`,\n payerAddress: Address\n): Promise<SettleResponse> {\n if (!facilitatorPrivateKey) {\n return { success: false, errorReason: \"Facilitator Private Key not provided\" };\n }\n\n const networkConfig = FACILITATOR_NETWORKS[sourceChain];\n if (!networkConfig) {\n return { success: false, errorReason: `Unsupported chain: ${sourceChain}` };\n }\n\n // Setup clients\n const facilitatorAccount = privateKeyToAccount(facilitatorPrivateKey as `0x${string}`);\n const publicClient = createPublicClient({\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n const walletClient = createWalletClient({\n account: facilitatorAccount,\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n\n // Convert human readable string (e.g. \"0.01\") to atomic units (6 decimals)\n const amountBigInt = BigInt(Math.floor(parseFloat(amount) * 1_000_000));\n const feeRaw = calculateFee();\n const fee = BigInt(Math.floor(feeRaw * 1_000_000));\n const minRequired = fee;\n\n if (amountBigInt <= minRequired) {\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: `Amount too small. Minimum required: ${Number(minRequired) / 1_000_000} USDC (to cover bridge fees)`\n };\n }\n\n // Re-verify Balance (Double Check)\n let facilitatorBalance = BigInt(0);\n const maxRetries = 2;\n\n for (let i = 0; i < maxRetries; i++) {\n facilitatorBalance = await publicClient.readContract({\n address: networkConfig.usdc,\n abi: usdcErc3009Abi,\n functionName: \"balanceOf\",\n args: [facilitatorAccount.address]\n }) as bigint;\n\n if (facilitatorBalance >= amountBigInt) break;\n\n console.log(`[CCTP] Balance lag detected. Retrying ${i + 1}/${maxRetries}... (Has: ${facilitatorBalance}, Needs: ${amountBigInt})`);\n await new Promise(resolve => setTimeout(resolve, 3000)); // Wait 3s\n }\n\n if (facilitatorBalance < amountBigInt) {\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: `Insufficient facilitator balance after retries. Has: ${facilitatorBalance}, Needs: ${amountBigInt}`\n };\n }\n\n // Step 2: Approve TokenMessenger\n try {\n const approveHash = await walletClient.writeContract({\n chain: networkConfig.chain,\n address: networkConfig.usdc,\n abi: usdcErc3009Abi,\n functionName: \"approve\",\n args: [networkConfig.tokenMessenger, maxUint256]\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n } catch (e) {\n console.error(\"Approval failed\", e);\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: \"Approval failed\"\n };\n }\n\n // Step 3: DepositForBurn\n const targetRecipient = recipient || crossChainConfig.mintRecipient;\n const mintRecipient = addressToBytes32(targetRecipient);\n\n // Dynamic maxFee calculation (1%, min 200 wei)\n const maxFee = amountBigInt > BigInt(100)\n ? BigInt(Math.floor(Math.max(Number(amountBigInt) / 100, 200)))\n : BigInt(200);\n\n let burnHash: `0x${string}`;\n try {\n burnHash = await walletClient.writeContract({\n chain: networkConfig.chain,\n address: networkConfig.tokenMessenger,\n abi: tokenMessengerAbi,\n functionName: \"depositForBurn\",\n args: [\n amountBigInt - fee, // Deduct 0.02 USDC Fee\n crossChainConfig.destinationDomain,\n mintRecipient,\n networkConfig.usdc,\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as `0x${string}`,\n maxFee,\n 1000 // minFinalityThreshold\n ]\n });\n\n const burnReceipt = await publicClient.waitForTransactionReceipt({ hash: burnHash });\n if (burnReceipt.status !== \"success\") throw new Error(\"Burn execution failed\");\n\n } catch (e) {\n return {\n success: false,\n transactionHash: transferHash,\n errorReason: e instanceof Error ? e.message : \"Burn failed\"\n };\n }\n\n // Step 4: Wait for Attestation\n let attestationResponse;\n try {\n attestationResponse = await createRetrieveAttestation(\n burnHash,\n networkConfig.domain.toString(),\n 120000 // 2 min timeout\n );\n } catch (e) {\n console.warn(\"Attestation timeout\", e);\n return {\n success: true, // Functionally a \"pending\" state \n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n errorReason: \"Attestation timeout. Funds burned but not minted.\"\n };\n }\n\n if (!attestationResponse) {\n return {\n success: false,\n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n errorReason: \"Attestation failed to retireve\"\n };\n }\n\n\n // Step 5: Mint (receiveMessage) on Destination Chain\n let mintHash: `0x${string}` | undefined;\n try {\n const destNetworkConfig = FACILITATOR_NETWORKS[crossChainConfig.destinationChain as FacilitatorChainKey];\n if (!destNetworkConfig) throw new Error(`Unsupported destination chain: ${crossChainConfig.destinationChain}`);\n\n const destWalletClient = createWalletClient({\n account: facilitatorAccount,\n chain: destNetworkConfig.chain,\n transport: http(destNetworkConfig.rpcUrl)\n });\n\n const destPublicClient = createPublicClient({\n chain: destNetworkConfig.chain,\n transport: http(destNetworkConfig.rpcUrl)\n });\n\n console.log(`[CCTP] Minting on ${crossChainConfig.destinationChain}...`);\n\n mintHash = await destWalletClient.writeContract({\n chain: destNetworkConfig.chain,\n address: destNetworkConfig.messageTransmitter,\n abi: messageTransmitterAbi,\n functionName: \"receiveMessage\",\n args: [\n attestationResponse.message.startsWith(\"0x\")\n ? attestationResponse.message as `0x${string}`\n : `0x${attestationResponse.message}` as `0x${string}`,\n attestationResponse.attestation.startsWith(\"0x\")\n ? attestationResponse.attestation as `0x${string}`\n : `0x${attestationResponse.attestation}` as `0x${string}`\n ]\n });\n\n console.log(`[CCTP] Mint tx sent: ${mintHash}`);\n await destPublicClient.waitForTransactionReceipt({ hash: mintHash });\n console.log(`[CCTP] Mint confirmed!`);\n\n } catch (e) {\n console.error(\"Mint failed\", e);\n return {\n success: true,\n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n errorReason: \"Mint execution failed (Gas error on Dest?)\"\n };\n }\n\n return {\n success: true,\n transactionHash: transferHash,\n burnTransactionHash: burnHash,\n mintTransactionHash: mintHash,\n payer: payerAddress,\n fee: fee.toString(),\n netAmount: (amountBigInt - fee).toString(),\n attestation: {\n message: attestationResponse.message,\n attestation: attestationResponse.attestation\n }\n };\n}\n","import { OpenAPI, OneClickService, QuoteRequest } from '@defuse-protocol/one-click-sdk-typescript';\nimport { NETWORKS } from \"@/constants/chainsInformation\";\nimport { ChainKey } from \"@/types/chain\";\nimport { SettleResponse, FacilitatorPaymentPayload } from \"@/services/types\";\nimport { BridgeStrategy, BridgeContext } from \"./types\";\nimport { StellarService } from \"./StellarService\";\nimport { PlatformFees, DUMMY_EVM_ADDRESS, DUMMY_STELLAR_ADDRESS, calculateFee } from \"@/constants/facilitator\";\n\n// Initialize API\nOpenAPI.BASE = 'https://1click.chaindefuser.com';\n// OpenAPI.TOKEN = process.env.ONE_CLICK_JWT; // Optional if not needed for public quotes\n\nexport class NearStrategy implements BridgeStrategy {\n name = \"NearIntents\";\n\n canHandle(context: BridgeContext): boolean {\n const { sourceChain, destChain } = context;\n // Basic check: Near support on both (Removed source===dest check to allow swaps)\n\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) return false;\n\n const sourceNear = sourceConfig.crossChainInformation.nearIntentInformation?.support;\n const destNear = destConfig.crossChainInformation.nearIntentInformation?.support;\n\n return !!(sourceNear && destNear);\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { sourceChain, destChain, amount, recipient, destToken, sourceToken, senderAddress, depositTxHash, paymentPayload } = context;\n\n // 0. Handle Stellar Source (Push)\n if (sourceChain === \"Stellar\" && paymentPayload?.signedXDR) {\n const signedXDR = paymentPayload.signedXDR;\n\n console.log(\"[NearStrategy] Submitting Stellar User -> Facilitator TX...\");\n\n try {\n const stellarService = new StellarService();\n const result = await stellarService.submitXdr(signedXDR);\n const pullHash = result.hash;\n console.log(\"[NearStrategy] Pull Success (Stellar):\", pullHash);\n\n return {\n success: true,\n transactionHash: pullHash,\n data: {\n completed: true,\n message: \"Stellar Transaction Submitted. Bridge in progress.\"\n }\n };\n } catch (e: any) {\n console.error(\"Stellar Submit Error\", e);\n return { success: false, errorReason: \"Stellar Submit Failed: \" + (e.message || \"Unknown\") };\n }\n }\n\n // 1. Verify Deposit if Hash Provided\n if (depositTxHash) {\n console.log(`[NearStrategy] Verifying deposit hash: ${depositTxHash}`);\n\n // Stellar Verification\n if (sourceChain === \"Stellar\") {\n try {\n const { StellarService } = await import(\"./StellarService\");\n const stellarService = new StellarService();\n // We need to fetch the tx\n // StellarService doesn't have `getTransaction` yet, only submit.\n // Need to check if StellarService has server access (it does, public prop).\n const tx = await stellarService.server.transactions().transaction(depositTxHash).call();\n\n if (tx.successful) {\n // Fetch operations to find the payment destination (deposit address)\n const operations = await stellarService.server.operations().forTransaction(depositTxHash).call();\n const paymentOp = operations.records.find((op: any) => op.type === 'payment' || op.type === 'path_payment_strict_send' || op.type === 'path_payment_strict_receive');\n\n let depositAddress = \"\";\n let memo = \"\";\n\n if (paymentOp) {\n // @ts-ignore\n depositAddress = paymentOp.to || paymentOp.funder || \"\"; // 'to' is standard for payment\n }\n\n if (tx.memo_type === 'text' || tx.memo_type === 'id') {\n memo = tx.memo || \"\";\n }\n\n if (depositAddress) {\n console.log(`[NearStrategy] Submitting deposit to 1-Click: ${depositTxHash} -> ${depositAddress} (Memo: ${memo})`);\n try {\n await OneClickService.submitDepositTx({\n txHash: depositTxHash,\n depositAddress: depositAddress,\n memo: memo || undefined\n });\n console.log(\"[NearStrategy] Deposit submitted successfully.\");\n } catch (e: any) {\n console.error(\"[NearStrategy] Failed to submit deposit to 1-Click:\", e.message);\n // We don't fail the whole verification if this fails, but it's risky. \n // Ideally we should retry or fail. For now log error.\n }\n } else {\n console.error(\"[NearStrategy] Could not determine deposit address from Stellar operations.\");\n }\n\n return {\n success: true,\n transactionHash: depositTxHash,\n netAmount: amount,\n data: { completed: true }\n };\n } else {\n return { success: false, errorReason: \"Stellar Transaction Failed\" };\n }\n } catch (e: any) {\n console.error(\"Stellar Verification Error\", e);\n return { success: false, errorReason: `Stellar Verification Failed: ${e.message}` };\n }\n }\n\n // We need RPC to verify. Using FACILITATOR_NETWORKS for convenience as it has clean RPCs\n const { createPublicClient, http } = await import(\"viem\");\n const { FACILITATOR_NETWORKS } = await import(\"@/constants/facilitator\");\n\n const networkConfig = FACILITATOR_NETWORKS[sourceChain];\n if (!networkConfig) {\n return { success: false, errorReason: `Unsupported source chain for verification: ${sourceChain}` };\n }\n\n const publicClient = createPublicClient({\n chain: networkConfig.chain,\n transport: http(networkConfig.rpcUrl)\n });\n\n try {\n console.log(`[NearStrategy] Waiting for receipt...`);\n // @ts-ignore\n const receipt = await publicClient.waitForTransactionReceipt({ hash: depositTxHash as `0x${string}` });\n console.log(`[NearStrategy] Receipt found. Status: ${receipt.status}`);\n\n if (receipt.status === \"success\") {\n\n // Get Transaction to find 'to' address\n const tx = await publicClient.getTransaction({ hash: depositTxHash as `0x${string}` });\n const depositAddress = tx.to;\n\n if (depositAddress) {\n console.log(`[NearStrategy] Submitting deposit to 1-Click: ${depositTxHash} -> ${depositAddress}`);\n try {\n await OneClickService.submitDepositTx({\n txHash: depositTxHash,\n depositAddress: depositAddress\n });\n console.log(\"[NearStrategy] Deposit submitted successfully.\");\n } catch (e: any) {\n console.error(\"[NearStrategy] Failed to submit deposit to 1-Click:\", e.message);\n }\n }\n\n return {\n success: true,\n transactionHash: depositTxHash,\n netAmount: amount, // rough estimate or we can re-quote if needed\n data: {\n // Info for UI\n completed: true\n }\n };\n } else {\n console.error(`[NearStrategy] Transaction failed. Status: ${receipt.status}`);\n return { success: false, errorReason: `Transaction Reverted on-chain (Status: ${receipt.status})` };\n }\n } catch (e: any) {\n console.error(`[NearStrategy] Verification Error:`, e);\n return { success: false, errorReason: `Verification Error: ${e.message}` };\n }\n }\n\n // 2. No Hash -> Get Quote & Prompt Deposit\n try {\n const quoteResult = await getNearQuote(\n sourceChain,\n destChain,\n amount,\n destToken,\n sourceToken,\n recipient,\n senderAddress // refund address\n );\n\n // Return success with the deposit address. \n return {\n success: true,\n transactionHash: \"PENDING_USER_DEPOSIT\",\n netAmount: quoteResult.amountAtomicNet,\n data: {\n depositAddress: quoteResult.depositAddress,\n amountToDeposit: quoteResult.amountAtomicNet,\n sourceToken: sourceToken || \"USDC\",\n memo: (quoteResult.quote.quote as any).depositMemo || (quoteResult.quote.quote as any).memo\n }\n } as any; // Casting as any to avoid strict type issues if SettleResponse doesn't have `data` yet\n\n } catch (e: any) {\n return { success: false, errorReason: e.message };\n }\n }\n}\n\nexport async function getNearQuote(\n sourceChain: ChainKey,\n destChain: ChainKey,\n amount: string,\n destToken?: string,\n sourceToken?: string,\n recipient?: string,\n senderAddress?: string,\n options?: { dry?: boolean }\n) {\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) {\n throw new Error(\"Invalid chain configuration\");\n }\n\n const sourceAssetInfo = sourceConfig.crossChainInformation.nearIntentInformation?.assetsId.find(\n (a) => a.name === (sourceToken || \"USDC\")\n ) || sourceConfig.crossChainInformation.nearIntentInformation?.assetsId[0];\n\n const destAssetInfo = destConfig.crossChainInformation.nearIntentInformation?.assetsId.find(\n (a) => a.name === (destToken || \"USDC\")\n ) || destConfig.crossChainInformation.nearIntentInformation?.assetsId[0];\n\n const sourceAsset = sourceAssetInfo?.assetId;\n const destAsset = destAssetInfo?.assetId;\n\n if (!sourceAsset || !destAsset) {\n throw new Error(\"Near Intents not supported for these assets\");\n }\n\n const decimals = sourceAssetInfo?.decimals || (sourceChain === \"Stellar\" ? 7 : 6);\n const amountAtomicTotal = Math.floor(parseFloat(amount) * Math.pow(10, decimals));\n const isDev = process.env.NEXT_PUBLIC_ENVIROMENT === \"development\" || process.env.NODE_ENV === \"development\";\n // Fee is hardcoded here, should be dynamic or 0.02 as per previous logic\n const feeValue = isDev ? 0 : 0.02;\n\n const feeUnits = Math.floor(feeValue * Math.pow(10, decimals));\n const amountAtomicNet = (amountAtomicTotal - feeUnits).toString();\n\n if (BigInt(amountAtomicNet) <= 0) {\n throw new Error(\"Amount too small to cover fees\");\n }\n\n // Recipient on destination\n if (!recipient) {\n throw new Error(\"Recipient address is required for NEAR Quote\");\n }\n\n // Refund address on source (sender)\n const refundAddress = senderAddress || recipient;\n\n console.log(`[NearService] Requesting Quote: ${sourceChain} -> ${destChain}`, JSON.stringify({ amount, sourceAsset, destAsset, options }, null, 2));\n\n const quoteRequest: QuoteRequest = {\n dry: options?.dry || false,\n swapType: QuoteRequest.swapType.EXACT_INPUT,\n slippageTolerance: 100,\n originAsset: sourceAsset as string,\n depositType: QuoteRequest.depositType.ORIGIN_CHAIN,\n depositMode: sourceChain === \"Stellar\" ? QuoteRequest.depositMode.MEMO : undefined,\n destinationAsset: destAsset as string,\n amount: amountAtomicNet,\n refundTo: refundAddress,\n refundType: QuoteRequest.refundType.ORIGIN_CHAIN,\n recipient: recipient,\n recipientType: QuoteRequest.recipientType.DESTINATION_CHAIN,\n deadline: new Date(Date.now() + 3 * 60 * 1000).toISOString(),\n referral: \"1llet\",\n quoteWaitingTimeMs: 10000,\n };\n\n console.log(`[NearService] Final QuoteRequest:`, JSON.stringify(quoteRequest, null, 2));\n\n const quote = await OneClickService.getQuote(quoteRequest);\n\n if (!options?.dry && !quote.quote?.depositAddress) {\n throw new Error(\"No deposit address returned from 1-Click Quote\");\n }\n\n return {\n quote,\n depositAddress: quote.quote?.depositAddress || \"\",\n amountAtomicTotal: BigInt(amountAtomicTotal),\n amountAtomicNet\n };\n}\n\nexport async function getNearSimulation(\n sourceChain: ChainKey,\n destChain: ChainKey,\n amount: string,\n destToken?: string,\n sourceToken?: string\n) {\n console.log(\">>> [Bridge Quote] Simulation Request:\", { sourceChain, destChain, amount, destToken, sourceToken });\n\n if (!amount || isNaN(parseFloat(amount))) {\n throw new Error(\"Invalid amount\");\n }\n\n const amountNum = parseFloat(amount);\n const isDev = process.env.NEXT_PUBLIC_ENVIROMENT === \"development\" || process.env.NODE_ENV === \"development\";\n // User logic: const FEE = IS_DEV ? PlatformFess.DEV : PlatformFess.EVM_TO_OTHER\n const usedFee = isDev ? PlatformFees.DEV : PlatformFees.EVM_TO_OTHER;\n\n // Hardcoded min amount check as per snippet\n const MIN_AMOUNT = usedFee;\n\n // Determine decimals from config to ensure precision (e.g. Stellar USDC is 7)\n const sourceConfig = NETWORKS[sourceChain];\n const sourceAssetInfo = sourceConfig?.crossChainInformation?.nearIntentInformation?.assetsId.find(\n (a) => a.name === (sourceToken || \"USDC\")\n ) || sourceConfig?.crossChainInformation?.nearIntentInformation?.assetsId[0];\n const decimals = sourceAssetInfo?.decimals || (sourceChain === \"Stellar\" ? 7 : 6);\n\n const netAmountBridged = (amountNum - usedFee).toFixed(decimals);\n\n if (parseFloat(netAmountBridged) <= 0) {\n return {\n success: false,\n error: `Insufficient amount (${amountNum}) to cover fee (${usedFee})`,\n minAmount: MIN_AMOUNT\n };\n }\n\n const sender = sourceChain === \"Stellar\" ? DUMMY_STELLAR_ADDRESS : DUMMY_EVM_ADDRESS;\n const recipient = destChain === \"Stellar\" ? DUMMY_STELLAR_ADDRESS : DUMMY_EVM_ADDRESS;\n\n try {\n const quoteResult = await getNearQuote(\n sourceChain,\n destChain,\n amount,\n destToken,\n sourceToken,\n recipient,\n sender,\n { dry: true }\n );\n\n // console.log(\">>> [Bridge Quote] API Response:\", JSON.stringify(quoteResult.quote, null, 2));\n\n return {\n success: true,\n amountSent: amountNum,\n protocolFee: usedFee,\n netAmountBridged: parseFloat(netAmountBridged),\n // @ts-ignore - access safe property\n estimatedReceived: quoteResult.quote?.quote?.amountOutFormatted || \"0\",\n minAmount: MIN_AMOUNT\n };\n\n } catch (error: any) {\n console.error(\">>> [Bridge Quote] Error:\", error);\n return {\n success: false,\n error: error.message || \"Unknown quote error\",\n minAmount: MIN_AMOUNT\n };\n }\n}\n","import { BridgeStrategy, BridgeContext } from \"./types\";\nimport { SettleResponse } from \"@/services/types\";\nimport { NETWORKS } from \"@/constants/chainsInformation\";\n\n// Stargate API Base URL\nconst STARGATE_API_URL = \"https://stargate.finance/api/v1/quotes\";\n\nexport class StargateStrategy implements BridgeStrategy {\n name = \"StargateFinance\";\n\n canHandle(context: BridgeContext): boolean {\n const { sourceChain, destChain, sourceToken } = context;\n\n // Override: Force Stargate for Base -> Avalanche (USDC)\n if (sourceChain === \"Base\" && destChain === \"Avalanche\" && sourceToken === \"USDC\") {\n return true;\n }\n\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) return false;\n\n // Check Chain Support\n const sourceStargate = sourceConfig.crossChainInformation.stargateInformation?.support;\n const destStargate = destConfig.crossChainInformation.stargateInformation?.support;\n\n if (!sourceStargate || !destStargate) return false;\n\n // Check Token Support\n // Find asset config for the token\n const sourceAsset = sourceConfig.assets.find(a => a.name === (sourceToken || \"USDC\"));\n const destAsset = destConfig.assets.find(a => a.name === (context.destToken || \"USDC\"));\n\n // Both assets must explicitly support Stargate\n return !!(sourceAsset?.supportsStargate && destAsset?.supportsStargate);\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { sourceChain, destChain, amount, recipient, destToken, sourceToken, senderAddress } = context;\n\n console.log(`[StargateStrategy] Executing ${sourceChain} -> ${destChain} for ${amount} ${sourceToken}`);\n\n // Get configurations\n const sourceConfig = NETWORKS[sourceChain];\n const destConfig = NETWORKS[destChain];\n\n if (!sourceConfig || !destConfig) {\n return { success: false, errorReason: \"Invalid chain configuration\" };\n }\n\n const sourceAsset = sourceConfig.assets.find(a => a.name === (sourceToken || \"USDC\"));\n const destAsset = destConfig.assets.find(a => a.name === (destToken || \"USDC\"));\n\n if (!sourceAsset || !destAsset) {\n return { success: false, errorReason: \"Invalid asset configuration\" };\n }\n\n const decimals = sourceAsset.decimals;\n const amountAtomic = Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\n\n // 0.5% slippage default\n const minAmountAtomic = Math.floor(parseFloat(amountAtomic) * 0.995).toString();\n\n const srcChainKey = sourceChain.toLowerCase();\n const dstChainKey = destChain.toLowerCase();\n\n const url = new URL(STARGATE_API_URL);\n url.searchParams.append(\"srcToken\", sourceAsset.address as string);\n url.searchParams.append(\"dstToken\", destAsset.address as string);\n url.searchParams.append(\"srcAddress\", senderAddress || recipient);\n url.searchParams.append(\"dstAddress\", recipient);\n url.searchParams.append(\"srcChainKey\", srcChainKey);\n url.searchParams.append(\"dstChainKey\", dstChainKey);\n url.searchParams.append(\"srcAmount\", amountAtomic);\n url.searchParams.append(\"dstAmountMin\", minAmountAtomic);\n\n console.log(`[StargateStrategy] Fetching quote from: ${url.toString()}`);\n\n try {\n const response = await fetch(url.toString());\n const data = await response.json();\n\n if (!response.ok) {\n console.error(\"[StargateStrategy] API Error:\", data);\n return { success: false, errorReason: `Stargate API Error: ${JSON.stringify(data)}` };\n }\n\n console.log(\"[StargateStrategy] Quote received:\", JSON.stringify(data, null, 2));\n\n // Find a valid quote. Prefer 'taxi' (immediate), then 'bus'.\n const quotes = data.quotes || [];\n if (quotes.length === 0) {\n return { success: false, errorReason: \"No routes found from Stargate API\" };\n }\n\n const selectedQuote = quotes.find((q: any) => q.route === 'stargate/v2/taxi') || quotes[0];\n console.log(`[StargateStrategy] Selected Route: ${selectedQuote.route}`);\n\n // Extract 'bridge' step\n const bridgeStep = selectedQuote.steps.find((s: any) => s.type === 'bridge');\n if (!bridgeStep || !bridgeStep.transaction) {\n return { success: false, errorReason: \"No bridge transaction found in quote\" };\n }\n\n const txData = bridgeStep.transaction;\n const approvalTx = selectedQuote.steps.find((s: any) => s.type === 'approve')?.transaction;\n\n return {\n success: true,\n transactionHash: \"PENDING_USER_SIGNATURE\",\n netAmount: amount,\n estimatedReceived: selectedQuote.dstAmount,\n data: {\n strategy: \"Stargate\",\n quote: selectedQuote,\n // Normalized Transaction Data for execution\n txTarget: txData.to,\n txData: txData.data,\n txValue: txData.value,\n // Metadata\n approvalRequired: approvalTx ? {\n target: approvalTx.to,\n data: approvalTx.data,\n value: approvalTx.value\n } : null\n }\n };\n\n } catch (e: any) {\n console.error(\"[StargateStrategy] Execution Error:\", e);\n return { success: false, errorReason: e.message };\n }\n }\n}\n\nexport async function getStargateSimulation(\n sourceChain: string,\n destChain: string,\n amount: string,\n recipient: string\n) {\n if (sourceChain === \"Base\" && destChain === \"Avalanche\") {\n // Proceed\n } else {\n // Simple validation or just let API fail?\n // Since we call this explicitly, we assume caller verified.\n }\n\n const { TransferManager } = await import(\"./TransferManager\");\n // We can reuse the class logic but better to just use static or duplicate\n // for separate Simulation vs Execution logic.\n // Actually, execute() returns quote data.\n\n // Let's implement standalone fetch.\n const sourceConfig = NETWORKS[sourceChain as any];\n const destConfig = NETWORKS[destChain as any];\n\n if (!sourceConfig || !destConfig) {\n return { success: false, error: \"Invalid Simulation Config\" };\n }\n\n const sourceAsset = sourceConfig.assets.find(a => a.name === \"USDC\");\n const destAsset = destConfig.assets.find(a => a.name === \"USDC\");\n\n if (!sourceAsset || !destAsset) {\n return { success: false, error: \"USDC not found on chains\" };\n }\n\n const decimals = sourceAsset.decimals;\n const amountAtomic = Math.floor(parseFloat(amount) * Math.pow(10, decimals)).toString();\n const minAmountAtomic = Math.floor(parseFloat(amountAtomic) * 0.995).toString();\n\n const srcChainKey = sourceChain.toLowerCase();\n const dstChainKey = destChain.toLowerCase();\n\n const url = new URL(STARGATE_API_URL);\n url.searchParams.append(\"srcToken\", sourceAsset.address as string);\n url.searchParams.append(\"dstToken\", destAsset.address as string);\n url.searchParams.append(\"srcAddress\", recipient || \"0x000000000000000000000000000000000000dEaD\");\n url.searchParams.append(\"dstAddress\", recipient || \"0x000000000000000000000000000000000000dEaD\");\n url.searchParams.append(\"srcChainKey\", srcChainKey);\n url.searchParams.append(\"dstChainKey\", dstChainKey);\n url.searchParams.append(\"srcAmount\", amountAtomic);\n url.searchParams.append(\"dstAmountMin\", minAmountAtomic);\n\n try {\n const response = await fetch(url.toString());\n const data = await response.json();\n\n if (!response.ok) {\n return { success: false, error: \"Stargate API Error\" };\n }\n\n const quotes = data.quotes || [];\n if (quotes.length === 0) return { success: false, error: \"No Stargate routes found\" };\n\n const selectedQuote = quotes.find((q: any) => q.route === 'stargate/v2/taxi') || quotes[0];\n\n // Stargate doesn't charge \"Protocol Fee\" in the same way (it's gas/slippage). \n // We can show Fee = (SrcAmount - DstAmount)\n const srcAmt = BigInt(selectedQuote.srcAmount);\n const dstAmt = BigInt(selectedQuote.dstAmount);\n const fees = srcAmt - dstAmt;\n const feeFormatted = (Number(fees) / Math.pow(10, decimals)).toFixed(6);\n\n const estimatedReceived = (Number(dstAmt) / Math.pow(10, destAsset.decimals)).toFixed(6);\n\n return {\n success: true,\n amountSent: parseFloat(amount),\n protocolFee: feeFormatted, // Fee in USDC\n netAmountBridged: parseFloat(amount), // Technically amount sent\n estimatedReceived: estimatedReceived,\n minAmount: \"0\"\n };\n } catch (e: any) {\n return { success: false, error: e.message };\n }\n}\n","import { BridgeStrategy, BridgeContext, SettleResponse } from \"./types\";\nimport { parseUnits, getAddress, createPublicClient, createWalletClient, http, padHex } from \"viem\";\nimport { NETWORKS } from \"@/constants/chainsInformation\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { erc20Abi } from \"viem\";\nimport { c32addressDecode } from \"c32check\";\n\n// Official Stacks xReserve Bridge Address on Ethereum (Mainnet)\n// Source: https://docs.stacks.co/learn/bridging/usdcx/contracts\nexport const STACKS_BRIDGE_ADDRESS_ETH = \"0x8888888199b2Df864bf678259607d6D5EBb4e3Ce\" as const;\n\n// Verified ABI for Stacks Bridge Deposit (depositToRemote)\nconst stacksBridgeAbi = [\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" },\n { \"internalType\": \"uint32\", \"name\": \"remoteDomain\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"remoteRecipient\", \"type\": \"bytes32\" },\n { \"internalType\": \"address\", \"name\": \"localToken\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"maxFee\", \"type\": \"uint256\" },\n { \"internalType\": \"bytes\", \"name\": \"hookData\", \"type\": \"bytes\" }\n ],\n \"name\": \"depositToRemote\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const;\n\nexport class StacksStrategy implements BridgeStrategy {\n name = \"Stacks\";\n\n canHandle(context: BridgeContext): boolean {\n return context.sourceChain === \"Ethereum\" && context.destChain === \"Stacks\";\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n const { amount, recipient, facilitatorPrivateKey, sourceChain } = context;\n\n if (sourceChain !== \"Ethereum\") {\n return { success: false, errorReason: \"Stacks Strategy only supports financing from Ethereum\" };\n }\n\n if (!facilitatorPrivateKey) {\n return { success: false, errorReason: \"Private Key required for Stacks Bridge execution\" };\n }\n\n const networkConfig = NETWORKS[sourceChain];\n if (!networkConfig || !networkConfig.evm) {\n return { success: false, errorReason: `Unsupported chain or missing EVM config: ${sourceChain}` };\n }\n\n try {\n const account = privateKeyToAccount(facilitatorPrivateKey as `0x${string}`);\n const client = createWalletClient({\n account,\n chain: networkConfig.evm.chain,\n transport: http(networkConfig.evm.rpcUrl as string)\n });\n const publicClient = createPublicClient({\n chain: networkConfig.evm.chain,\n transport: http(networkConfig.evm.rpcUrl as string)\n });\n\n // 1. Approve USDC\n const ethAssets = NETWORKS[\"Ethereum\"].assets;\n const usdcToken = ethAssets.find(a => a.name === \"USDC\");\n if (!usdcToken || !usdcToken.address) throw new Error(\"USDC config/address not found for Ethereum\");\n const usdcAddress = getAddress(usdcToken.address);\n\n const amountBigInt = parseUnits(amount, 6); // USDC 6 decimals\n\n // Check Balance\n const balance = await publicClient.readContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [account.address]\n });\n\n if (balance < amountBigInt) {\n throw new Error(`Insufficient USDC balance on Ethereum (Facilitator). Has: ${balance}, Needed: ${amountBigInt}`);\n }\n\n // Check Allowance and Approve if needed\n const allowance = await publicClient.readContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [account.address, STACKS_BRIDGE_ADDRESS_ETH]\n });\n\n if (allowance < amountBigInt) {\n console.log(\"[Stacks] Approving bridge...\");\n const approveHash = await client.writeContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [STACKS_BRIDGE_ADDRESS_ETH, amountBigInt],\n chain: networkConfig.evm.chain\n });\n await publicClient.waitForTransactionReceipt({ hash: approveHash });\n console.log(\"[Stacks] Approved.\");\n }\n\n // 2. Call Deposit (depositToRemote)\n const REMOTE_DOMAIN_STACKS = 10003;\n\n // Format Recipient to bytes32 (Stacks Address Decoding)\n let recipientBytes32: `0x${string}`;\n if (recipient.startsWith(\"0x\")) {\n recipientBytes32 = padHex(recipient as `0x${string}`, { size: 32 });\n } else {\n try {\n // Decode Stacks Address (e.g. SP...) to get the 20-byte hash\n const [version, hash] = c32addressDecode(recipient);\n\n // Pad the 20-byte hash to 32 bytes\n recipientBytes32 = padHex(`0x${hash}`, { size: 32 });\n } catch (e: any) {\n throw new Error(`Invalid Stacks Recipient: ${e.message}`);\n }\n }\n\n console.log(`[Stacks] Depositing ${amount} USDC to ${recipient} (Domain ${REMOTE_DOMAIN_STACKS})...`);\n\n const hash = await client.writeContract({\n address: STACKS_BRIDGE_ADDRESS_ETH,\n abi: stacksBridgeAbi,\n functionName: \"depositToRemote\",\n args: [\n amountBigInt,\n REMOTE_DOMAIN_STACKS,\n recipientBytes32,\n usdcAddress,\n 0n, // maxFee\n \"0x\" // hookData\n ],\n chain: networkConfig.evm.chain\n });\n\n console.log(`[Stacks] Deposit Tx: ${hash}`);\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n\n if (receipt.status === \"success\") {\n return {\n success: true,\n transactionHash: hash,\n netAmount: amountBigInt.toString(),\n };\n } else {\n return {\n success: false,\n transactionHash: hash,\n errorReason: \"Stacks Deposit Transaction Reverted\"\n };\n }\n\n } catch (error) {\n return {\n success: false,\n errorReason: error instanceof Error ? error.message : \"Using Stacks Bridge failed\"\n };\n }\n }\n}\n","import { AccountAbstraction } from \"../AccountAbstraction.js\";\nimport { UserOperation } from \"../types\";\nimport { parseUnits, formatUnits } from \"viem\";\n\nexport interface MultiHopStep {\n aa: AccountAbstraction;\n buildUserOp: () => Promise<UserOperation>; // Function to build the UserOp\n waitCondition?: () => Promise<boolean>; // Polling condition (e.g., balance check)\n description: string;\n}\n\nexport class RouterService {\n\n /**\n * Orchestrates a Multi-Hop transfer by signing ALL UserOps upfront (Reverse Order),\n * and then executing them sequentially (Forward Order) with polling support.\n * \n * @param steps Array of MultiHopStep ordered by execution (Source -> Intermediate -> Dest)\n * @param onLog Optional callback for logging progress\n */\n async executeMultiHop(\n steps: MultiHopStep[],\n onLog: (msg: string) => void = console.log\n ) {\n onLog(\"[Router] Orchestrating Multi-Hop Sequence...\");\n\n const signedOps: { stepIndex: number, signedOp: UserOperation }[] = [];\n\n // 1. PHASE 1: PREPARATION & REVERSE SIGNING\n // We iterate backwards to sign the last step first (e.g. Step 2, then Step 1)\n onLog(\"[Router] Phase 1: Preparation & Upfront Signing (Reverse Order)...\");\n\n for (let i = steps.length - 1; i >= 0; i--) {\n const step = steps[i];\n onLog(`[Router] Preparing Step ${i + 1}: ${step.description}...`);\n\n try {\n // Build\n const userOp = await step.buildUserOp();\n\n // Sign\n onLog(`[Router] Please sign Step ${i + 1} (${step.description})...`);\n const signedOp = await step.aa.signUserOperation(userOp);\n\n // Store\n signedOps.unshift({ stepIndex: i, signedOp }); // Add to front to maintain 0,1 order in array\n onLog(`[Router] Step ${i + 1} Signed Successfully.`);\n } catch (err: any) {\n onLog(`[Router] Error preparing Step ${i + 1}: ${err.message}`);\n throw err;\n }\n }\n\n // 2. PHASE 2: SEQUENTIAL EXECUTION\n onLog(\"[Router] Phase 2: Sequential Execution (Forward Order)...\");\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n const signedOp = signedOps[i].signedOp;\n\n // Wait Condition (if exists, checking BEFORE execution? No, usually AFTER previous step)\n // Actually, waitCondition usually implies \"Wait for funds to arrive BEFORE executing this step\"\n // EXCEPT for the first step.\n\n if (step.waitCondition) {\n onLog(`[Router] Step ${i + 1} requires waiting (e.g. for funds)...`);\n const success = await this.pollCondition(step.waitCondition, onLog);\n if (!success) throw new Error(`Timeout waiting for condition at Step ${i + 1}`);\n }\n\n onLog(`[Router] Executing Step ${i + 1}...`);\n try {\n const hash = await step.aa.sendUserOperation(signedOp);\n onLog(`[Router] Step ${i + 1} Sent! Hash: ${hash}`);\n\n // Wait for receipt to ensure step succeeded before proceeding\n onLog(`[Router] Waiting for Step ${i + 1} confirmation...`);\n const receipt = await step.aa.waitForUserOperation(hash);\n\n if (!receipt.success) {\n throw new Error(`Step ${i + 1} Failed on-chain!`);\n }\n onLog(`[Router] Step ${i + 1} Confirmed.`);\n\n } catch (err: any) {\n onLog(`[Router] Execution Failed at Step ${i + 1}: ${err.message}`);\n throw err;\n }\n }\n\n onLog(\"[Router] Multi-Hop Sequence Completed Successfully! 🚀\");\n return true;\n }\n\n private async pollCondition(condition: () => Promise<boolean>, onLog: (msg: string) => void): Promise<boolean> {\n const timeout = 60000 * 10; // 10 mins\n const interval = 5000;\n let elapsed = 0;\n\n while (elapsed < timeout) {\n try {\n const passed = await condition();\n if (passed) return true;\n } catch (e: any) {\n // Ignore transient RPC errors\n onLog(`[Router] Polling check failed (retrying): ${e.message}`);\n }\n\n await new Promise(r => setTimeout(r, interval));\n elapsed += interval;\n if (elapsed % 20000 === 0) onLog(`[Router] Still waiting... (${Math.floor(elapsed / 1000)}s)`);\n }\n return false;\n }\n}\n","// Cleaned imports and logic\nimport { BridgeStrategy, BridgeContext } from \"./types\";\nimport { CCTPStrategy } from \"./cctp\";\nimport { NearStrategy } from \"./near\";\nimport { StargateStrategy } from \"./stargate\";\nimport { StacksStrategy } from \"./stacks\";\nimport { SettleResponse } from \"@/services/types\";\nimport { RouterService } from \"./Router\";\nimport { AccountAbstraction } from \"../AccountAbstraction\";\nimport { parseUnits, formatUnits } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { NETWORKS } from \"../constants/chainsInformation\";\n\nexport class TransferManager {\n private strategies: BridgeStrategy[];\n private router: RouterService;\n\n constructor() {\n this.strategies = [\n new CCTPStrategy(),\n new StargateStrategy(),\n new StargateStrategy(),\n new NearStrategy(),\n new StacksStrategy()\n ];\n this.router = new RouterService();\n }\n\n async execute(context: BridgeContext, logCallback?: (msg: string) => void): Promise<SettleResponse> {\n const log = logCallback || console.log;\n\n // 1. Check Same Chain (Direct Transfer)\n if (context.sourceChain === context.destChain && context.sourceToken === context.destToken) {\n log(`[TransferManager] Same Chain detected. Signal Direct Transfer.`);\n return {\n success: true,\n transactionHash: \"DIRECT_TRANSFER_REQUIRED\",\n data: {\n action: \"DIRECT_TRANSFER\",\n amount: context.amount,\n token: context.sourceToken,\n recipient: context.recipient\n }\n };\n }\n\n // 2. Auto-Route Stacks Multi-Hop (Any CCTP -> Stacks)\n if (context.destChain === \"Stacks\" && context.sourceChain !== \"Ethereum\") {\n const networkConfig = NETWORKS[context.sourceChain];\n if (networkConfig?.crossChainInformation?.circleInformation?.cCTPInformation?.supportCCTP) {\n log(`[TransferManager] Auto-Routing to Stacks via CCTP (${context.sourceChain} -> Ethereum -> Stacks)`);\n\n if (!context.sourceAA || !context.facilitatorPrivateKey) {\n return {\n success: false,\n errorReason: \"Source AA and Facilitator Private Key required for Stacks Multi-Hop\"\n };\n }\n\n return this.executeEVMToStacks(\n context,\n context.sourceAA,\n context.facilitatorPrivateKey,\n logCallback\n );\n }\n }\n\n const strategies = this.strategies;\n\n // 3. Normal Strategy Routing\n const stargateStrategy = strategies.find(s => s instanceof StargateStrategy);\n if (stargateStrategy && stargateStrategy.canHandle(context)) {\n log(`[TransferManager] Routing to: ${stargateStrategy.name} (Stargate)`);\n return stargateStrategy.execute(context);\n }\n\n const cctpStrategy = strategies.find(s => s instanceof CCTPStrategy);\n if (cctpStrategy && cctpStrategy.canHandle(context)) {\n log(`[TransferManager] Routing to: ${cctpStrategy.name} (CCTP)`);\n return cctpStrategy.execute(context);\n }\n\n const nearStrategy = strategies.find(s => s instanceof NearStrategy);\n if (nearStrategy && nearStrategy.canHandle(context)) {\n log(`[TransferManager] Routing to: ${nearStrategy.name} (Near)`);\n return nearStrategy.execute(context);\n }\n\n return {\n success: false,\n errorReason: `No suitable transfer strategy found for ${context.sourceChain} -> ${context.destChain}`\n };\n }\n\n /**\n * Specialized method for Base/Unichain -> Stacks flow.\n * 1. EVM (Base/Unichain) -> Ethereum (CCTP)\n * 2. Ethereum -> Stacks (Stacks Bridge)\n */\n async executeEVMToStacks(\n context: BridgeContext,\n sourceAA: AccountAbstraction,\n ethPrivateKey: string,\n logCallback?: (msg: string) => void\n ): Promise<SettleResponse> {\n const log = logCallback || console.log;\n log(`[TransferManager] Starting ${context.sourceChain} -> Stacks Flow...`);\n\n const cctpStrategy = this.strategies.find(s => s instanceof CCTPStrategy)!;\n const stacksStrategy = this.strategies.find(s => s instanceof StacksStrategy)!;\n\n // 1. Check if Resume Flow (Already on Ethereum)\n if (context.sourceChain === \"Ethereum\") {\n log(\"[TransferManager] Source is Ethereum. Executing Stacks Bridge Step...\");\n return stacksStrategy.execute({\n ...context,\n facilitatorPrivateKey: ethPrivateKey\n });\n }\n\n // 2. EVM -> Ethereum (CCTP)\n // Check if Source Chain supports CCTP\n const sourceConfig = NETWORKS[context.sourceChain];\n const supportsCCTP = sourceConfig?.crossChainInformation?.circleInformation?.cCTPInformation?.supportCCTP;\n\n if (supportsCCTP) {\n log(`[TransferManager] Step 1: ${context.sourceChain} -> Ethereum (via CCTP)`);\n\n const ethAccount = privateKeyToAccount(ethPrivateKey as `0x${string}`);\n const ethAddress = ethAccount.address;\n\n // Step 1a: Fund Facilitator (User -> Facilitator)\n log(`[TransferManager] Funding Facilitator (${ethAddress})...`);\n try {\n const amountBigInt = parseUnits(context.amount, 6); // Assuming USDC 6 decimals\n\n const executeFunding = async () => {\n try {\n return await sourceAA.smartTransfer(\n \"USDC\",\n ethAddress,\n amountBigInt\n );\n } catch (e: any) {\n const msg = e.message || String(e);\n if (msg.includes(\"Approval required\")) {\n log(\"[TransferManager] Approval Required. Approving USDC...\");\n const saAddress = await sourceAA.getSmartAccount();\n if (!saAddress) throw new Error(\"SA Address missing for approval\");\n\n await sourceAA.approveToken(sourceAA.getTokenAddress(\"USDC\"), saAddress, amountBigInt);\n log(\"[TransferManager] Approved. Retrying Transfer...\");\n return await sourceAA.smartTransfer(\n \"USDC\",\n ethAddress,\n amountBigInt\n );\n }\n throw e;\n }\n };\n\n const transferResult = await executeFunding();\n\n if ('success' in transferResult && !transferResult.success) {\n throw new Error(\"Funding Transfer Failed\");\n }\n\n const fundingHash = transferResult.receipt.transactionHash;\n\n log(`[TransferManager] Funds Sent. Hash: ${fundingHash}`);\n\n // Step 1b: Execute CCTP (Facilitator Burn -> Mint)\n const cctpResult = await cctpStrategy.execute({\n ...context,\n destChain: \"Ethereum\",\n destToken: \"USDC\",\n recipient: ethAddress,\n facilitatorPrivateKey: ethPrivateKey,\n depositTxHash: fundingHash\n });\n\n if (!cctpResult.success) {\n return cctpResult;\n }\n\n log(\"[TransferManager] CCTP Step Initiated.\");\n\n if (cctpResult.mintTransactionHash) {\n log(\"[TransferManager] CCTP Complete (Funds on Ethereum). Proceeding to Stacks Step...\");\n\n // Execute Step 2: Ethereum -> Stacks\n const stacksResult = await stacksStrategy.execute({\n ...context,\n sourceChain: \"Ethereum\",\n amount: cctpResult.netAmount ? formatUnits(BigInt(cctpResult.netAmount), 6) : context.amount,\n facilitatorPrivateKey: ethPrivateKey\n });\n\n return {\n success: stacksResult.success,\n transactionHash: stacksResult.transactionHash,\n data: {\n fundingStep: { transactionHash: fundingHash },\n cctpStep: cctpResult,\n stacksStep: stacksResult\n },\n netAmount: stacksResult.netAmount,\n errorReason: stacksResult.errorReason\n };\n } else {\n log(\"[TransferManager] CCTP Pending. Please resume later.\");\n return {\n ...cctpResult,\n attestation: {\n message: \"CCTP Initiated but not finalized.\",\n attestation: cctpResult.attestation?.attestation || \"\"\n }\n };\n }\n\n } catch (err) {\n return {\n success: false,\n errorReason: `Funding/CCTP Failed: ${err instanceof Error ? err.message : String(err)}`\n };\n }\n }\n\n return {\n success: false,\n errorReason: `Unsupported Route for ${context.sourceChain}->Stacks Helper`\n };\n }\n}\n","export const factoryAbi = [\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"salt\", type: \"uint256\" },\n ],\n name: \"getAccountAddress\",\n outputs: [{ name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"salt\", type: \"uint256\" },\n ],\n name: \"isAccountDeployed\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"salt\", type: \"uint256\" },\n ],\n name: \"createAccount\",\n outputs: [{ name: \"account\", type: \"address\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const entryPointAbi = [\n {\n inputs: [\n { name: \"sender\", type: \"address\" },\n { name: \"key\", type: \"uint192\" },\n ],\n name: \"getNonce\",\n outputs: [{ name: \"nonce\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\nexport const smartAccountAbi = [\n {\n inputs: [\n { name: \"target\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"data\", type: \"bytes\" },\n ],\n name: \"execute\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"targets\", type: \"address[]\" },\n { name: \"values\", type: \"uint256[]\" },\n { name: \"datas\", type: \"bytes[]\" },\n ],\n name: \"executeBatch\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\nexport const erc20Abi = [\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","import { type Address, type Hash } from \"viem\";\nimport { type ChainConfig, type EvmChainConfig, type UserOperation, type GasEstimate, type UserOpReceipt, type ApprovalSupportResult } from \"./types\";\n\nexport class BundlerClient {\n private bundlerUrl: string;\n private entryPointAddress: Address;\n\n constructor(config: EvmChainConfig, entryPointAddress: Address) {\n this.bundlerUrl = config.bundlerUrl;\n this.entryPointAddress = entryPointAddress;\n }\n\n private async call(method: string, params: any[]): Promise<any> {\n const response = await fetch(this.bundlerUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method,\n params,\n }),\n });\n\n const result = await response.json();\n if (result.error) {\n throw new Error(result.error.message);\n }\n return result.result;\n }\n\n async estimateGas(userOp: Partial<UserOperation>): Promise<GasEstimate> {\n const result = await this.call(\"eth_estimateUserOperationGas\", [\n {\n sender: userOp.sender,\n nonce: userOp.nonce ? \"0x\" + userOp.nonce.toString(16) : \"0x0\",\n initCode: userOp.initCode || \"0x\",\n callData: userOp.callData || \"0x\",\n paymasterAndData: userOp.paymasterAndData || \"0x\",\n signature: \"0x\",\n },\n this.entryPointAddress,\n ]);\n\n console.log(\"DEBUG: estimateGas result:\", result);\n\n return {\n callGasLimit: result.callGasLimit,\n verificationGasLimit: result.verificationGasLimit,\n preVerificationGas: result.preVerificationGas,\n maxFeePerGas: result.maxFeePerGas,\n maxPriorityFeePerGas: result.maxPriorityFeePerGas,\n paymasterAndData: result.paymasterAndData,\n };\n }\n\n async sendUserOperation(userOp: UserOperation): Promise<Hash> {\n return await this.call(\"eth_sendUserOperation\", [\n {\n sender: userOp.sender,\n nonce: \"0x\" + userOp.nonce.toString(16),\n initCode: userOp.initCode,\n callData: userOp.callData,\n callGasLimit: \"0x\" + userOp.callGasLimit.toString(16),\n verificationGasLimit: \"0x\" + userOp.verificationGasLimit.toString(16),\n preVerificationGas: \"0x\" + userOp.preVerificationGas.toString(16),\n maxFeePerGas: \"0x\" + userOp.maxFeePerGas.toString(16),\n maxPriorityFeePerGas: \"0x\" + userOp.maxPriorityFeePerGas.toString(16),\n paymasterAndData: userOp.paymasterAndData,\n signature: userOp.signature,\n },\n this.entryPointAddress,\n ]);\n }\n\n async waitForUserOperation(userOpHash: Hash, timeout = 60000): Promise<UserOpReceipt> {\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeout) {\n const result = await this.call(\"eth_getUserOperationReceipt\", [userOpHash]);\n\n if (result) {\n return result as UserOpReceipt;\n }\n\n // Wait 2 seconds before polling again\n await new Promise((resolve) => setTimeout(resolve, 2000));\n }\n\n throw new Error(\"Timeout waiting for UserOperation\");\n }\n\n async requestApprovalSupport(token: Address, owner: Address, spender: Address, amount: bigint): Promise<ApprovalSupportResult> {\n return await this.call(\"pm_requestApprovalSupport\", [\n token,\n owner,\n spender,\n amount.toString()\n ]);\n }\n\n async scheduleUserOp(userOp: UserOperation, condition: { token: string, minAmount: string }): Promise<{ status: string, taskId: string }> {\n return await this.call(\"bundler_scheduleUserOp\", [\n {\n sender: userOp.sender,\n nonce: \"0x\" + userOp.nonce.toString(16),\n initCode: userOp.initCode,\n callData: userOp.callData,\n callGasLimit: \"0x\" + userOp.callGasLimit.toString(16),\n verificationGasLimit: \"0x\" + userOp.verificationGasLimit.toString(16),\n preVerificationGas: \"0x\" + userOp.preVerificationGas.toString(16),\n maxFeePerGas: \"0x\" + userOp.maxFeePerGas.toString(16),\n maxPriorityFeePerGas: \"0x\" + userOp.maxPriorityFeePerGas.toString(16),\n paymasterAndData: userOp.paymasterAndData,\n signature: userOp.signature,\n },\n condition\n ]);\n }\n}\n","import { type Address, type PublicClient, encodeFunctionData } from \"viem\";\nimport { type ChainConfig, type Token } from \"./types\";\nimport { erc20Abi } from \"./constants\";\n\nexport class TokenService {\n private tokens: Map<string, Token> = new Map();\n private publicClient: PublicClient;\n\n constructor(chainConfig: ChainConfig, publicClient: PublicClient) {\n this.publicClient = publicClient;\n\n chainConfig.tokens.forEach(token => {\n this.tokens.set(token.symbol.toUpperCase(), token);\n });\n }\n\n /**\n * Resolve token address from symbol or return address if provided\n */\n getTokenAddress(token: string | Address): Address {\n\n\n if (token.startsWith(\"0x\")) return token as Address;\n const info = this.tokens.get(token.toUpperCase());\n if (!info) throw new Error(`Token ${token} not found in chain config`);\n return info.address;\n }\n\n /**\n * Get balance of a token for an account\n */\n async getBalance(token: string | Address, account: Address): Promise<bigint> {\n const address = this.getTokenAddress(token);\n\n if (address === \"0x0000000000000000000000000000000000000000\") {\n return await this.publicClient.getBalance({ address: account });\n }\n return await this.publicClient.readContract({\n address,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [account],\n }) as bigint;\n }\n\n /**\n * Get allowance (ERC-20 only)\n */\n async getAllowance(token: string | Address, owner: Address, spender: Address): Promise<bigint> {\n const address = this.getTokenAddress(token);\n\n if (address === \"0x0000000000000000000000000000000000000000\") {\n return 0n;\n }\n\n return await this.publicClient.readContract({\n address,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [owner, spender],\n }) as bigint;\n }\n\n /**\n * Encode transfer data\n */\n encodeTransfer(recipient: Address, amount: bigint): `0x${string}` {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transfer\",\n args: [recipient, amount]\n });\n }\n\n /**\n * Encode transferFrom data\n */\n encodeTransferFrom(sender: Address, recipient: Address, amount: bigint): `0x${string}` {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"transferFrom\",\n args: [sender, recipient, amount]\n });\n }\n\n /**\n * Encode approve data\n */\n encodeApprove(spender: Address, amount: bigint): `0x${string}` {\n return encodeFunctionData({\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, amount]\n });\n }\n}\n","import {\n type Address,\n type Hex,\n type PublicClient,\n encodeFunctionData,\n encodeAbiParameters,\n keccak256\n} from \"viem\";\nimport { type ChainConfig, type UserOperation } from \"./types\";\nimport { BundlerClient } from \"./BundlerClient\";\nimport { factoryAbi, smartAccountAbi, entryPointAbi } from \"./constants\";\n\nexport class UserOpBuilder {\n private chainConfig: ChainConfig;\n private bundlerClient: BundlerClient;\n private publicClient: PublicClient;\n private entryPointAddress: Address;\n private factoryAddress: Address;\n\n constructor(\n chainConfig: ChainConfig,\n bundlerClient: BundlerClient,\n publicClient: PublicClient\n ) {\n this.chainConfig = chainConfig;\n this.bundlerClient = bundlerClient;\n this.publicClient = publicClient;\n\n this.entryPointAddress = (chainConfig as any).entryPointAddress!;\n this.factoryAddress = (chainConfig as any).factoryAddress!;\n }\n\n async getNonce(smartAccountAddress: Address): Promise<bigint> {\n return await this.publicClient.readContract({\n address: this.entryPointAddress,\n abi: entryPointAbi,\n functionName: \"getNonce\",\n args: [smartAccountAddress, 0n],\n }) as bigint;\n }\n\n buildInitCode(owner: Address): Hex {\n const createAccountData = encodeFunctionData({\n abi: factoryAbi,\n functionName: \"createAccount\",\n args: [owner, 0n],\n });\n return `${this.factoryAddress}${createAccountData.slice(2)}` as Hex;\n }\n\n async isAccountDeployed(smartAccountAddress: Address): Promise<boolean> {\n const code = await this.publicClient.getCode({\n address: smartAccountAddress,\n });\n return code !== undefined && code !== \"0x\";\n }\n\n async buildUserOperationBatch(\n owner: Address,\n smartAccountAddress: Address,\n transactions: { target: Address; value: bigint; data: Hex }[]\n ): Promise<UserOperation> {\n const isDeployed = await this.isAccountDeployed(smartAccountAddress);\n const initCode = isDeployed ? \"0x\" : this.buildInitCode(owner);\n\n const targets = transactions.map((tx) => tx.target);\n const values = transactions.map((tx) => tx.value);\n const datas = transactions.map((tx) => tx.data);\n\n const callData = encodeFunctionData({\n abi: smartAccountAbi,\n functionName: \"executeBatch\",\n args: [targets, values, datas],\n });\n\n const nonce = await this.getNonce(smartAccountAddress);\n\n const partialOp = {\n sender: smartAccountAddress,\n nonce,\n initCode: initCode as Hex,\n callData,\n paymasterAndData: ((this.chainConfig as any).paymasterAddress || \"0x\") as Hex,\n };\n\n const gasEstimate = await this.bundlerClient.estimateGas(partialOp);\n\n return {\n ...partialOp,\n callGasLimit: BigInt(gasEstimate.callGasLimit),\n verificationGasLimit: BigInt(gasEstimate.verificationGasLimit),\n preVerificationGas: BigInt(gasEstimate.preVerificationGas),\n maxFeePerGas: BigInt(gasEstimate.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(gasEstimate.maxPriorityFeePerGas),\n paymasterAndData: (gasEstimate.paymasterAndData || partialOp.paymasterAndData) as Hex,\n signature: \"0x\",\n };\n }\n\n async buildDeployUserOp(\n owner: Address,\n smartAccountAddress: Address\n ): Promise<UserOperation> {\n const isDeployed = await this.isAccountDeployed(smartAccountAddress);\n if (isDeployed) throw new Error(\"Account already deployed\");\n\n const initCode = this.buildInitCode(owner);\n const callData = \"0x\";\n const nonce = await this.getNonce(smartAccountAddress);\n\n const partialOp = {\n sender: smartAccountAddress,\n nonce,\n initCode: initCode as Hex,\n callData: callData as Hex,\n paymasterAndData: ((this.chainConfig as any).paymasterAddress || \"0x\") as Hex,\n };\n\n const gasEstimate = await this.bundlerClient.estimateGas(partialOp);\n\n return {\n ...partialOp,\n callGasLimit: BigInt(gasEstimate.callGasLimit),\n verificationGasLimit: BigInt(gasEstimate.verificationGasLimit),\n preVerificationGas: BigInt(gasEstimate.preVerificationGas),\n maxFeePerGas: BigInt(gasEstimate.maxFeePerGas),\n maxPriorityFeePerGas: BigInt(gasEstimate.maxPriorityFeePerGas),\n paymasterAndData: (gasEstimate.paymasterAndData || partialOp.paymasterAndData) as Hex,\n signature: \"0x\",\n };\n }\n\n getUserOpHash(userOp: UserOperation): Hex {\n const packed = encodeAbiParameters(\n [\n { type: \"address\" },\n { type: \"uint256\" },\n { type: \"bytes32\" },\n { type: \"bytes32\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"uint256\" },\n { type: \"bytes32\" },\n ],\n [\n userOp.sender,\n userOp.nonce,\n keccak256(userOp.initCode),\n keccak256(userOp.callData),\n userOp.callGasLimit,\n userOp.verificationGasLimit,\n userOp.preVerificationGas,\n userOp.maxFeePerGas,\n userOp.maxPriorityFeePerGas,\n keccak256(userOp.paymasterAndData),\n ]\n );\n\n const packedHash = keccak256(packed);\n\n return keccak256(\n encodeAbiParameters(\n [{ type: \"bytes32\" }, { type: \"address\" }, { type: \"uint256\" }],\n [packedHash, this.entryPointAddress, BigInt(this.chainConfig.chain.id)]\n )\n );\n }\n}\n","import {\n type Address,\n createPublicClient,\n createWalletClient,\n decodeErrorResult,\n type Hash,\n type Hex,\n http,\n type LocalAccount,\n type PublicClient,\n type WalletClient\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { factoryAbi, } from \"./constants\";\nimport { type ApprovalSupportResult, type ChainConfig, type EvmChainConfig, type UserOperation, type UserOpReceipt } from \"./types\";\nimport { BundlerClient } from \"./BundlerClient\";\nimport { TokenService } from \"./TokenService\";\nimport { UserOpBuilder } from \"./UserOpBuilder\";\n\n/**\n * ERC-4337 Account Abstraction Client\n */\nexport class AccountAbstraction {\n private owner: Address | null = null;\n private smartAccountAddress: Address | null = null;\n private chainConfig: EvmChainConfig;\n private publicClient: PublicClient;\n private bundlerClient: BundlerClient;\n private walletClient: WalletClient | null = null;\n\n // Services\n private tokenService: TokenService;\n private userOpBuilder: UserOpBuilder;\n\n // Resolved addresses\n private entryPointAddress: Address;\n private factoryAddress: Address;\n\n constructor(chainConfig: EvmChainConfig) {\n this.chainConfig = chainConfig;\n\n // Validation\n if (!chainConfig.entryPointAddress) throw new Error(\"EntryPoint address required\");\n this.entryPointAddress = chainConfig.entryPointAddress;\n if (!chainConfig.factoryAddress) throw new Error(\"Factory address required\");\n this.factoryAddress = chainConfig.factoryAddress;\n\n // Setup Clients\n const rpcUrl = chainConfig.rpcUrl || chainConfig.chain.rpcUrls.default.http[0];\n this.publicClient = createPublicClient({\n chain: chainConfig.chain,\n transport: http(rpcUrl),\n });\n\n this.bundlerClient = new BundlerClient(chainConfig, this.entryPointAddress);\n\n // Setup Services\n this.tokenService = new TokenService(chainConfig, this.publicClient);\n this.userOpBuilder = new UserOpBuilder(chainConfig, this.bundlerClient, this.publicClient);\n }\n\n getBundlerClient(): BundlerClient {\n return this.bundlerClient;\n }\n\n getChainId(): number {\n return this.chainConfig.chain.id;\n }\n\n getPublicClient(): PublicClient {\n return this.publicClient;\n }\n\n async buildUserOperation(transaction: { target: Address; value: bigint; data: Hex }): Promise<UserOperation> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.userOpBuilder.buildUserOperationBatch(this.owner, this.smartAccountAddress, [transaction]);\n }\n\n async buildBatchUserOperation(transactions: { target: Address; value: bigint; data: Hex }[]): Promise<UserOperation> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.userOpBuilder.buildUserOperationBatch(this.owner, this.smartAccountAddress, transactions);\n }\n\n async connect(signer?: Hex | WalletClient): Promise<{ owner: Address; smartAccount: Address }> {\n // Mode 1: Private Key (Local Signer)\n if (typeof signer === 'string') {\n const account: LocalAccount = privateKeyToAccount(signer);\n this.owner = account.address;\n\n const rpcUrl = this.chainConfig.rpcUrl || this.chainConfig.chain.rpcUrls.default.http[0];\n this.walletClient = createWalletClient({\n account,\n chain: this.chainConfig.chain,\n transport: http(rpcUrl)\n });\n\n } else if (signer && typeof signer === 'object') {\n // Mode 2: External Wallet Client (e.g. Wagmi)\n this.walletClient = signer as WalletClient;\n if (!this.walletClient.account) throw new Error(\"WalletClient must have an account\");\n this.owner = this.walletClient.account.address;\n\n } else {\n // Mode 3: External Provider (MetaMask window.ethereum)\n if (typeof window === \"undefined\" || !window.ethereum) {\n throw new Error(\"MetaMask is not installed and no private key provided\");\n }\n\n // Request account access\n const accounts = (await window.ethereum.request({\n method: \"eth_requestAccounts\",\n })) as string[];\n\n if (!accounts || accounts.length === 0) throw new Error(\"No accounts found\");\n\n // Check network\n const chainId = (await window.ethereum.request({\n method: \"eth_chainId\",\n })) as string;\n const targetChainId = this.chainConfig.chain.id;\n\n if (parseInt(chainId, 16) !== targetChainId) {\n try {\n await window.ethereum.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: \"0x\" + targetChainId.toString(16) }],\n });\n } catch (switchError: unknown) {\n const error = switchError as { code?: number };\n if (error.code === 4902) {\n await window.ethereum.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: \"0x\" + targetChainId.toString(16),\n chainName: this.chainConfig.chain.name,\n nativeCurrency: this.chainConfig.chain.nativeCurrency,\n rpcUrls: [this.chainConfig.rpcUrl || this.chainConfig.chain.rpcUrls.default.http[0]],\n blockExplorerUrls: this.chainConfig.chain.blockExplorers?.default?.url\n ? [this.chainConfig.chain.blockExplorers.default.url]\n : [],\n },\n ],\n });\n } else {\n throw switchError;\n }\n }\n }\n\n this.owner = accounts[0] as Address;\n // No walletClient needed, we use window.ethereum directly\n }\n\n this.smartAccountAddress = await this.getSmartAccountAddress(this.owner!);\n\n return {\n owner: this.owner!,\n smartAccount: this.smartAccountAddress,\n };\n }\n\n // --- Account Management ---\n\n async isAccountDeployed(): Promise<boolean> {\n if (!this.smartAccountAddress) return false;\n const code = await this.publicClient.getBytecode({ address: this.smartAccountAddress });\n return code !== undefined;\n }\n\n async deployAccount(): Promise<UserOpReceipt> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.sendTransaction({\n target: this.smartAccountAddress,\n value: 0n,\n data: \"0x\"\n });\n }\n\n /**\n * Get the Smart Account address for an owner\n */\n async getSmartAccountAddress(owner: Address): Promise<Address> {\n try {\n const address = await this.publicClient.readContract({\n address: this.factoryAddress,\n abi: factoryAbi,\n functionName: \"getAccountAddress\",\n args: [owner, 0n],\n }) as Address;\n return address;\n } catch (e) {\n // Fallback: Try createAccount (SimpleAccountFactory style) via simulation\n try {\n const { result } = await this.publicClient.simulateContract({\n address: this.factoryAddress,\n abi: factoryAbi,\n functionName: \"createAccount\",\n args: [owner, 0n],\n account: \"0x0000000000000000000000000000000000000000\" // Zero address or random for simulation\n });\n return result as Address;\n } catch (inner) {\n // If both fail, throw the original error or a combined one\n throw e;\n }\n }\n }\n\n // --- Token Methods (Delegated) ---\n\n getTokenAddress(token: string | Address): Address {\n return this.tokenService.getTokenAddress(token);\n }\n\n async getBalance(token: string | Address): Promise<bigint> {\n if (!this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.tokenService.getBalance(token, this.smartAccountAddress);\n }\n\n async getEoaBalance(token: string | Address): Promise<bigint> {\n if (!this.owner) throw new Error(\"Not connected\");\n return this.tokenService.getBalance(token, this.owner);\n }\n\n\n\n async getAllowance(token: string | Address = \"USDC\"): Promise<bigint> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n return this.tokenService.getAllowance(token, this.owner, this.smartAccountAddress);\n }\n\n /**\n * Get comprehensive state of the account for a specific token\n * Useful for UI initialization\n */\n async getAccountState(token: string | Address) {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n const tokenAddress = this.getTokenAddress(token);\n const isNative = tokenAddress === \"0x0000000000000000000000000000000000000000\";\n\n const [balance, eoaBalance, allowance, isDeployed] = await Promise.all([\n this.getBalance(token),\n this.getEoaBalance(token),\n isNative ? 0n : this.getAllowance(token).catch(() => 0n), // Handle native/error gracefully\n this.isAccountDeployed()\n ]);\n\n return {\n owner: this.owner,\n smartAccount: this.smartAccountAddress,\n balance,\n eoaBalance,\n allowance,\n isDeployed\n };\n }\n\n // --- Transactions ---\n\n async sendTransaction(\n tx: { target: Address; value?: bigint; data?: Hex }\n ): Promise<UserOpReceipt> {\n return this.sendBatchTransaction([tx]);\n }\n\n async sendBatchTransaction(\n txs: { target: Address; value?: bigint; data?: Hex }[]\n ): Promise<UserOpReceipt> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n // Normalize\n const transactions = txs.map(tx => ({\n target: tx.target,\n value: tx.value ?? 0n,\n data: tx.data ?? \"0x\"\n }));\n\n try {\n const userOp = await this.userOpBuilder.buildUserOperationBatch(\n this.owner,\n this.smartAccountAddress,\n transactions\n );\n const signed = await this.signUserOperation(userOp);\n const hash = await this.sendUserOperation(signed);\n return await this.waitForUserOperation(hash);\n } catch (error) {\n throw this.decodeError(error);\n }\n }\n\n async deposit(amount: bigint): Promise<Hash> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n if (this.walletClient) {\n return await this.walletClient.sendTransaction({\n account: this.walletClient.account!,\n to: this.smartAccountAddress,\n value: amount,\n chain: this.chainConfig.chain\n });\n }\n\n return await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{\n from: this.owner,\n to: this.smartAccountAddress,\n value: \"0x\" + amount.toString(16)\n }]\n }) as Hash;\n }\n\n /**\n * Smart Transfer: Automatically chooses best method (SA vs EOA) based on balances.\n * Supports strict fee handling.\n */\n async smartTransfer(\n token: Address | string,\n recipient: Address,\n amount: bigint,\n fee?: { amount: bigint; recipient: Address }\n ): Promise<UserOpReceipt | { receipt: { transactionHash: Hash } }> {\n if (!this.owner || !this.smartAccountAddress) throw new Error(\"Not connected\");\n\n const tokenAddress = this.getTokenAddress(token);\n const isNative = tokenAddress === \"0x0000000000000000000000000000000000000000\";\n\n // Refresh State\n const [saBal, eoaBal, allowance] = await Promise.all([\n this.getBalance(token),\n this.getEoaBalance(token),\n isNative ? 0n : this.getAllowance(token).catch(() => 0n)\n ]);\n\n const totalNeeded = amount + (fee?.amount || 0n);\n\n // Strategy 1: Smart Account Pay (Preferred)\n if (saBal >= totalNeeded) {\n const txs = [];\n\n // Transfer to Recipient\n if (isNative) {\n txs.push({ target: recipient, value: amount, data: \"0x\" as Hex });\n } else {\n txs.push({ target: tokenAddress, value: 0n, data: this.tokenService.encodeTransfer(recipient, amount) });\n }\n\n // Transfer Fee\n if (fee && fee.amount > 0n) {\n if (isNative) {\n txs.push({ target: fee.recipient, value: fee.amount, data: \"0x\" as Hex });\n } else {\n txs.push({ target: tokenAddress, value: 0n, data: this.tokenService.encodeTransfer(fee.recipient, fee.amount) });\n }\n }\n console.log(\"SmartTransfer: Using Smart Account\");\n return this.sendBatchTransaction(txs);\n }\n\n // Strategy 2: EOA Pay (Fallback / Pull)\n if (eoaBal >= totalNeeded) {\n if (isNative) {\n // Native EOA Transfer (Direct)\n console.log(\"SmartTransfer: Using EOA (Native)\");\n if (this.walletClient) {\n const hash = await this.walletClient.sendTransaction({\n account: this.walletClient.account!,\n to: recipient,\n value: amount,\n chain: this.chainConfig.chain\n });\n return { receipt: { transactionHash: hash } };\n }\n const hash = await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{ from: this.owner, to: recipient, value: \"0x\" + amount.toString(16) }]\n }) as Hash;\n return { receipt: { transactionHash: hash } };\n } else {\n // ERC-20 EOA Pull (TransferFrom)\n console.log(\"SmartTransfer: Using EOA (Pull)\");\n // Check allowance\n if (allowance < totalNeeded) {\n // Infinite approval standard: maxUint256\n throw new Error(`Approval required. Please approve ${token} usage.`);\n }\n\n const txs = [];\n // Pull to Recipient\n txs.push({\n target: tokenAddress,\n value: 0n,\n data: this.tokenService.encodeTransferFrom(this.owner, recipient, amount)\n });\n\n // Pull Fee\n if (fee && fee.amount > 0n) {\n txs.push({\n target: tokenAddress,\n value: 0n,\n data: this.tokenService.encodeTransferFrom(this.owner, fee.recipient, fee.amount)\n });\n }\n return this.sendBatchTransaction(txs);\n }\n }\n\n throw new Error(`Insufficient funds.`);\n }\n\n async transfer(\n token: Address | string,\n recipient: Address,\n amount: bigint\n ): Promise<UserOpReceipt> {\n const tokenAddress = this.getTokenAddress(token);\n\n if (tokenAddress === \"0x0000000000000000000000000000000000000000\") {\n return this.sendTransaction({\n target: recipient,\n value: amount,\n data: \"0x\"\n });\n }\n\n // ERC-20\n const data = this.tokenService.encodeTransfer(recipient, amount);\n return this.sendTransaction({\n target: tokenAddress,\n value: 0n,\n data\n });\n }\n\n /**\n * Approve a token for the Smart Account\n */\n async approveToken(\n token: Address,\n spender: Address,\n amount: bigint = 115792089237316195423570985008687907853269984665640564039457584007913129639935n\n ): Promise<Hash | \"NOT_NEEDED\"> {\n if (!this.owner) throw new Error(\"Not connected\");\n\n const support = await this.requestApprovalSupport(token, spender, amount);\n\n if (support.type === \"approve\") {\n const data = this.tokenService.encodeApprove(spender, amount);\n\n if (this.walletClient) {\n return await this.walletClient.sendTransaction({\n account: this.walletClient.account!,\n to: token,\n data,\n chain: this.chainConfig.chain\n });\n }\n\n return await window.ethereum!.request({\n method: \"eth_sendTransaction\",\n params: [{\n from: this.owner,\n to: token,\n data,\n }]\n }) as Hash;\n }\n\n if (support.type === \"permit\") throw new Error(\"Permit not yet supported\");\n return \"NOT_NEEDED\";\n }\n\n // --- Core Bridge to Bundler/UserOp ---\n\n async signUserOperation(userOp: UserOperation): Promise<UserOperation> {\n if (!this.owner) throw new Error(\"Not connected\");\n\n const userOpHash = this.userOpBuilder.getUserOpHash(userOp);\n let signature: Hex;\n\n if (this.walletClient) {\n signature = await this.walletClient.signMessage({\n account: this.walletClient.account!,\n message: { raw: userOpHash } // Sign hash directly\n });\n } else {\n signature = (await window.ethereum!.request({\n method: \"personal_sign\",\n params: [userOpHash, this.owner],\n })) as Hex;\n }\n\n return { ...userOp, signature };\n }\n\n async sendUserOperation(userOp: UserOperation): Promise<Hash> {\n return this.bundlerClient.sendUserOperation(userOp);\n }\n\n async waitForUserOperation(hash: Hash, timeout = 60000) {\n return this.bundlerClient.waitForUserOperation(hash, timeout);\n }\n\n // Internal but exposed via BundlerClient originally\n async requestApprovalSupport(token: Address, spender: Address, amount: bigint): Promise<ApprovalSupportResult> {\n if (!this.owner) throw new Error(\"Not connected\");\n return this.bundlerClient.requestApprovalSupport(token, this.owner, spender, amount);\n }\n\n // Error Decoding (Private)\n private decodeError(error: any): Error {\n const msg = error?.message || \"\";\n const hexMatch = msg.match(/(0x[0-9a-fA-F]+)/);\n\n if (hexMatch) {\n try {\n const decoded = decodeErrorResult({\n abi: [{ inputs: [{ name: \"message\", type: \"string\" }], name: \"Error\", type: \"error\" }],\n data: hexMatch[0] as Hex\n });\n if (decoded.errorName === \"Error\") return new Error(`Smart Account Error: ${decoded.args[0]}`);\n } catch (e) { /* ignore */ }\n }\n\n if (msg.includes(\"AA21\")) return new Error(\"Smart Account: Native transfer failed (ETH missing?)\");\n if (msg.includes(\"AA25\")) return new Error(\"Smart Account: Invalid account nonce\");\n\n return error instanceof Error ? error : new Error(String(error));\n }\n\n // Getters\n getOwner() { return this.owner; }\n getSmartAccount() { return this.smartAccountAddress; }\n}\n\n// Global window types for MetaMask\ndeclare global {\n interface Window {\n ethereum?: {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on: (event: string, callback: (args: unknown) => void) => void;\n removeListener: (event: string, callback: (args: unknown) => void) => void;\n };\n }\n}\n","// Core\nexport { AccountAbstraction } from \"./AccountAbstraction\";\nexport { BundlerClient } from \"./BundlerClient\";\nexport { BASE } from \"./chains/Evm/Base.js\";\nexport { AVALANCHE } from \"./chains/Evm/Avalanche.js\";\nexport { OPTIMISM } from \"./chains/Evm/Optimism.js\";\nexport { UNICHAIN } from \"./chains/Evm/Unichain.js\";\n\n// Config & Registry\nexport * from \"./chains\";\n\n// Types\nexport type { ChainConfig, Token, UserOperation, UserOpReceipt, GasEstimate, ApprovalSupportResult } from \"./types\";\n\n// Constants (ABIs)\nexport { erc20Abi, smartAccountAbi, entryPointAbi } from \"./constants\";\nexport { CHAIN_ID_TO_KEY } from \"./constants/chains\";\nexport * from \"./services/StellarService\";\nexport { STELLAR } from \"./chains/NoEvm/Stellar\";\n// Services\nexport { TransferManager } from \"./services/TransferManager\";\nexport { NearStrategy, getNearSimulation, getNearQuote } from \"./services/near\";\nexport { CCTPStrategy } from \"./services/cctp\";\nexport { StargateStrategy, getStargateSimulation } from \"./services/stargate\";\nexport { uniswapService, UniswapService } from \"./services/uniswap\";\nexport { RouterService } from './services/Router.js';\n","import { type ChainConfig } from \"./types\";\nimport { type ChainConfig as ChainConfigData } from \"./types/chain\";\nimport { BASE } from \"./chains/Evm/Base\";\nimport { GNOSIS } from \"./chains/Evm/Gnosis\";\nimport { OPTIMISM } from \"./chains/Evm/Optimism\";\nimport { BASE_SEPOLIA as BASE_SEPOLIA_DATA } from \"./chains/Evm/BaseSepolia\";\nimport { AVALANCHE } from \"./chains/Evm/Avalanche\";\nimport { BNB } from \"./chains/Evm/Binance\";\nimport { POLYGON } from \"./chains/Evm/Polygon\";\nimport { ARBITRUM } from \"./chains/Evm/Arbitrum\";\nimport { UNICHAIN } from \"./chains/Evm/Unichain\";\nimport { Monad as MONAD } from \"./chains/Evm/Monad\";\nimport {\n base,\n baseSepolia,\n gnosis,\n optimism,\n avalanche,\n bsc,\n polygon,\n arbitrum,\n unichain,\n monad\n} from \"viem/chains\";\n\nimport { STELLAR } from \"./chains/NoEvm/Stellar\";\nimport { STACKS } from \"./chains/NoEvm/Stacks\";\n\nfunction mapToSDKConfig(data: ChainConfigData): ChainConfig {\n if (data.nonEvm) {\n // Simple heuristic or hardcoded mapping for Non-EVM\n const isStacks = data.assets[0].address?.toString().startsWith(\"SP\") || data.nonEvm.serverURL?.includes(\"hiro\");\n const chainId = isStacks ? 5000 : 9000;\n const chainName = isStacks ? \"Stacks\" : \"Stellar\";\n\n return {\n chain: { id: chainId, name: chainName },\n tokens: data.assets.map(a => ({\n symbol: a.name,\n decimals: a.decimals,\n address: a.address!\n }))\n };\n }\n if (!data.evm) throw new Error(\"Non-EVM config used in EVM SDK\");\n return {\n chain: data.evm.chain,\n rpcUrl: data.evm.rpcUrl || undefined,\n bundlerUrl: data.evm.bundlerUrl!,\n entryPointAddress: data.evm.entryPointAddress,\n factoryAddress: data.evm.factoryAddress,\n paymasterAddress: data.evm.paymasterAddress,\n tokens: data.assets.map(a => ({\n symbol: a.name,\n decimals: a.decimals,\n address: a.address as `0x${string}`\n }))\n };\n}\n\nexport const BASE_MAINNET: ChainConfig = mapToSDKConfig(BASE);\nexport const OPTIMISM_MAINNET: ChainConfig = mapToSDKConfig(OPTIMISM);\nexport const GNOSIS_MAINNET: ChainConfig = mapToSDKConfig(GNOSIS);\nexport const BASE_SEPOLIA: ChainConfig = mapToSDKConfig(BASE_SEPOLIA_DATA);\nexport const AVALANCHE_MAINNET: ChainConfig = mapToSDKConfig(AVALANCHE);\nexport const BSC_MAINNET: ChainConfig = mapToSDKConfig(BNB);\nexport const POLYGON_MAINNET: ChainConfig = mapToSDKConfig(POLYGON);\nexport const ARBITRUM_MAINNET: ChainConfig = mapToSDKConfig(ARBITRUM);\nexport const UNICHAIN_MAINNET: ChainConfig = mapToSDKConfig(UNICHAIN);\nexport const MONAD_MAINNET: ChainConfig = mapToSDKConfig(MONAD);\nexport const STELLAR_MAINNET: ChainConfig = mapToSDKConfig(STELLAR);\nexport const STACKS_MAINNET: ChainConfig = mapToSDKConfig(STACKS);\n\nexport const CHAIN_CONFIGS: Record<number, ChainConfig> = {\n [base.id]: BASE_MAINNET,\n [baseSepolia.id]: BASE_SEPOLIA,\n [gnosis.id]: GNOSIS_MAINNET,\n [optimism.id]: OPTIMISM_MAINNET,\n [avalanche.id]: AVALANCHE_MAINNET,\n [bsc.id]: BSC_MAINNET,\n [polygon.id]: POLYGON_MAINNET,\n [arbitrum.id]: ARBITRUM_MAINNET,\n [unichain.id]: UNICHAIN_MAINNET,\n [monad.id]: MONAD_MAINNET,\n 9000: STELLAR_MAINNET,\n 5000: STACKS_MAINNET\n};\n\n","import { baseSepolia } from \"viem/chains\";\nimport { ChainConfig } from \"../../types/chain.js\";\nimport { BUNDLER_URL } from \"../../constants/bundler\";\n\nexport const BASE_SEPOLIA: ChainConfig = {\n assets: [\n {\n name: \"USDC\",\n decimals: 6,\n address: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n coingeckoId: \"usd-coin\"\n },\n {\n name: \"ETH\",\n decimals: 18,\n address: \"0x0000000000000000000000000000000000000000\",\n coingeckoId: \"ethereum\"\n }\n ],\n evm: {\n chain: baseSepolia,\n rpcUrl: \"https://sepolia.base.org\",\n supports7702: true,\n erc4337: true,\n bundlerUrl: `${BUNDLER_URL}/rpc?chain=baseSepolia`,\n entryPointAddress: \"0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789\",\n factoryAddress: \"0x9406Cc6185a346906296840746125a0E44976454\",\n // Paymaster optional\n },\n crossChainInformation: {\n circleInformation: {\n supportCirclePaymaster: false,\n aproxFromFee: 0,\n cCTPInformation: {\n supportCCTP: false,\n domain: 0, // Mock\n },\n },\n nearIntentInformation: {\n support: false, // Assuming false for testnet unless known\n assetsId: [],\n needMemo: false\n }\n }\n}\n","import {\n base,\n baseSepolia,\n gnosis,\n optimism,\n optimismSepolia,\n arbitrum,\n polygon,\n bsc,\n avalanche,\n unichain,\n monad,\n mainnet\n} from \"viem/chains\";\n\nexport const CHAIN_ID_TO_KEY: Record<string, string> = {\n [mainnet.id]: \"Ethereum\",\n [base.id]: \"Base\",\n [baseSepolia.id]: \"Base\",\n [gnosis.id]: \"Gnosis\",\n [optimism.id]: \"Optimism\",\n [optimismSepolia.id]: \"Optimism\",\n [arbitrum.id]: \"Arbitrum\",\n [polygon.id]: \"Polygon\",\n [bsc.id]: \"Binance\",\n [avalanche.id]: \"Avalanche\",\n [unichain.id]: \"Unichain\",\n [monad.id]: \"Monad\",\n \"9000\": \"Stellar\",\n \"5000\": \"Stacks\"\n};\n","import { createPublicClient, http, encodeFunctionData, parseAbi, Address, type Hex } from \"viem\";\nimport { base } from \"viem/chains\";\n\n// Constants for Base Mainnet\nconst UNISWAP_V3_ROUTER = \"0x2626664c2603336E57B271c5C0b26F421741e481\"; // SwapRouter02\nconst UNISWAP_V3_QUOTER = \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\"; // QuoterV2\nconst USDC_ADDRESS = \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\"; // Base USDC\nconst WETH_ADDRESS = \"0x4200000000000000000000000000000000000006\"; // Base WETH\n\n// ABIs\nconst QUOTER_ABI = parseAbi([\n \"function quoteExactOutputSingle((address tokenIn, address tokenOut, uint256 amount, uint24 fee, uint160 sqrtPriceLimitX96) params) external returns (uint256 amountIn, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)\"\n]);\n\nconst ROUTER_ABI = parseAbi([\n \"function exactOutputSingle((address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 amountOut, uint256 amountInMaximum, uint160 sqrtPriceLimitX96) params) external payable returns (uint256 amountIn)\"\n]);\n\nexport class UniswapService {\n private publicClient;\n\n constructor() {\n this.publicClient = createPublicClient({\n chain: base,\n transport: http(\"https://mainnet.base.org\") // Default public RPC\n });\n }\n\n /**\n * Get amount of USDC needed to buy exact amount of ETH\n * @param amountETHWei Amount of ETH (Wei) needed\n */\n async quoteUSDCForETH(amountETHWei: bigint): Promise<bigint> {\n // We want to buy WETH (which is unwrapped to ETH by router or we just keep WETH? \n // Stargate needs NATIVE ETH in msg.value.\n // SwapRouter02 executes swap. If output is WETH, we need to unwrap.\n // OR SwapRouter02 has multicall to unwrapWETH9.\n\n // Simpler: Just swap for WETH.\n // Wait, Stargate needs MSG.VALUE. Smart Account needs to have ETH balance.\n // If we swap to WETH, SA has WETH, not ETH.\n // We need router to unwrap. router.unwrapWETH9(0, recipient).\n\n // For Quoting, we quote USDC -> WETH.\n const poolFee = 500; // 0.05% for USDC/WETH usually? Or 3000 (0.3%)?\n // Base USDC/ETH is likely 0.05% (500) or 0.01% (100). Let's use 500 first.\n\n try {\n const params = {\n tokenIn: USDC_ADDRESS as Address,\n tokenOut: WETH_ADDRESS as Address,\n amount: amountETHWei,\n fee: 500,\n sqrtPriceLimitX96: 0n\n };\n\n const result = await this.publicClient.readContract({\n address: UNISWAP_V3_QUOTER,\n abi: QUOTER_ABI,\n functionName: \"quoteExactOutputSingle\",\n args: [params]\n }) as [bigint, bigint, number, bigint];\n\n const amountIn = result[0];\n // Add 5% slippage/buffer to avoid reverts on small fluctuations\n return amountIn * 105n / 100n;\n } catch (e) {\n console.error(\"Quote failed\", e);\n throw new Error(\"Failed to quote USDC for ETH swap\");\n }\n }\n\n /**\n * Build tx data for swapping USDC -> ETH\n * Uses SwapRouter02.exactOutputSingle + unwrapWETH9\n */\n buildSwapData(recipient: Address, amountOutETH: bigint, maxAmountInUSDC: bigint): Hex {\n // We need to encode a Multicall:\n // 1. exactOutputSingle(USDC -> WETH) -> Router keeps WETH (recipient = 0x0...02 ?) or Router?\n // 2. unwrapWETH9(minAmount, recipient)\n\n // SwapRouter02 standard pattern for \"Swap to ETH\":\n // 1. Swap USDC -> WETH (recipient = Router)\n // 2. UnwrapWETH9 (recipient = User)\n\n const swapParams = {\n tokenIn: USDC_ADDRESS as Address,\n tokenOut: WETH_ADDRESS as Address,\n fee: 500,\n recipient: UNISWAP_V3_ROUTER as Address, // Router must hold WETH to unwrap it\n amountOut: amountOutETH,\n amountInMaximum: maxAmountInUSDC,\n sqrtPriceLimitX96: 0n\n };\n\n // Note: For SwapRouter02, if you want to unwrap, you usually set recipient to 0x000...000 during the swap if processing internally,\n // OR simply set recipient to ROUTER, then call unwrap.\n // But verifying standard Router02 multicall:\n // call[0]: exactOutputSingle(...) recipient = 0x0000..0000 (indicates msg.sender usually? No, in router context usually it means Router holds it)\n // call[1]: unwrapWETH9(0, finalRecipient)\n\n // Let's assume standard SwapRouter02 behavior supports Multicall.\n // We need to encode the function calls.\n\n const swapCalldata = encodeFunctionData({\n abi: ROUTER_ABI,\n functionName: \"exactOutputSingle\",\n args: [swapParams]\n });\n\n const unwrapCalldata = encodeFunctionData({\n abi: parseAbi([\"function unwrapWETH9(uint256 amountMinimum, address recipient) payable\"]),\n functionName: \"unwrapWETH9\",\n args: [amountOutETH, recipient]\n });\n\n const multicallCalldata = encodeFunctionData({\n abi: parseAbi([\"function multicall(bytes[] data) payable returns (bytes[])\"]),\n functionName: \"multicall\",\n args: [[swapCalldata, unwrapCalldata]]\n });\n\n return multicallCalldata;\n }\n\n getRouterAddress(): Address {\n return UNISWAP_V3_ROUTER;\n }\n\n getUSDCAddress(): Address {\n return USDC_ADDRESS;\n }\n}\n\nexport const uniswapService = new UniswapService();\n"]}
|