@1llet.xyz/erc4337-gasless-sdk 0.4.32 → 0.4.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants/facilitator.ts","../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/Gnosis.ts","../src/chains/Evm/Optimism.ts","../src/chains/Evm/BaseSepolia.ts","../src/chains.ts","../src/constants/chains.ts","../src/services/cctp.ts","../src/constants/abis.ts","../src/utils/cctp.ts","../src/chains/Evm/Arbitrum.ts","../src/chains/Evm/Unichain.ts","../src/chains/Evm/Polygon.ts","../src/chains/Evm/Avalanche.ts","../src/chains/Evm/WorldChain.ts","../src/chains/NoEvm/Stellar.ts","../src/chains/Evm/Monad.ts","../src/chains/Evm/Binance.ts","../src/constants/chainsInformation.ts","../src/services/near.ts","../src/services/TransferManager.ts"],"names":["base","optimism","gnosis","arbitrum","polygon","encodeFunctionData","encodeAbiParameters","keccak256","createPublicClient","http","privateKeyToAccount","createWalletClient","decodeErrorResult","baseSepolia","BASE_SEPOLIA","axios","unichain","avalanche","worldchain","Networks","monad","bsc","padHex","maxUint256","OpenAPI","FACILITATOR_NETWORKS","QuoteRequest","OneClickService"],"mappings":"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","file":"index.js","sourcesContent":["import { Address } from \"viem\";\nimport { base, optimism, gnosis, arbitrum, polygon } from \"viem/chains\";\nimport { ChainKey } from \"@/types/chain\";\nimport { FacilitatorNetworkConfig } from \"@/services/config\";\n\nexport type FacilitatorChainKey = ChainKey;\n\nexport const calculateFee = (): bigint => {\n // Basic implementation or fetch from ENV\n return BigInt(10000); // 0.01 USDC\n};\n\n// Placeholder configuration. User needs to populate this.\nexport const FACILITATOR_NETWORKS: Record<string, FacilitatorNetworkConfig> = {\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\", // EURe (or USDC on Gnosis? The user is swapping USDT -> USDC, wait. The user log says GNOSIS -> Optimism (USDT -> USDC).\n // For verification, we just need RPC. The 'usdc' field is for CCTP, but verify logic just needs `rpcUrl`.\n // I will populate others as placeholders if unknown.\n usdcName: \"USDC\", // Placeholder\n usdcVersion: \"2\",\n domain: 0, // Placeholder\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: \"0x19330d10D9Cc8751218eaf51E8885D058642E08A\",\n messageTransmitter: \"0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca\",\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, // Placeholder? CCTP domain for Polygon is 7? I should check if I had it elsewhere.\n tokenMessenger: \"0x0000000000000000000000000000000000000000\",\n messageTransmitter: \"0x0000000000000000000000000000000000000000\",\n rpcUrl: \"https://polygon-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\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 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: ChainConfig, 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 return 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\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","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 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.entryPointAddress!;\n this.factoryAddress = chainConfig.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.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 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.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 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 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: ChainConfig;\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: ChainConfig) {\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 /**\n * Connect to MetaMask OR use Private Key\n * @param privateKey (Optional) Hex string of private key. If provided, uses local signing.\n */\n async connect(privateKey?: Hex): Promise<{ owner: Address; smartAccount: Address }> {\n // Mode 1: Private Key (Local Signer)\n if (privateKey) {\n const account: LocalAccount = privateKeyToAccount(privateKey);\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 {\n // Mode 2: External Provider (MetaMask)\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 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 }\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 // --- 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 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 },\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: false,\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 }\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 { 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://opt-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\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 { 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 { 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 { base, baseSepolia, gnosis, optimism } from \"viem/chains\";\n\nfunction mapToSDKConfig(data: ChainConfigData): ChainConfig {\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);\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};\n\n","export const CHAIN_ID_TO_KEY: Record<string, string> = {\n \"8453\": \"Base\",\n \"84532\": \"Base\",\n \"100\": \"Gnosis\",\n \"10\": \"Optimism\",\n \"11155420\": \"Optimism\",\n \"42161\": \"Arbitrum\"\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 fee = calculateFee();\n const minRequired = fee * BigInt(2);\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 * BigInt(2)), // Deduct 0.02 USDC Fee (2x Base 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 as `0x${string}`,\n 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","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 { 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 supports7702: true,\n erc4337: false,\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","\nimport { unichain } from \"viem/chains\";\nimport { Address } from \"abitype\";\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 supports7702: true,\n erc4337: false,\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","\nimport { polygon } from \"viem/chains\";\nimport { Address } from \"abitype\";\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 },\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","\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 },\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 erc4337: false,\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 }\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","\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","\nimport { monad } from \"viem/chains\";\nimport { Address } from \"abitype\";\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 },\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 { 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 erc4337: false,\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","\nimport { ChainKey } from \"@/types/chain\";\nimport { 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};\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\";\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 } = context;\n\n // 1. Verify Deposit if Hash Provided\n if (depositTxHash) {\n console.log(`[NearStrategy] Verifying deposit hash: ${depositTxHash}`);\n\n // We need RPC to verify. Using FACILITATOR_NETWORKS for convenience as it has clean RPCs\n // dynamic import to avoid circular dep issues if any, or just import at top.\n // Assuming FACILITATOR_NETWORKS is available.\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 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 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) {\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}`, { amount, sourceAsset, destAsset });\n\n const quoteRequest: QuoteRequest = {\n 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() + 6 * 60 * 60 * 1000).toISOString(),\n referral: \"1llet\",\n quoteWaitingTimeMs: 10000,\n };\n\n const quote = await OneClickService.getQuote(quoteRequest);\n\n if (!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","import { BridgeStrategy, BridgeContext } from \"./types\";\nimport { CCTPStrategy } from \"./cctp\";\nimport { NearStrategy } from \"./near\";\nimport { SettleResponse } from \"@/services/types\";\n\nexport class TransferManager {\n private strategies: BridgeStrategy[];\n\n constructor() {\n this.strategies = [\n new CCTPStrategy(),\n new NearStrategy()\n ];\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n // 1. Check Same Chain (Direct Transfer)\n if (context.sourceChain === context.destChain && context.sourceToken === context.destToken) {\n console.log(`[TransferManager] Same Chain detected. Signal Direct Transfer.`);\n // Return a signal that tells the client to execute a 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 const strategies = this.strategies;\n\n // 2. Check CCTP (Highest Priority for Cross-Chain USDC)\n const cctpStrategy = strategies.find(s => s instanceof CCTPStrategy);\n if (cctpStrategy && cctpStrategy.canHandle(context)) {\n console.log(`[TransferManager] Routing to: ${cctpStrategy.name} (CCTP)`);\n return cctpStrategy.execute(context);\n }\n\n // 3. Check Near Intents\n const nearStrategy = strategies.find(s => s instanceof NearStrategy);\n if (nearStrategy && nearStrategy.canHandle(context)) {\n console.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"]}
1
+ {"version":3,"sources":["../src/constants/facilitator.ts","../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/Gnosis.ts","../src/chains/Evm/Optimism.ts","../src/chains/Evm/BaseSepolia.ts","../src/chains.ts","../src/constants/chains.ts","../src/services/cctp.ts","../src/constants/abis.ts","../src/utils/cctp.ts","../src/chains/Evm/Arbitrum.ts","../src/chains/Evm/Unichain.ts","../src/chains/Evm/Polygon.ts","../src/chains/Evm/Avalanche.ts","../src/chains/Evm/WorldChain.ts","../src/chains/NoEvm/Stellar.ts","../src/chains/Evm/Monad.ts","../src/chains/Evm/Binance.ts","../src/constants/chainsInformation.ts","../src/services/near.ts","../src/services/TransferManager.ts"],"names":["base","optimism","gnosis","arbitrum","polygon","encodeFunctionData","encodeAbiParameters","keccak256","createPublicClient","http","privateKeyToAccount","createWalletClient","hash","decodeErrorResult","baseSepolia","BASE_SEPOLIA","axios","unichain","avalanche","worldchain","Networks","monad","bsc","padHex","maxUint256","OpenAPI","FACILITATOR_NETWORKS","QuoteRequest","OneClickService"],"mappings":"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","file":"index.js","sourcesContent":["import { Address } from \"viem\";\nimport { base, optimism, gnosis, arbitrum, polygon } from \"viem/chains\";\nimport { ChainKey } from \"@/types/chain\";\nimport { FacilitatorNetworkConfig } from \"@/services/config\";\n\nexport type FacilitatorChainKey = ChainKey;\n\nexport const calculateFee = (): bigint => {\n // Basic implementation or fetch from ENV\n return BigInt(10000); // 0.01 USDC\n};\n\n// Placeholder configuration. User needs to populate this.\nexport const FACILITATOR_NETWORKS: Record<string, FacilitatorNetworkConfig> = {\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\", // EURe (or USDC on Gnosis? The user is swapping USDT -> USDC, wait. The user log says GNOSIS -> Optimism (USDT -> USDC).\n // For verification, we just need RPC. The 'usdc' field is for CCTP, but verify logic just needs `rpcUrl`.\n // I will populate others as placeholders if unknown.\n usdcName: \"USDC\", // Placeholder\n usdcVersion: \"2\",\n domain: 0, // Placeholder\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: \"0x19330d10D9Cc8751218eaf51E8885D058642E08A\",\n messageTransmitter: \"0xC30362313FBBA5cf9163F0bb16a0e01f01A896ca\",\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, // Placeholder? CCTP domain for Polygon is 7? I should check if I had it elsewhere.\n tokenMessenger: \"0x0000000000000000000000000000000000000000\",\n messageTransmitter: \"0x0000000000000000000000000000000000000000\",\n rpcUrl: \"https://polygon-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\"\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 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: ChainConfig, 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 return 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\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","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.entryPointAddress!;\n this.factoryAddress = chainConfig.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.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 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.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 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 formatUnits,\n type Hash,\n type Hex,\n http,\n type LocalAccount,\n maxUint256,\n type PublicClient,\n type WalletClient\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { factoryAbi, } from \"./constants\";\nimport { type ApprovalSupportResult, type ChainConfig, 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: ChainConfig;\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: ChainConfig) {\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 /**\n * Connect to MetaMask OR use Private Key\n * @param privateKey (Optional) Hex string of private key. If provided, uses local signing.\n */\n async connect(privateKey?: Hex): Promise<{ owner: Address; smartAccount: Address }> {\n // Mode 1: Private Key (Local Signer)\n if (privateKey) {\n const account: LocalAccount = privateKeyToAccount(privateKey);\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 {\n // Mode 2: External Provider (MetaMask)\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 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 }\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 },\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: false,\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 }\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 { 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://opt-mainnet.g.alchemy.com/v2/49fUGmuW05ynCui0VEvDN\",\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 { 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 { 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 { base, baseSepolia, gnosis, optimism } from \"viem/chains\";\n\nfunction mapToSDKConfig(data: ChainConfigData): ChainConfig {\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);\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};\n\n","export const CHAIN_ID_TO_KEY: Record<string, string> = {\n \"8453\": \"Base\",\n \"84532\": \"Base\",\n \"100\": \"Gnosis\",\n \"10\": \"Optimism\",\n \"11155420\": \"Optimism\",\n \"42161\": \"Arbitrum\"\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 fee = calculateFee();\n const minRequired = fee * BigInt(2);\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 * BigInt(2)), // Deduct 0.02 USDC Fee (2x Base 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 as `0x${string}`,\n 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","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 { 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 supports7702: true,\n erc4337: false,\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","\nimport { unichain } from \"viem/chains\";\nimport { Address } from \"abitype\";\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 supports7702: true,\n erc4337: false,\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","\nimport { polygon } from \"viem/chains\";\nimport { Address } from \"abitype\";\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 },\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","\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 },\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 erc4337: false,\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 }\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","\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","\nimport { monad } from \"viem/chains\";\nimport { Address } from \"abitype\";\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 },\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 { 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 erc4337: false,\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","\nimport { ChainKey } from \"@/types/chain\";\nimport { 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};\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\";\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 } = context;\n\n // 1. Verify Deposit if Hash Provided\n if (depositTxHash) {\n console.log(`[NearStrategy] Verifying deposit hash: ${depositTxHash}`);\n\n // We need RPC to verify. Using FACILITATOR_NETWORKS for convenience as it has clean RPCs\n // dynamic import to avoid circular dep issues if any, or just import at top.\n // Assuming FACILITATOR_NETWORKS is available.\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 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 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) {\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}`, { amount, sourceAsset, destAsset });\n\n const quoteRequest: QuoteRequest = {\n 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() + 6 * 60 * 60 * 1000).toISOString(),\n referral: \"1llet\",\n quoteWaitingTimeMs: 10000,\n };\n\n const quote = await OneClickService.getQuote(quoteRequest);\n\n if (!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","import { BridgeStrategy, BridgeContext } from \"./types\";\nimport { CCTPStrategy } from \"./cctp\";\nimport { NearStrategy } from \"./near\";\nimport { SettleResponse } from \"@/services/types\";\n\nexport class TransferManager {\n private strategies: BridgeStrategy[];\n\n constructor() {\n this.strategies = [\n new CCTPStrategy(),\n new NearStrategy()\n ];\n }\n\n async execute(context: BridgeContext): Promise<SettleResponse> {\n // 1. Check Same Chain (Direct Transfer)\n if (context.sourceChain === context.destChain && context.sourceToken === context.destToken) {\n console.log(`[TransferManager] Same Chain detected. Signal Direct Transfer.`);\n // Return a signal that tells the client to execute a 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 const strategies = this.strategies;\n\n // 2. Check CCTP (Highest Priority for Cross-Chain USDC)\n const cctpStrategy = strategies.find(s => s instanceof CCTPStrategy);\n if (cctpStrategy && cctpStrategy.canHandle(context)) {\n console.log(`[TransferManager] Routing to: ${cctpStrategy.name} (CCTP)`);\n return cctpStrategy.execute(context);\n }\n\n // 3. Check Near Intents\n const nearStrategy = strategies.find(s => s instanceof NearStrategy);\n if (nearStrategy && nearStrategy.canHandle(context)) {\n console.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"]}