@stableflow/bridges 3.1.1-rc-34b8bcf337-20260722 → 3.1.1
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/README.md +2 -2
- package/dist/index.d.mts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +352 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +350 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/oneclick/contract.ts","../src/oneclick/index.ts","../src/utils/layerzero.ts","../src/utils/nearintents.ts","../src/utils/address.ts","../src/utils/error.ts","../src/utils/cctp.ts","../src/utils/format-number.ts","../src/usdt0/config.ts","../src/usdt0/contract.ts","../src/usdt0/index.ts","../src/cctp/contract.ts","../src/cctp/config.ts","../src/cctp/index.ts","../src/fraxzero/config.ts","../src/fraxzero/contract.ts","../src/fraxzero/index.ts","../src/fraxzero/to-oneclick.ts","../src/fraxzero/from-oneclick.ts","../src/usdt0/to-oneclick.ts","../src/usdt0/from-oneclick.ts","../src/native/contract.ts","../src/native/index.ts","../src/service-map.ts","../src/tx-builder.ts","../src/sfa.ts","../src/usdt0/hop-composer.ts"],"names":["OneClickSwapType","getPrice","Csl","OpenAPI","ExecTime","Big","numberRemoveEndZero","DefaultAddresses","Service","postRequest","SendType","getRequest","bs58","Buffer","usdt0Chains","excludeFees","isOriginLegacy","isDestinationLegacy","isBothLegacy","isMultiHopComposer","result","usdcChains","frxusdChains","PayInLzToken","evmRpcFallbackProvider","oneClickResult","isStableToken","secondStepResult","firstStepResult","totalFeesUsd","fees","to_oneclick_default","from_oneclick_default","ethers","erc20Abi","getPrices","tokens","getRouteStatus","ServiceBackend","TransactionStatus","StableflowStatus","LayerZeroStatus","OneClickStatus"],"mappings":"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","file":"index.js","sourcesContent":["export const ONECLICK_PROXY: Record<string, string> = {\n [\"Arbitrum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Polygon\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"BNB Chain\"]: \"0xf5f1ec09b3ec88F6Cf23ADEEDd792E4642c5B7f1\",\n [\"Optimism\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Avalanche\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ethereum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Berachain\"]: \"0x1766A6B8453c7dbcA8c70d17980B6EA87ACA4F60\",\n [\"Gnosis\"]: \"0x53812Feae0fd2C43f8E6D8847A7f5d035F1d1f8f\",\n [\"Tron\"]: \"TMqM35eVd3D9d7JbShRrMzMPyWLFweKYvW\",\n [\"Solana\"]: \"HWk6MsFEGzXxpe9B4mfEHpvVoCwNeVVMFxb5Mi7qNTM\",\n [\"Near\"]: \"stbflow.near\",\n [\"Aptos\"]: \"0x3000ceb3211d23ef73ad1b602a7a99b72020c9ce9537f580ac5bba556ec3bff9\",\n [\"Base\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"X Layer\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Plasma\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ton\"]: \"EQBeP9Aeu3m5n9qpVyCWZFyji8uQJbzrYuAxq0orWl5e2qjR\",\n [\"Sui\"]: \"0xc178428ac308d322b6051421af1b6019ff4815955306c4317aafd050bdc28146\",\n};\n\nexport const ONECLICK_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"proxyTransfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import Big from \"big.js\";\nimport { ONECLICK_PROXY, ONECLICK_PROXY_ABI } from \"./contract\";\nimport { getRequest, GetStatusParams, numberRemoveEndZero, postRequest } from \"@stableflow/core\";\nimport { getPrice } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { OneClickSwapType } from \"@stableflow/core\";\nimport { DefaultAddresses } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { ChainType } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const BridgeFee = [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: 0, // 100=1% 1=0.01%\n },\n];\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class OneClickService {\n private offsetTime = 1000 * 60 * 60;\n constructor() {\n }\n\n public async formatQuoteData(res: { data: any; params: any; }) {\n const { params } = res;\n const { isProxy = true, prices } = params;\n\n const isExactOutput = params.swapType === OneClickSwapType.Output;\n const nativeTokenPrice = getPrice(prices, params.fromToken.nativeToken.symbol);\n const nativeTokenDecimals = params.fromToken.nativeToken.decimals;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"OneClickService formatQuoteData\", logStyle: \"lime-300\", isDebug: OpenAPI.DEBUG });\n\n if (res.data) {\n // Updated the time estimate for bridge quotes to ensure it does not exceed a maximum threshold.\n // If the calculated time exceeds 60 seconds, it is randomized between 40 and 45 seconds,\n // enhancing user experience by providing more realistic estimates.\n if (res.data?.quote) {\n if (Big(res.data.quote.timeEstimate || 0).gt(60)) {\n res.data.quote.timeEstimate = Math.floor(Math.random() * 6) + 40;\n }\n }\n\n res.data.estimateTime = res.data?.quote?.timeEstimate; // seconds\n res.data.outputAmount = numberRemoveEndZero(Big(res.data?.quote?.amountOut || 0).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));\n let priceImpact = Big(0);\n let _amountInUsd = res.data?.quote?.amountInUsd || 0;\n let _amountOutUsd = res.data?.quote?.amountOutUsd || 0;\n try {\n priceImpact = Big(Big(_amountInUsd).minus(_amountOutUsd)).div(_amountInUsd || 1);\n if (Big(priceImpact).lt(0)) {\n priceImpact = Big(0);\n }\n } catch (error) { }\n res.data.priceImpact = numberRemoveEndZero(Big(priceImpact).toFixed(4));\n\n const fromTokenSymbol = params.fromToken.symbol === \"USD₮0\" ? \"USDT\" : params.fromToken.symbol;\n const toTokenSymbol = params.toToken.symbol === \"USD₮0\" ? \"USDT\" : params.toToken.symbol;\n res.data.exchangeRate = \"1\";\n if (fromTokenSymbol !== toTokenSymbol) {\n res.data.exchangeRate = numberRemoveEndZero(Big(res.data.quote?.amountOutFormatted || 0).div(res.data.quote?.amountInFormatted || 1).toFixed(params.toToken.decimals, 0));\n }\n\n try {\n const netFee = Big(_amountInUsd).minus(_amountOutUsd);\n let bridgeFeeValue = Big(0);\n let destinationGasFee = Big(netFee).minus(bridgeFeeValue);\n destinationGasFee = Big(destinationGasFee).lt(0) ? Big(0) : destinationGasFee;\n if (fromTokenSymbol !== toTokenSymbol) {\n destinationGasFee = Big(0);\n }\n res.data.fees = {\n bridgeFeeUsd: numberRemoveEndZero(Big(bridgeFeeValue).toFixed(20)),\n destinationGasFeeUsd: numberRemoveEndZero(Big(destinationGasFee).toFixed(20)),\n };\n\n // calculate total fees\n res.data.totalFeesUsd = \"0\";\n for (const feeKey in res.data.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.totalFeesUsd = Big(res.data.totalFeesUsd || 0).plus(res.data.fees[feeKey] || 0);\n }\n res.data.totalFeesUsd = numberRemoveEndZero(Big(res.data.totalFeesUsd).toFixed(20));\n\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick estimate failed: %o\", error);\n }\n\n const proxyAddress = ONECLICK_PROXY[params.fromToken.chainName];\n let proxyParams: any = {};\n if (proxyAddress && isProxy) {\n proxyParams = {\n dry: params.dry,\n proxyAddress,\n abi: ONECLICK_PROXY_ABI,\n fromToken: params.fromToken,\n refundTo: params.refundTo,\n recipient: params.recipient,\n // EXACT_OUTPUT: deposit/approve amountIn (with slippage buffer) so the\n // first step cannot fail due to slippage; excess is refunded to refundTo.\n amountWei: isExactOutput ? res.data?.quote?.amountIn : params.amountWei,\n prices: params.prices,\n evmGasFees: params.evmGasFees,\n depositAddress: res.data?.quote?.depositAddress ?? DefaultAddresses[params.fromToken.chainType as ChainType],\n };\n try {\n execTime.breakpoint();\n const proxyResult = await params.wallet.quote(Service.OneClick, proxyParams);\n execTime.log(\"wallet.quoteOneClickProxy\");\n\n for (const proxyKey in proxyResult) {\n if (proxyKey === \"fees\") {\n for (const feeKey in proxyResult.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.fees[feeKey] = proxyResult.fees[feeKey];\n }\n continue;\n }\n res.data[proxyKey] = proxyResult[proxyKey];\n }\n\n res.data.transferSourceGasFee = proxyResult.estimateSourceGas;\n const transferSourceGasFeeUsd = Big(proxyResult.estimateSourceGas || 0).div(10 ** params.fromToken.nativeToken.decimals).times(getPrice(params.prices, params.fromToken.nativeToken.symbol));\n res.data.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick quote proxy failed: %o\", error);\n }\n }\n\n res.data.quoteParam = {\n ...params,\n ...proxyParams,\n };\n }\n\n execTime.logTotal(\"OneClickService.formatQuoteData\");\n\n return res.data || {};\n }\n\n public async quote(params: {\n wallet: any,\n fromToken: any,\n toToken: any,\n dry: boolean;\n slippageTolerance: number;\n originAsset: string;\n destinationAsset: string;\n refundTo: string;\n refundType: \"ORIGIN_CHAIN\";\n recipient: string;\n connectedWallets?: string[];\n prices: Record<string, string>;\n amountWei: string;\n appFees?: { recipient: string; fee: number; }[];\n swapType?: OneClickSwapType;\n isProxy?: boolean;\n }) {\n const {\n wallet,\n fromToken,\n toToken,\n prices,\n amountWei,\n appFees = [],\n swapType = OneClickSwapType.Input,\n isProxy = true,\n slippageTolerance,\n ...restParams\n } = params;\n\n const _quoteType = `OneClickService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-400\", isDebug: OpenAPI.DEBUG });\n\n const quoteParams: any = {\n depositMode: \"SIMPLE\",\n swapType: swapType || OneClickSwapType.Input,\n depositType: \"ORIGIN_CHAIN\",\n sessionId: `session_${Date.now()}_${Math.random()\n .toString(36)\n .substr(2, 9)}`,\n recipientType: \"DESTINATION_CHAIN\",\n deadline: new Date(Date.now() + this.offsetTime).toISOString(),\n quoteWaitingTimeMs: 0,\n appFees: [\n ...BridgeFee,\n ...appFees,\n ],\n referral: \"stableflow\",\n amount: amountWei,\n slippageTolerance: slippageTolerance * 100,\n };\n\n // if (swapType === \"EXACT_OUTPUT\") {\n // quoteParams.amount = Big(amountWei || 0).div(10 ** fromToken.decimals).times(10 ** toToken.decimals).toFixed(0);\n // }\n\n for (const k in restParams) {\n if ([\"evmAddress\", \"evmWallet\", \"destinationChain\", \"originChain\"].includes(k)) {\n continue;\n }\n quoteParams[k] = restParams[k as keyof typeof restParams];\n }\n\n execTime.breakpoint();\n const response: any = await postRequest(\"/v0/quote\", quoteParams);\n execTime.log(\"/v0/quote\");\n\n execTime.breakpoint();\n const result = await this.formatQuoteData({ data: response, params });\n execTime.log(\"formatQuoteData\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"OneClickService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n isProxy = true,\n wallet,\n amountWei,\n refundTo,\n prices,\n acceptTronEnergy,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const proxyAddress = ONECLICK_PROXY[fromToken.chainName];\n const isFromTron = fromToken.chainType === \"tron\";\n const isFromTronEnergy = isFromTron && acceptTronEnergy;\n const isFinalProxy = proxyAddress && isProxy;\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n if (isFromTron) {\n try {\n const _estGas = await wallet.estimateTransferGas({\n fromToken: fromToken,\n depositAddress: DefaultAddresses[fromToken.chainType as ChainType],\n amount: amountWei,\n account: refundTo,\n });\n result.transferSourceGasFee = _estGas.estimateGas;\n const transferSourceGasFeeUsd = Big(result.transferSourceGasFee || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService estimateTransaction\", \"red-500\", \"oneclick estimate transaction without proxy failed: %o\", error);\n }\n }\n\n if (isFinalProxy) {\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 200000;\n estimateTransactionParams.defaultRawDataHexLength = 500;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.transferSourceGasFee = ett.estimateSourceGas;\n result.transferSourceGasFeeUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n } else {\n let sourceGasFee = result.transferSourceGasFee || {};\n if (isFromTronEnergy) {\n sourceGasFee = result.energySourceGasFee;\n }\n const estimateGasUsd = Big(sourceGasFee.estimateGas || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.fees.estimateGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n result.estimateSourceGas = sourceGasFee.estimateGas;\n result.totalEstimateSourceGas = sourceGasFee.estimateGas;\n result.estimateSourceGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n }\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n fromToken,\n depositAddress,\n amountWei,\n sendParam,\n } = params;\n\n // proxy transfer\n if (sendParam) {\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n const hash = await wallet.send(SendType.TRANSFER, {\n originAsset: fromToken.contractAddress,\n depositAddress: depositAddress,\n amount: amountWei,\n });\n return hash;\n }\n\n public submitHash(params: { txHash: string; depositAddress: string }) {\n return postRequest(\"/v0/deposit/submit\", params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest(\"/v0/status\", params);\n }\n}\n\nexport default new OneClickService();\n","export interface LayerZeroChainConfig {\n eid: number;\n chainKey: string;\n blockTime: number;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\nexport const LAYERZZERO_CHAINS: Record<string, LayerZeroChainConfig> = {\n \"Ethereum\": {\n eid: 30101,\n chainKey: \"ethereum\",\n blockTime: 12,\n },\n Arbitrum: {\n eid: 30110,\n chainKey: \"arbitrum\",\n blockTime: 0.25,\n },\n Avalanche: {\n eid: 30106,\n chainKey: \"avax\",\n blockTime: 1.2,\n },\n Polygon: {\n eid: 30109,\n chainKey: \"polygon\",\n blockTime: 2,\n },\n Optimism: {\n eid: 30111,\n chainKey: \"optimism\",\n blockTime: 2,\n },\n Berachain: {\n eid: 30362,\n chainKey: \"berachain\",\n blockTime: 2,\n },\n Solana: {\n eid: 30168,\n chainKey: \"solana\",\n blockTime: 0.4,\n },\n Tron: {\n eid: 30420,\n chainKey: \"tron\",\n blockTime: 3,\n },\n \"X Layer\": {\n eid: 30274,\n chainKey: \"xlayer\",\n blockTime: 0.5,\n },\n \"Plasma\": {\n eid: 30383,\n chainKey: \"plasma\",\n blockTime: 1,\n },\n \"Mantle\": {\n eid: 30181,\n chainKey: \"mantle\",\n blockTime: 2,\n },\n \"MegaETH\": {\n eid: 30398,\n chainKey: \"megaeth\",\n blockTime: 1,\n },\n \"Ink\": {\n eid: 30339,\n chainKey: \"ink\",\n blockTime: 1,\n },\n \"Stable\": {\n eid: 30396,\n chainKey: \"stable\",\n blockTime: 0.7,\n },\n \"Celo\": {\n eid: 30125,\n chainKey: \"celo\",\n blockTime: 1,\n },\n \"Sei\": {\n eid: 30280,\n chainKey: \"sei\",\n blockTime: 2,\n },\n \"Flare\": {\n eid: 30295,\n chainKey: \"flare\",\n blockTime: 1.8,\n },\n \"BNB Chain\": {\n eid: 30102,\n chainKey: \"bsc\",\n blockTime: 0.45,\n },\n Fraxtal: {\n eid: 30255,\n chainKey: \"frax\",\n blockTime: 2,\n },\n Ton: {\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 2.71,\n },\n Katana: {\n eid: 30375,\n chainKey: \"katana\",\n blockTime: 1,\n },\n};\n\n/**\n * Calculates cross-chain estimated time using the LayerZero formula.\n * Formula: Total Time ≈ (sourceBlockTime × blockConfirmations) + (destinationBlockTime × (2 blocks + DVN count))\n *\n * @param params - Object containing configuration and DVN details.\n * @param params.requiredDvnCount - The number of DVNs for this bridge (typically fixed per application, e.g., 2 or 3)\n * @param params.originConfig - Source chain configuration; should include blockTime (number) and confirmations (number)\n * @param params.destinationConfig - Destination chain configuration; should include blockTime (number)\n * @returns Estimated time in seconds. Returns 32 if configuration is missing or invalid.\n */\nexport function calculateEstimateTime(params: {\n requiredDvnCount: number;\n originConfig: { blockTime: number; confirmations: number; };\n destinationConfig: { blockTime: number; confirmations: number; };\n}): number {\n const {\n requiredDvnCount,\n originConfig,\n destinationConfig,\n } = params;\n\n // Return default value if config is missing\n if (!originConfig || !destinationConfig) {\n return 32;\n }\n\n // Validate required configuration fields\n if (\n typeof originConfig.blockTime !== 'number' ||\n typeof originConfig.confirmations !== 'number' ||\n typeof destinationConfig.blockTime !== 'number'\n ) {\n return 32;\n }\n\n const sourceBlockTime = originConfig.blockTime;\n const blockConfirmations = originConfig.confirmations;\n const destinationBlockTime = destinationConfig.blockTime;\n const dvnCount = requiredDvnCount;\n\n // Calculate: source chain part + destination chain part\n const sourceTime = sourceBlockTime * blockConfirmations;\n const destinationTime = destinationBlockTime * (2 + dvnCount);\n const totalTime = Math.ceil(sourceTime + destinationTime);\n\n return totalTime;\n}\n","import { Service } from \"@stableflow/core\";\n\nexport const getQuoteModes = (params: { quoteData?: any; bridgeStore?: { quoteDataService: Service; } }) => {\n const { quoteData, bridgeStore } = params;\n const { quoteDataService } = bridgeStore ?? {};\n\n const getIsExactOutput = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsOneClickService = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0, Service.OneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsQuoteParamDepositAddress = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.Usdt0OneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.FraxZeroOneClick) {\n const isFromEthereumFrxUSD = quoteData?.quoteParam?.isFromEthereumFrxUSD;\n const isToEthereumUSDC = quoteData?.quoteParam?.isToEthereumUSDC;\n if (!isToEthereumUSDC) {\n return true;\n }\n }\n\n return false;\n };\n\n return {\n isExactOutput: getIsExactOutput(),\n isOneClickService: getIsOneClickService(),\n isQuoteParamDepositAddress: getIsQuoteParamDepositAddress(),\n isPermitWithNonce: typeof quoteDataService === \"undefined\" ? false : ([Service.OneClickUsdt0, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(quoteDataService),\n };\n};\n","import bs58 from \"bs58\";\nimport { Buffer } from 'buffer';\n\n/** Left-pad a hex value to `lengthBytes` (ethers v6 zeroPadValue semantics). */\nfunction zeroPadValue(hex: string, lengthBytes: number): string {\n const normalized = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n const targetLen = lengthBytes * 2;\n if (normalized.length > targetLen) {\n throw new Error(`hex value exceeds ${lengthBytes} bytes`);\n }\n return \"0x\" + normalized.padStart(targetLen, \"0\");\n}\n\n// Address validation utilities for different blockchains\n\nexport interface AddressValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n/**\n * Validates an address based on the target blockchain\n * @param address - The address to validate\n * @param blockchain - The target blockchain key\n * @returns AddressValidationResult with validation status and error message\n */\nexport function validateAddress(\n address: string,\n blockchain: string\n): AddressValidationResult {\n if (!address.trim()) {\n return {\n isValid: false,\n error: \"Address cannot be empty\"\n };\n }\n\n const trimmedAddress = address.trim();\n\n switch (blockchain) {\n case \"near\":\n return validateNearAddress(trimmedAddress);\n case \"sol\":\n return validateSolanaAddress(trimmedAddress);\n case \"evm\":\n return validateEthereumAddress(trimmedAddress);\n case \"aptos\":\n return validateAptosAddress(trimmedAddress);\n case \"tron\":\n return validateTronAddress(trimmedAddress);\n case \"ton\":\n return validateTonAddress(trimmedAddress);\n default:\n return {\n isValid: false,\n error: \"Unsupported blockchain\"\n };\n }\n}\n\n/**\n * Validates a NEAR address\n * Supports named accounts (alice.near, burrow.sputnik-dao.near) and\n * implicit accounts (64-char hex public key hash).\n */\nfunction validateNearAddress(address: string): AddressValidationResult {\n // Length check\n if (address.length < 2 || address.length > 64) {\n return {\n isValid: false,\n error: \"NEAR address must be 2-64 characters long\"\n };\n }\n\n // Additional checks\n if (address.startsWith(\".\") || address.endsWith(\".\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot start or end with a dot\"\n };\n }\n\n if (address.includes(\"..\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot contain consecutive dots\"\n };\n }\n\n // NEAR implicit accounts: 64-char hex string\n if (/^[0-9a-f]{64}$/i.test(address)) {\n return { isValid: true };\n }\n\n // Named account: letters, numbers and separators ., -, _\n const nearPattern = /^[a-zA-Z0-9._-]+$/;\n if (!nearPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid NEAR address\"\n };\n }\n\n // Every account label should start/end with alphanumeric.\n const labelPattern = /^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;\n const labels = address.split(\".\");\n if (!labels.every(label => labelPattern.test(label))) {\n return {\n isValid: false,\n error: \"NEAR address labels must start/end with letters or numbers\"\n };\n }\n\n // Named NEAR account cannot be purely numeric.\n if (/^\\d+$/.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address cannot be purely numeric\"\n };\n }\n\n const hasLetterPattern = /[a-zA-Z]/;\n if (!hasLetterPattern.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address must contain at least one letter\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a Solana address\n * Solana addresses are base58 encoded and typically 32-44 characters long\n */\nfunction validateSolanaAddress(address: string): AddressValidationResult {\n // Solana address pattern: base58 encoded, typically 32-44 characters\n const solanaPattern = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n\n if (!solanaPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Solana address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Ethereum address (used for Arbitrum)\n * Ethereum addresses are 42 characters long, starting with 0x\n */\nfunction validateEthereumAddress(address: string): AddressValidationResult {\n // Ethereum address pattern: 0x followed by 40 hexadecimal characters\n const ethereumPattern = /^0x[a-fA-F0-9]{40}$/;\n\n if (!ethereumPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Ethereum address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Aptos address\n * Aptos addresses are 32 bytes (64 hex characters), optionally prefixed with 0x\n */\nfunction validateAptosAddress(address: string): AddressValidationResult {\n // Aptos address can be with or without 0x prefix\n // With 0x: 0x + 64 hex characters = 66 characters total\n // Without 0x: 64 hex characters\n const aptosPatternWithPrefix = /^0x[a-fA-F0-9]{64}$/;\n const aptosPatternWithoutPrefix = /^[a-fA-F0-9]{64}$/;\n\n if (!aptosPatternWithPrefix.test(address) && !aptosPatternWithoutPrefix.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Aptos address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a TON address.\n * Supports:\n * - user-friendly format, e.g. EQ..., UQ..., kQ...\n * - raw format, e.g. 0:<64 hex chars>, -1:<64 hex chars>\n */\nexport function validateTonAddress(address: string): AddressValidationResult {\n try {\n parseTonAddress(address);\n return { isValid: true };\n } catch {\n return {\n isValid: false,\n error: \"Invalid TON address\",\n };\n }\n}\n\n/**\n * Validates a Tron address\n * Tron addresses are Base58 encoded, starting with T, and 34 characters long\n */\nfunction validateTronAddress(address: string): AddressValidationResult {\n // Tron address pattern: Base58 encoded, starts with T, 34 characters long\n // Base58 alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz (no 0, O, I, l)\n const tronPattern = /^T[1-9A-HJ-NP-Za-km-z]{33}$/;\n\n if (!tronPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Tron address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Gets a placeholder text for the address input based on the target blockchain\n */\nexport function getAddressPlaceholder(blockchain: string): string {\n switch (blockchain) {\n case \"near\":\n return \"Enter NEAR wallet address (e.g., alice.near or 64-char hex)\";\n case \"sol\":\n return \"Enter Solana wallet address (e.g., 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM)\";\n case \"arb\":\n return \"Enter Ethereum/Arbitrum wallet address (e.g., 0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6)\";\n case \"aptos\":\n return \"Enter Aptos wallet address (e.g., 0x93493b07d031c4f18ad1e874575761be7e47d4cea5c81d538600e8ec72d6ab1c)\";\n case \"tron\":\n return \"Enter Tron wallet address (e.g., TG4cfJGzvmpWxYyQKSosCWTacKCxEwSiKw)\";\n default:\n return \"Enter recipient wallet address\";\n }\n}\n\n/**\n * Convert Tron address to bytes32 format (for LayerZero OFT)\n * @param {string} tronAddress - Tron address in Base58check format (starts with T)\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function tronAddressToBytes32(tronAddress: string) {\n try {\n // 1. Decode base58check format\n const decoded = bs58.decode(tronAddress);\n\n // 2. Remove the first byte (0x41 prefix) and the last 4 bytes (checksum)\n // Tron address structure: [0x41] + [20-byte address] + [4-byte checksum]\n const addressBytes = decoded.slice(1, 21);\n\n // 3. Validate length\n if (addressBytes.length !== 20) {\n throw new Error('Invalid Tron address length');\n }\n\n // 4. Left pad with 12 zero bytes to make it 32 bytes\n const paddedBytes = Buffer.concat([\n Buffer.alloc(12, 0), // 12 zero bytes\n addressBytes // 20-byte address\n ]);\n\n // 5. Convert to hexadecimal string\n return '0x' + paddedBytes.toString('hex');\n } catch (error: any) {\n throw new Error(`Failed to convert Tron address: ${error.message}`);\n }\n}\n\n/**\n * SHA256 hash using Web Crypto API (browser compatible)\n * @param {Uint8Array} data - Data to hash\n * @returns {Promise<Uint8Array>} Hash result\n */\nasync function sha256(data: Uint8Array): Promise<Uint8Array> {\n // Create a new ArrayBuffer from the Uint8Array to ensure proper type\n const buffer = new Uint8Array(data).buffer;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n return new Uint8Array(hashBuffer);\n}\n\n/**\n * Converts bytes32 to Tron address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {Promise<string>} Tron address in Base58check format\n */\nexport async function bytes32ToTronAddress(bytes32Address: string): Promise<string> {\n try {\n // Remove '0x' prefix\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n // Convert to Buffer\n const buffer = Buffer.from(hexString, 'hex');\n\n // Take the last 20 bytes (remove the leading 12 zero bytes)\n const addressBytes = buffer.slice(12, 32);\n\n // Add Tron prefix 0x41\n const addressWithPrefix = Buffer.concat([\n Buffer.from([0x41]),\n addressBytes\n ]);\n\n // Calculate checksum (first 4 bytes of double SHA256)\n const hash1 = await sha256(new Uint8Array(addressWithPrefix));\n const hash2 = await sha256(hash1);\n const checksum = Buffer.from(hash2.slice(0, 4));\n\n // Combine: prefix + address + checksum\n const fullAddress = Buffer.concat([addressWithPrefix, checksum]);\n\n // Base58 encoding\n return bs58.encode(fullAddress);\n } catch (error: any) {\n throw new Error(`Failed to convert bytes32 to Tron address: ${error.message}`);\n }\n}\n\n/**\n * Converts Solana address to bytes32 format (for LayerZero OFT)\n * @param {string} solanaAddress - Solana address in Base58 format\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function solanaAddressToBytes32(solanaAddress: string) {\n // Decode the Solana address from base58 format\n const decoded = bs58.decode(solanaAddress);\n\n // Validate length (Solana public key is 32 bytes)\n if (decoded.length !== 32) {\n throw new Error('Invalid Solana address length');\n }\n\n // Convert to hexadecimal string\n return '0x' + Buffer.from(decoded).toString('hex');\n}\n\n/**\n * Converts bytes32 to Solana address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {string} Solana address in Base58 format\n */\nexport function bytes32ToSolanaAddress(bytes32Address: string) {\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n const buffer = Buffer.from(hexString, 'hex');\n\n // Encode as base58\n return bs58.encode(buffer);\n}\n\n/**\n * Converts TON address to bytes32 format for LayerZero OFT.\n *\n * @param tonAddress TON address in user-friendly or raw format\n * @returns 0x + 32-byte account hash as hex\n */\nexport function tonAddressToBytes32(tonAddress: string): string {\n try {\n const parsed = parseTonAddress(tonAddress);\n\n if (parsed.hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return \"0x\" + bytesToHex(parsed.hash);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Failed to convert TON address: ${message}`);\n }\n}\n\nexport function addressToBytes32(chainType: string, address: string) {\n if (chainType === \"evm\") {\n return zeroPadValue(address, 32);\n }\n if (chainType === \"sol\") {\n return solanaAddressToBytes32(address);\n }\n if (chainType === \"tron\") {\n return tronAddressToBytes32(address);\n }\n if (chainType === \"ton\") {\n return tonAddressToBytes32(address);\n }\n return address;\n}\n\n//#region TON address parsing utilities\ntype ParsedTonAddress = {\n workchain: number;\n hash: Uint8Array; // 32 bytes\n isUserFriendly: boolean;\n isBounceable?: boolean;\n isTestOnly?: boolean;\n};\n\n/**\n * TON user-friendly address:\n * 36 bytes total:\n * [0] flags\n * [1] workchain as signed int8-ish, 0xff means -1\n * [2..33] 32-byte account hash\n * [34..35] CRC16-CCITT of first 34 bytes\n *\n * Raw address:\n * workchain:64-hex-chars\n */\nfunction parseTonAddress(address: string): ParsedTonAddress {\n const input = address.trim();\n\n if (!input) {\n throw new Error(\"Address is empty\");\n }\n\n if (isRawTonAddress(input)) {\n return parseRawTonAddress(input);\n }\n\n return parseUserFriendlyTonAddress(input);\n}\n\n/**\n * CRC16-CCITT, polynomial 0x1021, initial value 0x0000.\n * Returns big-endian 2-byte checksum.\n */\nfunction crc16Ccitt(data: Uint8Array): Uint8Array {\n let crc = 0x0000;\n\n for (const byte of data) {\n crc ^= byte << 8;\n\n for (let i = 0; i < 8; i++) {\n if ((crc & 0x8000) !== 0) {\n crc = ((crc << 1) ^ 0x1021) & 0xffff;\n } else {\n crc = (crc << 1) & 0xffff;\n }\n }\n }\n\n return new Uint8Array([(crc >> 8) & 0xff, crc & 0xff]);\n}\n\nfunction base64ToBytes(input: string): Uint8Array {\n // base64url -> base64\n let normalized = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // Add padding if needed.\n const padding = normalized.length % 4;\n if (padding === 2) {\n normalized += \"==\";\n } else if (padding === 3) {\n normalized += \"=\";\n } else if (padding !== 0) {\n throw new Error(\"Invalid base64 TON address\");\n }\n\n // Node.js / bundlers\n if (typeof Buffer !== \"undefined\") {\n return new Uint8Array(Buffer.from(normalized, \"base64\"));\n }\n\n // Browser fallback\n if (typeof atob !== \"undefined\") {\n const binary = atob(normalized);\n const bytes = new Uint8Array(binary.length);\n\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return bytes;\n }\n\n throw new Error(\"No base64 decoder available\");\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string\");\n }\n\n const bytes = new Uint8Array(hex.length / 2);\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n\n if (Number.isNaN(byte)) {\n throw new Error(\"Invalid hex string\");\n }\n\n bytes[i] = byte;\n }\n\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nfunction isRawTonAddress(address: string): boolean {\n return /^-?\\d+:[0-9a-fA-F]{64}$/.test(address);\n}\n\nfunction parseRawTonAddress(address: string): ParsedTonAddress {\n const [workchainPart, hashPart] = address.split(\":\");\n\n if (!workchainPart || !hashPart) {\n throw new Error(\"Invalid raw TON address\");\n }\n\n const workchain = Number(workchainPart);\n\n if (!Number.isInteger(workchain)) {\n throw new Error(\"Invalid TON workchain\");\n }\n\n if (!/^[0-9a-fA-F]{64}$/.test(hashPart)) {\n throw new Error(\"Invalid TON address hash\");\n }\n\n return {\n workchain,\n hash: hexToBytes(hashPart),\n isUserFriendly: false,\n };\n}\n\nfunction parseUserFriendlyTonAddress(address: string): ParsedTonAddress {\n // TON user-friendly address is 36 bytes encoded as base64/base64url,\n // usually 48 chars without padding.\n if (!/^[A-Za-z0-9+/_-]{48}$/.test(address)) {\n throw new Error(\"Invalid user-friendly TON address format\");\n }\n\n const data = base64ToBytes(address);\n\n if (data.length !== 36) {\n throw new Error(\"Invalid user-friendly TON address length\");\n }\n\n const body = data.slice(0, 34);\n const checksum = data.slice(34, 36);\n const expectedChecksum = crc16Ccitt(body);\n\n if (checksum[0] !== expectedChecksum[0] || checksum[1] !== expectedChecksum[1]) {\n throw new Error(\"Invalid TON address checksum\");\n }\n\n const flags = data[0];\n\n const isTestOnly = (flags & 0x80) !== 0;\n const tag = flags & 0x7f;\n\n // 0x11 = bounceable, 0x51 = non-bounceable.\n // With testOnly bit added: 0x91 / 0xd1.\n if (tag !== 0x11 && tag !== 0x51) {\n throw new Error(\"Invalid TON address flags\");\n }\n\n const isBounceable = tag === 0x11;\n\n const workchainByte = data[1];\n const workchain = workchainByte === 0xff ? -1 : workchainByte;\n\n const hash = data.slice(2, 34);\n\n if (hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return {\n workchain,\n hash,\n isUserFriendly: true,\n isBounceable,\n isTestOnly,\n };\n}\n//#endregion\n","import Big from \"big.js\";\nimport { Service, type TokenConfig } from \"@stableflow/core\";\n\nexport const formatQuoteError = (error: any, options: { service: Service; fromToken: TokenConfig; }) => {\n const { service, fromToken } = options;\n\n const defaultErrorMessage = \"Failed to get quote, please try again later\";\n\n if (service === Service.OneClick) {\n const getQuoteErrorMessage = (): { message: string; sourceMessage: string; } => {\n const _messageResult = {\n message: error?.message || defaultErrorMessage,\n sourceMessage: error?.response?.data?.message || defaultErrorMessage,\n };\n if (\n error?.response?.data?.message &&\n error?.response?.data?.message !== \"Internal server error\"\n ) {\n // quote failed, maybe out of liquidity\n if (error?.response?.data?.message === \"Failed to get quote\") {\n _messageResult.message = \"Amount exceeds max\";\n return _messageResult;\n }\n // Amount is too low for bridge\n if (error?.response?.data?.message?.includes(\"Amount is too low for bridge, try at least\")) {\n const match = error.response.data.message.match(/try at least\\s+(\\d+(?:\\.\\d+)?)/i);\n let minimumAmount = match ? match[1] : Big(1).times(10 ** fromToken.decimals).toFixed(0);\n minimumAmount = Big(minimumAmount).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n _messageResult.message = `Amount is too low, at least ${minimumAmount}`;\n return _messageResult;\n }\n return _messageResult;\n }\n // Unknown error\n return _messageResult;\n };\n const onclickErrMsg = getQuoteErrorMessage();\n return {\n serviceType: service,\n error: onclickErrMsg.message,\n };\n }\n\n return {\n serviceType: service,\n error: error?.message || defaultErrorMessage,\n };\n};\n","import { postRequest } from '@stableflow/core';\n\nexport async function quoteSignature(params: any) {\n const response: any = await postRequest(\"/v0/cctp/sign\", params);\n return response.data ?? {};\n}\n","import Big from \"big.js\";\n\nexport const addThousandSeparator = (numberString: string) => {\n if (!numberString) return \"0\";\n const parts = String(numberString).split(\".\");\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n const decimalPart = parts[1] ? `.${parts[1]}` : \"\";\n return integerPart + decimalPart;\n};\n\nexport const formatNumber = (\n value: string | number | Big.Big | undefined,\n precision: number,\n isSimple?: boolean,\n options?: {\n prefix?: string;\n isLTIntegerZero?: boolean;\n isZeroPrecision?: boolean;\n isShort?: boolean;\n isShortUppercase?: boolean;\n round?: Big.RoundingMode;\n isLessPrecision?: boolean;\n }\n): any => {\n const {\n prefix = \"\",\n isLTIntegerZero,\n isZeroPrecision,\n isShort,\n isShortUppercase,\n round = Big.roundHalfUp,\n isLessPrecision = true,\n } = options || {};\n\n const isValid = () => {\n try {\n if (!value) return false;\n Big(value);\n return true;\n } catch (err: any) {\n return false;\n }\n };\n\n if (!value || !isValid() || Big(value).eq(0)) {\n if (isSimple) {\n if (isZeroPrecision) {\n return `${prefix}${Big(0).toFixed(precision, round)}`;\n }\n return `${prefix}0`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}0`,\n decimal: Big(0).toFixed(precision, round).replace(/^\\d/, \"\")\n };\n }\n return {\n integer: `${prefix}0`,\n decimal: \"\"\n };\n }\n\n if (isLessPrecision && Big(value).lt(Big(10).pow(-precision))) {\n if (isSimple) {\n return `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`;\n }\n if (isLTIntegerZero) {\n return {\n integer: `< ${prefix}0`,\n decimal: Big(10)\n .pow(-precision)\n .toFixed(precision, round)\n .replace(/^\\d/, \"\")\n };\n }\n return {\n integer: \"\",\n decimal: `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`\n };\n }\n\n const finalValue = addThousandSeparator(Big(value).toFixed(precision, round));\n const firstPart = finalValue.split(\".\")[0];\n let secondPart = finalValue.split(\".\")[1] || \"\";\n if (secondPart) {\n secondPart = \".\" + secondPart;\n }\n if (isSimple) {\n if (isShort) {\n const formatter = (split: number, unit: string): string => {\n const _num = Big(value)\n .div(split)\n .toFixed(precision, 0)\n .replace(/(?:\\.0*|(\\.\\d+?)0+)$/, \"$1\");\n const inter = _num.split(\".\")?.[0]?.replace(/\\d(?=(\\d{3})+\\b)/g, \"$&,\");\n const decimal = _num.split(\".\")?.[1] ?? \"\";\n return `${prefix}${inter}${decimal ? \".\" + decimal : \"\"}${unit}`;\n };\n if (Big(value).gte(1e12)) {\n return formatter(1e12, isShortUppercase ? \"T\" : \"t\");\n }\n if (Big(value).gte(1e9)) {\n return formatter(1e9, isShortUppercase ? \"B\" : \"b\");\n }\n if (Big(value).gte(1e6)) {\n return formatter(1e6, isShortUppercase ? \"M\" : \"m\");\n }\n if (Big(value).gte(1e3)) {\n return formatter(1e3, isShortUppercase ? \"K\" : \"k\");\n }\n }\n if (isZeroPrecision) {\n return `${prefix}${firstPart}${secondPart}`;\n }\n return `${prefix}${firstPart}${secondPart.replace(/[.]?0*$/, \"\")}`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart\n };\n }\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart.replace(/[.]?0*$/, \"\")\n };\n};\n","import { usdt0Chains } from \"@stableflow/core\";\nimport { LAYERZZERO_CHAINS, type LayerZeroChainConfig } from \"../utils\";\n\ninterface Usdt0Config extends LayerZeroChainConfig {\n contractAddress: string;\n oft?: string;\n oftLegacy?: string;\n oftMultiHopComposer?: string;\n oftTetherTokenOFTExtension?: string;\n confirmations: number;\n lzReceiveOptionGas: number;\n lzReceiveOptionGasLegacy: number;\n composeOptionGas?: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\n// chainKey: LayerZero chain identifier for querying default configurations\n// confirmations: Default block confirmations for source chain, fetched from https://layerzeroscan.com/tools/defaults (Send Confirmations)\n// For more accurate confirmation counts, visit https://layerzeroscan.com/application/usdt0, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\n// DVN count: USDT0 uses 2 DVNs (fixed value)\nexport const USDT0_CONFIG: Record<string, Usdt0Config> = {\n Ethereum: {\n contractAddress: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n oft: \"0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee\",\n oftLegacy: \"0x1f748c76de468e9d11bd340fa9d5cbadf315dfb0\",\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n confirmations: 15, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: true,\n oftLegacyApprovalRequired: true,\n },\n Arbitrum: {\n contractAddress: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n oft: \"0x14E4A1B13bf7F943c8ff7C51fb60FA964A298D92\",\n oftLegacy: \"0x77652d5aba086137b595875263fc200182919b92\",\n oftMultiHopComposer: \"0x759BA420bF1ded1765F18C2DC3Fc57A1964A2Ad1\",\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: false,\n oftLegacyApprovalRequired: true,\n },\n Polygon: {\n contractAddress: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n oft: \"0x6BA10300f0DC58B7a1e4c0e41f5daBb7D7829e13\",\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n confirmations: 32, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Optimism: {\n contractAddress: \"0x01bFF41798a0BcF287b996046Ca68b395DbC1071\",\n oft: \"0xF03b4d9AC1D5d1E7c4cEf54C2A313b9fe051A0aD\",\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n confirmations: 450, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Berachain: {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x3Dc96399109df5ceb2C226664A086140bD0379cB\",\n oftTetherTokenOFTExtension: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Solana: {\n contractAddress: \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n oftLegacy: \"Fuww9mfc8ntAwxPUzFia7VJFAdvLppyZwhPJoXySZXf7\",\n ...LAYERZZERO_CHAINS[\"Solana\"],\n confirmations: 128, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 200000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: false,\n },\n Tron: {\n contractAddress: \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\n oftLegacy: \"TFG4wBaDQ8sHWWP1ACeSGnoNR6RRzevLPt\",\n ...LAYERZZERO_CHAINS[\"Tron\"],\n confirmations: 5, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 300000,\n lzReceiveOptionGasLegacy: 300000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: true,\n },\n \"X Layer\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x94bcca6bdfd6a61817ab0e960bfede4984505554\",\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n confirmations: 9000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ton\": {\n contractAddress: \"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\n oftLegacy: \"EQAd31gAUhdO0d0NZsNb_cGl_Maa9PSuNhVLE9z8bBSjX6Gq\",\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 3,\n confirmations: 2,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: false,\n },\n \"Plasma\": {\n contractAddress: \"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb\",\n oft: \"0x02ca37966753bDdDf11216B73B16C1dE756A7CF9\",\n ...LAYERZZERO_CHAINS[\"Plasma\"],\n confirmations: 1800, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Mantle\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xcb768e263FB1C62214E7cab4AA8d036D76dc59CC\",\n ...LAYERZZERO_CHAINS[\"Mantle\"],\n confirmations: 2000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"MegaETH\": {\n contractAddress: \"0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb\",\n oft: \"0x9151434b16b9763660705744891fa906f660ecc5\",\n ...LAYERZZERO_CHAINS[\"MegaETH\"],\n confirmations: 5400,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ink\": {\n contractAddress: \"0x0200C29006150606B650577BBE7B6248F58470c1\",\n oft: \"0x1cB6De532588fCA4a21B7209DE7C456AF8434A65\",\n ...LAYERZZERO_CHAINS[\"Ink\"],\n confirmations: 450,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Stable\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xedaba024be4d87974d5aB11C6Dd586963CcCB027\",\n ...LAYERZZERO_CHAINS[\"Stable\"],\n confirmations: 3600,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Celo\": {\n contractAddress: \"0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e\",\n oftLegacy: \"0xf10E161027410128E63E75D0200Fb6d34b2db243\",\n ...LAYERZZERO_CHAINS[\"Celo\"],\n confirmations: 10,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: true,\n },\n \"Sei\": {\n contractAddress: \"0x9151434b16b9763660705744891fA906F660EcC5\",\n oft: \"0x56Fe74A2e3b484b921c447357203431a3485CC60\",\n ...LAYERZZERO_CHAINS[\"Sei\"],\n confirmations: 2000,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Flare\": {\n contractAddress: \"0xe7cd86e13AC4309349F30B3435a9d337750fC82D\",\n oft: \"0x567287d2A9829215a37e3B88843d32f9221E7588\",\n ...LAYERZZERO_CHAINS[\"Flare\"],\n confirmations: 500,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n};\n\nexport const LZ_RECEIVE_VALUE: Record<string, any> = {\n Solana: 2039280,\n};\n\n// https://docs.layerzero.network/v2/developers/evm/tooling/layerzeroscan#transaction-statuses\n// https://scan.layerzero-api.com/v1/swagger\nexport const LzScanStatus = {\n // The message has been successfully sent and received by the destination chain.\n Delivered: \"DELIVERED\",\n // The message is currently being transmitted between chains and has not yet reached its destination.\n InFlight: \"INFLIGHT\",\n // The message arrived at the destination, but reverted or ran out of gas during execution and needs to be retried.\n PayloadStored: \"PAYLOAD_STORED\",\n // The transaction encountered an error and did not complete.\n Failed: \"FAILED\",\n // A previous message nonce has a stored payload, halting the current transaction.\n Blocked: \"BLOCKED\",\n // The system is validating the finality of a transaction amidst potential high gas replacements or block reorgs.\n Confirming: \"CONFIRMING\",\n ApplicationBurned: \"APPLICATION_BURNED\",\n ApplicationSkipped: \"APPLICATION_SKIPPED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\n\nexport type LzScanStatus = (typeof LzScanStatus)[keyof typeof LzScanStatus];\n\nexport const LzScanSourceStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n WaitingForHashDelivered: \"WAITING_FOR_HASH_DELIVERED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\nexport type LzScanSourceStatus = (typeof LzScanSourceStatus)[keyof typeof LzScanSourceStatus];\n\nexport const LzScanDestinationStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n PayloadStored: \"PAYLOAD_STORED\",\n};\nexport type LzScanDestinationStatus = (typeof LzScanDestinationStatus)[keyof typeof LzScanDestinationStatus];\n\nexport const LzScanLzComposeStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n NA: \"N/A\",\n Failed: \"FAILED\",\n SimulatedReverted: \"SIMULATION_REVERTED\",\n WaitingForComposeSentEvent: \"WAITING_FOR_COMPOSE_SENT_EVENT\",\n};\nexport type LzScanLzComposeStatus = (typeof LzScanLzComposeStatus)[keyof typeof LzScanLzComposeStatus];\n\n// USDT0 DVN count (fixed value)\nexport const USDT0_DVN_COUNT = 2;\n\nexport const USDT0_LEGACY_FEE = 0.0001; // 0.01%, 10000 usdt cost 1 usdt\nexport const USDT0_LEGACY_MESH_TRANSFTER_FEE = 0.0003; // 0.03% https://docs.usdt0.to/tutorial/how-to-transfer#usdt0\nexport const DATA_HEX_PROTOBUF_EXTRA = 3;\nexport const SIGNATURE_SIZE = 67;\n\nexport const MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\nexport const MIDDLE_TOKEN_CHAIN = usdt0Chains[\"arb\"];\nexport const MIDDLE_CHAIN_LAYERZERO_EXECUTOR = \"0x6f4042401823a97E3b02F1A533e62C40409a75fa\";\n\n","export const OFT_ABI = [\n {\n inputs: [],\n name: \"approvalRequired\",\n outputs: [\n { internalType: \"bool\", name: \"\", type: \"bool\" }\n ],\n stateMutability: \"pure\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n }\n ],\n name: \"quoteOFT\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxAmountLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTLimit\",\n name: \"oftLimit\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"int256\", name: \"feeAmountLD\", type: \"int256\" },\n { internalType: \"string\", name: \"description\", type: \"string\" }\n ],\n internalType: \"struct OFTFeeDetail[]\",\n name: \"oftFeeDetails\",\n type: \"tuple[]\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n { internalType: \"bool\", name: \"_payInLzToken\", type: \"bool\" }\n ],\n name: \"quoteSend\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"msgFee\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"_fee\",\n type: \"tuple\"\n },\n { internalType: \"address\", name: \"_refundAddress\", type: \"address\" }\n ],\n name: \"send\",\n outputs: [\n {\n components: [\n { internalType: \"bytes32\", name: \"guid\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"fee\",\n type: \"tuple\"\n }\n ],\n internalType: \"struct MessagingReceipt\",\n name: \"msgReceipt\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n }\n];\n\nexport const SOLANA_IDL = {\n \"metadata\": {\n \"name\": \"oft\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"burn\",\n \"discriminator\": [\n 116,\n 110,\n 29,\n 56,\n 107,\n 219,\n 42,\n 93\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"BurnParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"deposit_local\",\n \"discriminator\": [\n 183,\n 51,\n 160,\n 173,\n 94,\n 131,\n 201,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"DepositLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_oft\",\n \"discriminator\": [\n 182,\n 169,\n 147,\n 16,\n 201,\n 45,\n 76,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"endpoint_settings\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitOFTParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive\",\n \"discriminator\": [\n 8,\n 179,\n 120,\n 109,\n 33,\n 118,\n 189,\n 80\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"to_address\",\n \"optional\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_info\",\n \"discriminator\": [\n 43,\n 148,\n 213,\n 93,\n 101,\n 127,\n 37,\n 170\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"lz_receive_types_accounts\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_v2\",\n \"discriminator\": [\n 109,\n 157,\n 200,\n 142,\n 138,\n 223,\n 159,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"LzReceiveTypesV2Result\"\n }\n }\n },\n {\n \"name\": \"nilify\",\n \"discriminator\": [\n 143,\n 136,\n 129,\n 199,\n 36,\n 35,\n 160,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"NilifyParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"oft_version\",\n \"discriminator\": [\n 179,\n 115,\n 253,\n 187,\n 88,\n 22,\n 80,\n 64\n ],\n \"accounts\": [],\n \"args\": [],\n \"returns\": {\n \"defined\": {\n \"name\": \"Version\"\n }\n }\n },\n {\n \"name\": \"quote_oft\",\n \"discriminator\": [\n 179,\n 255,\n 92,\n 202,\n 251,\n 82,\n 82,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteOFTParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"QuoteOFTResult\"\n }\n }\n },\n {\n \"name\": \"quote_send\",\n \"discriminator\": [\n 207,\n 0,\n 49,\n 214,\n 160,\n 211,\n 76,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_send_credits\",\n \"discriminator\": [\n 166,\n 117,\n 54,\n 109,\n 220,\n 29,\n 112,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_withdraw_remote\",\n \"discriminator\": [\n 198,\n 64,\n 228,\n 34,\n 69,\n 19,\n 122,\n 58\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"send\",\n \"discriminator\": [\n 102,\n 251,\n 20,\n 187,\n 65,\n 75,\n 12,\n 69\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"send_credits\",\n \"discriminator\": [\n 92,\n 161,\n 204,\n 14,\n 139,\n 189,\n 105,\n 227\n ],\n \"accounts\": [\n {\n \"name\": \"planner\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n },\n {\n \"name\": \"set_oft_config\",\n \"discriminator\": [\n 55,\n 126,\n 87,\n 217,\n 159,\n 66,\n 24,\n 194\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetOFTConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_peer_config\",\n \"discriminator\": [\n 79,\n 187,\n 168,\n 57,\n 139,\n 140,\n 93,\n 47\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetPeerConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_fees\",\n \"discriminator\": [\n 198,\n 212,\n 171,\n 109,\n 144,\n 215,\n 174,\n 89\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawFeesParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_local\",\n \"discriminator\": [\n 112,\n 250,\n 134,\n 10,\n 96,\n 9,\n 236,\n 176\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_remote\",\n \"discriminator\": [\n 135,\n 200,\n 45,\n 240,\n 165,\n 104,\n 44,\n 102\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Credits\",\n \"discriminator\": [\n 167,\n 92,\n 156,\n 89,\n 224,\n 222,\n 250,\n 237\n ]\n },\n {\n \"name\": \"EndpointSettings\",\n \"discriminator\": [\n 221,\n 232,\n 73,\n 56,\n 10,\n 66,\n 72,\n 14\n ]\n },\n {\n \"name\": \"OFTStore\",\n \"discriminator\": [\n 195,\n 215,\n 104,\n 134,\n 185,\n 195,\n 240,\n 114\n ]\n },\n {\n \"name\": \"PeerConfig\",\n \"discriminator\": [\n 181,\n 157,\n 86,\n 198,\n 33,\n 193,\n 94,\n 203\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddressLookupTableSet\",\n \"discriminator\": [\n 54,\n 206,\n 97,\n 134,\n 147,\n 43,\n 12,\n 34\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"discriminator\": [\n 198,\n 129,\n 215,\n 13,\n 129,\n 143,\n 91,\n 13\n ]\n },\n {\n \"name\": \"CreditsReceived\",\n \"discriminator\": [\n 247,\n 1,\n 147,\n 84,\n 187,\n 118,\n 0,\n 23\n ]\n },\n {\n \"name\": \"CreditsSent\",\n \"discriminator\": [\n 227,\n 230,\n 87,\n 90,\n 214,\n 189,\n 44,\n 241\n ]\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"discriminator\": [\n 146,\n 122,\n 60,\n 148,\n 172,\n 173,\n 245,\n 181\n ]\n },\n {\n \"name\": \"FeeBpsSet\",\n \"discriminator\": [\n 157,\n 56,\n 175,\n 190,\n 219,\n 193,\n 106,\n 208\n ]\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"discriminator\": [\n 234,\n 15,\n 0,\n 119,\n 148,\n 241,\n 40,\n 21\n ]\n },\n {\n \"name\": \"LocalDeposit\",\n \"discriminator\": [\n 137,\n 122,\n 12,\n 175,\n 43,\n 253,\n 64,\n 206\n ]\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"discriminator\": [\n 123,\n 143,\n 13,\n 174,\n 243,\n 234,\n 207,\n 102\n ]\n },\n {\n \"name\": \"LpAdminSet\",\n \"discriminator\": [\n 204,\n 123,\n 111,\n 142,\n 215,\n 147,\n 149,\n 241\n ]\n },\n {\n \"name\": \"OFTReceived\",\n \"discriminator\": [\n 144,\n 129,\n 112,\n 67,\n 144,\n 152,\n 201,\n 42\n ]\n },\n {\n \"name\": \"OFTSent\",\n \"discriminator\": [\n 108,\n 171,\n 219,\n 2,\n 189,\n 21,\n 110,\n 110\n ]\n },\n {\n \"name\": \"PeerAddressSet\",\n \"discriminator\": [\n 23,\n 136,\n 173,\n 207,\n 43,\n 0,\n 240,\n 232\n ]\n },\n {\n \"name\": \"PlannerSet\",\n \"discriminator\": [\n 15,\n 204,\n 218,\n 142,\n 168,\n 147,\n 236,\n 100\n ]\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"discriminator\": [\n 19,\n 91,\n 253,\n 185,\n 110,\n 208,\n 124,\n 198\n ]\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"discriminator\": [\n 97,\n 15,\n 220,\n 84,\n 178,\n 82,\n 9,\n 250\n ]\n },\n {\n \"name\": \"SuperAdminSet\",\n \"discriminator\": [\n 138,\n 32,\n 131,\n 104,\n 28,\n 14,\n 79,\n 204\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"Unauthorized\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidSender\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidDecimals\"\n },\n {\n \"code\": 6003,\n \"name\": \"SlippageExceeded\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidTokenDest\"\n },\n {\n \"code\": 6005,\n \"name\": \"InsufficientFeeBalance\"\n },\n {\n \"code\": 6006,\n \"name\": \"InvalidAmount\"\n },\n {\n \"code\": 6007,\n \"name\": \"InsufficientCredits\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidEID\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidMessage\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidFeeBps\"\n },\n {\n \"code\": 6011,\n \"name\": \"TONComposeNotSupported\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountMetaRef\",\n \"docs\": [\n \"Account metadata for V2 execution planning.\",\n \"Used by the Executor to construct the final transaction.\",\n \"\",\n \"V2 removes the legacy is_signer flag from V1's AccountMeta.\",\n \"Instead, signer roles are explicitly declared through AddressLocator variants.\",\n \"This provides clearer semantics and enables multiple signer support.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pubkey\",\n \"docs\": [\n \"The account address locator - supports multiple resolution strategies\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"AddressLocator\"\n }\n }\n },\n {\n \"name\": \"is_writable\",\n \"docs\": [\n \"Whether the account should be writable in the final transaction\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLocator\",\n \"docs\": [\n \"A generic account locator used in LZ execution planning for V2.\",\n \"Can reference the address directly, via ALT, or as a placeholder.\",\n \"\",\n \"This enum enables the compact account referencing design of V2, supporting:\",\n \"- OApps to request multiple signer accounts, not just a single Executor EOA\",\n \"- Dynamic creation of writable EOA-based data accounts\",\n \"- Efficient encoding of addresses via ALTs, reducing account list size\",\n \"\",\n \"The legacy is_signer flag is removed. Instead, signer roles are explicitly\",\n \"declared through Payer and indexed Signer(u8) variants.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Address\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"AltIndex\",\n \"fields\": [\n \"u8\",\n \"u8\"\n ]\n },\n {\n \"name\": \"Payer\"\n },\n {\n \"name\": \"Signer\",\n \"fields\": [\n \"u8\"\n ]\n },\n {\n \"name\": \"Context\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLookupTableSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"BurnParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Credits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"CreditsEntry\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CreditsBatch\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"credits_arbitrum\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_celo\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_eth\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_solana\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_ton\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_tron\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DepositLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EndpointSettings\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lz_token_mint\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptions\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft_and_call\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeBpsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Instruction\",\n \"docs\": [\n \"The list of instructions that can be executed in the LzReceive transaction.\",\n \"\",\n \"V2's multi-instruction model enables complex patterns such as:\",\n \"- Preprocessing steps before lz_receive (e.g., account initialization)\",\n \"- Postprocessing steps after lz_receive (e.g., verification, cleanup)\",\n \"- ABA messaging patterns with additional LayerZero sends\",\n \"- Conditional execution flows based on message content\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"LzReceive\",\n \"fields\": [\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the lz_receive instruction\",\n \"Uses AddressLocator for flexible address resolution\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"Standard\",\n \"fields\": [\n {\n \"name\": \"program_id\",\n \"docs\": [\n \"Target program ID for the custom instruction\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the custom instruction\",\n \"Uses same AddressLocator system as LzReceive\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n },\n {\n \"name\": \"data\",\n \"docs\": [\n \"Instruction data payload\",\n \"Raw bytes containing the instruction's parameters\"\n ],\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"LocalDeposit\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LpAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"extra_data\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveTypesV2Result\",\n \"docs\": [\n \"Output of the lz_receive_types_v2 instruction.\",\n \"\",\n \"This structure enables the multi-instruction execution model where OApps can\",\n \"define multiple instructions to be executed atomically by the Executor.\",\n \"The Executor constructs a single transaction containing all returned instructions.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"context_version\",\n \"docs\": [\n \"The version of context account\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"alts\",\n \"docs\": [\n \"ALTs required for this execution context\",\n \"Used by the Executor to resolve AltIndex references in AccountMetaRef\",\n \"Enables efficient account list compression for complex transactions\"\n ],\n \"type\": {\n \"vec\": \"pubkey\"\n }\n },\n {\n \"name\": \"instructions\",\n \"docs\": [\n \"The complete list of instructions required for LzReceive execution\",\n \"MUST include exactly one LzReceive instruction\",\n \"MAY include additional Standard instructions for preprocessing/postprocessing\",\n \"Instructions are executed in the order returned\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"Instruction\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MessagingFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MessagingReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"NilifyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"OFTFeeDetail\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"description\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTLimits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTStore\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_escrow\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"fee_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"planner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"burn_and_nilify_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerAddressSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"peer_address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"enforced_options\",\n \"type\": {\n \"defined\": {\n \"name\": \"EnforcedOptions\"\n }\n }\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfigParam\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"PeerAddress\",\n \"fields\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n ]\n },\n {\n \"name\": \"EnforcedOptions\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"PlannerSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTResult\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oft_limits\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTLimits\"\n }\n }\n },\n {\n \"name\": \"oft_fee_details\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"OFTFeeDetail\"\n }\n }\n }\n },\n {\n \"name\": \"oft_receipt\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTReceipt\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SetOFTConfigParams\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"SuperAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Delegate\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Planner\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"LpAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"FeeBps\",\n \"fields\": [\n \"u16\"\n ]\n },\n {\n \"name\": \"AddressLookupTable\",\n \"fields\": [\n {\n \"option\": \"pubkey\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"SetPeerConfigParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"remote_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PeerConfigParam\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"SuperAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Version\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interface\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"message\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawFeesParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n};\n","import { USDT0_CONFIG, USDT0_DVN_COUNT } from \"./config\";\nimport { OFT_ABI, SOLANA_IDL } from \"./contract\";\nimport { getRequest, SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { request } from '@stableflow/core';\nimport { ExecTime } from \"@stableflow/core\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class Usdt0Service {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n originChain,\n destinationChain,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `Usdt0Service ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[originChain];\n const destinationLayerzero = USDT0_CONFIG[destinationChain];\n\n let originLayerzeroAddress = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft;\n let dstEid = destinationLayerzero.eid;\n\n // Dynamically calculate estimated time\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: USDT0_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (fromToken.chainType === \"evm\") {\n destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n let isOriginLegacy = false;\n let isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n originLayerzeroAddress = originLayerzero.oftLegacy || originLayerzero.oft;\n isOriginLegacy = originLayerzeroAddress === originLayerzero.oftLegacy;\n }\n if (!originLayerzeroAddress) {\n originLayerzeroAddress = originLayerzero.oftLegacy;\n isOriginLegacy = true;\n if (destinationLayerzero.oftLegacy) {\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy;\n isDestinationLegacy = true;\n }\n }\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isBothOUpgradeable = !isOriginLegacy && !isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy && !isBothOUpgradeable;\n\n const result = await wallet.quote(Service.Usdt0, {\n dry,\n abi: OFT_ABI,\n dstEid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n return result;\n }\n\n // source chain must be legacy\n const isOriginLegacy = true;\n originLayerzeroAddress = originLayerzero.oftLegacy;\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy || destinationLayerzero.oft;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy;\n\n // one is legacy, and one is upgradeable\n // should use multi hop composer\n // and special extraOptions & composeMsg\n if (isMultiHopComposer) {\n dstEid = USDT0_CONFIG[\"Arbitrum\"].eid;\n destinationLayerzeroAddress = USDT0_CONFIG[\"Arbitrum\"].oftMultiHopComposer;\n }\n\n const oftParams: any = {\n dry,\n dstEid: destinationLayerzero.eid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n };\n\n if (fromToken.chainType === \"tron\") {\n oftParams.abi = OFT_ABI;\n }\n\n if (fromToken.chainType === \"sol\") {\n oftParams.idl = SOLANA_IDL;\n }\n\n const result = await wallet.quote(Service.Usdt0, {\n idl: SOLANA_IDL,\n ...oftParams,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n amountWei,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const isFromTron = fromToken.chainType === \"tron\";\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 300000;\n estimateTransactionParams.defaultRawDataHexLength = 1000;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.totalEstimateSourceGas = BigInt(Big(quoteData.fees?.nativeFee || 0).times(10 ** nativeTokenDecimals).toFixed(0)) + ett.estimateSourceGas;\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: any) {\n return getRequest(`/v0/messages/tx/${params.hash}`);\n }\n}\n\nexport default new Usdt0Service();\n","\n// https://developers.circle.com/cctp/evm-smart-contracts#tokenmessengerv2-mainnet\nexport const CCTP_TOKEN_MESSENGER: Record<string, string> = {\n [\"Ethereum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Arbitrum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Polygon\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Optimism\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Avalanche\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Solana\"]: \"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe\",\n [\"Pharos\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n};\n\nexport const CCTP_TOKEN_PROXY: Record<string, string> = {\n [\"Ethereum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Arbitrum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Polygon\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"Optimism\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Avalanche\"]: \"0xB6E3a1165aC3E0c370e316C27E959482460dBeDD\",\n [\"Solana\"]: \"8whUZNSbjJXC2UDRpo3PXo5MHzhptwVTTwpSYuTgQJNY\",\n [\"Base\"]: \"0x7092B8E5445Fca836B0f9780c77C38C7cbb9A43D\",\n [\"Pharos\"]: \"0x53812feae0fd2c43f8e6d8847a7f5d035f1d1f8f\",\n};\n\nexport const CCTP_TOKEN_MESSENGER_ABI = [\n {\n type: \"function\",\n name: \"depositForBurn\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"hookData\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"finalityThreshold\", type: \"uint32\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"receiveMessage\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n outputs: [],\n },\n];\n\nexport const CCTP_TOKEN_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"originalAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chargedAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"destinationDomain\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"mintRecipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"burnToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"destinationCaller\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxFee\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"minFinalityThreshold\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"depositWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userNonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n];\n","export const IRIS_API_URL = \"https://iris-api.circle.com/v2\";\n\nexport const CCTP_DOMAINS: Record<string, number> = {\n Ethereum: 0,\n Arbitrum: 3,\n Polygon: 7,\n Optimism: 2,\n Avalanche: 1,\n Solana: 5,\n Base: 6,\n Pharos: 31,\n};\n","import { CCTP_TOKEN_PROXY, CCTP_TOKEN_PROXY_ABI } from \"./contract\";\nimport { CCTP_DOMAINS } from \"./config\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, OpenAPI } from '@stableflow/core';\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nconst excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class CCTPService {\n constructor() {\n }\n\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `CCTPService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-500\", isDebug: OpenAPI.DEBUG });\n\n const sourceDomain = CCTP_DOMAINS[fromToken.chainName];\n const destinationDomain = CCTP_DOMAINS[toToken.chainName];\n const proxyAddress = CCTP_TOKEN_PROXY[fromToken.chainName];\n\n const result = await wallet.quote(Service.CCTP, {\n dry,\n proxyAddress,\n abi: CCTP_TOKEN_PROXY_ABI,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n excludeFees,\n destinationDomain,\n sourceDomain,\n });\n\n execTime.logTotal(\"CCTPService.quote\");\n result.sourceQuoteParams = params;\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new CCTPService();\n","import { frxusdChains } from \"@stableflow/core\";\nimport { usdcChains } from \"@stableflow/core\";\nimport { LayerZeroChainConfig, LAYERZZERO_CHAINS } from \"../utils\";\n\nexport interface FraxZeroConfig extends LayerZeroChainConfig {\n remoteHop?: string;\n lockbox?: string;\n programId?: string;\n mint?: string;\n escrow?: string;\n confirmations: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// DVN count: frax-finance uses 3 DVNs (fixed value)\nexport const FRAXZERO_REQUIRED_DVN_COUNT = 3;\n\n// FraxZero RemoteHop config, see https://docs.frax.com/frxusd/fraxzero-supported-networks\n// Chain names match chainName in frxusdChains, excluding Fraxtal\n// confirmation counts: visit https://layerzeroscan.com/application/frax-finance, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\nexport const FRAXZERO_CONFIG: Record<string, FraxZeroConfig> = {\n Ethereum: {\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n remoteHop: \"0x3ad4dC2319394bB4BE99A0e4aE2AbF7bCEbD648E\",\n lockbox: \"0x566a6442a5a6e9895b9dca97cc7879d632c6e4b0\",\n confirmations: 15,\n oftApprovalRequired: true,\n },\n Arbitrum: {\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n remoteHop: \"0x29F5DBD0FE72d8f11271FCBE79Cb87E18a83C70A\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Avalanche: {\n ...LAYERZZERO_CHAINS[\"Avalanche\"],\n remoteHop: \"0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A\",\n confirmations: 12,\n oftApprovalRequired: true,\n },\n Berachain: {\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n remoteHop: \"0xc71BF5Ee4740405030eF521F18A96eA14fec802D\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n \"BNB Chain\": {\n ...LAYERZZERO_CHAINS[\"BNB Chain\"],\n remoteHop: \"0x452420df4AC1e3db5429b5FD629f3047482C543C\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Optimism: {\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n remoteHop: \"0x31D982ebd82Ad900358984bd049207A4c2468640\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Polygon: {\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n remoteHop: \"0xf74D38A26948E9DDa53eD85cF03C6b1188FbB30C\",\n confirmations: 512,\n oftApprovalRequired: true,\n },\n \"X Layer\": {\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n remoteHop: \"0x79152c303AD5aE429eDefa4553CB1Ad2c6EE1396\",\n confirmations: 225000,\n oftApprovalRequired: true,\n },\n Solana: {\n ...LAYERZZERO_CHAINS[\"Solana\"],\n programId: \"E1ht9dUh1ZkgWWRRPCuN3kExEoF2FXiyADXeN3XyMHaQ\",\n escrow: \"84AFSH3TSzyjbEFJX9z8sjpV7npTWq7f8ZR5zkLG22hX\",\n confirmations: 32,\n oftApprovalRequired: false,\n },\n Fraxtal: {\n ...LAYERZZERO_CHAINS[\"Fraxtal\"],\n lockbox: \"0x96A394058E2b84A89bac9667B19661Ed003cF5D4\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n Katana: {\n ...LAYERZZERO_CHAINS[\"Katana\"],\n remoteHop: \"0x5d8eb59a12bc98708702305a7b032f4b69dd5b5c\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n};\n\nexport const FRAXZERO_MIDDLE_TOKEN_USDC = usdcChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_TOKEN_FRXUSD = frxusdChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\n\nexport const FRAXZERO_REDEEM_USDC_CONTRACT = \"0x4F95C5bA0C7c69FB2f9340E190cCeE890B3bd87c\";\nexport const FRAXZERO_REDEEM_RWA_CONTRACT = \"0x5fbAa3A3B489199338fbD85F7E3D444dc0504F33\";\nexport const FRAXZERO_REDEMPTION_CONTRACT = \"0x4c21B7577C8FE8b0B0669165ee7C8f67fa1454Cf\";\n\nexport const FRAXZERO_REDEEM_AND_MINT_CONTRACT = \"0xabA176B7e92c0A6DF8AC973e78d3fE987794bA4B\";\n\n// gas amount = gas limit * gas price\nexport const FRAXZERO_GAS_USED = {\n REDEEM: 0n, // 358964n\n MINT: {\n TO_SOL: 0n, // 756271n\n TO_FRAXTAL: 0n, // 660997n\n TO_ETHEREUM: 0n, // 334550n\n SEND: 0n, // 756271n\n },\n};\n","export const FRAXZERO_ABI = [\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"_EXECUTOR\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_DVN\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_TREASURY\", \"type\": \"address\" },\n { \"internalType\": \"address[]\", \"name\": \"_approvedOfts\", \"type\": \"address[]\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"AddressInsufficientBalance\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"FailedInnerCall\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"HopPaused\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InsufficientFee\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidOFT\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint16\", \"name\": \"optionType\", \"type\": \"uint16\" }\n ],\n \"name\": \"InvalidOptionType\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"NotEndpoint\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"RefundFailed\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint8\", \"name\": \"bits\", \"type\": \"uint8\" },\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n ],\n \"name\": \"SafeCastOverflowedUintDowncast\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" }\n ],\n \"name\": \"SafeERC20FailedOperation\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"ZeroAmountSend\", \"type\": \"error\" },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"oft\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"indexed\": true, \"internalType\": \"bytes32\", \"name\": \"to\", \"type\": \"bytes32\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"SendOFT\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DVN\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"EXECUTOR\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TREASURY\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"acceptOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"name\": \"approvedOft\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"\", \"type\": \"uint32\" }\n ],\n \"name\": \"executorOptions\",\n \"outputs\": [\n { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"fraxtalHop\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"hopFee\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"numDVNs\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bool\", \"name\": \"_paused\", \"type\": \"bool\" }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pendingOwner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"quote\",\n \"outputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"nativeFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"lzTokenFee\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct MessagingFee\",\n \"name\": \"fee\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" }\n ],\n \"name\": \"quoteHop\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"finalFee\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"tokenAddress\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverERC20\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverETH\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"sendOFT\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"eid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes\", \"name\": \"_options\", \"type\": \"bytes\" }\n ],\n \"name\": \"setExecutorOptions\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_fraxtalHop\", \"type\": \"address\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_hopFee\", \"type\": \"uint256\" }\n ],\n \"name\": \"setHopFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" }\n ],\n \"name\": \"setNumDVNs\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"bool\", \"name\": \"_approved\", \"type\": \"bool\" }\n ],\n \"name\": \"toggleOFTApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n];\n\nexport const FRAXZERO_REDEEM_MINT_ABI = [\n {\n \"inputs\": [],\n \"name\": \"mdwrComboView\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsDepositable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesMintable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsWithdrawable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesRedeemable\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"redeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"deposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewDeposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewWithdraw\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewMint\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewRedeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"receiver\", \"type\": \"bytes32\" }\n ],\n \"name\": \"mintAndSend\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"guidOrZero\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"redeemToUsdcAndTransfer\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxUstbRedemptionAmount\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenAmount\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenInAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"calculateUsdcOut\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"usdcOutAmountAfterFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import { FRAXZERO_CONFIG, FRAXZERO_REQUIRED_DVN_COUNT } from \"./config\";\nimport { FRAXZERO_ABI } from \"./contract\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { Usdt0Service } from \"../usdt0\";\nimport { OFT_ABI } from \"../usdt0/contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class FraxZeroService extends Usdt0Service {\n public override async quote(params: any) {\n const {\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `FraxZeroService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n const isFromEthereumOrFraxtal = fromToken.chainId === 1 || fromToken.chainId === 252;\n const isToEthereumOrFraxtal = toToken.chainId === 1 || toToken.chainId === 252;\n const isFraxtal = fromToken.chainId === 252 || toToken.chainId === 252;\n const isFromSolana = fromToken.chainName === \"Solana\";\n\n if (isFromSolana) {\n // only support Ethereum and Fraxtal\n if (![1, 252].includes(toToken.chainId)) {\n throw new Error(\"Invalid destination chain\");\n }\n }\n\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: FRAXZERO_REQUIRED_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (isFraxtal && !isFromSolana) {\n const result = await wallet.quote(Service.Usdt0, {\n ...params,\n abi: OFT_ABI,\n dstEid: destinationLayerzero.eid,\n payInLzToken: PayInLzToken,\n originLayerzeroAddress: isFromEthereumOrFraxtal ? originLayerzero.lockbox : fromToken.contractAddress,\n destinationLayerzeroAddress: isToEthereumOrFraxtal ? destinationLayerzero.lockbox : toToken.contractAddress,\n excludeFees,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote isFraxtal\");\n\n return result;\n }\n\n const result = await wallet.quote(Service.FraxZero, {\n ...params,\n abi: FRAXZERO_ABI,\n originLayerzero,\n destinationLayerzero,\n excludeFees,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote\");\n\n return result;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZeroService();\n","import { FraxZeroService, excludeFees as fraxExcludeFees } from \".\";\nimport { FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_REDEEM_USDC_CONTRACT, FRAXZERO_REDEEM_RWA_CONTRACT, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_GAS_USED, FRAXZERO_REDEMPTION_CONTRACT } from \"./config\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport Big from \"big.js\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, numberRemoveEndZero, OneClickSwapType } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport { getPrice } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\n\nexport class FraxZero2OneClickService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"FraxZero2OneClickService quote\", \"yellow-500\", \"params: %o\", params);\n\n const _quoteType = `FraxZero2OneClick ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-700\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumFrxUSD = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToEthereumUSDC = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_FRXUSD);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // fraxzero quote result\n let firstStepResult: any;\n if (!isFromEthereumFrxUSD) {\n execTime.breakpoint();\n // bridge to Ethereum\n firstStepResult = await super.quote({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"firstStepResult: %o\", firstStepResult);\n const ethereumFrxUSDAmountWei = isFromEthereumFrxUSD\n ? amountWei\n : Big(firstStepResult.outputAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown);\n const ethereumFrxUSDAmount = isFromEthereumFrxUSD\n ? Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown)\n : firstStepResult.outputAmount;\n\n // oneclick quote result\n let thirdStepResult: any;\n let preivewRedeemResult: any;\n if (!isToEthereumUSDC) {\n let oneClickFeeRatio = \"0\";\n // These fees are currently all 0\n // No need to request for now\n // if (!isFromEthereumFrxUSD) {\n // execTime.breakpoint();\n // const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n // gasLimit: FRAXZERO_GAS_USED.REDEEM * 120n / 100n,\n // price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken.symbol),\n // nativeToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken,\n // provider,\n // gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_FRXUSD.chainId as number].gasPrice : void 0,\n // });\n // execTime.log(\"middleChainWallet.getEstimateGas\");\n // const secondStepGasToAmount = Big(usd).div(getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.symbol) || 1).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals);\n // oneClickFeeRatio = Big(secondStepGasToAmount)\n // .div(Big(secondStepGasToAmount).plus(Big(ethereumFrxUSDAmountWei).div(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals)))\n // .times(10000)\n // .toFixed(0, Big.roundUp);\n // }\n\n // estimate redeem amount\n // If it's a quote, use a 1:1 exchange rate\n let ethereumUSDCAmountWei = Big(ethereumFrxUSDAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, Big.roundDown);\n try {\n execTime.breakpoint();\n preivewRedeemResult = await middleChainWallet.preivewRedeemFrxUSD({\n dry,\n amountWei: ethereumFrxUSDAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n });\n execTime.log(\"middleChainWallet.preivewRedeemFrxUSD\");\n ethereumUSDCAmountWei = preivewRedeemResult.totalAssetsOut.toString();\n } catch (error) {\n csl(\"FraxZero2OneClickService quote\", \"red-500\", \"estimate redeem amount failed: %o\", error);\n }\n\n // from ethereum USDC to toToken\n execTime.breakpoint();\n thirdStepResult = await oneClickService.quote({\n ...params,\n amountWei: ethereumUSDCAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n originAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: OneClickSwapType.Flex,\n isProxy: false,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"thirdStepResult: %o\", thirdStepResult);\n\n // redeem from ethereum frxUSD to ethereum USDC\n execTime.breakpoint();\n const secondStepResult = await middleChainWallet.redeemFrxUSD({\n ...params,\n preivewRedeemResult,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n amountWei: ethereumFrxUSDAmountWei,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n refundTo: middleChainRecipientAddress,\n recipient: !isToEthereumUSDC ? (thirdStepResult?.quote?.depositAddress || middleChainRecipientAddress) : recipient,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n });\n execTime.log(\"middleChainWallet.redeemFrxUSD\");\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"secondStepResult: %o\", secondStepResult);\n\n const withOneClick = (_result: any) => {\n let totalFeesUsd = Big(0);\n let estimateTime = _result?.estimateTime || 0;\n let finalOutputAmount = _result?.outputAmount || \"0\";\n let depositAddress = thirdStepResult?.quote?.depositAddress;\n\n const fees = {\n ..._result?.fees,\n };\n if (!isToEthereumUSDC) {\n for (const feeKey in thirdStepResult?.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = thirdStepResult.fees[feeKey];\n }\n estimateTime = estimateTime + (thirdStepResult?.estimateTime || 0);\n finalOutputAmount = thirdStepResult?.outputAmount || \"0\";\n }\n for (const feeKey in fees) {\n if (fraxExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const inputAmount = Big(amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown);\n const amountInUsd = Big(inputAmount).times(getPrice(prices, fromToken.symbol));\n const priceImpact = Big(amountInUsd).minus(Big(finalOutputAmount).times(getPrice(prices, toToken.symbol))).div(amountInUsd);\n const exchangeRate = Big(finalOutputAmount).div(inputAmount);\n\n return {\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime,\n outputAmount: finalOutputAmount,\n priceImpact: numberRemoveEndZero(Big(priceImpact).toFixed(4)),\n exchangeRate: numberRemoveEndZero(Big(exchangeRate).toFixed(6, Big.roundDown)),\n quoteParam: {\n ..._result?.quoteParam,\n fromToken,\n amountWei,\n toToken,\n refundTo,\n recipient,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumFrxUSD,\n isToEthereumUSDC,\n depositAddress,\n },\n sourceQuoteParams: params,\n };\n };\n\n // Redeem from the frontend\n if (isFromEthereumFrxUSD) {\n\n const oneClickResult = withOneClick(secondStepResult);\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is From EthereumFrxUSD\");\n\n return {\n ...secondStepResult,\n ...oneClickResult,\n sourceQuoteParams: params,\n };\n }\n\n // Redeem is done by the backend, and the frontend calls FraxZero to bridge to Ethereum frxUSD\n const oneClickResult = withOneClick({\n ...firstStepResult,\n outputAmount: secondStepResult.outputAmount,\n });\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is NOT From EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n ...oneClickResult,\n recipient,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n permitAmountWei: ethereumFrxUSDAmountWei,\n permitAdditionalData: {},\n sourceQuoteParams: params,\n };\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZero2OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport { FraxZeroService, excludeFees as fraxZeroExcludeFees } from \".\";\nimport { FRAXZERO_CONFIG, FRAXZERO_GAS_USED, FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_REDEEM_USDC_CONTRACT } from \"./config\";\nimport { getPrice, getRequest, GetStatusParams, GetStatusStableflowResponse, isStableToken, OneClickSwapType } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\n\nexport class OneClick2FraxZeroService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"params: %o\", params);\n\n const _quoteType = `OneClick2FraxZero ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-500\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumUSDC = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n const isToEthereumFrxUSD = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToSolana = toToken.chainName === \"Solana\";\n const isToFraxtal = toToken.chainId === 252;\n const isSend = !isToEthereumFrxUSD && !isToSolana && !isToFraxtal;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_USDC);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n let previewMintResult: any;\n // 1. use OneClick to bridge to Ethereum USDC first\n if (!isFromEthereumUSDC) {\n // estimate gas\n let gasLimit = FRAXZERO_GAS_USED.MINT.SEND;\n if (isToEthereumFrxUSD) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_ETHEREUM;\n }\n if (isToSolana) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_SOL;\n }\n if (isToFraxtal) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_FRAXTAL;\n }\n gasLimit = gasLimit * 120n / 100n;\n\n let firstStepAmountWei = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, 0);\n if (!isStableToken(fromToken)) {\n const inputPrice = getPrice(prices, fromToken.symbol);\n const inputValue = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(inputPrice);\n firstStepAmountWei = Big(inputValue).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, 0);\n }\n\n // Mint should be a 1:1 conversion from Ethereum USDC to Ethereum frxUSD.\n // The ratio can be obtained from the contract.\n execTime.breakpoint();\n previewMintResult = await middleChainWallet.previewMintFrxUSD({\n dry,\n amountWei: firstStepAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n });\n const { totalAssetsOut: estimateEthereumFrxUSDAmountWei } = previewMintResult;\n execTime.log(\"previewMintFrxUSD\");\n\n execTime.breakpoint();\n const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n gasLimit,\n price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken.symbol),\n nativeToken: FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken,\n provider: provider,\n gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_USDC.chainId as number].gasPrice : void 0,\n });\n execTime.log(\"middleChainWallet.getEstimateGas\");\n const secondStepGasToAmount = Big(usd || 0).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC EstimateGas usd: %o, wei: %o, amount: %o\", usd, wei, amount);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n let secondStepResult: any;\n if (!isToEthereumFrxUSD) {\n execTime.breakpoint();\n secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: estimateEthereumFrxUSDAmountWei.toString(),\n refundTo: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepResult: %o\", secondStepResult);\n\n let secondStepLzMsgFeeUsd = secondStepResult?.fees?.nativeFeeUsd || \"0\";\n let secondStepLzMsgFee = secondStepResult?.fees?.nativeFee || \"0\";\n // add 120% buffer\n const usdt0MessageFeeBuffer = 1.2;\n // super.quote has already added a buffer, but here we add a bit more to further reduce the chance of failure\n secondStepLzMsgFeeUsd = Big(secondStepLzMsgFeeUsd || 0).times(1 + usdt0MessageFeeBuffer);\n secondStepLzMsgFee = Big(secondStepLzMsgFee || 0).times(1 + usdt0MessageFeeBuffer);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFeeUsd: %o\", secondStepLzMsgFeeUsd.toString());\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFee: %o\", secondStepLzMsgFee.toString());\n const secondStepLzMsgFeeAmount = Big(secondStepLzMsgFeeUsd).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n const totalAppFeesAmount = Big(secondStepGasToAmount).plus(secondStepLzMsgFeeAmount);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC totalAppFeesAmount: %o\", totalAppFeesAmount.toString());\n const oneClickFeeRatio = Big(totalAppFeesAmount)\n .div(Big(totalAppFeesAmount).plus(Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals)))\n .times(10000)\n .toFixed(0, Big.roundUp);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC oneClickFeeRatio: %o\", oneClickFeeRatio.toString());\n if (secondStepResult) {\n secondStepResult.fees.nativeFee = secondStepLzMsgFee.toString();\n secondStepResult.fees.nativeFeeUsd = secondStepLzMsgFeeUsd.toString();\n }\n\n execTime.breakpoint();\n const firstStepResult = await oneClickService.quote({\n ...params,\n amountWei: firstStepAmountWei,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n destinationAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: OneClickSwapType.Output,\n isProxy: true,\n recipient: middleChainRecipientAddress,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(firstStepResult.fees?.destinationGasFeeUsd || 0).minus(secondStepLzMsgFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...firstStepResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in secondStepResult?.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is NOT FromEthereumUSDC\");\n\n const notFromEthUSDCFinalOutputAmount = isToEthereumFrxUSD\n ? numberRemoveEndZero(Big(estimateEthereumFrxUSDAmountWei.toString()).div(10 ** toToken.decimals).toFixed(toToken.decimals, Big.roundDown))\n : secondStepResult.outputAmount;\n\n return {\n ...firstStepResult,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n permitAmountWei: firstStepResult?.quote?.amountOut,\n permitAdditionalData: {},\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: (isToEthereumFrxUSD ? 0 : secondStepResult.estimateTime) + firstStepResult.estimateTime,\n outputAmount: notFromEthUSDCFinalOutputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n toToken: params.toToken,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: params.recipient,\n depositAddress: firstStepResult.quote?.depositAddress,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isOneClickTransfer: !firstStepResult.sendParam ? {\n originAsset: fromToken.contractAddress,\n depositAddress: firstStepResult.quote?.depositAddress,\n amount: firstStepResult.quote?.amountIn,\n } : false,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 2. If is from Ethereum USDC, skip the first step\n // mint and bridge use contract directly\n if (isToEthereumFrxUSD) {\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintFrxUSD({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 3. to other chain frxUSD\n // The mintAndSend method of the _FRAXZERO_REDEEM_AND_MINT_CONTRACT contract should be called here\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintAndSendFrxUSD({\n ...params,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n originLayerzero,\n destinationLayerzero,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintAndSendFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n execTime.breakpoint();\n const secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: Big(firstStepResult.outputAmount).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown),\n });\n execTime.log(\"FraxZero.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC estimate fraxzero: %o\", secondStepResult);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...firstStepResult.fees,\n };\n for (const feeKey in secondStepResult.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const sendParamOptions = firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1];\n const fraxzeroSendParamOptions = secondStepResult.sendParam.param[secondStepResult.sendParam.param.length - 1];\n firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1] = {\n ...sendParamOptions,\n value: fraxzeroSendParamOptions.value,\n };\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To Other Chain FrxUSD\");\n\n return {\n ...firstStepResult,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: firstStepResult.estimateTime + secondStepResult.estimateTime,\n outputAmount: secondStepResult.outputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n public override async send(params: any) {\n const {\n wallet,\n sendParam,\n ...rest\n } = params;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return wallet.send(SendType.TRANSFER, sendParam.isOneClickTransfer);\n }\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public override async estimateTransaction(params: any, quoteData: any) {\n const {\n wallet,\n sendParam,\n } = quoteData;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return quoteData;\n }\n return super.estimateTransaction(params, quoteData);\n }\n\n return quoteData;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClick2FraxZeroService();\n","import { getRequest, GetStatusParams, GetStatusStableflowResponse, SendType, OneClickSwapType } from \"@stableflow/core\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\n\nexport class Usdt0OneClickService {\n public async quote(params: any) {\n const {\n dry,\n evmWallet,\n evmAddress,\n fromToken,\n toToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"Usdt0OneClickService\", logStyle: \"lime-700\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n const usdt0Params = {\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationChain: MIDDLE_TOKEN_CHAIN.chainName,\n recipient: MIDDLE_CHAIN_REFOUND_ADDRESS,\n };\n const oneClickParams = {\n ...params,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: OneClickSwapType.Flex,\n isProxy: false,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n };\n\n // First, use the middle chain arb address (our refund address) to request Usdt0 for the output amount\n execTime.breakpoint();\n let usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote: %o\", usdt0Result);\n\n if (usdt0Result.errMsg) {\n return usdt0Result;\n }\n\n // Use the output amount from Usdt0 to request near-intents for the depositAddress\n oneClickParams.amountWei = Big(usdt0Result.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0, 0);\n execTime.breakpoint();\n const oneClickResult = await oneClickService.quote(oneClickParams);\n execTime.log(\"oneClickService.quote: %o\", oneClickResult);\n\n if (oneClickResult.errMsg) {\n return oneClickResult;\n }\n\n if (!dry) {\n usdt0Params.recipient = oneClickResult.quote.depositAddress;\n\n execTime.breakpoint();\n usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote again: %o\", usdt0Result);\n }\n\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"oneClickResult: %o\", oneClickResult);\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"usdt0Result: %o\", usdt0Result);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...usdt0Result.fees,\n };\n for (const feeKey in oneClickResult.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = oneClickResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"Usdt0OneClickService.quote\");\n\n return {\n ...usdt0Result,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: oneClickResult.outputAmount,\n priceImpact: oneClickResult.priceImpact,\n exchangeRate: oneClickResult.exchangeRate,\n quoteParam: {\n ...usdt0Result.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n depositAddress: oneClickResult.quote.depositAddress,\n },\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return usdt0Service.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new Usdt0OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_LAYERZERO_EXECUTOR, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { getPrice, GetStatusParams, getRequest, GetStatusStableflowResponse, isStableToken, OneClickSwapType } from \"@stableflow/core\";\n\nexport class OneClickUsdt0Service {\n public async quote(params: any) {\n const {\n evmWallet,\n evmAddress,\n fromToken,\n prices,\n } = params;\n\n const execTime = new ExecTime({ type: \"OneClickUsdt0\", logStyle: \"lime-500\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // If it is not a USD stablecoin\n // Need to convert based on price\n let secondStepAmountWei = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0);\n if (!isStableToken(fromToken)) {\n const inputPrice = getPrice(prices, fromToken.symbol);\n const inputValue = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(inputPrice);\n secondStepAmountWei = Big(inputValue).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0);\n }\n\n // First, call the usdt0 quote method\n // Retrieve sendParam, fees, and estimated costs\n // usdt0 is the second step, so the source chain is arb\n // The refund address is middleChainRecipientAddress\n // Since the first step uses oneclick with EXACT_OUTPUT mode,\n // params.amountWei is the input amount for the second step\n const usdt0Params = {\n ...params,\n amountWei: secondStepAmountWei,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originChain: MIDDLE_TOKEN_CHAIN.chainName,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n };\n\n execTime.breakpoint();\n const usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote\");\n\n const usdt0MessageFeeBuffer = 1.2;\n usdt0Result.fees.nativeFeeUsd = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFeeUsd || 0).times(1 + usdt0MessageFeeBuffer).toFixed(20));\n usdt0Result.fees.nativeFee = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFee || 0).times(1 + usdt0MessageFeeBuffer).toFixed(fromToken.nativeToken.decimals));\n // LZ message fee to USD\n const usdt0MessageFeeUsd = usdt0Result.fees.nativeFeeUsd;\n\n if (usdt0Result.errMsg) {\n return usdt0Result;\n }\n\n // OneClick charges a proportional fee on fromToken input\n // Convert LZ message fee USD to fromToken amount so fee ratio uses consistent units\n // fee bp = fee amount / (fee amount + amount), minimum is 1, maximum is 10000\n const usdt0MessageFeeAmountInFromToken = Big(usdt0MessageFeeUsd || 0)\n .div(getPrice(prices, fromToken.symbol) || 1)\n .toFixed(fromToken.decimals);\n const fromTokenAmount = Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n const oneClickFeeRatio = Big(usdt0MessageFeeAmountInFromToken || 0)\n .div(Big(usdt0MessageFeeAmountInFromToken || 0).plus(fromTokenAmount))\n .times(10000)\n .toFixed(0, Big.roundUp);\n\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"usdt0MessageFeeAmountInFromToken: %o\", usdt0MessageFeeAmountInFromToken);\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"amount: %o\", fromTokenAmount);\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"oneClickFeeRatio: %o\", oneClickFeeRatio);\n\n if (Big(oneClickFeeRatio).gt(10000)) {\n return { errMsg: `Amount is too low, at least ${usdt0MessageFeeAmountInFromToken}` };\n }\n\n // Call oneclick quote method again\n // The destination chain is arb\n // Since the exact amount transferred by oneclick needs to be signed, EXACT_OUTPUT mode must be used\n // In EXACT_OUTPUT mode, the output amount equals the expected value\n execTime.breakpoint();\n\n const oneClickResult = await oneClickService.quote({\n ...params,\n amountWei: secondStepAmountWei,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: OneClickSwapType.Output,\n isProxy: true,\n recipient: middleChainRecipientAddress,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(oneClickResult.fees?.destinationGasFeeUsd || 0).minus(usdt0MessageFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...oneClickResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in usdt0Result.fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = usdt0Result.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const usdt0SendParam = usdt0Result.sendParam?.param?.[0];\n const usdt0MessageFee = usdt0Result.sendParam?.param?.[1];\n\n execTime.log(\"OneClickUsdt0Service.quote\");\n\n return {\n ...oneClickResult,\n needPermit: true,\n permitSpender: MIDDLE_CHAIN_LAYERZERO_EXECUTOR,\n permitToken: MIDDLE_TOKEN_CHAIN,\n permitAmountWei: oneClickResult?.quote?.amountOut,\n permitAdditionalData: {\n amount_ld: usdt0SendParam?.amountLD,\n compose_msg: usdt0SendParam?.composeMsg,\n dst_eid: usdt0SendParam?.dstEid,\n extra_options: usdt0SendParam?.extraOptions,\n min_amount_ld: usdt0SendParam?.minAmountLD?.toString(),\n oft_cmd: usdt0SendParam?.oftCmd,\n to: usdt0SendParam?.to,\n native_fee: usdt0MessageFee?.nativeFee?.toString(),\n },\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: usdt0Result.outputAmount,\n quoteParam: {\n ...oneClickResult.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n isOriginLegacy: usdt0Result.quoteParam?.isOriginLegacy,\n isDestinationLegacy: usdt0Result.quoteParam?.isDestinationLegacy,\n },\n usdt0SendParam,\n usdt0MessageFee,\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return oneClickService.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n return oneClickService.send(params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClickUsdt0Service();\n","// native chain name\nexport const NativeChains: Record<string, string> = {\n \"Ethereum\": \"ethereum\",\n \"Arbitrum\": \"arbitrum\",\n \"BNB Chain\": \"bsc\",\n \"Base\": \"base\",\n};\n\nexport const NativeV4Routes: Record<string, { swap: string; bridge: string; }> = {\n \"Ethereum\": {\n swap: \"0x8a2ddc0461Fcf96F81a05529Bed540d4f1eb2a00\",\n bridge: \"0xceBFC5dFBD5CE21694fe2ACefa63aD6f828831d2\",\n },\n \"Arbitrum\": {\n swap: \"0x0FC85a171bD0b53BF0bBace74F04B66170Ae3eAb\",\n bridge: \"0x5E65CEa5473fC8977e4DfDe940B2A99a439181cA\",\n },\n \"BNB Chain\": {\n swap: \"0xF064b069Ed18Eb5c61159247C55C5af79B28a968\",\n bridge: \"0x5B933868f5e710070b146213ED2Cd71628E465C1\",\n },\n \"Base\": {\n swap: \"0xaEC634d949df14Be76dC317504C7b9a6a8A5f576\",\n bridge: \"0xA11f7CdE7402093FF4D24A91FD8cdcc8AA0c96A8\",\n },\n};\n","import { formatNumber } from \"../utils/format-number\";\nimport Big from \"big.js\";\nimport { NativeChains, NativeV4Routes } from \"./contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport class NativeService {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n fromToken,\n toToken,\n prices,\n recipient,\n slippageTolerance,\n } = params;\n\n const _quoteType = `NativeService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-600\", isDebug: OpenAPI.DEBUG });\n\n const isSwap = fromToken.chainName === toToken.chainName;\n\n let quoteUri = \"/firm-quote\";\n const quoteParams: any = {\n version: 4,\n from_address: refundTo,\n to_address: recipient,\n beneficiary_address: recipient,\n refund_to: refundTo,\n src_chain: NativeChains[fromToken.chainName],\n dst_chain: NativeChains[toToken.chainName],\n token_in: fromToken.contractAddress,\n token_out: toToken.contractAddress,\n amount_wei: amountWei,\n expiry_time: 90, // 90 seconds\n timeout_millis: 3000, // 3 seconds\n slippage: slippageTolerance,\n allow_multihop: true\n };\n\n if (dry) {\n quoteUri = \"/indicative-quote\";\n }\n\n if (!isSwap) {\n quoteUri = `/bridge${quoteUri}`;\n }\n\n execTime.breakpoint();\n const response: any = await getRequest(`/v0${quoteUri}`, quoteParams);\n execTime.log(\"Native API, response: %o\", response);\n\n if (!response?.success) {\n let errorMessage = response?.message || \"Native quote failed\";\n // requested amount smaller than token in minimum wei [18446744073709551615]\n if (errorMessage.includes(\"requested amount smaller than token in minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** fromToken.decimals);\n errorMessage = `Amount is too low, at least ${formatNumber(minAmount, fromToken.decimals, true)} ${fromToken.symbol}`;\n }\n }\n if (errorMessage.includes(\"requested amount smaller than token out minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** toToken.decimals);\n errorMessage = `Amount is too low. A minimum of ${formatNumber(minAmount, toToken.decimals, true)} ${toToken.symbol} must be output.`;\n }\n }\n throw new Error(errorMessage);\n }\n\n execTime.breakpoint();\n const result = await wallet.quote(Service.Native, {\n ...params,\n ...quoteParams,\n quoteResponse: response,\n bridgeRouterAddress: isSwap ? NativeV4Routes[fromToken.chainName].swap : NativeV4Routes[fromToken.chainName].bridge,\n });\n execTime.log(\"wallet.quoteNative\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"NativeService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n refundTo,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n if (!quoteData.sendParam?.txRequest) {\n return quoteData;\n }\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n // { txRequest: {} }\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n refundTo,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n result.sendParam.txRequest.gasLimit = ett.estimateSourceGasLimit;\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n txRequest,\n } = params;\n\n const txResponse = await wallet.signer.sendTransaction({\n to: txRequest.target,\n data: txRequest.calldata,\n value: txRequest.value,\n gasLimit: txRequest.gasLimit,\n });\n\n // wait for tx to be mined\n await txResponse.wait();\n\n return txResponse.hash;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new NativeService();\n","import oneClickService from \"./oneclick\";\nimport usdt0Service from \"./usdt0\";\nimport cctpService from \"./cctp\";\nimport fraxzeroService from \"./fraxzero\";\nimport fraxZeroOneClickService from \"./fraxzero/to-oneclick\";\nimport oneClickFraxZeroService from \"./fraxzero/from-oneclick\";\nimport usdt0OneClickService from \"./usdt0/to-oneclick\";\nimport oneClickUsdt0Service from \"./usdt0/from-oneclick\";\nimport nativeService from \"./native\";\nimport { Service } from \"@stableflow/core\";\n\nexport const ServiceMap: Record<Service, any> = {\n [Service.OneClick]: oneClickService,\n [Service.Usdt0]: usdt0Service,\n [Service.CCTP]: cctpService,\n [Service.FraxZero]: fraxzeroService,\n [Service.FraxZeroOneClick]: fraxZeroOneClickService,\n [Service.OneClickFraxZero]: oneClickFraxZeroService,\n [Service.Usdt0OneClick]: usdt0OneClickService,\n [Service.OneClickUsdt0]: oneClickUsdt0Service,\n [Service.Native]: nativeService,\n};\n","import { ethers } from \"ethers\";\nimport { erc20Abi, Service, type TokenConfig } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { getQuoteModes } from \"./utils\";\n\n/**\n * Serializable, unsigned EVM transaction data.\n *\n * This is what an API-driven custody integrator (e.g. an MPC wallet such as\n * Fireblocks) receives. Stableflow builds the calldata; the integrator signs\n * and broadcasts it through their own infrastructure, then reports the\n * resulting hash back via `BridgeSFA.report`.\n */\nexport interface EvmTxData {\n chainId: number;\n from: string;\n to: string;\n /** Hex-encoded calldata. `0x` for a plain native-token transfer. */\n data: string;\n /** Native token amount in wei, as a decimal string. */\n value: string;\n /** Optional gas limit as a decimal string. */\n gasLimit?: string;\n}\n\n/**\n * EIP-712 typed data for an ERC20 `Permit`, returned unsigned so an external\n * signer (MPC/Fireblocks) can produce the signature. Nothing is signed or\n * verified inside the SDK for this payload.\n */\nexport interface PermitTypedData {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: Record<string, Array<{ name: string; type: string }>>;\n values: {\n owner: string;\n spender: string;\n value: string;\n nonce: string;\n deadline: number;\n };\n deadline: number;\n nonce: number;\n token: string;\n spender: string;\n owner: string;\n}\n\n/**\n * Result of `BridgeSFA.buildTransaction`.\n *\n * Depending on the route, the integrator may need to: broadcast `approveTx`\n * (optionally `approveResetTx` first on Ethereum), sign `permitTypedData`,\n * and always broadcast the main `tx`. See `BridgeSFA.buildTransaction`.\n */\nexport interface BuildTransactionResult {\n chainId: number;\n from: string;\n /** Present when `quote.needApprove === true`. */\n approveTx?: EvmTxData;\n /**\n * Present when `quote.needApprove === true` and the source chain is Ethereum.\n * Some Ethereum tokens (e.g. USDT) require resetting the allowance to 0\n * before setting a new non-zero allowance.\n */\n approveResetTx?: EvmTxData;\n /** Present when `quote.needPermit === true`. Must be signed off-chain. */\n permitTypedData?: PermitTypedData;\n /** The main source-chain transaction to sign and broadcast. */\n tx: EvmTxData;\n}\n\nconst OVERRIDE_KEYS = new Set([\n \"value\",\n \"gasLimit\",\n \"gasPrice\",\n \"maxFeePerGas\",\n \"maxPriorityFeePerGas\",\n \"nonce\",\n \"from\",\n \"type\",\n \"accessList\",\n \"chainId\",\n \"customData\",\n \"blockTag\",\n]);\n\nconst toDecimalString = (v: unknown): string => {\n if (v === undefined || v === null) {\n return \"0\";\n }\n if (typeof v === \"bigint\") {\n return v.toString();\n }\n if (typeof v === \"number\") {\n return Math.trunc(v).toString();\n }\n return String(v);\n};\n\n/**\n * EVM-only guard. Non-EVM chains have very different transaction / message\n * shapes and are intentionally not supported by the API-driven flow yet.\n *\n * TODO(non-evm): implement per-chain unsigned transaction / message builders\n * for Solana, Tron, Sui, Aptos, Near and Ton so MPC integrators can sign them\n * through their own infrastructure.\n */\nconst assertEvm = (token: TokenConfig | undefined): void => {\n if (!token || (token as any).chainType !== \"evm\") {\n throw new Error(\"API-driven custody currently supports EVM chains only\");\n }\n};\n\nconst getSendAmountWei = (serviceType: Service, quote: any): string => {\n const { isExactOutput } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n if (isExactOutput) {\n // Use amountIn (with slippage buffer), not minAmountIn, so approve/deposit\n // amounts cannot fall short due to slippage; excess is refunded to refundTo.\n return quote?.quote?.amountIn;\n }\n return quote?.quoteParam?.amountWei;\n};\n\n/**\n * Encode an EVM `{ contract, method, param }` send payload (as produced by\n * `@stableflow/wallet-evm`) into serializable calldata WITHOUT a signer.\n *\n * The last element of `param` is treated as an ethers overrides object\n * (`{ value, gasLimit, ... }`) when all of its keys are known override keys.\n */\nconst encodeContractCall = (\n sendParam: { contract: any; method: string; param: any[] }\n): Omit<EvmTxData, \"chainId\" | \"from\"> => {\n const { contract, method, param } = sendParam;\n\n if (!contract?.interface || contract?.target === undefined) {\n throw new Error(\"Invalid sendParam: missing contract interface/target\");\n }\n\n const to = typeof contract.target === \"string\"\n ? contract.target\n : String(contract.target);\n\n let args: any[] = Array.isArray(param) ? param : [];\n let value: unknown;\n let gasLimit: unknown;\n\n if (args.length > 0) {\n const last = args[args.length - 1];\n const isOverride =\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n Object.keys(last).length > 0 &&\n Object.keys(last).every((k) => OVERRIDE_KEYS.has(k));\n if (isOverride) {\n args = args.slice(0, -1);\n value = (last as any).value;\n gasLimit = (last as any).gasLimit;\n }\n }\n\n const data = contract.interface.encodeFunctionData(method, args);\n\n return {\n to,\n data,\n value: toDecimalString(value),\n gasLimit: gasLimit === undefined || gasLimit === null ? undefined : toDecimalString(gasLimit),\n };\n};\n\n/**\n * Build a plain token transfer (OneClick \"simple\" deposit path with no proxy):\n * ERC20 `transfer(depositAddress, amountWei)` or a native-token transfer.\n */\nconst buildTransferTx = (params: {\n chainId: number;\n from: string;\n fromToken: TokenConfig;\n depositAddress: string;\n amountWei: string;\n}): EvmTxData => {\n const { chainId, from, fromToken, depositAddress, amountWei } = params;\n\n if (!depositAddress) {\n throw new Error(\"Quote has no depositAddress to build transfer transaction\");\n }\n\n if (fromToken.contractAddress === \"eth\") {\n return {\n chainId,\n from,\n to: depositAddress,\n data: \"0x\",\n value: toDecimalString(amountWei),\n };\n }\n\n const iface = new ethers.Interface(erc20Abi as any);\n const data = iface.encodeFunctionData(\"transfer\", [depositAddress, amountWei]);\n\n return {\n chainId,\n from,\n to: fromToken.contractAddress,\n data,\n value: \"0\",\n };\n};\n\n/**\n * Build the main unsigned source-chain transaction from a quote, mirroring the\n * branching in `BridgeSFA.send` but producing serializable calldata instead of\n * signing/broadcasting.\n */\nexport const buildSendTx = (serviceType: Service, quote: any): EvmTxData => {\n const fromToken: TokenConfig = quote?.quoteParam?.fromToken;\n assertEvm(fromToken);\n\n const chainId = fromToken.chainId as number;\n const from = quote?.quoteParam?.refundTo;\n const sendParam = quote?.sendParam;\n\n // Native service already produces a serializable { target, calldata, value, gasLimit }.\n if (sendParam?.txRequest) {\n const txRequest = sendParam.txRequest;\n return {\n chainId,\n from,\n to: txRequest.target,\n data: txRequest.calldata,\n value: toDecimalString(txRequest.value),\n gasLimit: txRequest.gasLimit === undefined || txRequest.gasLimit === null\n ? undefined\n : toDecimalString(txRequest.gasLimit),\n };\n }\n\n const { isOneClickService } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n if (isOneClickService) {\n // Proxy path -> contract call; simple path -> plain transfer to depositAddress.\n if (sendParam) {\n return { chainId, from, ...encodeContractCall(sendParam) };\n }\n return buildTransferTx({\n chainId,\n from,\n fromToken,\n depositAddress: quote?.quote?.depositAddress,\n amountWei: getSendAmountWei(serviceType, quote),\n });\n }\n\n if (!sendParam) {\n throw new Error(\"Quote has no sendParam to build transaction\");\n }\n\n return { chainId, from, ...encodeContractCall(sendParam) };\n};\n\n/**\n * Build the ERC20 approve transaction(s) for a quote that requires approval.\n * On Ethereum an additional `approveResetTx` (approve 0) is returned so the\n * integrator can reset a stale allowance before setting a new one.\n */\nexport const buildApproveTx = (\n serviceType: Service,\n quote: any\n): { approveTx?: EvmTxData; approveResetTx?: EvmTxData } => {\n if (!quote?.needApprove) {\n return {};\n }\n\n const fromToken: TokenConfig = quote?.quoteParam?.fromToken;\n assertEvm(fromToken);\n\n if (fromToken.contractAddress === \"eth\") {\n // Native token needs no approval.\n return {};\n }\n\n const chainId = fromToken.chainId as number;\n const from = quote?.quoteParam?.refundTo;\n const spender = quote?.approveSpender;\n if (!spender) {\n throw new Error(\"Quote requires approval but has no approveSpender\");\n }\n\n const amountWei = getSendAmountWei(serviceType, quote);\n const iface = new ethers.Interface(erc20Abi as any);\n\n const approveTx: EvmTxData = {\n chainId,\n from,\n to: fromToken.contractAddress,\n data: iface.encodeFunctionData(\"approve\", [spender, amountWei]),\n value: \"0\",\n };\n\n const result: { approveTx?: EvmTxData; approveResetTx?: EvmTxData } = { approveTx };\n\n if (fromToken.chainName === \"Ethereum\") {\n result.approveResetTx = {\n chainId,\n from,\n to: fromToken.contractAddress,\n data: iface.encodeFunctionData(\"approve\", [spender, \"0\"]),\n value: \"0\",\n };\n }\n\n return result;\n};\n\n/**\n * Build the EIP-712 `Permit` typed data for a permit-required route, returned\n * unsigned. The integrator signs it with their MPC/Fireblocks signer, splits\n * the signature into `v/r/s`, and passes the assembled `permitSignature` to\n * `BridgeSFA.report`.\n */\nexport const buildPermitTypedData = async (params: {\n permitToken: TokenConfig;\n permitAmountWei: string;\n permitSpender: string;\n owner: string;\n}): Promise<PermitTypedData> => {\n const { permitToken, permitAmountWei, permitSpender, owner } = params;\n assertEvm(permitToken);\n\n if (!owner) {\n throw new Error(\"buildPermitTypedData requires the permit owner address\");\n }\n\n const provider = evmRpcFallbackProvider(permitToken);\n const erc20 = new ethers.Contract(permitToken.contractAddress, erc20Abi as any, provider);\n\n const [nonce, name] = await Promise.all([\n erc20.nonces(owner),\n erc20.name(),\n ]);\n\n // Mirror @stableflow/wallet-evm signTypedData: USDC uses version \"2\".\n const version = permitToken.symbol === \"USDC\" ? \"2\" : \"1\";\n const deadline = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 3;\n\n const domain = {\n name,\n version,\n chainId: Number(permitToken.chainId),\n verifyingContract: permitToken.contractAddress,\n };\n\n const types = {\n Permit: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n };\n\n const values = {\n owner,\n spender: permitSpender,\n value: toDecimalString(permitAmountWei),\n nonce: nonce.toString(),\n deadline,\n };\n\n return {\n domain,\n types,\n values,\n deadline,\n nonce: Number(nonce),\n token: permitToken.contractAddress,\n spender: permitSpender,\n owner,\n };\n};\n","import type { GetStatusParams, SubmitDepositTxResponse } from '@stableflow/core';\nimport {\n OpenAPI,\n Service,\n ServiceBackend,\n TransactionStatus,\n tokens,\n type TokenConfig,\n type WalletConfig,\n getRouteStatus,\n Csl,\n CancelablePromise,\n StableflowStatus,\n LayerZeroStatus,\n OneClickStatus,\n postRequest,\n getPrices,\n OneClickSwapType,\n} from '@stableflow/core';\nimport Big from 'big.js';\nimport { ServiceMap } from './service-map';\nimport { formatQuoteError, getQuoteModes } from './utils';\nimport {\n buildApproveTx,\n buildPermitTypedData,\n buildSendTx,\n type BuildTransactionResult,\n} from './tx-builder';\n\n/**\n * Normalized ERC20 permit signature passed to `BridgeSFA.send` / `BridgeSFA.report`\n * when a route requires a permit (`quote.needPermit === true`).\n */\nexport interface PermitSignature {\n amount: string;\n deadline: number;\n nonce: number;\n owner: string;\n r: string;\n s: string;\n v: 27 | 28;\n}\n\nexport interface GetAllQuoteParams {\n singleService?: Service;\n disabledServices?: Service[];\n dry?: boolean;\n /**\n * @deprecated The SDK now fetches trusted token prices internally. Any value\n * passed here is ignored and overridden by the built-in price source.\n */\n prices?: Record<string, string>;\n fromToken: TokenConfig;\n toToken: TokenConfig;\n wallet: WalletConfig;\n evmWallet?: WalletConfig | null;\n evmAddress?: string | null;\n recipient: string;\n refundTo: string;\n amountWei: string;\n slippageTolerance: number;\n minInputAmount?: string;\n /** @deprecated Please migrate to oneclickParams */\n appFees?: { recipient: string; fee: number; }[];\n oneclickParams?: {\n appFees?: { recipient: string; fee: number; }[];\n swapType?: OneClickSwapType;\n isProxy?: boolean;\n };\n}\n\nconst submitOthersTx = (\n requestBody: {\n address: string;\n amount?: string;\n deposit_address: string;\n destination_domain_id?: number;\n fee?: string;\n project: \"nearintents\" | \"layerzero\" | \"cctp\";\n receive_address: string;\n source_domain_id?: number;\n out_amount?: string;\n from_chain?: string;\n symbol?: string;\n to_chain?: string;\n to_symbol?: string;\n tx_hash?: string;\n layer_zero_permit?: unknown;\n frax_zero_permit?: unknown;\n },\n): CancelablePromise<SubmitDepositTxResponse> => {\n return postRequest('/v0/trade/add', requestBody);\n};\n\n/**\n * Full cross-chain bridge API (multi-route quote, send, status).\n * Install `@stableflow/bridges` alongside `@stableflow/core`.\n */\nexport class BridgeSFA {\n public static async getAllQuote(params: GetAllQuoteParams): Promise<Array<{ serviceType: Service; quote?: any; error?: string }>> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"BridgeSFA.getAllQuote\", \"blue-400\", \"params: %o\", params);\n\n const results: Array<{ serviceType: Service; quote?: any; error?: string }> = [];\n\n let { minInputAmount = \"1\", disabledServices } = params;\n if (Big(minInputAmount).lte(0)) {\n minInputAmount = \"1\";\n }\n\n if (\n !params.fromToken\n || !params.fromToken.contractAddress\n || !params.toToken\n || !params.toToken.contractAddress\n || !params.refundTo\n || !params.recipient\n || !params.amountWei\n || Big(params.amountWei).lte(minInputAmount)\n ) {\n throw new Error('Invalid parameters');\n }\n\n // Always use trusted prices fetched by the SDK. Any caller-supplied\n // `params.prices` is ignored/overridden to prevent wrong prices from\n // causing incorrect appFees and on-chain losses.\n params.prices = await getPrices();\n\n const formatQuoteParams = (service: Service) => {\n const _params: any = {\n dry: params.dry,\n amountWei: params.amountWei,\n refundTo: params.refundTo || \"\",\n recipient: params.recipient,\n wallet: params.wallet,\n fromToken: params.fromToken,\n toToken: params.toToken,\n prices: params.prices,\n slippageTolerance: params.slippageTolerance,\n evmWallet: params.evmWallet,\n evmAddress: params.evmAddress,\n };\n\n if (([\n Service.OneClick,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0,\n Service.FraxZeroOneClick,\n Service.OneClickFraxZero,\n ] as Service[]).includes(service)) {\n // _params.slippageTolerance = params.slippageTolerance * 100;\n _params.originAsset = params.fromToken.assetId;\n _params.destinationAsset = params.toToken.assetId;\n _params.refundType = \"ORIGIN_CHAIN\";\n _params.appFees = params.oneclickParams?.appFees || params.appFees;\n _params.swapType = params.oneclickParams?.swapType;\n _params.isProxy = params.oneclickParams?.isProxy;\n }\n if (([\n Service.Usdt0,\n Service.CCTP,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0\n ] as Service[]).includes(service)) {\n _params.originChain = params.fromToken.chainName;\n _params.destinationChain = params.toToken.chainName;\n }\n return _params;\n };\n\n const fromToken = tokens.find(token => token.contractAddress.toLowerCase() === params.fromToken.contractAddress.toLowerCase());\n const toToken = tokens.find(token => token.contractAddress.toLowerCase() === params.toToken.contractAddress.toLowerCase());\n\n if (!fromToken || !toToken) {\n throw new Error('Token pair not supported');\n }\n\n const isFromUsdt = [\"USDT\", \"USD₮0\"].includes(fromToken.symbol);\n const isToUsdt = [\"USDT\", \"USD₮0\"].includes(toToken.symbol);\n\n const quoteServices: any = [];\n const pushQuoteService = (_service: Service) => {\n const serviceStatus = getRouteStatus(_service, disabledServices);\n if (serviceStatus.disabled) {\n return;\n }\n const quoteParams = formatQuoteParams(_service);\n csl(\"BridgeSFA.getAllQuote\", \"blue-400\", \"%s quoteParams: %o\", _service, quoteParams);\n quoteServices.push({\n service: _service,\n quote: () => {\n return ServiceMap[_service].quote(quoteParams);\n },\n });\n };\n\n for (const serviceType of Object.values(Service)) {\n if (\n fromToken.services.includes(serviceType)\n && toToken.services.includes(serviceType)\n ) {\n pushQuoteService(serviceType);\n }\n }\n\n if (\n fromToken.services.includes(Service.Usdt0)\n && toToken.services.includes(Service.OneClick)\n && fromToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (toToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.Usdt0OneClick);\n }\n } else {\n pushQuoteService(Service.Usdt0OneClick);\n }\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.Usdt0)\n && toToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (fromToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.OneClickUsdt0);\n }\n } else {\n pushQuoteService(Service.OneClickUsdt0);\n }\n }\n\n if (\n fromToken.services.includes(Service.FraxZero)\n && toToken.services.includes(Service.OneClick)\n ) {\n pushQuoteService(Service.FraxZeroOneClick);\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.FraxZero)\n ) {\n pushQuoteService(Service.OneClickFraxZero);\n }\n\n if (params.singleService) {\n const quoteService = quoteServices.find((service: any) => service.service === params.singleService);\n if (quoteService) {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n }\n return results;\n }\n\n csl(\"BridgeSFA.getAllQuote\", \"blue-400\", \"quoteServices: %o\", quoteServices);\n\n const promises: Promise<void>[] = [];\n for (const quoteService of quoteServices) {\n const promise = (async () => {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n })();\n promises.push(promise);\n }\n await Promise.allSettled(promises);\n return results;\n }\n\n public static async send(\n serviceType: Service,\n params: {\n wallet: any;\n quote: any;\n permitSignature?: PermitSignature;\n }\n ): Promise<string> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.send) {\n throw new Error(`Service ${serviceType} does not support send method`);\n }\n\n const { quote, wallet, permitSignature } = params;\n\n if (!quote) {\n throw new Error('Quote data is required');\n }\n\n if (quote.needPermit) {\n if (!permitSignature) {\n throw new Error('Permit signature is required');\n }\n }\n\n const sendParams: any = {\n wallet,\n };\n\n const { isExactOutput, isOneClickService } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n const fromToken = quote.quoteParam.fromToken;\n const depositAddress = quote.quote?.depositAddress;\n const sendParam = quote.sendParam;\n\n let _amountWei = quote.quoteParam?.amountWei;\n if (isExactOutput) {\n // Use amountIn (with slippage buffer), not minAmountIn, so the source-chain\n // deposit cannot fail due to slippage; excess is refunded to refundTo.\n _amountWei = quote.quote?.amountIn;\n }\n\n if (isOneClickService) {\n sendParams.sendParam = sendParam;\n sendParams.fromToken = fromToken;\n sendParams.depositAddress = depositAddress;\n sendParams.amountWei = _amountWei;\n } else {\n for (const key in sendParam) {\n sendParams[key] = sendParam[key];\n }\n }\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"sendParams: %o\", sendParams);\n\n const txhash = await service.send(sendParams);\n\n try {\n const reportData = BridgeSFA.buildReportData(serviceType, {\n quote,\n txhash,\n permitSignature,\n });\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"reportData: %o\", reportData);\n\n submitOthersTx(reportData);\n } catch (error) {\n csl(\"BridgeSFA.send\", \"red-400\", \"report tx failed: %o\", error);\n }\n\n return txhash;\n }\n\n /**\n * Build the backend report payload for a submitted source-chain transaction.\n * Shared by `send` (fire-and-forget) and `report` (awaited).\n */\n private static buildReportData(\n serviceType: Service,\n params: {\n quote: any;\n txhash: string;\n permitSignature?: PermitSignature;\n }\n ): Parameters<typeof submitOthersTx>[0] {\n const { quote, txhash, permitSignature } = params;\n\n const { isExactOutput, isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n const fromToken = quote.quoteParam.fromToken;\n const toToken = quote.quoteParam.toToken;\n\n let _amountWei = quote.quoteParam?.amountWei;\n if (isExactOutput) {\n _amountWei = quote.quote?.amountIn;\n }\n\n const reportData: any = {\n project: ServiceBackend[serviceType] as any,\n address: quote.quoteParam?.refundTo,\n amount: isExactOutput ? quote.quote.amountInFormatted : Big(_amountWei || 0).div(10 ** (fromToken?.decimals || 6)).toFixed(fromToken?.decimals || 6, 0),\n out_amount: quote.outputAmount,\n deposit_address: isOneClickService ? quote.quote?.depositAddress : \"\",\n receive_address: quote.quoteParam?.recipient,\n from_chain: fromToken.blockchain,\n symbol: /^USD₮0$/i.test(fromToken.symbol) ? \"USDT\" : fromToken.symbol,\n to_chain: toToken.blockchain,\n to_symbol: /^USD₮0$/i.test(toToken.symbol) ? \"USDT\" : toToken.symbol,\n tx_hash: \"\",\n };\n\n if (permitSignature) {\n if (([Service.OneClickUsdt0] as Service[]).includes(serviceType)) {\n reportData.layer_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n if (([Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n reportData.frax_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n }\n\n reportData.tx_hash = txhash;\n\n let _depositAddress = txhash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote.quoteParam?.depositAddress || txhash;\n }\n if (!reportData.deposit_address) {\n reportData.deposit_address = _depositAddress;\n }\n\n if (serviceType === Service.Native) {\n const quoteIds = quote?.orders?.map?.((order: any) => order.quoteId) || [];\n reportData.quoteIds = quoteIds;\n }\n\n return reportData;\n }\n\n /**\n * API-driven custody: build the serializable, unsigned transaction data for a\n * route WITHOUT a signer. Intended for MPC wallets (e.g. Fireblocks) that sign\n * and broadcast through their own infrastructure.\n *\n * Returns any required `approveTx` (and `approveResetTx` on Ethereum), the\n * `permitTypedData` to sign off-chain when `quote.needPermit`, and the main\n * `tx`. After the integrator broadcasts `tx`, call `BridgeSFA.report` with the\n * resulting hash (and the permit signature, if any) so StableFlow can execute\n * the destination leg.\n *\n * EVM only for now; non-EVM source chains throw.\n */\n public static async buildTransaction(\n serviceType: Service,\n params: { quote: any }\n ): Promise<BuildTransactionResult> {\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n const { quote } = params;\n if (!quote) {\n throw new Error('Quote data is required');\n }\n\n const tx = buildSendTx(serviceType, quote);\n const { approveTx, approveResetTx } = buildApproveTx(serviceType, quote);\n\n const result: BuildTransactionResult = {\n chainId: tx.chainId,\n from: tx.from,\n tx,\n };\n\n if (approveTx) {\n result.approveTx = approveTx;\n }\n if (approveResetTx) {\n result.approveResetTx = approveResetTx;\n }\n\n if (quote.needPermit) {\n result.permitTypedData = await buildPermitTypedData({\n permitToken: quote.permitToken,\n permitAmountWei: quote.permitAmountWei,\n permitSpender: quote.permitSpender,\n owner: quote.quoteParam?.evmAddress || quote.quoteParam?.refundTo,\n });\n }\n\n return result;\n }\n\n /**\n * API-driven custody: report an externally signed & broadcast source-chain\n * transaction back to StableFlow so it can track and execute the destination\n * leg. Pair with `BridgeSFA.buildTransaction`.\n *\n * When `quote.needPermit === true`, `permitSignature` is required.\n */\n public static report(\n serviceType: Service,\n params: {\n quote: any;\n hash: string;\n permitSignature?: PermitSignature;\n }\n ): CancelablePromise<SubmitDepositTxResponse> {\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n const { quote, hash, permitSignature } = params;\n if (!quote) {\n throw new Error('Quote data is required');\n }\n if (!hash) {\n throw new Error('Transaction hash is required');\n }\n if (quote.needPermit && !permitSignature) {\n throw new Error('Permit signature is required');\n }\n\n const reportData = BridgeSFA.buildReportData(serviceType, {\n quote,\n txhash: hash,\n permitSignature,\n });\n\n return submitOthersTx(reportData);\n }\n\n public static async getStatus(\n serviceType: Service,\n params: {\n quote: any;\n hash: string;\n }\n ): Promise<{ status: TransactionStatus; toChainTxHash?: string; }> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.getStatus) {\n throw new Error(`Service ${serviceType} does not support getStatus method`);\n }\n\n const { quote, hash } = params;\n\n const getStatusParams: GetStatusParams = {};\n\n const { isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n getStatusParams.depositAddress = isOneClickService ? quote.quote.depositAddress : \"\";\n getStatusParams.hash = hash;\n\n if (!isOneClickService) {\n let _depositAddress = hash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote?.quoteParam?.depositAddress || hash;\n }\n getStatusParams.depositAddress = _depositAddress;\n }\n\n csl(\"getStatus\", \"fuchsia-500\", \"getStatusParams: %o\", getStatusParams);\n\n const result: { status: TransactionStatus; toChainTxHash?: string; } = { status: TransactionStatus.Pending };\n const response = await service.getStatus(getStatusParams);\n\n if (([Service.CCTP, Service.Native] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.Usdt0] as Service[]).includes(serviceType)) {\n const _result = response?.data?.[0];\n const status = _result?.status?.name;\n if (status === LayerZeroStatus.DELIVERED) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.destination?.tx?.txHash;\n }\n if ([LayerZeroStatus.FAILED, LayerZeroStatus.BLOCKED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClick] as Service[]).includes(serviceType)) {\n const status = response?.status;\n\n if (status === OneClickStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = response?.swapDetails?.destinationChainTxHashes?.[0]?.hash;\n }\n\n if ([OneClickStatus.REFUNDED, OneClickStatus.FAILED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClickUsdt0, Service.Usdt0OneClick, Service.FraxZero, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n return result;\n }\n}\n","import { ethers } from \"ethers\";\nimport { USDT0_CONFIG } from \"./config\";\nimport { OFT_ABI } from \"./contract\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { usdt0Chains } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const getHopMsgFee = async (params: any) => {\n const {\n sendParam,\n toToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const execTime = new ExecTime({ type: \"getHopMsgFee\", logStyle: \"lime-800\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[\"Arbitrum\"];\n const destinationLayerzero = USDT0_CONFIG[toToken.chainName];\n\n let arbitrumOft = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n arbitrumOft = originLayerzero.oftLegacy || originLayerzero.oft;\n }\n\n execTime.breakpoint();\n const provider = evmRpcFallbackProvider(usdt0Chains[\"arb\"]);\n const oftContractRead = new ethers.Contract(arbitrumOft!, OFT_ABI, provider);\n execTime.log(\"provider init\");\n\n try {\n execTime.breakpoint();\n const msgFee = await oftContractRead.quoteSend.staticCall(sendParam, false);\n execTime.log(\"quoteSend\");\n\n const [nativeFee] = msgFee;\n\n execTime.logTotal(\"getHopMsgFee\");\n\n return nativeFee * 100n / 100n;\n } catch (error) {\n csl(\"getHopMsgFee\", \"red-500\", \"getHopMsgFee failed: %o\", error);\n throw new Error(\"Quote multi hop message fee failed\");\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/oneclick/contract.ts","../src/oneclick/index.ts","../src/utils/layerzero.ts","../src/utils/nearintents.ts","../src/utils/address.ts","../src/utils/error.ts","../src/utils/cctp.ts","../src/utils/format-number.ts","../src/usdt0/config.ts","../src/usdt0/contract.ts","../src/usdt0/index.ts","../src/cctp/contract.ts","../src/cctp/config.ts","../src/cctp/index.ts","../src/fraxzero/config.ts","../src/fraxzero/contract.ts","../src/fraxzero/index.ts","../src/fraxzero/to-oneclick.ts","../src/fraxzero/from-oneclick.ts","../src/usdt0/to-oneclick.ts","../src/usdt0/from-oneclick.ts","../src/cctp/to-oneclick.ts","../src/cctp/from-oneclick.ts","../src/native/contract.ts","../src/native/index.ts","../src/service-map.ts","../src/tx-builder.ts","../src/sfa.ts","../src/usdt0/hop-composer.ts"],"names":["OneClickSwapType","getPrice","Csl","OpenAPI","ExecTime","Big","numberRemoveEndZero","DefaultAddresses","Service","postRequest","SendType","getRequest","bs58","Buffer","usdt0Chains","excludeFees","isOriginLegacy","isDestinationLegacy","isBothLegacy","isMultiHopComposer","result","MIDDLE_TOKEN_CHAIN","usdcChains","MIDDLE_CHAIN_REFOUND_ADDRESS","frxusdChains","PayInLzToken","evmRpcFallbackProvider","oneClickResult","isStableToken","secondStepResult","firstStepResult","totalFeesUsd","fees","to_oneclick_default","from_oneclick_default","ethers","erc20Abi","getPrices","tokens","getRouteStatus","ServiceBackend","TransactionStatus","StableflowStatus","LayerZeroStatus","OneClickStatus"],"mappings":"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","file":"index.js","sourcesContent":["export const ONECLICK_PROXY: Record<string, string> = {\n [\"Arbitrum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Polygon\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"BNB Chain\"]: \"0xf5f1ec09b3ec88F6Cf23ADEEDd792E4642c5B7f1\",\n [\"Optimism\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Avalanche\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ethereum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Berachain\"]: \"0x1766A6B8453c7dbcA8c70d17980B6EA87ACA4F60\",\n [\"Gnosis\"]: \"0x53812Feae0fd2C43f8E6D8847A7f5d035F1d1f8f\",\n [\"Tron\"]: \"TMqM35eVd3D9d7JbShRrMzMPyWLFweKYvW\",\n [\"Solana\"]: \"HWk6MsFEGzXxpe9B4mfEHpvVoCwNeVVMFxb5Mi7qNTM\",\n [\"Near\"]: \"stbflow.near\",\n [\"Aptos\"]: \"0x3000ceb3211d23ef73ad1b602a7a99b72020c9ce9537f580ac5bba556ec3bff9\",\n [\"Base\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"X Layer\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Plasma\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ton\"]: \"EQBeP9Aeu3m5n9qpVyCWZFyji8uQJbzrYuAxq0orWl5e2qjR\",\n [\"Sui\"]: \"0xc178428ac308d322b6051421af1b6019ff4815955306c4317aafd050bdc28146\",\n};\n\nexport const ONECLICK_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"proxyTransfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import Big from \"big.js\";\nimport { ONECLICK_PROXY, ONECLICK_PROXY_ABI } from \"./contract\";\nimport { getRequest, GetStatusParams, numberRemoveEndZero, postRequest } from \"@stableflow/core\";\nimport { getPrice } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { Service, OneClickSwapType } from \"@stableflow/core\";\nimport { DefaultAddresses } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { ChainType } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const BridgeFee = [\n {\n includeChains: [\"BNB Chain\", \"Tron\"],\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: 1, // 100=1% 1=0.01%\n },\n];\n\nexport const checkIsBridgeFee = (params?: any) => {\n const currentBridgeFee = BridgeFee[0];\n const { fromToken, toToken } = params ?? {};\n\n if (!fromToken || !toToken) {\n return false;\n }\n\n const fromTokenSymbol = fromToken?.symbol === \"USD₮0\" ? \"USDT\" : fromToken?.symbol;\n const toTokenSymbol = toToken?.symbol === \"USD₮0\" ? \"USDT\" : toToken?.symbol;\n\n if (\n // 1. bridge chains is bsc / tron\n (currentBridgeFee.includeChains.includes(fromToken?.chainName) || currentBridgeFee.includeChains.includes(toToken?.chainName))\n // 2. is swap\n || fromTokenSymbol !== toTokenSymbol\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class OneClickService {\n private offsetTime = 1000 * 60 * 60;\n constructor() {\n }\n\n public async formatQuoteData(res: { data: any; params: any; }) {\n const { params } = res;\n const { isProxy = true, prices } = params;\n\n const isExactOutput = params.swapType === OneClickSwapType.Output;\n const nativeTokenPrice = getPrice(prices, params.fromToken.nativeToken.symbol);\n const nativeTokenDecimals = params.fromToken.nativeToken.decimals;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"OneClickService formatQuoteData\", logStyle: \"lime-300\", isDebug: OpenAPI.DEBUG });\n\n if (res.data) {\n // Updated the time estimate for bridge quotes to ensure it does not exceed a maximum threshold.\n // If the calculated time exceeds 60 seconds, it is randomized between 40 and 45 seconds,\n // enhancing user experience by providing more realistic estimates.\n if (res.data?.quote) {\n if (Big(res.data.quote.timeEstimate || 0).gt(60)) {\n res.data.quote.timeEstimate = Math.floor(Math.random() * 6) + 40;\n }\n }\n\n res.data.estimateTime = res.data?.quote?.timeEstimate; // seconds\n res.data.outputAmount = numberRemoveEndZero(Big(res.data?.quote?.amountOut || 0).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));\n let priceImpact = Big(0);\n let _amountInUsd = res.data?.quote?.amountInUsd || 0;\n let _amountOutUsd = res.data?.quote?.amountOutUsd || 0;\n try {\n priceImpact = Big(Big(_amountInUsd).minus(_amountOutUsd)).div(_amountInUsd || 1);\n if (Big(priceImpact).lt(0)) {\n priceImpact = Big(0);\n }\n } catch (error) { }\n res.data.priceImpact = numberRemoveEndZero(Big(priceImpact).toFixed(4));\n\n const fromTokenSymbol = params.fromToken.symbol === \"USD₮0\" ? \"USDT\" : params.fromToken.symbol;\n const toTokenSymbol = params.toToken.symbol === \"USD₮0\" ? \"USDT\" : params.toToken.symbol;\n res.data.exchangeRate = \"1\";\n if (fromTokenSymbol !== toTokenSymbol) {\n res.data.exchangeRate = numberRemoveEndZero(Big(res.data.quote?.amountOutFormatted || 0).div(res.data.quote?.amountInFormatted || 1).toFixed(params.toToken.decimals, 0));\n }\n\n try {\n const netFee = Big(_amountInUsd).minus(_amountOutUsd);\n const isBridgeFee = checkIsBridgeFee(params);\n let bridgeFeeValue = Big(0);\n if (isBridgeFee) {\n bridgeFeeValue = BridgeFee.reduce((acc, item) => {\n return acc.plus(\n Big(params.amountWei)\n .div(10 ** params.fromToken.decimals)\n .times(Big(item.fee).div(10000))\n .times(getPrice(params.prices, params.fromToken.symbol))\n );\n }, Big(0));\n }\n let destinationGasFee = Big(netFee).minus(bridgeFeeValue);\n destinationGasFee = Big(destinationGasFee).lt(0) ? Big(0) : destinationGasFee;\n if (fromTokenSymbol !== toTokenSymbol) {\n destinationGasFee = Big(0);\n }\n res.data.fees = {\n bridgeFeeUsd: numberRemoveEndZero(Big(bridgeFeeValue).toFixed(20)),\n destinationGasFeeUsd: numberRemoveEndZero(Big(destinationGasFee).toFixed(20)),\n };\n\n // calculate total fees\n res.data.totalFeesUsd = \"0\";\n for (const feeKey in res.data.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.totalFeesUsd = Big(res.data.totalFeesUsd || 0).plus(res.data.fees[feeKey] || 0);\n }\n res.data.totalFeesUsd = numberRemoveEndZero(Big(res.data.totalFeesUsd).toFixed(20));\n\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick estimate failed: %o\", error);\n }\n\n const proxyAddress = ONECLICK_PROXY[params.fromToken.chainName];\n let proxyParams: any = {};\n if (proxyAddress && isProxy) {\n proxyParams = {\n dry: params.dry,\n proxyAddress,\n abi: ONECLICK_PROXY_ABI,\n fromToken: params.fromToken,\n refundTo: params.refundTo,\n recipient: params.recipient,\n amountWei: isExactOutput ? res.data?.quote?.amountIn : params.amountWei,\n prices: params.prices,\n evmGasFees: params.evmGasFees,\n depositAddress: res.data?.quote?.depositAddress ?? DefaultAddresses[params.fromToken.chainType as ChainType],\n };\n try {\n execTime.breakpoint();\n const proxyResult = await params.wallet.quote(Service.OneClick, proxyParams);\n execTime.log(\"wallet.quoteOneClickProxy\");\n\n for (const proxyKey in proxyResult) {\n if (proxyKey === \"fees\") {\n for (const feeKey in proxyResult.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.fees[feeKey] = proxyResult.fees[feeKey];\n }\n continue;\n }\n res.data[proxyKey] = proxyResult[proxyKey];\n }\n\n res.data.transferSourceGasFee = proxyResult.estimateSourceGas;\n const transferSourceGasFeeUsd = Big(proxyResult.estimateSourceGas || 0).div(10 ** params.fromToken.nativeToken.decimals).times(getPrice(params.prices, params.fromToken.nativeToken.symbol));\n res.data.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick quote proxy failed: %o\", error);\n }\n }\n\n res.data.quoteParam = {\n ...params,\n ...proxyParams,\n };\n }\n\n execTime.logTotal(\"OneClickService.formatQuoteData\");\n\n return res.data || {};\n }\n\n public async quote(params: {\n wallet: any,\n fromToken: any,\n toToken: any,\n dry: boolean;\n slippageTolerance: number;\n originAsset: string;\n destinationAsset: string;\n refundTo: string;\n refundType: \"ORIGIN_CHAIN\";\n recipient: string;\n connectedWallets?: string[];\n prices: Record<string, string>;\n amountWei: string;\n appFees?: { recipient: string; fee: number; }[];\n swapType?: OneClickSwapType;\n isProxy?: boolean;\n }) {\n const {\n wallet,\n fromToken,\n toToken,\n prices,\n amountWei,\n appFees = [],\n swapType = OneClickSwapType.Input,\n isProxy = true,\n slippageTolerance,\n ...restParams\n } = params;\n\n const _quoteType = `OneClickService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-400\", isDebug: OpenAPI.DEBUG });\n\n const quoteParams: any = {\n depositMode: \"SIMPLE\",\n swapType: swapType || OneClickSwapType.Input,\n depositType: \"ORIGIN_CHAIN\",\n sessionId: `session_${Date.now()}_${Math.random()\n .toString(36)\n .substr(2, 9)}`,\n recipientType: \"DESTINATION_CHAIN\",\n deadline: new Date(Date.now() + this.offsetTime).toISOString(),\n quoteWaitingTimeMs: 0,\n appFees,\n referral: \"stableflow\",\n amount: amountWei,\n slippageTolerance: slippageTolerance * 100,\n };\n\n // if (swapType === OneClickSwapType.Output) {\n // quoteParams.amount = Big(amountWei || 0).div(10 ** fromToken.decimals).times(10 ** toToken.decimals).toFixed(0);\n // }\n\n for (const k in restParams) {\n if ([\"evmAddress\", \"evmWallet\", \"destinationChain\", \"originChain\"].includes(k)) {\n continue;\n }\n quoteParams[k] = restParams[k as keyof typeof restParams];\n }\n\n const isBridgeFee = checkIsBridgeFee(params);\n if (isBridgeFee) {\n if (Array.isArray(quoteParams.appFees)) {\n quoteParams.appFees = quoteParams.appFees.concat(BridgeFee.map((it) => ({ recipient: it.recipient, fee: it.fee })));\n } else {\n quoteParams.appFees = BridgeFee.map((it) => ({ recipient: it.recipient, fee: it.fee }));\n }\n }\n\n execTime.breakpoint();\n const response: any = await postRequest(\"/v0/quote\", quoteParams);\n execTime.log(\"/v0/quote\");\n\n execTime.breakpoint();\n const result = await this.formatQuoteData({ data: response, params });\n execTime.log(\"formatQuoteData\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"OneClickService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n isProxy = true,\n wallet,\n amountWei,\n refundTo,\n prices,\n acceptTronEnergy,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const proxyAddress = ONECLICK_PROXY[fromToken.chainName];\n const isFromTron = fromToken.chainType === \"tron\";\n const isFromTronEnergy = isFromTron && acceptTronEnergy;\n const isFinalProxy = proxyAddress && isProxy;\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n if (isFromTron) {\n try {\n const _estGas = await wallet.estimateTransferGas({\n fromToken: fromToken,\n depositAddress: DefaultAddresses[fromToken.chainType as ChainType],\n amount: amountWei,\n account: refundTo,\n });\n result.transferSourceGasFee = _estGas.estimateGas;\n const transferSourceGasFeeUsd = Big(result.transferSourceGasFee || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService estimateTransaction\", \"red-500\", \"oneclick estimate transaction without proxy failed: %o\", error);\n }\n }\n\n if (isFinalProxy) {\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 200000;\n estimateTransactionParams.defaultRawDataHexLength = 500;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.transferSourceGasFee = ett.estimateSourceGas;\n result.transferSourceGasFeeUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n } else {\n let sourceGasFee = result.transferSourceGasFee || {};\n if (isFromTronEnergy) {\n sourceGasFee = result.energySourceGasFee;\n }\n const estimateGasUsd = Big(sourceGasFee.estimateGas || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.fees.estimateGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n result.estimateSourceGas = sourceGasFee.estimateGas;\n result.totalEstimateSourceGas = sourceGasFee.estimateGas;\n result.estimateSourceGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n }\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n fromToken,\n depositAddress,\n amountWei,\n sendParam,\n } = params;\n\n // proxy transfer\n if (sendParam) {\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n const hash = await wallet.send(SendType.TRANSFER, {\n originAsset: fromToken.contractAddress,\n depositAddress: depositAddress,\n amount: amountWei,\n });\n return hash;\n }\n\n public submitHash(params: { txHash: string; depositAddress: string }) {\n return postRequest(\"/v0/deposit/submit\", params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest(\"/v0/status\", params);\n }\n}\n\nexport default new OneClickService();\n","export interface LayerZeroChainConfig {\n eid: number;\n chainKey: string;\n blockTime: number;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\nexport const LAYERZZERO_CHAINS: Record<string, LayerZeroChainConfig> = {\n \"Ethereum\": {\n eid: 30101,\n chainKey: \"ethereum\",\n blockTime: 12,\n },\n Arbitrum: {\n eid: 30110,\n chainKey: \"arbitrum\",\n blockTime: 0.25,\n },\n Avalanche: {\n eid: 30106,\n chainKey: \"avax\",\n blockTime: 1.2,\n },\n Polygon: {\n eid: 30109,\n chainKey: \"polygon\",\n blockTime: 2,\n },\n Optimism: {\n eid: 30111,\n chainKey: \"optimism\",\n blockTime: 2,\n },\n Berachain: {\n eid: 30362,\n chainKey: \"berachain\",\n blockTime: 2,\n },\n Solana: {\n eid: 30168,\n chainKey: \"solana\",\n blockTime: 0.4,\n },\n Tron: {\n eid: 30420,\n chainKey: \"tron\",\n blockTime: 3,\n },\n \"X Layer\": {\n eid: 30274,\n chainKey: \"xlayer\",\n blockTime: 0.5,\n },\n \"Plasma\": {\n eid: 30383,\n chainKey: \"plasma\",\n blockTime: 1,\n },\n \"Mantle\": {\n eid: 30181,\n chainKey: \"mantle\",\n blockTime: 2,\n },\n \"MegaETH\": {\n eid: 30398,\n chainKey: \"megaeth\",\n blockTime: 1,\n },\n \"Ink\": {\n eid: 30339,\n chainKey: \"ink\",\n blockTime: 1,\n },\n \"Stable\": {\n eid: 30396,\n chainKey: \"stable\",\n blockTime: 0.7,\n },\n \"Celo\": {\n eid: 30125,\n chainKey: \"celo\",\n blockTime: 1,\n },\n \"Sei\": {\n eid: 30280,\n chainKey: \"sei\",\n blockTime: 2,\n },\n \"Flare\": {\n eid: 30295,\n chainKey: \"flare\",\n blockTime: 1.8,\n },\n \"BNB Chain\": {\n eid: 30102,\n chainKey: \"bsc\",\n blockTime: 0.45,\n },\n Fraxtal: {\n eid: 30255,\n chainKey: \"frax\",\n blockTime: 2,\n },\n Ton: {\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 2.71,\n },\n Katana: {\n eid: 30375,\n chainKey: \"katana\",\n blockTime: 1,\n },\n};\n\n/**\n * Calculates cross-chain estimated time using the LayerZero formula.\n * Formula: Total Time ≈ (sourceBlockTime × blockConfirmations) + (destinationBlockTime × (2 blocks + DVN count))\n *\n * @param params - Object containing configuration and DVN details.\n * @param params.requiredDvnCount - The number of DVNs for this bridge (typically fixed per application, e.g., 2 or 3)\n * @param params.originConfig - Source chain configuration; should include blockTime (number) and confirmations (number)\n * @param params.destinationConfig - Destination chain configuration; should include blockTime (number)\n * @returns Estimated time in seconds. Returns 32 if configuration is missing or invalid.\n */\nexport function calculateEstimateTime(params: {\n requiredDvnCount: number;\n originConfig: { blockTime: number; confirmations: number; };\n destinationConfig: { blockTime: number; confirmations: number; };\n}): number {\n const {\n requiredDvnCount,\n originConfig,\n destinationConfig,\n } = params;\n\n // Return default value if config is missing\n if (!originConfig || !destinationConfig) {\n return 32;\n }\n\n // Validate required configuration fields\n if (\n typeof originConfig.blockTime !== 'number' ||\n typeof originConfig.confirmations !== 'number' ||\n typeof destinationConfig.blockTime !== 'number'\n ) {\n return 32;\n }\n\n const sourceBlockTime = originConfig.blockTime;\n const blockConfirmations = originConfig.confirmations;\n const destinationBlockTime = destinationConfig.blockTime;\n const dvnCount = requiredDvnCount;\n\n // Calculate: source chain part + destination chain part\n const sourceTime = sourceBlockTime * blockConfirmations;\n const destinationTime = destinationBlockTime * (2 + dvnCount);\n const totalTime = Math.ceil(sourceTime + destinationTime);\n\n return totalTime;\n}\n","import { Service } from \"@stableflow/core\";\n\nexport const getQuoteModes = (params: { quoteData?: any; bridgeStore?: { quoteDataService: Service; } }) => {\n const { quoteData, bridgeStore } = params;\n const { quoteDataService } = bridgeStore ?? {};\n\n const getIsExactOutput = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0, Service.OneClickCCTP] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsOneClickService = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0, Service.OneClick, Service.OneClickCCTP] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsQuoteParamDepositAddress = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.Usdt0OneClick, Service.CCTPOneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.FraxZeroOneClick) {\n const isFromEthereumFrxUSD = quoteData?.quoteParam?.isFromEthereumFrxUSD;\n const isToEthereumUSDC = quoteData?.quoteParam?.isToEthereumUSDC;\n if (!isToEthereumUSDC) {\n return true;\n }\n }\n\n return false;\n };\n\n return {\n isExactOutput: getIsExactOutput(),\n isOneClickService: getIsOneClickService(),\n isQuoteParamDepositAddress: getIsQuoteParamDepositAddress(),\n isPermitWithNonce: typeof quoteDataService === \"undefined\" ? false : ([Service.OneClickUsdt0, Service.OneClickCCTP, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(quoteDataService),\n };\n};\n","import bs58 from \"bs58\";\nimport { Buffer } from 'buffer';\n\n/** Left-pad a hex value to `lengthBytes` (ethers v6 zeroPadValue semantics). */\nfunction zeroPadValue(hex: string, lengthBytes: number): string {\n const normalized = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n const targetLen = lengthBytes * 2;\n if (normalized.length > targetLen) {\n throw new Error(`hex value exceeds ${lengthBytes} bytes`);\n }\n return \"0x\" + normalized.padStart(targetLen, \"0\");\n}\n\n// Address validation utilities for different blockchains\n\nexport interface AddressValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n/**\n * Validates an address based on the target blockchain\n * @param address - The address to validate\n * @param blockchain - The target blockchain key\n * @returns AddressValidationResult with validation status and error message\n */\nexport function validateAddress(\n address: string,\n blockchain: string\n): AddressValidationResult {\n if (!address.trim()) {\n return {\n isValid: false,\n error: \"Address cannot be empty\"\n };\n }\n\n const trimmedAddress = address.trim();\n\n switch (blockchain) {\n case \"near\":\n return validateNearAddress(trimmedAddress);\n case \"sol\":\n return validateSolanaAddress(trimmedAddress);\n case \"evm\":\n return validateEthereumAddress(trimmedAddress);\n case \"aptos\":\n return validateAptosAddress(trimmedAddress);\n case \"tron\":\n return validateTronAddress(trimmedAddress);\n case \"ton\":\n return validateTonAddress(trimmedAddress);\n default:\n return {\n isValid: false,\n error: \"Unsupported blockchain\"\n };\n }\n}\n\n/**\n * Validates a NEAR address\n * Supports named accounts (alice.near, burrow.sputnik-dao.near) and\n * implicit accounts (64-char hex public key hash).\n */\nfunction validateNearAddress(address: string): AddressValidationResult {\n // Length check\n if (address.length < 2 || address.length > 64) {\n return {\n isValid: false,\n error: \"NEAR address must be 2-64 characters long\"\n };\n }\n\n // Additional checks\n if (address.startsWith(\".\") || address.endsWith(\".\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot start or end with a dot\"\n };\n }\n\n if (address.includes(\"..\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot contain consecutive dots\"\n };\n }\n\n // NEAR implicit accounts: 64-char hex string\n if (/^[0-9a-f]{64}$/i.test(address)) {\n return { isValid: true };\n }\n\n // Named account: letters, numbers and separators ., -, _\n const nearPattern = /^[a-zA-Z0-9._-]+$/;\n if (!nearPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid NEAR address\"\n };\n }\n\n // Every account label should start/end with alphanumeric.\n const labelPattern = /^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;\n const labels = address.split(\".\");\n if (!labels.every(label => labelPattern.test(label))) {\n return {\n isValid: false,\n error: \"NEAR address labels must start/end with letters or numbers\"\n };\n }\n\n // Named NEAR account cannot be purely numeric.\n if (/^\\d+$/.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address cannot be purely numeric\"\n };\n }\n\n const hasLetterPattern = /[a-zA-Z]/;\n if (!hasLetterPattern.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address must contain at least one letter\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a Solana address\n * Solana addresses are base58 encoded and typically 32-44 characters long\n */\nfunction validateSolanaAddress(address: string): AddressValidationResult {\n // Solana address pattern: base58 encoded, typically 32-44 characters\n const solanaPattern = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n\n if (!solanaPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Solana address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Ethereum address (used for Arbitrum)\n * Ethereum addresses are 42 characters long, starting with 0x\n */\nfunction validateEthereumAddress(address: string): AddressValidationResult {\n // Ethereum address pattern: 0x followed by 40 hexadecimal characters\n const ethereumPattern = /^0x[a-fA-F0-9]{40}$/;\n\n if (!ethereumPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Ethereum address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Aptos address\n * Aptos addresses are 32 bytes (64 hex characters), optionally prefixed with 0x\n */\nfunction validateAptosAddress(address: string): AddressValidationResult {\n // Aptos address can be with or without 0x prefix\n // With 0x: 0x + 64 hex characters = 66 characters total\n // Without 0x: 64 hex characters\n const aptosPatternWithPrefix = /^0x[a-fA-F0-9]{64}$/;\n const aptosPatternWithoutPrefix = /^[a-fA-F0-9]{64}$/;\n\n if (!aptosPatternWithPrefix.test(address) && !aptosPatternWithoutPrefix.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Aptos address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a TON address.\n * Supports:\n * - user-friendly format, e.g. EQ..., UQ..., kQ...\n * - raw format, e.g. 0:<64 hex chars>, -1:<64 hex chars>\n */\nexport function validateTonAddress(address: string): AddressValidationResult {\n try {\n parseTonAddress(address);\n return { isValid: true };\n } catch {\n return {\n isValid: false,\n error: \"Invalid TON address\",\n };\n }\n}\n\n/**\n * Validates a Tron address\n * Tron addresses are Base58 encoded, starting with T, and 34 characters long\n */\nfunction validateTronAddress(address: string): AddressValidationResult {\n // Tron address pattern: Base58 encoded, starts with T, 34 characters long\n // Base58 alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz (no 0, O, I, l)\n const tronPattern = /^T[1-9A-HJ-NP-Za-km-z]{33}$/;\n\n if (!tronPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Tron address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Gets a placeholder text for the address input based on the target blockchain\n */\nexport function getAddressPlaceholder(blockchain: string): string {\n switch (blockchain) {\n case \"near\":\n return \"Enter NEAR wallet address (e.g., alice.near or 64-char hex)\";\n case \"sol\":\n return \"Enter Solana wallet address (e.g., 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM)\";\n case \"arb\":\n return \"Enter Ethereum/Arbitrum wallet address (e.g., 0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6)\";\n case \"aptos\":\n return \"Enter Aptos wallet address (e.g., 0x93493b07d031c4f18ad1e874575761be7e47d4cea5c81d538600e8ec72d6ab1c)\";\n case \"tron\":\n return \"Enter Tron wallet address (e.g., TG4cfJGzvmpWxYyQKSosCWTacKCxEwSiKw)\";\n default:\n return \"Enter recipient wallet address\";\n }\n}\n\n/**\n * Convert Tron address to bytes32 format (for LayerZero OFT)\n * @param {string} tronAddress - Tron address in Base58check format (starts with T)\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function tronAddressToBytes32(tronAddress: string) {\n try {\n // 1. Decode base58check format\n const decoded = bs58.decode(tronAddress);\n\n // 2. Remove the first byte (0x41 prefix) and the last 4 bytes (checksum)\n // Tron address structure: [0x41] + [20-byte address] + [4-byte checksum]\n const addressBytes = decoded.slice(1, 21);\n\n // 3. Validate length\n if (addressBytes.length !== 20) {\n throw new Error('Invalid Tron address length');\n }\n\n // 4. Left pad with 12 zero bytes to make it 32 bytes\n const paddedBytes = Buffer.concat([\n Buffer.alloc(12, 0), // 12 zero bytes\n addressBytes // 20-byte address\n ]);\n\n // 5. Convert to hexadecimal string\n return '0x' + paddedBytes.toString('hex');\n } catch (error: any) {\n throw new Error(`Failed to convert Tron address: ${error.message}`);\n }\n}\n\n/**\n * SHA256 hash using Web Crypto API (browser compatible)\n * @param {Uint8Array} data - Data to hash\n * @returns {Promise<Uint8Array>} Hash result\n */\nasync function sha256(data: Uint8Array): Promise<Uint8Array> {\n // Create a new ArrayBuffer from the Uint8Array to ensure proper type\n const buffer = new Uint8Array(data).buffer;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n return new Uint8Array(hashBuffer);\n}\n\n/**\n * Converts bytes32 to Tron address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {Promise<string>} Tron address in Base58check format\n */\nexport async function bytes32ToTronAddress(bytes32Address: string): Promise<string> {\n try {\n // Remove '0x' prefix\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n // Convert to Buffer\n const buffer = Buffer.from(hexString, 'hex');\n\n // Take the last 20 bytes (remove the leading 12 zero bytes)\n const addressBytes = buffer.slice(12, 32);\n\n // Add Tron prefix 0x41\n const addressWithPrefix = Buffer.concat([\n Buffer.from([0x41]),\n addressBytes\n ]);\n\n // Calculate checksum (first 4 bytes of double SHA256)\n const hash1 = await sha256(new Uint8Array(addressWithPrefix));\n const hash2 = await sha256(hash1);\n const checksum = Buffer.from(hash2.slice(0, 4));\n\n // Combine: prefix + address + checksum\n const fullAddress = Buffer.concat([addressWithPrefix, checksum]);\n\n // Base58 encoding\n return bs58.encode(fullAddress);\n } catch (error: any) {\n throw new Error(`Failed to convert bytes32 to Tron address: ${error.message}`);\n }\n}\n\n/**\n * Converts Solana address to bytes32 format (for LayerZero OFT)\n * @param {string} solanaAddress - Solana address in Base58 format\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function solanaAddressToBytes32(solanaAddress: string) {\n // Decode the Solana address from base58 format\n const decoded = bs58.decode(solanaAddress);\n\n // Validate length (Solana public key is 32 bytes)\n if (decoded.length !== 32) {\n throw new Error('Invalid Solana address length');\n }\n\n // Convert to hexadecimal string\n return '0x' + Buffer.from(decoded).toString('hex');\n}\n\n/**\n * Converts bytes32 to Solana address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {string} Solana address in Base58 format\n */\nexport function bytes32ToSolanaAddress(bytes32Address: string) {\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n const buffer = Buffer.from(hexString, 'hex');\n\n // Encode as base58\n return bs58.encode(buffer);\n}\n\n/**\n * Converts TON address to bytes32 format for LayerZero OFT.\n *\n * @param tonAddress TON address in user-friendly or raw format\n * @returns 0x + 32-byte account hash as hex\n */\nexport function tonAddressToBytes32(tonAddress: string): string {\n try {\n const parsed = parseTonAddress(tonAddress);\n\n if (parsed.hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return \"0x\" + bytesToHex(parsed.hash);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Failed to convert TON address: ${message}`);\n }\n}\n\nexport function addressToBytes32(chainType: string, address: string) {\n if (chainType === \"evm\") {\n return zeroPadValue(address, 32);\n }\n if (chainType === \"sol\") {\n return solanaAddressToBytes32(address);\n }\n if (chainType === \"tron\") {\n return tronAddressToBytes32(address);\n }\n if (chainType === \"ton\") {\n return tonAddressToBytes32(address);\n }\n return address;\n}\n\n//#region TON address parsing utilities\ntype ParsedTonAddress = {\n workchain: number;\n hash: Uint8Array; // 32 bytes\n isUserFriendly: boolean;\n isBounceable?: boolean;\n isTestOnly?: boolean;\n};\n\n/**\n * TON user-friendly address:\n * 36 bytes total:\n * [0] flags\n * [1] workchain as signed int8-ish, 0xff means -1\n * [2..33] 32-byte account hash\n * [34..35] CRC16-CCITT of first 34 bytes\n *\n * Raw address:\n * workchain:64-hex-chars\n */\nfunction parseTonAddress(address: string): ParsedTonAddress {\n const input = address.trim();\n\n if (!input) {\n throw new Error(\"Address is empty\");\n }\n\n if (isRawTonAddress(input)) {\n return parseRawTonAddress(input);\n }\n\n return parseUserFriendlyTonAddress(input);\n}\n\n/**\n * CRC16-CCITT, polynomial 0x1021, initial value 0x0000.\n * Returns big-endian 2-byte checksum.\n */\nfunction crc16Ccitt(data: Uint8Array): Uint8Array {\n let crc = 0x0000;\n\n for (const byte of data) {\n crc ^= byte << 8;\n\n for (let i = 0; i < 8; i++) {\n if ((crc & 0x8000) !== 0) {\n crc = ((crc << 1) ^ 0x1021) & 0xffff;\n } else {\n crc = (crc << 1) & 0xffff;\n }\n }\n }\n\n return new Uint8Array([(crc >> 8) & 0xff, crc & 0xff]);\n}\n\nfunction base64ToBytes(input: string): Uint8Array {\n // base64url -> base64\n let normalized = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // Add padding if needed.\n const padding = normalized.length % 4;\n if (padding === 2) {\n normalized += \"==\";\n } else if (padding === 3) {\n normalized += \"=\";\n } else if (padding !== 0) {\n throw new Error(\"Invalid base64 TON address\");\n }\n\n // Node.js / bundlers\n if (typeof Buffer !== \"undefined\") {\n return new Uint8Array(Buffer.from(normalized, \"base64\"));\n }\n\n // Browser fallback\n if (typeof atob !== \"undefined\") {\n const binary = atob(normalized);\n const bytes = new Uint8Array(binary.length);\n\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return bytes;\n }\n\n throw new Error(\"No base64 decoder available\");\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string\");\n }\n\n const bytes = new Uint8Array(hex.length / 2);\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n\n if (Number.isNaN(byte)) {\n throw new Error(\"Invalid hex string\");\n }\n\n bytes[i] = byte;\n }\n\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nfunction isRawTonAddress(address: string): boolean {\n return /^-?\\d+:[0-9a-fA-F]{64}$/.test(address);\n}\n\nfunction parseRawTonAddress(address: string): ParsedTonAddress {\n const [workchainPart, hashPart] = address.split(\":\");\n\n if (!workchainPart || !hashPart) {\n throw new Error(\"Invalid raw TON address\");\n }\n\n const workchain = Number(workchainPart);\n\n if (!Number.isInteger(workchain)) {\n throw new Error(\"Invalid TON workchain\");\n }\n\n if (!/^[0-9a-fA-F]{64}$/.test(hashPart)) {\n throw new Error(\"Invalid TON address hash\");\n }\n\n return {\n workchain,\n hash: hexToBytes(hashPart),\n isUserFriendly: false,\n };\n}\n\nfunction parseUserFriendlyTonAddress(address: string): ParsedTonAddress {\n // TON user-friendly address is 36 bytes encoded as base64/base64url,\n // usually 48 chars without padding.\n if (!/^[A-Za-z0-9+/_-]{48}$/.test(address)) {\n throw new Error(\"Invalid user-friendly TON address format\");\n }\n\n const data = base64ToBytes(address);\n\n if (data.length !== 36) {\n throw new Error(\"Invalid user-friendly TON address length\");\n }\n\n const body = data.slice(0, 34);\n const checksum = data.slice(34, 36);\n const expectedChecksum = crc16Ccitt(body);\n\n if (checksum[0] !== expectedChecksum[0] || checksum[1] !== expectedChecksum[1]) {\n throw new Error(\"Invalid TON address checksum\");\n }\n\n const flags = data[0];\n\n const isTestOnly = (flags & 0x80) !== 0;\n const tag = flags & 0x7f;\n\n // 0x11 = bounceable, 0x51 = non-bounceable.\n // With testOnly bit added: 0x91 / 0xd1.\n if (tag !== 0x11 && tag !== 0x51) {\n throw new Error(\"Invalid TON address flags\");\n }\n\n const isBounceable = tag === 0x11;\n\n const workchainByte = data[1];\n const workchain = workchainByte === 0xff ? -1 : workchainByte;\n\n const hash = data.slice(2, 34);\n\n if (hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return {\n workchain,\n hash,\n isUserFriendly: true,\n isBounceable,\n isTestOnly,\n };\n}\n//#endregion\n","import Big from \"big.js\";\nimport { Service, type TokenConfig } from \"@stableflow/core\";\n\nexport const formatQuoteError = (error: any, options: { service: Service; fromToken: TokenConfig; }) => {\n const { service, fromToken } = options;\n\n const defaultErrorMessage = \"Failed to get quote, please try again later\";\n\n if (service === Service.OneClick) {\n const getQuoteErrorMessage = (): { message: string; sourceMessage: string; } => {\n const _messageResult = {\n message: error?.message || defaultErrorMessage,\n sourceMessage: error?.response?.data?.message || defaultErrorMessage,\n };\n if (\n error?.response?.data?.message &&\n error?.response?.data?.message !== \"Internal server error\"\n ) {\n // quote failed, maybe out of liquidity\n if (error?.response?.data?.message === \"Failed to get quote\") {\n _messageResult.message = \"Amount exceeds max\";\n return _messageResult;\n }\n // Amount is too low for bridge\n if (error?.response?.data?.message?.includes(\"Amount is too low for bridge, try at least\")) {\n const match = error.response.data.message.match(/try at least\\s+(\\d+(?:\\.\\d+)?)/i);\n let minimumAmount = match ? match[1] : Big(1).times(10 ** fromToken.decimals).toFixed(0);\n minimumAmount = Big(minimumAmount).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n _messageResult.message = `Amount is too low, at least ${minimumAmount}`;\n return _messageResult;\n }\n return _messageResult;\n }\n // Unknown error\n return _messageResult;\n };\n const onclickErrMsg = getQuoteErrorMessage();\n return {\n serviceType: service,\n error: onclickErrMsg.message,\n };\n }\n\n return {\n serviceType: service,\n error: error?.message || defaultErrorMessage,\n };\n};\n","import { postRequest } from '@stableflow/core';\n\nexport async function quoteSignature(params: any) {\n const response: any = await postRequest(\"/v0/cctp/sign\", params);\n return response.data ?? {};\n}\n","import Big from \"big.js\";\n\nexport const addThousandSeparator = (numberString: string) => {\n if (!numberString) return \"0\";\n const parts = String(numberString).split(\".\");\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n const decimalPart = parts[1] ? `.${parts[1]}` : \"\";\n return integerPart + decimalPart;\n};\n\nexport const formatNumber = (\n value: string | number | Big.Big | undefined,\n precision: number,\n isSimple?: boolean,\n options?: {\n prefix?: string;\n isLTIntegerZero?: boolean;\n isZeroPrecision?: boolean;\n isShort?: boolean;\n isShortUppercase?: boolean;\n round?: Big.RoundingMode;\n isLessPrecision?: boolean;\n }\n): any => {\n const {\n prefix = \"\",\n isLTIntegerZero,\n isZeroPrecision,\n isShort,\n isShortUppercase,\n round = Big.roundHalfUp,\n isLessPrecision = true,\n } = options || {};\n\n const isValid = () => {\n try {\n if (!value) return false;\n Big(value);\n return true;\n } catch (err: any) {\n return false;\n }\n };\n\n if (!value || !isValid() || Big(value).eq(0)) {\n if (isSimple) {\n if (isZeroPrecision) {\n return `${prefix}${Big(0).toFixed(precision, round)}`;\n }\n return `${prefix}0`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}0`,\n decimal: Big(0).toFixed(precision, round).replace(/^\\d/, \"\")\n };\n }\n return {\n integer: `${prefix}0`,\n decimal: \"\"\n };\n }\n\n if (isLessPrecision && Big(value).lt(Big(10).pow(-precision))) {\n if (isSimple) {\n return `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`;\n }\n if (isLTIntegerZero) {\n return {\n integer: `< ${prefix}0`,\n decimal: Big(10)\n .pow(-precision)\n .toFixed(precision, round)\n .replace(/^\\d/, \"\")\n };\n }\n return {\n integer: \"\",\n decimal: `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`\n };\n }\n\n const finalValue = addThousandSeparator(Big(value).toFixed(precision, round));\n const firstPart = finalValue.split(\".\")[0];\n let secondPart = finalValue.split(\".\")[1] || \"\";\n if (secondPart) {\n secondPart = \".\" + secondPart;\n }\n if (isSimple) {\n if (isShort) {\n const formatter = (split: number, unit: string): string => {\n const _num = Big(value)\n .div(split)\n .toFixed(precision, 0)\n .replace(/(?:\\.0*|(\\.\\d+?)0+)$/, \"$1\");\n const inter = _num.split(\".\")?.[0]?.replace(/\\d(?=(\\d{3})+\\b)/g, \"$&,\");\n const decimal = _num.split(\".\")?.[1] ?? \"\";\n return `${prefix}${inter}${decimal ? \".\" + decimal : \"\"}${unit}`;\n };\n if (Big(value).gte(1e12)) {\n return formatter(1e12, isShortUppercase ? \"T\" : \"t\");\n }\n if (Big(value).gte(1e9)) {\n return formatter(1e9, isShortUppercase ? \"B\" : \"b\");\n }\n if (Big(value).gte(1e6)) {\n return formatter(1e6, isShortUppercase ? \"M\" : \"m\");\n }\n if (Big(value).gte(1e3)) {\n return formatter(1e3, isShortUppercase ? \"K\" : \"k\");\n }\n }\n if (isZeroPrecision) {\n return `${prefix}${firstPart}${secondPart}`;\n }\n return `${prefix}${firstPart}${secondPart.replace(/[.]?0*$/, \"\")}`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart\n };\n }\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart.replace(/[.]?0*$/, \"\")\n };\n};\n","import { usdt0Chains } from \"@stableflow/core\";\nimport { LAYERZZERO_CHAINS, type LayerZeroChainConfig } from \"../utils\";\n\ninterface Usdt0Config extends LayerZeroChainConfig {\n contractAddress: string;\n oft?: string;\n oftLegacy?: string;\n oftMultiHopComposer?: string;\n oftTetherTokenOFTExtension?: string;\n confirmations: number;\n lzReceiveOptionGas: number;\n lzReceiveOptionGasLegacy: number;\n composeOptionGas?: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\n// chainKey: LayerZero chain identifier for querying default configurations\n// confirmations: Default block confirmations for source chain, fetched from https://layerzeroscan.com/tools/defaults (Send Confirmations)\n// For more accurate confirmation counts, visit https://layerzeroscan.com/application/usdt0, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\n// DVN count: USDT0 uses 2 DVNs (fixed value)\nexport const USDT0_CONFIG: Record<string, Usdt0Config> = {\n Ethereum: {\n contractAddress: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n oft: \"0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee\",\n oftLegacy: \"0x1f748c76de468e9d11bd340fa9d5cbadf315dfb0\",\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n confirmations: 15, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: true,\n oftLegacyApprovalRequired: true,\n },\n Arbitrum: {\n contractAddress: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n oft: \"0x14E4A1B13bf7F943c8ff7C51fb60FA964A298D92\",\n oftLegacy: \"0x77652d5aba086137b595875263fc200182919b92\",\n oftMultiHopComposer: \"0x759BA420bF1ded1765F18C2DC3Fc57A1964A2Ad1\",\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: false,\n oftLegacyApprovalRequired: true,\n },\n Polygon: {\n contractAddress: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n oft: \"0x6BA10300f0DC58B7a1e4c0e41f5daBb7D7829e13\",\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n confirmations: 32, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Optimism: {\n contractAddress: \"0x01bFF41798a0BcF287b996046Ca68b395DbC1071\",\n oft: \"0xF03b4d9AC1D5d1E7c4cEf54C2A313b9fe051A0aD\",\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n confirmations: 450, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Berachain: {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x3Dc96399109df5ceb2C226664A086140bD0379cB\",\n oftTetherTokenOFTExtension: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Solana: {\n contractAddress: \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n oftLegacy: \"Fuww9mfc8ntAwxPUzFia7VJFAdvLppyZwhPJoXySZXf7\",\n ...LAYERZZERO_CHAINS[\"Solana\"],\n confirmations: 128, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 200000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: false,\n },\n Tron: {\n contractAddress: \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\n oftLegacy: \"TFG4wBaDQ8sHWWP1ACeSGnoNR6RRzevLPt\",\n ...LAYERZZERO_CHAINS[\"Tron\"],\n confirmations: 5, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 300000,\n lzReceiveOptionGasLegacy: 300000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: true,\n },\n \"X Layer\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x94bcca6bdfd6a61817ab0e960bfede4984505554\",\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n confirmations: 9000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ton\": {\n contractAddress: \"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\n oftLegacy: \"EQAd31gAUhdO0d0NZsNb_cGl_Maa9PSuNhVLE9z8bBSjX6Gq\",\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 3,\n confirmations: 2,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: false,\n },\n \"Plasma\": {\n contractAddress: \"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb\",\n oft: \"0x02ca37966753bDdDf11216B73B16C1dE756A7CF9\",\n ...LAYERZZERO_CHAINS[\"Plasma\"],\n confirmations: 1800, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Mantle\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xcb768e263FB1C62214E7cab4AA8d036D76dc59CC\",\n ...LAYERZZERO_CHAINS[\"Mantle\"],\n confirmations: 2000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"MegaETH\": {\n contractAddress: \"0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb\",\n oft: \"0x9151434b16b9763660705744891fa906f660ecc5\",\n ...LAYERZZERO_CHAINS[\"MegaETH\"],\n confirmations: 5400,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ink\": {\n contractAddress: \"0x0200C29006150606B650577BBE7B6248F58470c1\",\n oft: \"0x1cB6De532588fCA4a21B7209DE7C456AF8434A65\",\n ...LAYERZZERO_CHAINS[\"Ink\"],\n confirmations: 450,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Stable\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xedaba024be4d87974d5aB11C6Dd586963CcCB027\",\n ...LAYERZZERO_CHAINS[\"Stable\"],\n confirmations: 3600,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Celo\": {\n contractAddress: \"0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e\",\n oftLegacy: \"0xf10E161027410128E63E75D0200Fb6d34b2db243\",\n ...LAYERZZERO_CHAINS[\"Celo\"],\n confirmations: 10,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: true,\n },\n \"Sei\": {\n contractAddress: \"0x9151434b16b9763660705744891fA906F660EcC5\",\n oft: \"0x56Fe74A2e3b484b921c447357203431a3485CC60\",\n ...LAYERZZERO_CHAINS[\"Sei\"],\n confirmations: 2000,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Flare\": {\n contractAddress: \"0xe7cd86e13AC4309349F30B3435a9d337750fC82D\",\n oft: \"0x567287d2A9829215a37e3B88843d32f9221E7588\",\n ...LAYERZZERO_CHAINS[\"Flare\"],\n confirmations: 500,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n};\n\nexport const LZ_RECEIVE_VALUE: Record<string, any> = {\n Solana: 2039280,\n};\n\n// https://docs.layerzero.network/v2/developers/evm/tooling/layerzeroscan#transaction-statuses\n// https://scan.layerzero-api.com/v1/swagger\nexport const LzScanStatus = {\n // The message has been successfully sent and received by the destination chain.\n Delivered: \"DELIVERED\",\n // The message is currently being transmitted between chains and has not yet reached its destination.\n InFlight: \"INFLIGHT\",\n // The message arrived at the destination, but reverted or ran out of gas during execution and needs to be retried.\n PayloadStored: \"PAYLOAD_STORED\",\n // The transaction encountered an error and did not complete.\n Failed: \"FAILED\",\n // A previous message nonce has a stored payload, halting the current transaction.\n Blocked: \"BLOCKED\",\n // The system is validating the finality of a transaction amidst potential high gas replacements or block reorgs.\n Confirming: \"CONFIRMING\",\n ApplicationBurned: \"APPLICATION_BURNED\",\n ApplicationSkipped: \"APPLICATION_SKIPPED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\n\nexport type LzScanStatus = (typeof LzScanStatus)[keyof typeof LzScanStatus];\n\nexport const LzScanSourceStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n WaitingForHashDelivered: \"WAITING_FOR_HASH_DELIVERED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\nexport type LzScanSourceStatus = (typeof LzScanSourceStatus)[keyof typeof LzScanSourceStatus];\n\nexport const LzScanDestinationStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n PayloadStored: \"PAYLOAD_STORED\",\n};\nexport type LzScanDestinationStatus = (typeof LzScanDestinationStatus)[keyof typeof LzScanDestinationStatus];\n\nexport const LzScanLzComposeStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n NA: \"N/A\",\n Failed: \"FAILED\",\n SimulatedReverted: \"SIMULATION_REVERTED\",\n WaitingForComposeSentEvent: \"WAITING_FOR_COMPOSE_SENT_EVENT\",\n};\nexport type LzScanLzComposeStatus = (typeof LzScanLzComposeStatus)[keyof typeof LzScanLzComposeStatus];\n\n// USDT0 DVN count (fixed value)\nexport const USDT0_DVN_COUNT = 2;\n\nexport const USDT0_LEGACY_FEE = 0.0001; // 0.01%, 10000 usdt cost 1 usdt\nexport const USDT0_LEGACY_MESH_TRANSFTER_FEE = 0.0003; // 0.03% https://docs.usdt0.to/tutorial/how-to-transfer#usdt0\nexport const DATA_HEX_PROTOBUF_EXTRA = 3;\nexport const SIGNATURE_SIZE = 67;\n\nexport const MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\nexport const MIDDLE_TOKEN_CHAIN = usdt0Chains[\"arb\"];\nexport const MIDDLE_CHAIN_LAYERZERO_EXECUTOR = \"0x6f4042401823a97E3b02F1A533e62C40409a75fa\";\n\n","export const OFT_ABI = [\n {\n inputs: [],\n name: \"approvalRequired\",\n outputs: [\n { internalType: \"bool\", name: \"\", type: \"bool\" }\n ],\n stateMutability: \"pure\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n }\n ],\n name: \"quoteOFT\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxAmountLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTLimit\",\n name: \"oftLimit\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"int256\", name: \"feeAmountLD\", type: \"int256\" },\n { internalType: \"string\", name: \"description\", type: \"string\" }\n ],\n internalType: \"struct OFTFeeDetail[]\",\n name: \"oftFeeDetails\",\n type: \"tuple[]\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n { internalType: \"bool\", name: \"_payInLzToken\", type: \"bool\" }\n ],\n name: \"quoteSend\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"msgFee\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"_fee\",\n type: \"tuple\"\n },\n { internalType: \"address\", name: \"_refundAddress\", type: \"address\" }\n ],\n name: \"send\",\n outputs: [\n {\n components: [\n { internalType: \"bytes32\", name: \"guid\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"fee\",\n type: \"tuple\"\n }\n ],\n internalType: \"struct MessagingReceipt\",\n name: \"msgReceipt\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n }\n];\n\nexport const SOLANA_IDL = {\n \"metadata\": {\n \"name\": \"oft\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"burn\",\n \"discriminator\": [\n 116,\n 110,\n 29,\n 56,\n 107,\n 219,\n 42,\n 93\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"BurnParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"deposit_local\",\n \"discriminator\": [\n 183,\n 51,\n 160,\n 173,\n 94,\n 131,\n 201,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"DepositLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_oft\",\n \"discriminator\": [\n 182,\n 169,\n 147,\n 16,\n 201,\n 45,\n 76,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"endpoint_settings\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitOFTParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive\",\n \"discriminator\": [\n 8,\n 179,\n 120,\n 109,\n 33,\n 118,\n 189,\n 80\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"to_address\",\n \"optional\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_info\",\n \"discriminator\": [\n 43,\n 148,\n 213,\n 93,\n 101,\n 127,\n 37,\n 170\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"lz_receive_types_accounts\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_v2\",\n \"discriminator\": [\n 109,\n 157,\n 200,\n 142,\n 138,\n 223,\n 159,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"LzReceiveTypesV2Result\"\n }\n }\n },\n {\n \"name\": \"nilify\",\n \"discriminator\": [\n 143,\n 136,\n 129,\n 199,\n 36,\n 35,\n 160,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"NilifyParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"oft_version\",\n \"discriminator\": [\n 179,\n 115,\n 253,\n 187,\n 88,\n 22,\n 80,\n 64\n ],\n \"accounts\": [],\n \"args\": [],\n \"returns\": {\n \"defined\": {\n \"name\": \"Version\"\n }\n }\n },\n {\n \"name\": \"quote_oft\",\n \"discriminator\": [\n 179,\n 255,\n 92,\n 202,\n 251,\n 82,\n 82,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteOFTParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"QuoteOFTResult\"\n }\n }\n },\n {\n \"name\": \"quote_send\",\n \"discriminator\": [\n 207,\n 0,\n 49,\n 214,\n 160,\n 211,\n 76,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_send_credits\",\n \"discriminator\": [\n 166,\n 117,\n 54,\n 109,\n 220,\n 29,\n 112,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_withdraw_remote\",\n \"discriminator\": [\n 198,\n 64,\n 228,\n 34,\n 69,\n 19,\n 122,\n 58\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"send\",\n \"discriminator\": [\n 102,\n 251,\n 20,\n 187,\n 65,\n 75,\n 12,\n 69\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"send_credits\",\n \"discriminator\": [\n 92,\n 161,\n 204,\n 14,\n 139,\n 189,\n 105,\n 227\n ],\n \"accounts\": [\n {\n \"name\": \"planner\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n },\n {\n \"name\": \"set_oft_config\",\n \"discriminator\": [\n 55,\n 126,\n 87,\n 217,\n 159,\n 66,\n 24,\n 194\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetOFTConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_peer_config\",\n \"discriminator\": [\n 79,\n 187,\n 168,\n 57,\n 139,\n 140,\n 93,\n 47\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetPeerConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_fees\",\n \"discriminator\": [\n 198,\n 212,\n 171,\n 109,\n 144,\n 215,\n 174,\n 89\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawFeesParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_local\",\n \"discriminator\": [\n 112,\n 250,\n 134,\n 10,\n 96,\n 9,\n 236,\n 176\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_remote\",\n \"discriminator\": [\n 135,\n 200,\n 45,\n 240,\n 165,\n 104,\n 44,\n 102\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Credits\",\n \"discriminator\": [\n 167,\n 92,\n 156,\n 89,\n 224,\n 222,\n 250,\n 237\n ]\n },\n {\n \"name\": \"EndpointSettings\",\n \"discriminator\": [\n 221,\n 232,\n 73,\n 56,\n 10,\n 66,\n 72,\n 14\n ]\n },\n {\n \"name\": \"OFTStore\",\n \"discriminator\": [\n 195,\n 215,\n 104,\n 134,\n 185,\n 195,\n 240,\n 114\n ]\n },\n {\n \"name\": \"PeerConfig\",\n \"discriminator\": [\n 181,\n 157,\n 86,\n 198,\n 33,\n 193,\n 94,\n 203\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddressLookupTableSet\",\n \"discriminator\": [\n 54,\n 206,\n 97,\n 134,\n 147,\n 43,\n 12,\n 34\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"discriminator\": [\n 198,\n 129,\n 215,\n 13,\n 129,\n 143,\n 91,\n 13\n ]\n },\n {\n \"name\": \"CreditsReceived\",\n \"discriminator\": [\n 247,\n 1,\n 147,\n 84,\n 187,\n 118,\n 0,\n 23\n ]\n },\n {\n \"name\": \"CreditsSent\",\n \"discriminator\": [\n 227,\n 230,\n 87,\n 90,\n 214,\n 189,\n 44,\n 241\n ]\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"discriminator\": [\n 146,\n 122,\n 60,\n 148,\n 172,\n 173,\n 245,\n 181\n ]\n },\n {\n \"name\": \"FeeBpsSet\",\n \"discriminator\": [\n 157,\n 56,\n 175,\n 190,\n 219,\n 193,\n 106,\n 208\n ]\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"discriminator\": [\n 234,\n 15,\n 0,\n 119,\n 148,\n 241,\n 40,\n 21\n ]\n },\n {\n \"name\": \"LocalDeposit\",\n \"discriminator\": [\n 137,\n 122,\n 12,\n 175,\n 43,\n 253,\n 64,\n 206\n ]\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"discriminator\": [\n 123,\n 143,\n 13,\n 174,\n 243,\n 234,\n 207,\n 102\n ]\n },\n {\n \"name\": \"LpAdminSet\",\n \"discriminator\": [\n 204,\n 123,\n 111,\n 142,\n 215,\n 147,\n 149,\n 241\n ]\n },\n {\n \"name\": \"OFTReceived\",\n \"discriminator\": [\n 144,\n 129,\n 112,\n 67,\n 144,\n 152,\n 201,\n 42\n ]\n },\n {\n \"name\": \"OFTSent\",\n \"discriminator\": [\n 108,\n 171,\n 219,\n 2,\n 189,\n 21,\n 110,\n 110\n ]\n },\n {\n \"name\": \"PeerAddressSet\",\n \"discriminator\": [\n 23,\n 136,\n 173,\n 207,\n 43,\n 0,\n 240,\n 232\n ]\n },\n {\n \"name\": \"PlannerSet\",\n \"discriminator\": [\n 15,\n 204,\n 218,\n 142,\n 168,\n 147,\n 236,\n 100\n ]\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"discriminator\": [\n 19,\n 91,\n 253,\n 185,\n 110,\n 208,\n 124,\n 198\n ]\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"discriminator\": [\n 97,\n 15,\n 220,\n 84,\n 178,\n 82,\n 9,\n 250\n ]\n },\n {\n \"name\": \"SuperAdminSet\",\n \"discriminator\": [\n 138,\n 32,\n 131,\n 104,\n 28,\n 14,\n 79,\n 204\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"Unauthorized\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidSender\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidDecimals\"\n },\n {\n \"code\": 6003,\n \"name\": \"SlippageExceeded\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidTokenDest\"\n },\n {\n \"code\": 6005,\n \"name\": \"InsufficientFeeBalance\"\n },\n {\n \"code\": 6006,\n \"name\": \"InvalidAmount\"\n },\n {\n \"code\": 6007,\n \"name\": \"InsufficientCredits\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidEID\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidMessage\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidFeeBps\"\n },\n {\n \"code\": 6011,\n \"name\": \"TONComposeNotSupported\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountMetaRef\",\n \"docs\": [\n \"Account metadata for V2 execution planning.\",\n \"Used by the Executor to construct the final transaction.\",\n \"\",\n \"V2 removes the legacy is_signer flag from V1's AccountMeta.\",\n \"Instead, signer roles are explicitly declared through AddressLocator variants.\",\n \"This provides clearer semantics and enables multiple signer support.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pubkey\",\n \"docs\": [\n \"The account address locator - supports multiple resolution strategies\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"AddressLocator\"\n }\n }\n },\n {\n \"name\": \"is_writable\",\n \"docs\": [\n \"Whether the account should be writable in the final transaction\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLocator\",\n \"docs\": [\n \"A generic account locator used in LZ execution planning for V2.\",\n \"Can reference the address directly, via ALT, or as a placeholder.\",\n \"\",\n \"This enum enables the compact account referencing design of V2, supporting:\",\n \"- OApps to request multiple signer accounts, not just a single Executor EOA\",\n \"- Dynamic creation of writable EOA-based data accounts\",\n \"- Efficient encoding of addresses via ALTs, reducing account list size\",\n \"\",\n \"The legacy is_signer flag is removed. Instead, signer roles are explicitly\",\n \"declared through Payer and indexed Signer(u8) variants.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Address\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"AltIndex\",\n \"fields\": [\n \"u8\",\n \"u8\"\n ]\n },\n {\n \"name\": \"Payer\"\n },\n {\n \"name\": \"Signer\",\n \"fields\": [\n \"u8\"\n ]\n },\n {\n \"name\": \"Context\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLookupTableSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"BurnParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Credits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"CreditsEntry\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CreditsBatch\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"credits_arbitrum\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_celo\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_eth\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_solana\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_ton\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_tron\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DepositLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EndpointSettings\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lz_token_mint\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptions\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft_and_call\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeBpsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Instruction\",\n \"docs\": [\n \"The list of instructions that can be executed in the LzReceive transaction.\",\n \"\",\n \"V2's multi-instruction model enables complex patterns such as:\",\n \"- Preprocessing steps before lz_receive (e.g., account initialization)\",\n \"- Postprocessing steps after lz_receive (e.g., verification, cleanup)\",\n \"- ABA messaging patterns with additional LayerZero sends\",\n \"- Conditional execution flows based on message content\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"LzReceive\",\n \"fields\": [\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the lz_receive instruction\",\n \"Uses AddressLocator for flexible address resolution\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"Standard\",\n \"fields\": [\n {\n \"name\": \"program_id\",\n \"docs\": [\n \"Target program ID for the custom instruction\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the custom instruction\",\n \"Uses same AddressLocator system as LzReceive\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n },\n {\n \"name\": \"data\",\n \"docs\": [\n \"Instruction data payload\",\n \"Raw bytes containing the instruction's parameters\"\n ],\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"LocalDeposit\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LpAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"extra_data\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveTypesV2Result\",\n \"docs\": [\n \"Output of the lz_receive_types_v2 instruction.\",\n \"\",\n \"This structure enables the multi-instruction execution model where OApps can\",\n \"define multiple instructions to be executed atomically by the Executor.\",\n \"The Executor constructs a single transaction containing all returned instructions.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"context_version\",\n \"docs\": [\n \"The version of context account\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"alts\",\n \"docs\": [\n \"ALTs required for this execution context\",\n \"Used by the Executor to resolve AltIndex references in AccountMetaRef\",\n \"Enables efficient account list compression for complex transactions\"\n ],\n \"type\": {\n \"vec\": \"pubkey\"\n }\n },\n {\n \"name\": \"instructions\",\n \"docs\": [\n \"The complete list of instructions required for LzReceive execution\",\n \"MUST include exactly one LzReceive instruction\",\n \"MAY include additional Standard instructions for preprocessing/postprocessing\",\n \"Instructions are executed in the order returned\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"Instruction\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MessagingFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MessagingReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"NilifyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"OFTFeeDetail\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"description\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTLimits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTStore\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_escrow\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"fee_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"planner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"burn_and_nilify_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerAddressSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"peer_address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"enforced_options\",\n \"type\": {\n \"defined\": {\n \"name\": \"EnforcedOptions\"\n }\n }\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfigParam\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"PeerAddress\",\n \"fields\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n ]\n },\n {\n \"name\": \"EnforcedOptions\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"PlannerSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTResult\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oft_limits\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTLimits\"\n }\n }\n },\n {\n \"name\": \"oft_fee_details\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"OFTFeeDetail\"\n }\n }\n }\n },\n {\n \"name\": \"oft_receipt\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTReceipt\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SetOFTConfigParams\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"SuperAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Delegate\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Planner\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"LpAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"FeeBps\",\n \"fields\": [\n \"u16\"\n ]\n },\n {\n \"name\": \"AddressLookupTable\",\n \"fields\": [\n {\n \"option\": \"pubkey\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"SetPeerConfigParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"remote_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PeerConfigParam\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"SuperAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Version\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interface\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"message\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawFeesParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n};\n","import { USDT0_CONFIG, USDT0_DVN_COUNT } from \"./config\";\nimport { OFT_ABI, SOLANA_IDL } from \"./contract\";\nimport { getRequest, SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { request } from '@stableflow/core';\nimport { ExecTime } from \"@stableflow/core\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class Usdt0Service {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n originChain,\n destinationChain,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `Usdt0Service ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[originChain];\n const destinationLayerzero = USDT0_CONFIG[destinationChain];\n\n let originLayerzeroAddress = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft;\n let dstEid = destinationLayerzero.eid;\n\n // Dynamically calculate estimated time\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: USDT0_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (fromToken.chainType === \"evm\") {\n destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n let isOriginLegacy = false;\n let isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n originLayerzeroAddress = originLayerzero.oftLegacy || originLayerzero.oft;\n isOriginLegacy = originLayerzeroAddress === originLayerzero.oftLegacy;\n }\n if (!originLayerzeroAddress) {\n originLayerzeroAddress = originLayerzero.oftLegacy;\n isOriginLegacy = true;\n if (destinationLayerzero.oftLegacy) {\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy;\n isDestinationLegacy = true;\n }\n }\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isBothOUpgradeable = !isOriginLegacy && !isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy && !isBothOUpgradeable;\n\n const result = await wallet.quote(Service.Usdt0, {\n dry,\n abi: OFT_ABI,\n dstEid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n return result;\n }\n\n // source chain must be legacy\n const isOriginLegacy = true;\n originLayerzeroAddress = originLayerzero.oftLegacy;\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy || destinationLayerzero.oft;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy;\n\n // one is legacy, and one is upgradeable\n // should use multi hop composer\n // and special extraOptions & composeMsg\n if (isMultiHopComposer) {\n dstEid = USDT0_CONFIG[\"Arbitrum\"].eid;\n destinationLayerzeroAddress = USDT0_CONFIG[\"Arbitrum\"].oftMultiHopComposer;\n }\n\n const oftParams: any = {\n dry,\n dstEid: destinationLayerzero.eid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n };\n\n if (fromToken.chainType === \"tron\") {\n oftParams.abi = OFT_ABI;\n }\n\n if (fromToken.chainType === \"sol\") {\n oftParams.idl = SOLANA_IDL;\n }\n\n const result = await wallet.quote(Service.Usdt0, {\n idl: SOLANA_IDL,\n ...oftParams,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n amountWei,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const isFromTron = fromToken.chainType === \"tron\";\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 300000;\n estimateTransactionParams.defaultRawDataHexLength = 1000;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.totalEstimateSourceGas = BigInt(Big(quoteData.fees?.nativeFee || 0).times(10 ** nativeTokenDecimals).toFixed(0)) + ett.estimateSourceGas;\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: any) {\n return getRequest(`/v0/messages/tx/${params.hash}`);\n }\n}\n\nexport default new Usdt0Service();\n","\n// https://developers.circle.com/cctp/evm-smart-contracts#tokenmessengerv2-mainnet\nexport const CCTP_TOKEN_MESSENGER: Record<string, string> = {\n [\"Ethereum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Arbitrum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Polygon\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Optimism\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Avalanche\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Solana\"]: \"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe\",\n [\"Pharos\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n};\n\nexport const CCTP_TOKEN_PROXY: Record<string, string> = {\n [\"Ethereum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Arbitrum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Polygon\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"Optimism\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Avalanche\"]: \"0xB6E3a1165aC3E0c370e316C27E959482460dBeDD\",\n [\"Solana\"]: \"8whUZNSbjJXC2UDRpo3PXo5MHzhptwVTTwpSYuTgQJNY\",\n [\"Base\"]: \"0x7092B8E5445Fca836B0f9780c77C38C7cbb9A43D\",\n [\"Pharos\"]: \"0x53812feae0fd2c43f8e6d8847a7f5d035f1d1f8f\",\n};\n\nexport const CCTP_TOKEN_MESSENGER_ABI = [\n {\n type: \"function\",\n name: \"depositForBurn\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"hookData\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"finalityThreshold\", type: \"uint32\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"receiveMessage\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n outputs: [],\n },\n];\n\nexport const CCTP_TOKEN_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"originalAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chargedAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"destinationDomain\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"mintRecipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"burnToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"destinationCaller\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxFee\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"minFinalityThreshold\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"depositWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userNonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n];\n","import { usdcChains } from \"@stableflow/core\";\n\nexport const IRIS_API_URL = \"https://iris-api.circle.com/v2\";\n\nexport const MIDDLE_TOKEN_CHAIN = usdcChains[\"arb\"];\n\nexport const CCTP_PROXY_RELAY_CONTRACT = \"0x0da5336C5CEb9d15e7659Ae376CC41d86Edd8802\";\n\nexport const MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\n\nexport const CCTP_DOMAINS: Record<string, number> = {\n Ethereum: 0,\n Arbitrum: 3,\n Polygon: 7,\n Optimism: 2,\n Avalanche: 1,\n Solana: 5,\n Base: 6,\n Pharos: 31,\n};\n","import { CCTP_TOKEN_PROXY, CCTP_TOKEN_PROXY_ABI } from \"./contract\";\nimport { CCTP_DOMAINS } from \"./config\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, OpenAPI } from '@stableflow/core';\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class CCTPService {\n constructor() {\n }\n\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `CCTPService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-500\", isDebug: OpenAPI.DEBUG });\n\n const sourceDomain = CCTP_DOMAINS[fromToken.chainName];\n const destinationDomain = CCTP_DOMAINS[toToken.chainName];\n const proxyAddress = CCTP_TOKEN_PROXY[fromToken.chainName];\n\n const result = await wallet.quote(Service.CCTP, {\n dry,\n proxyAddress,\n abi: CCTP_TOKEN_PROXY_ABI,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n excludeFees,\n destinationDomain,\n sourceDomain,\n });\n\n execTime.logTotal(\"CCTPService.quote\");\n result.sourceQuoteParams = params;\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new CCTPService();\n","import { frxusdChains } from \"@stableflow/core\";\nimport { usdcChains } from \"@stableflow/core\";\nimport { LayerZeroChainConfig, LAYERZZERO_CHAINS } from \"../utils\";\n\nexport interface FraxZeroConfig extends LayerZeroChainConfig {\n remoteHop?: string;\n lockbox?: string;\n programId?: string;\n mint?: string;\n escrow?: string;\n confirmations: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// DVN count: frax-finance uses 3 DVNs (fixed value)\nexport const FRAXZERO_REQUIRED_DVN_COUNT = 3;\n\n// FraxZero RemoteHop config, see https://docs.frax.com/frxusd/fraxzero-supported-networks\n// Chain names match chainName in frxusdChains, excluding Fraxtal\n// confirmation counts: visit https://layerzeroscan.com/application/frax-finance, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\nexport const FRAXZERO_CONFIG: Record<string, FraxZeroConfig> = {\n Ethereum: {\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n remoteHop: \"0x3ad4dC2319394bB4BE99A0e4aE2AbF7bCEbD648E\",\n lockbox: \"0x566a6442a5a6e9895b9dca97cc7879d632c6e4b0\",\n confirmations: 15,\n oftApprovalRequired: true,\n },\n Arbitrum: {\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n remoteHop: \"0x29F5DBD0FE72d8f11271FCBE79Cb87E18a83C70A\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Avalanche: {\n ...LAYERZZERO_CHAINS[\"Avalanche\"],\n remoteHop: \"0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A\",\n confirmations: 12,\n oftApprovalRequired: true,\n },\n Berachain: {\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n remoteHop: \"0xc71BF5Ee4740405030eF521F18A96eA14fec802D\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n \"BNB Chain\": {\n ...LAYERZZERO_CHAINS[\"BNB Chain\"],\n remoteHop: \"0x452420df4AC1e3db5429b5FD629f3047482C543C\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Optimism: {\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n remoteHop: \"0x31D982ebd82Ad900358984bd049207A4c2468640\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Polygon: {\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n remoteHop: \"0xf74D38A26948E9DDa53eD85cF03C6b1188FbB30C\",\n confirmations: 512,\n oftApprovalRequired: true,\n },\n \"X Layer\": {\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n remoteHop: \"0x79152c303AD5aE429eDefa4553CB1Ad2c6EE1396\",\n confirmations: 225000,\n oftApprovalRequired: true,\n },\n Solana: {\n ...LAYERZZERO_CHAINS[\"Solana\"],\n programId: \"E1ht9dUh1ZkgWWRRPCuN3kExEoF2FXiyADXeN3XyMHaQ\",\n escrow: \"84AFSH3TSzyjbEFJX9z8sjpV7npTWq7f8ZR5zkLG22hX\",\n confirmations: 32,\n oftApprovalRequired: false,\n },\n Fraxtal: {\n ...LAYERZZERO_CHAINS[\"Fraxtal\"],\n lockbox: \"0x96A394058E2b84A89bac9667B19661Ed003cF5D4\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n Katana: {\n ...LAYERZZERO_CHAINS[\"Katana\"],\n remoteHop: \"0x5d8eb59a12bc98708702305a7b032f4b69dd5b5c\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n};\n\nexport const FRAXZERO_MIDDLE_TOKEN_USDC = usdcChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_TOKEN_FRXUSD = frxusdChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\n\nexport const FRAXZERO_REDEEM_USDC_CONTRACT = \"0x4F95C5bA0C7c69FB2f9340E190cCeE890B3bd87c\";\nexport const FRAXZERO_REDEEM_RWA_CONTRACT = \"0x5fbAa3A3B489199338fbD85F7E3D444dc0504F33\";\nexport const FRAXZERO_REDEMPTION_CONTRACT = \"0x4c21B7577C8FE8b0B0669165ee7C8f67fa1454Cf\";\n\nexport const FRAXZERO_REDEEM_AND_MINT_CONTRACT = \"0xabA176B7e92c0A6DF8AC973e78d3fE987794bA4B\";\n\n// gas amount = gas limit * gas price\nexport const FRAXZERO_GAS_USED = {\n REDEEM: 0n, // 358964n\n MINT: {\n TO_SOL: 0n, // 756271n\n TO_FRAXTAL: 0n, // 660997n\n TO_ETHEREUM: 0n, // 334550n\n SEND: 0n, // 756271n\n },\n};\n","export const FRAXZERO_ABI = [\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"_EXECUTOR\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_DVN\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_TREASURY\", \"type\": \"address\" },\n { \"internalType\": \"address[]\", \"name\": \"_approvedOfts\", \"type\": \"address[]\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"AddressInsufficientBalance\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"FailedInnerCall\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"HopPaused\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InsufficientFee\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidOFT\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint16\", \"name\": \"optionType\", \"type\": \"uint16\" }\n ],\n \"name\": \"InvalidOptionType\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"NotEndpoint\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"RefundFailed\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint8\", \"name\": \"bits\", \"type\": \"uint8\" },\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n ],\n \"name\": \"SafeCastOverflowedUintDowncast\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" }\n ],\n \"name\": \"SafeERC20FailedOperation\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"ZeroAmountSend\", \"type\": \"error\" },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"oft\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"indexed\": true, \"internalType\": \"bytes32\", \"name\": \"to\", \"type\": \"bytes32\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"SendOFT\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DVN\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"EXECUTOR\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TREASURY\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"acceptOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"name\": \"approvedOft\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"\", \"type\": \"uint32\" }\n ],\n \"name\": \"executorOptions\",\n \"outputs\": [\n { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"fraxtalHop\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"hopFee\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"numDVNs\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bool\", \"name\": \"_paused\", \"type\": \"bool\" }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pendingOwner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"quote\",\n \"outputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"nativeFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"lzTokenFee\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct MessagingFee\",\n \"name\": \"fee\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" }\n ],\n \"name\": \"quoteHop\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"finalFee\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"tokenAddress\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverERC20\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverETH\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"sendOFT\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"eid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes\", \"name\": \"_options\", \"type\": \"bytes\" }\n ],\n \"name\": \"setExecutorOptions\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_fraxtalHop\", \"type\": \"address\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_hopFee\", \"type\": \"uint256\" }\n ],\n \"name\": \"setHopFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" }\n ],\n \"name\": \"setNumDVNs\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"bool\", \"name\": \"_approved\", \"type\": \"bool\" }\n ],\n \"name\": \"toggleOFTApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n];\n\nexport const FRAXZERO_REDEEM_MINT_ABI = [\n {\n \"inputs\": [],\n \"name\": \"mdwrComboView\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsDepositable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesMintable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsWithdrawable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesRedeemable\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"redeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"deposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewDeposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewWithdraw\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewMint\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewRedeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"receiver\", \"type\": \"bytes32\" }\n ],\n \"name\": \"mintAndSend\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"guidOrZero\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"redeemToUsdcAndTransfer\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxUstbRedemptionAmount\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenAmount\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenInAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"calculateUsdcOut\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"usdcOutAmountAfterFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import { FRAXZERO_CONFIG, FRAXZERO_REQUIRED_DVN_COUNT } from \"./config\";\nimport { FRAXZERO_ABI } from \"./contract\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { Usdt0Service } from \"../usdt0\";\nimport { OFT_ABI } from \"../usdt0/contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class FraxZeroService extends Usdt0Service {\n public override async quote(params: any) {\n const {\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `FraxZeroService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n const isFromEthereumOrFraxtal = fromToken.chainId === 1 || fromToken.chainId === 252;\n const isToEthereumOrFraxtal = toToken.chainId === 1 || toToken.chainId === 252;\n const isFraxtal = fromToken.chainId === 252 || toToken.chainId === 252;\n const isFromSolana = fromToken.chainName === \"Solana\";\n\n if (isFromSolana) {\n // only support Ethereum and Fraxtal\n if (![1, 252].includes(toToken.chainId)) {\n throw new Error(\"Invalid destination chain\");\n }\n }\n\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: FRAXZERO_REQUIRED_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (isFraxtal && !isFromSolana) {\n const result = await wallet.quote(Service.Usdt0, {\n ...params,\n abi: OFT_ABI,\n dstEid: destinationLayerzero.eid,\n payInLzToken: PayInLzToken,\n originLayerzeroAddress: isFromEthereumOrFraxtal ? originLayerzero.lockbox : fromToken.contractAddress,\n destinationLayerzeroAddress: isToEthereumOrFraxtal ? destinationLayerzero.lockbox : toToken.contractAddress,\n excludeFees,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote isFraxtal\");\n\n return result;\n }\n\n const result = await wallet.quote(Service.FraxZero, {\n ...params,\n abi: FRAXZERO_ABI,\n originLayerzero,\n destinationLayerzero,\n excludeFees,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote\");\n\n return result;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZeroService();\n","import { FraxZeroService, excludeFees as fraxExcludeFees } from \".\";\nimport { FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_REDEEM_USDC_CONTRACT, FRAXZERO_REDEEM_RWA_CONTRACT, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_GAS_USED, FRAXZERO_REDEMPTION_CONTRACT } from \"./config\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport Big from \"big.js\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, numberRemoveEndZero, OneClickSwapType } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport { getPrice } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\n\nexport class FraxZero2OneClickService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"FraxZero2OneClickService quote\", \"yellow-500\", \"params: %o\", params);\n\n const _quoteType = `FraxZero2OneClick ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-700\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumFrxUSD = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToEthereumUSDC = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_FRXUSD);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // fraxzero quote result\n let firstStepResult: any;\n if (!isFromEthereumFrxUSD) {\n execTime.breakpoint();\n // bridge to Ethereum\n firstStepResult = await super.quote({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"firstStepResult: %o\", firstStepResult);\n const ethereumFrxUSDAmountWei = isFromEthereumFrxUSD\n ? amountWei\n : Big(firstStepResult.outputAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown);\n const ethereumFrxUSDAmount = isFromEthereumFrxUSD\n ? Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown)\n : firstStepResult.outputAmount;\n\n // oneclick quote result\n let thirdStepResult: any;\n let preivewRedeemResult: any;\n if (!isToEthereumUSDC) {\n let oneClickFeeRatio = \"0\";\n // These fees are currently all 0\n // No need to request for now\n // if (!isFromEthereumFrxUSD) {\n // execTime.breakpoint();\n // const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n // gasLimit: FRAXZERO_GAS_USED.REDEEM * 120n / 100n,\n // price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken.symbol),\n // nativeToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken,\n // provider,\n // gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_FRXUSD.chainId as number].gasPrice : void 0,\n // });\n // execTime.log(\"middleChainWallet.getEstimateGas\");\n // const secondStepGasToAmount = Big(usd).div(getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.symbol) || 1).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals);\n // oneClickFeeRatio = Big(secondStepGasToAmount)\n // .div(Big(secondStepGasToAmount).plus(Big(ethereumFrxUSDAmountWei).div(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals)))\n // .times(10000)\n // .toFixed(0, Big.roundUp);\n // }\n\n // estimate redeem amount\n // If it's a quote, use a 1:1 exchange rate\n let ethereumUSDCAmountWei = Big(ethereumFrxUSDAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, Big.roundDown);\n try {\n execTime.breakpoint();\n preivewRedeemResult = await middleChainWallet.preivewRedeemFrxUSD({\n dry,\n amountWei: ethereumFrxUSDAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n });\n execTime.log(\"middleChainWallet.preivewRedeemFrxUSD\");\n ethereumUSDCAmountWei = preivewRedeemResult.totalAssetsOut.toString();\n } catch (error) {\n csl(\"FraxZero2OneClickService quote\", \"red-500\", \"estimate redeem amount failed: %o\", error);\n }\n\n // from ethereum USDC to toToken\n execTime.breakpoint();\n thirdStepResult = await oneClickService.quote({\n ...params,\n amountWei: ethereumUSDCAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n originAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: OneClickSwapType.Flex,\n isProxy: false,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"thirdStepResult: %o\", thirdStepResult);\n\n // redeem from ethereum frxUSD to ethereum USDC\n execTime.breakpoint();\n const secondStepResult = await middleChainWallet.redeemFrxUSD({\n ...params,\n preivewRedeemResult,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n amountWei: ethereumFrxUSDAmountWei,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n refundTo: middleChainRecipientAddress,\n recipient: !isToEthereumUSDC ? (thirdStepResult?.quote?.depositAddress || middleChainRecipientAddress) : recipient,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n });\n execTime.log(\"middleChainWallet.redeemFrxUSD\");\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"secondStepResult: %o\", secondStepResult);\n\n const withOneClick = (_result: any) => {\n let totalFeesUsd = Big(0);\n let estimateTime = _result?.estimateTime || 0;\n let finalOutputAmount = _result?.outputAmount || \"0\";\n let depositAddress = thirdStepResult?.quote?.depositAddress;\n\n const fees = {\n ..._result?.fees,\n };\n if (!isToEthereumUSDC) {\n for (const feeKey in thirdStepResult?.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = thirdStepResult.fees[feeKey];\n }\n estimateTime = estimateTime + (thirdStepResult?.estimateTime || 0);\n finalOutputAmount = thirdStepResult?.outputAmount || \"0\";\n }\n for (const feeKey in fees) {\n if (fraxExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const inputAmount = Big(amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown);\n const amountInUsd = Big(inputAmount).times(getPrice(prices, fromToken.symbol));\n const priceImpact = Big(amountInUsd).minus(Big(finalOutputAmount).times(getPrice(prices, toToken.symbol))).div(amountInUsd);\n const exchangeRate = Big(finalOutputAmount).div(inputAmount);\n\n return {\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime,\n outputAmount: finalOutputAmount,\n priceImpact: numberRemoveEndZero(Big(priceImpact).toFixed(4)),\n exchangeRate: numberRemoveEndZero(Big(exchangeRate).toFixed(6, Big.roundDown)),\n quoteParam: {\n ..._result?.quoteParam,\n fromToken,\n amountWei,\n toToken,\n refundTo,\n recipient,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumFrxUSD,\n isToEthereumUSDC,\n depositAddress,\n },\n sourceQuoteParams: params,\n };\n };\n\n // Redeem from the frontend\n if (isFromEthereumFrxUSD) {\n\n const oneClickResult = withOneClick(secondStepResult);\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is From EthereumFrxUSD\");\n\n return {\n ...secondStepResult,\n ...oneClickResult,\n sourceQuoteParams: params,\n };\n }\n\n // Redeem is done by the backend, and the frontend calls FraxZero to bridge to Ethereum frxUSD\n const oneClickResult = withOneClick({\n ...firstStepResult,\n outputAmount: secondStepResult.outputAmount,\n });\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is NOT From EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n ...oneClickResult,\n recipient,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n permitAmountWei: ethereumFrxUSDAmountWei,\n permitAdditionalData: {},\n sourceQuoteParams: params,\n };\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZero2OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport { FraxZeroService, excludeFees as fraxZeroExcludeFees } from \".\";\nimport { FRAXZERO_CONFIG, FRAXZERO_GAS_USED, FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_REDEEM_USDC_CONTRACT } from \"./config\";\nimport { getPrice, getRequest, GetStatusParams, GetStatusStableflowResponse, isStableToken, OneClickSwapType } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\n\nexport class OneClick2FraxZeroService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"params: %o\", params);\n\n const _quoteType = `OneClick2FraxZero ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-500\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumUSDC = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n const isToEthereumFrxUSD = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToSolana = toToken.chainName === \"Solana\";\n const isToFraxtal = toToken.chainId === 252;\n const isSend = !isToEthereumFrxUSD && !isToSolana && !isToFraxtal;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_USDC);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n let previewMintResult: any;\n // 1. use OneClick to bridge to Ethereum USDC first\n if (!isFromEthereumUSDC) {\n // estimate gas\n let gasLimit = FRAXZERO_GAS_USED.MINT.SEND;\n if (isToEthereumFrxUSD) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_ETHEREUM;\n }\n if (isToSolana) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_SOL;\n }\n if (isToFraxtal) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_FRAXTAL;\n }\n gasLimit = gasLimit * 120n / 100n;\n\n let firstStepAmountWei = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, 0);\n if (!isStableToken(fromToken)) {\n const inputPrice = getPrice(prices, fromToken.symbol);\n const inputValue = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(inputPrice);\n firstStepAmountWei = Big(inputValue).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, 0);\n }\n\n // Mint should be a 1:1 conversion from Ethereum USDC to Ethereum frxUSD.\n // The ratio can be obtained from the contract.\n execTime.breakpoint();\n previewMintResult = await middleChainWallet.previewMintFrxUSD({\n dry,\n amountWei: firstStepAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n });\n const { totalAssetsOut: estimateEthereumFrxUSDAmountWei } = previewMintResult;\n execTime.log(\"previewMintFrxUSD\");\n\n execTime.breakpoint();\n const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n gasLimit,\n price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken.symbol),\n nativeToken: FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken,\n provider: provider,\n gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_USDC.chainId as number].gasPrice : void 0,\n });\n execTime.log(\"middleChainWallet.getEstimateGas\");\n const secondStepGasToAmount = Big(usd || 0).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC EstimateGas usd: %o, wei: %o, amount: %o\", usd, wei, amount);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n let secondStepResult: any;\n if (!isToEthereumFrxUSD) {\n execTime.breakpoint();\n secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: estimateEthereumFrxUSDAmountWei.toString(),\n refundTo: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepResult: %o\", secondStepResult);\n\n let secondStepLzMsgFeeUsd = secondStepResult?.fees?.nativeFeeUsd || \"0\";\n let secondStepLzMsgFee = secondStepResult?.fees?.nativeFee || \"0\";\n // add 120% buffer\n const usdt0MessageFeeBuffer = 1.2;\n // super.quote has already added a buffer, but here we add a bit more to further reduce the chance of failure\n secondStepLzMsgFeeUsd = Big(secondStepLzMsgFeeUsd || 0).times(1 + usdt0MessageFeeBuffer);\n secondStepLzMsgFee = Big(secondStepLzMsgFee || 0).times(1 + usdt0MessageFeeBuffer);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFeeUsd: %o\", secondStepLzMsgFeeUsd.toString());\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFee: %o\", secondStepLzMsgFee.toString());\n const secondStepLzMsgFeeAmount = Big(secondStepLzMsgFeeUsd).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n const totalAppFeesAmount = Big(secondStepGasToAmount).plus(secondStepLzMsgFeeAmount);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC totalAppFeesAmount: %o\", totalAppFeesAmount.toString());\n const oneClickFeeRatio = Big(totalAppFeesAmount)\n .div(Big(totalAppFeesAmount).plus(Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals)))\n .times(10000)\n .toFixed(0, Big.roundUp);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC oneClickFeeRatio: %o\", oneClickFeeRatio.toString());\n if (secondStepResult) {\n secondStepResult.fees.nativeFee = secondStepLzMsgFee.toString();\n secondStepResult.fees.nativeFeeUsd = secondStepLzMsgFeeUsd.toString();\n }\n\n execTime.breakpoint();\n const firstStepResult = await oneClickService.quote({\n ...params,\n amountWei: firstStepAmountWei,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n destinationAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: OneClickSwapType.Output,\n isProxy: true,\n recipient: middleChainRecipientAddress,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(firstStepResult.fees?.destinationGasFeeUsd || 0).minus(secondStepLzMsgFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...firstStepResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in secondStepResult?.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is NOT FromEthereumUSDC\");\n\n const notFromEthUSDCFinalOutputAmount = isToEthereumFrxUSD\n ? numberRemoveEndZero(Big(estimateEthereumFrxUSDAmountWei.toString()).div(10 ** toToken.decimals).toFixed(toToken.decimals, Big.roundDown))\n : secondStepResult.outputAmount;\n\n return {\n ...firstStepResult,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n permitAmountWei: firstStepResult?.quote?.amountOut,\n permitAdditionalData: {},\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: (isToEthereumFrxUSD ? 0 : secondStepResult.estimateTime) + firstStepResult.estimateTime,\n outputAmount: notFromEthUSDCFinalOutputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n toToken: params.toToken,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: params.recipient,\n depositAddress: firstStepResult.quote?.depositAddress,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isOneClickTransfer: !firstStepResult.sendParam ? {\n originAsset: fromToken.contractAddress,\n depositAddress: firstStepResult.quote?.depositAddress,\n amount: firstStepResult.quote?.amountIn,\n } : false,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 2. If is from Ethereum USDC, skip the first step\n // mint and bridge use contract directly\n if (isToEthereumFrxUSD) {\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintFrxUSD({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 3. to other chain frxUSD\n // The mintAndSend method of the _FRAXZERO_REDEEM_AND_MINT_CONTRACT contract should be called here\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintAndSendFrxUSD({\n ...params,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n originLayerzero,\n destinationLayerzero,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintAndSendFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n execTime.breakpoint();\n const secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: Big(firstStepResult.outputAmount).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown),\n });\n execTime.log(\"FraxZero.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC estimate fraxzero: %o\", secondStepResult);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...firstStepResult.fees,\n };\n for (const feeKey in secondStepResult.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const sendParamOptions = firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1];\n const fraxzeroSendParamOptions = secondStepResult.sendParam.param[secondStepResult.sendParam.param.length - 1];\n firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1] = {\n ...sendParamOptions,\n value: fraxzeroSendParamOptions.value,\n };\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To Other Chain FrxUSD\");\n\n return {\n ...firstStepResult,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: firstStepResult.estimateTime + secondStepResult.estimateTime,\n outputAmount: secondStepResult.outputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n public override async send(params: any) {\n const {\n wallet,\n sendParam,\n ...rest\n } = params;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return wallet.send(SendType.TRANSFER, sendParam.isOneClickTransfer);\n }\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public override async estimateTransaction(params: any, quoteData: any) {\n const {\n wallet,\n sendParam,\n } = quoteData;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return quoteData;\n }\n return super.estimateTransaction(params, quoteData);\n }\n\n return quoteData;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClick2FraxZeroService();\n","import { getRequest, GetStatusParams, GetStatusStableflowResponse, SendType, OneClickSwapType } from \"@stableflow/core\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\n\nexport class Usdt0OneClickService {\n public async quote(params: any) {\n const {\n dry,\n evmWallet,\n evmAddress,\n fromToken,\n toToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"Usdt0OneClickService\", logStyle: \"lime-700\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n const usdt0Params = {\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationChain: MIDDLE_TOKEN_CHAIN.chainName,\n recipient: MIDDLE_CHAIN_REFOUND_ADDRESS,\n };\n const oneClickParams = {\n ...params,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: OneClickSwapType.Flex,\n isProxy: false,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n };\n\n // First, use the middle chain arb address (our refund address) to request Usdt0 for the output amount\n execTime.breakpoint();\n let usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote: %o\", usdt0Result);\n\n if (usdt0Result.errMsg) {\n return usdt0Result;\n }\n\n // Use the output amount from Usdt0 to request near-intents for the depositAddress\n oneClickParams.amountWei = Big(usdt0Result.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0, 0);\n execTime.breakpoint();\n const oneClickResult = await oneClickService.quote(oneClickParams);\n execTime.log(\"oneClickService.quote: %o\", oneClickResult);\n\n if (oneClickResult.errMsg) {\n return oneClickResult;\n }\n\n if (!dry) {\n usdt0Params.recipient = oneClickResult.quote.depositAddress;\n\n execTime.breakpoint();\n usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote again: %o\", usdt0Result);\n }\n\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"oneClickResult: %o\", oneClickResult);\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"usdt0Result: %o\", usdt0Result);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...usdt0Result.fees,\n };\n for (const feeKey in oneClickResult.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = oneClickResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"Usdt0OneClickService.quote\");\n\n return {\n ...usdt0Result,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: oneClickResult.outputAmount,\n priceImpact: oneClickResult.priceImpact,\n exchangeRate: oneClickResult.exchangeRate,\n quoteParam: {\n ...usdt0Result.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n depositAddress: oneClickResult.quote.depositAddress,\n },\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return usdt0Service.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new Usdt0OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_LAYERZERO_EXECUTOR, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { getPrice, GetStatusParams, getRequest, GetStatusStableflowResponse, isStableToken, OneClickSwapType } from \"@stableflow/core\";\n\nexport class OneClickUsdt0Service {\n public async quote(params: any) {\n const {\n evmWallet,\n evmAddress,\n fromToken,\n prices,\n } = params;\n\n const execTime = new ExecTime({ type: \"OneClickUsdt0\", logStyle: \"lime-500\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // If it is not a USD stablecoin\n // Need to convert based on price\n let secondStepAmountWei = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0);\n if (!isStableToken(fromToken)) {\n const inputPrice = getPrice(prices, fromToken.symbol);\n const inputValue = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(inputPrice);\n secondStepAmountWei = Big(inputValue).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0);\n }\n\n // First, call the usdt0 quote method\n // Retrieve sendParam, fees, and estimated costs\n // usdt0 is the second step, so the source chain is arb\n // The refund address is middleChainRecipientAddress\n // Since the first step uses oneclick with EXACT_OUTPUT mode,\n // params.amountWei is the input amount for the second step\n const usdt0Params = {\n ...params,\n amountWei: secondStepAmountWei,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originChain: MIDDLE_TOKEN_CHAIN.chainName,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n };\n\n execTime.breakpoint();\n const usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote\");\n\n const usdt0MessageFeeBuffer = 1.2;\n usdt0Result.fees.nativeFeeUsd = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFeeUsd || 0).times(1 + usdt0MessageFeeBuffer).toFixed(20));\n usdt0Result.fees.nativeFee = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFee || 0).times(1 + usdt0MessageFeeBuffer).toFixed(fromToken.nativeToken.decimals));\n // LZ message fee to USD\n const usdt0MessageFeeUsd = usdt0Result.fees.nativeFeeUsd;\n\n if (usdt0Result.errMsg) {\n return usdt0Result;\n }\n\n // OneClick charges a proportional fee on fromToken input\n // Convert LZ message fee USD to fromToken amount so fee ratio uses consistent units\n // fee bp = fee amount / (fee amount + amount), minimum is 1, maximum is 10000\n const usdt0MessageFeeAmountInFromToken = Big(usdt0MessageFeeUsd || 0)\n .div(getPrice(prices, fromToken.symbol) || 1)\n .toFixed(fromToken.decimals);\n const fromTokenAmount = Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n const oneClickFeeRatio = Big(usdt0MessageFeeAmountInFromToken || 0)\n .div(Big(usdt0MessageFeeAmountInFromToken || 0).plus(fromTokenAmount))\n .times(10000)\n .toFixed(0, Big.roundUp);\n\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"usdt0MessageFeeAmountInFromToken: %o\", usdt0MessageFeeAmountInFromToken);\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"amount: %o\", fromTokenAmount);\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"oneClickFeeRatio: %o\", oneClickFeeRatio);\n\n if (Big(oneClickFeeRatio).gt(10000)) {\n return { errMsg: `Amount is too low, at least ${usdt0MessageFeeAmountInFromToken}` };\n }\n\n // Call oneclick quote method again\n // The destination chain is arb\n // Since the exact amount transferred by oneclick needs to be signed, EXACT_OUTPUT mode must be used\n // In EXACT_OUTPUT mode, the output amount equals the expected value\n execTime.breakpoint();\n\n const oneClickResult = await oneClickService.quote({\n ...params,\n amountWei: secondStepAmountWei,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: OneClickSwapType.Output,\n isProxy: true,\n recipient: middleChainRecipientAddress,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(oneClickResult.fees?.destinationGasFeeUsd || 0).minus(usdt0MessageFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...oneClickResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in usdt0Result.fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = usdt0Result.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const usdt0SendParam = usdt0Result.sendParam?.param?.[0];\n const usdt0MessageFee = usdt0Result.sendParam?.param?.[1];\n\n execTime.log(\"OneClickUsdt0Service.quote\");\n\n return {\n ...oneClickResult,\n needPermit: true,\n permitSpender: MIDDLE_CHAIN_LAYERZERO_EXECUTOR,\n permitToken: MIDDLE_TOKEN_CHAIN,\n permitAmountWei: oneClickResult?.quote?.amountOut,\n permitAdditionalData: {\n amount_ld: usdt0SendParam?.amountLD,\n compose_msg: usdt0SendParam?.composeMsg,\n dst_eid: usdt0SendParam?.dstEid,\n extra_options: usdt0SendParam?.extraOptions,\n min_amount_ld: usdt0SendParam?.minAmountLD?.toString(),\n oft_cmd: usdt0SendParam?.oftCmd,\n to: usdt0SendParam?.to,\n native_fee: usdt0MessageFee?.nativeFee?.toString(),\n },\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: usdt0Result.outputAmount,\n quoteParam: {\n ...oneClickResult.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n isOriginLegacy: usdt0Result.quoteParam?.isOriginLegacy,\n isDestinationLegacy: usdt0Result.quoteParam?.isDestinationLegacy,\n },\n usdt0SendParam,\n usdt0MessageFee,\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return oneClickService.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n return oneClickService.send(params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClickUsdt0Service();\n","import { getRequest, GetStatusParams, GetStatusStableflowResponse, SendType } from \"@stableflow/core\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport cctpService from \"./index\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime, OneClickSwapType, OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class CCTPOneClickService {\n public async quote(params: any) {\n const {\n dry,\n evmWallet,\n evmAddress,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"CCTPOneClickService\", logStyle: \"lime-700\", isDebug: OpenAPI.DEBUG });\n\n if (!evmWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!evmAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n const cctpParams = {\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationChain: MIDDLE_TOKEN_CHAIN.chainName,\n recipient: MIDDLE_CHAIN_REFOUND_ADDRESS,\n };\n const oneClickParams = {\n ...params,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: OneClickSwapType.Flex,\n isProxy: false,\n refundTo: evmAddress,\n wallet: evmWallet,\n };\n\n let cctpResult: any;\n let oneClickResult: any;\n\n if (!dry) {\n execTime.breakpoint();\n oneClickResult = await oneClickService.quote({\n ...oneClickParams,\n amountWei: Big(0.01).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0, 0),\n });\n execTime.log(\"CCTPOneClickService.quote\", \"oneClickService.quote: %o\", oneClickResult);\n\n if (oneClickResult.errMsg) {\n return oneClickResult;\n }\n\n cctpParams.recipient = oneClickResult.quote.depositAddress;\n execTime.breakpoint();\n cctpResult = await cctpService.quote(cctpParams);\n execTime.log(\"CCTPOneClickService.quote\", \"cctpService.quote: %o\", cctpResult);\n\n execTime.breakpoint();\n try {\n const oneClickResult2 = await oneClickService.quote({\n ...oneClickParams,\n dry: true,\n amountWei: Big(cctpResult.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0, 0),\n });\n oneClickResult.fees = oneClickResult2.fees;\n oneClickResult.outputAmount = oneClickResult2.outputAmount;\n oneClickResult.estimateTime = oneClickResult2.estimateTime;\n oneClickResult.priceImpact = oneClickResult2.priceImpact;\n oneClickResult.exchangeRate = oneClickResult2.exchangeRate;\n execTime.log(\"CCTPOneClickService.quote\", \"confirm get actual output amount result: %o\", oneClickResult2);\n } catch (err) {\n execTime.log(\"CCTPOneClickService.quote\", \"confirm get actual output amount error: %o\", err);\n }\n } else {\n execTime.breakpoint();\n cctpResult = await cctpService.quote(cctpParams);\n execTime.log(\"CCTPOneClickService.quote\", \"cctpService.quote dry: %o\", cctpResult);\n\n if (cctpResult.errMsg) {\n return cctpResult;\n }\n\n oneClickParams.amountWei = Big(cctpResult.outputAmount || 0).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0, 0);\n execTime.breakpoint();\n oneClickResult = await oneClickService.quote(oneClickParams);\n execTime.log(\"CCTPOneClickService.quote\", \"oneClickService.quote: %o\", oneClickResult);\n }\n\n if (oneClickResult.errMsg) {\n return oneClickResult;\n }\n\n if (cctpResult.errMsg) {\n return cctpResult;\n }\n\n csl(\"CCTPOneClickService quote\", \"rose-600\", \"oneClickResult: %o\", oneClickResult);\n csl(\"CCTPOneClickService quote\", \"rose-600\", \"cctpResult: %o\", cctpResult);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...cctpResult.fees,\n };\n for (const feeKey in oneClickResult.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = oneClickResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (excludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"CCTPOneClickService.quote\");\n\n return {\n ...cctpResult,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: cctpResult.estimateTime + oneClickResult.estimateTime,\n outputAmount: oneClickResult.outputAmount,\n priceImpact: oneClickResult.priceImpact,\n exchangeRate: oneClickResult.exchangeRate,\n quoteParam: {\n ...cctpResult.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n depositAddress: oneClickResult.quote.depositAddress,\n },\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n return cctpService.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new CCTPOneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport cctpService from \"./index\";\nimport Big from \"big.js\";\nimport { CCTP_PROXY_RELAY_CONTRACT, MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime, OneClickSwapType, OpenAPI } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { getPrice, GetStatusParams, getRequest, GetStatusStableflowResponse, isStableToken } from \"@stableflow/core\";\n\nexport class OneClickCCTPService {\n public async quote(params: any) {\n const {\n evmWallet,\n evmAddress,\n fromToken,\n prices,\n } = params;\n\n const execTime = new ExecTime({ type: \"OneClickCCTP\", logStyle: \"lime-500\", isDebug: OpenAPI.DEBUG });\n\n if (!evmWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!evmAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n let secondStepAmountWei = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0);\n if (!isStableToken(fromToken)) {\n const inputPrice = getPrice(prices, fromToken.symbol);\n const inputValue = Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(inputPrice);\n secondStepAmountWei = Big(inputValue).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0);\n }\n\n const cctpParams = {\n ...params,\n amountWei: secondStepAmountWei,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originChain: MIDDLE_TOKEN_CHAIN.chainName,\n refundTo: MIDDLE_CHAIN_REFOUND_ADDRESS,\n wallet: evmWallet,\n };\n\n execTime.breakpoint();\n const cctpResult = await cctpService.quote(cctpParams);\n execTime.log(\"cctpService.quote\");\n\n const cctpFeeBuffer = 1.2;\n const cctpMintFeeUsd = numberRemoveEndZero(Big(cctpResult.fees?.estimateMintGasUsd || 0).times(1 + cctpFeeBuffer).toFixed(20));\n const cctpBridgeFeeUsd = numberRemoveEndZero(Big(cctpResult.fees?.bridgeFeeUsd || 0).times(1 + cctpFeeBuffer).toFixed(20));\n const cctpTotalFeeUsd = Big(cctpMintFeeUsd || 0).plus(cctpBridgeFeeUsd || 0).toFixed(20);\n\n if (cctpResult.errMsg) {\n return cctpResult;\n }\n\n const cctpFeeAmountInFromToken = Big(cctpTotalFeeUsd || 0)\n .div(getPrice(prices, fromToken.symbol) || 1)\n .toFixed(fromToken.decimals);\n const fromTokenAmount = Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n const oneClickFeeRatio = Big(cctpFeeAmountInFromToken || 0)\n .div(Big(cctpFeeAmountInFromToken || 0).plus(fromTokenAmount))\n .times(10000)\n .toFixed(0, Big.roundUp);\n\n if (Big(oneClickFeeRatio).gt(10000)) {\n return { errMsg: `Amount is too low, at least ${cctpFeeAmountInFromToken}` };\n }\n\n execTime.breakpoint();\n\n const oneClickResult = await oneClickService.quote({\n ...params,\n amountWei: secondStepAmountWei,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: OneClickSwapType.Output,\n isProxy: true,\n recipient: evmAddress,\n appFees: [\n ...(params.appFees || []),\n {\n recipient: \"reffer.near\",\n fee: +oneClickFeeRatio,\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(oneClickResult.fees?.destinationGasFeeUsd || 0).minus(cctpTotalFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...oneClickResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n estimateMintGasUsd: cctpMintFeeUsd,\n bridgeFeeUsd: cctpBridgeFeeUsd,\n };\n for (const feeKey in cctpResult.fees) {\n if ([\"estimateGasUsd\"].includes(feeKey)) {\n continue;\n }\n if (!fees[feeKey]) {\n fees[feeKey] = cctpResult.fees[feeKey];\n }\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const cctpSendParam = cctpResult.sendParam?.param;\n\n execTime.log(\"OneClickCCTPService.quote\");\n\n return {\n ...oneClickResult,\n needPermit: true,\n permitSpender: CCTP_PROXY_RELAY_CONTRACT,\n permitToken: MIDDLE_TOKEN_CHAIN,\n permitAmountWei: oneClickResult?.quote?.amountOut,\n permitAdditionalData: {\n amount_wei: cctpSendParam?.[0]?.toString(),\n charged_amount: cctpSendParam?.[1]?.toString(),\n destination_domain: cctpSendParam?.[2]?.toString(),\n mint_recipient: cctpParams.recipient,\n burn_token: cctpSendParam?.[4]?.toString(),\n destination_caller: cctpSendParam?.[5]?.toString(),\n max_fee: cctpSendParam?.[6]?.toString(),\n finality_threshold: cctpSendParam?.[7]?.toString(),\n receipt_address: params.recipient,\n source_domain: cctpResult.quoteParam?.sourceDomain,\n destination_domain_id: cctpResult.quoteParam?.destinationDomain,\n },\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: cctpResult.estimateTime + oneClickResult.estimateTime,\n outputAmount: cctpResult.outputAmount,\n needCreateTokenAccount: cctpResult.needCreateTokenAccount,\n quoteParam: {\n ...oneClickResult.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n },\n cctpSendParam,\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n return oneClickService.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n return oneClickService.send(params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClickCCTPService();\n","// native chain name\nexport const NativeChains: Record<string, string> = {\n \"Ethereum\": \"ethereum\",\n \"Arbitrum\": \"arbitrum\",\n \"BNB Chain\": \"bsc\",\n \"Base\": \"base\",\n};\n\nexport const NativeV4Routes: Record<string, { swap: string; bridge: string; }> = {\n \"Ethereum\": {\n swap: \"0x8a2ddc0461Fcf96F81a05529Bed540d4f1eb2a00\",\n bridge: \"0xceBFC5dFBD5CE21694fe2ACefa63aD6f828831d2\",\n },\n \"Arbitrum\": {\n swap: \"0x0FC85a171bD0b53BF0bBace74F04B66170Ae3eAb\",\n bridge: \"0x5E65CEa5473fC8977e4DfDe940B2A99a439181cA\",\n },\n \"BNB Chain\": {\n swap: \"0xF064b069Ed18Eb5c61159247C55C5af79B28a968\",\n bridge: \"0x5B933868f5e710070b146213ED2Cd71628E465C1\",\n },\n \"Base\": {\n swap: \"0xaEC634d949df14Be76dC317504C7b9a6a8A5f576\",\n bridge: \"0xA11f7CdE7402093FF4D24A91FD8cdcc8AA0c96A8\",\n },\n};\n","import { formatNumber } from \"../utils/format-number\";\nimport Big from \"big.js\";\nimport { NativeChains, NativeV4Routes } from \"./contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport class NativeService {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n fromToken,\n toToken,\n prices,\n recipient,\n slippageTolerance,\n } = params;\n\n const _quoteType = `NativeService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-600\", isDebug: OpenAPI.DEBUG });\n\n const isSwap = fromToken.chainName === toToken.chainName;\n\n let quoteUri = \"/firm-quote\";\n const quoteParams: any = {\n version: 4,\n from_address: refundTo,\n to_address: recipient,\n beneficiary_address: recipient,\n refund_to: refundTo,\n src_chain: NativeChains[fromToken.chainName],\n dst_chain: NativeChains[toToken.chainName],\n token_in: fromToken.contractAddress,\n token_out: toToken.contractAddress,\n amount_wei: amountWei,\n expiry_time: 90, // 90 seconds\n timeout_millis: 3000, // 3 seconds\n slippage: slippageTolerance,\n allow_multihop: true\n };\n\n if (dry) {\n quoteUri = \"/indicative-quote\";\n }\n\n if (!isSwap) {\n quoteUri = `/bridge${quoteUri}`;\n }\n\n execTime.breakpoint();\n const response: any = await getRequest(`/v0${quoteUri}`, quoteParams);\n execTime.log(\"Native API, response: %o\", response);\n\n if (!response?.success) {\n let errorMessage = response?.message || \"Native quote failed\";\n // requested amount smaller than token in minimum wei [18446744073709551615]\n if (errorMessage.includes(\"requested amount smaller than token in minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** fromToken.decimals);\n errorMessage = `Amount is too low, at least ${formatNumber(minAmount, fromToken.decimals, true)} ${fromToken.symbol}`;\n }\n }\n if (errorMessage.includes(\"requested amount smaller than token out minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** toToken.decimals);\n errorMessage = `Amount is too low. A minimum of ${formatNumber(minAmount, toToken.decimals, true)} ${toToken.symbol} must be output.`;\n }\n }\n throw new Error(errorMessage);\n }\n\n execTime.breakpoint();\n const result = await wallet.quote(Service.Native, {\n ...params,\n ...quoteParams,\n quoteResponse: response,\n bridgeRouterAddress: isSwap ? NativeV4Routes[fromToken.chainName].swap : NativeV4Routes[fromToken.chainName].bridge,\n });\n execTime.log(\"wallet.quoteNative\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"NativeService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n refundTo,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n if (!quoteData.sendParam?.txRequest) {\n return quoteData;\n }\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n // { txRequest: {} }\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n refundTo,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n result.sendParam.txRequest.gasLimit = ett.estimateSourceGasLimit;\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n txRequest,\n } = params;\n\n const txResponse = await wallet.signer.sendTransaction({\n to: txRequest.target,\n data: txRequest.calldata,\n value: txRequest.value,\n gasLimit: txRequest.gasLimit,\n });\n\n // wait for tx to be mined\n await txResponse.wait();\n\n return txResponse.hash;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new NativeService();\n","import oneClickService from \"./oneclick\";\nimport usdt0Service from \"./usdt0\";\nimport cctpService from \"./cctp\";\nimport fraxzeroService from \"./fraxzero\";\nimport fraxZeroOneClickService from \"./fraxzero/to-oneclick\";\nimport oneClickFraxZeroService from \"./fraxzero/from-oneclick\";\nimport usdt0OneClickService from \"./usdt0/to-oneclick\";\nimport oneClickUsdt0Service from \"./usdt0/from-oneclick\";\nimport cctpOneClickService from \"./cctp/to-oneclick\";\nimport oneClickCCTPService from \"./cctp/from-oneclick\";\nimport nativeService from \"./native\";\nimport { Service } from \"@stableflow/core\";\n\nexport const ServiceMap: Record<Service, any> = {\n [Service.OneClick]: oneClickService,\n [Service.Usdt0]: usdt0Service,\n [Service.CCTP]: cctpService,\n [Service.FraxZero]: fraxzeroService,\n [Service.FraxZeroOneClick]: fraxZeroOneClickService,\n [Service.OneClickFraxZero]: oneClickFraxZeroService,\n [Service.Usdt0OneClick]: usdt0OneClickService,\n [Service.OneClickUsdt0]: oneClickUsdt0Service,\n [Service.CCTPOneClick]: cctpOneClickService,\n [Service.OneClickCCTP]: oneClickCCTPService,\n [Service.Native]: nativeService,\n};\n","import { ethers } from \"ethers\";\nimport { erc20Abi, Service, type TokenConfig } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { getQuoteModes } from \"./utils\";\n\n/**\n * Serializable, unsigned EVM transaction data.\n *\n * This is what an API-driven custody integrator (e.g. an MPC wallet such as\n * Fireblocks) receives. Stableflow builds the calldata; the integrator signs\n * and broadcasts it through their own infrastructure, then reports the\n * resulting hash back via `BridgeSFA.report`.\n */\nexport interface EvmTxData {\n chainId: number;\n from: string;\n to: string;\n /** Hex-encoded calldata. `0x` for a plain native-token transfer. */\n data: string;\n /** Native token amount in wei, as a decimal string. */\n value: string;\n /** Optional gas limit as a decimal string. */\n gasLimit?: string;\n}\n\n/**\n * EIP-712 typed data for an ERC20 `Permit`, returned unsigned so an external\n * signer (MPC/Fireblocks) can produce the signature. Nothing is signed or\n * verified inside the SDK for this payload.\n */\nexport interface PermitTypedData {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: Record<string, Array<{ name: string; type: string }>>;\n values: {\n owner: string;\n spender: string;\n value: string;\n nonce: string;\n deadline: number;\n };\n deadline: number;\n nonce: number;\n token: string;\n spender: string;\n owner: string;\n}\n\n/**\n * Result of `BridgeSFA.buildTransaction`.\n *\n * Depending on the route, the integrator may need to: broadcast `approveTx`\n * (optionally `approveResetTx` first on Ethereum), sign `permitTypedData`,\n * and always broadcast the main `tx`. See `BridgeSFA.buildTransaction`.\n */\nexport interface BuildTransactionResult {\n chainId: number;\n from: string;\n /** Present when `quote.needApprove === true`. */\n approveTx?: EvmTxData;\n /**\n * Present when `quote.needApprove === true` and the source chain is Ethereum.\n * Some Ethereum tokens (e.g. USDT) require resetting the allowance to 0\n * before setting a new non-zero allowance.\n */\n approveResetTx?: EvmTxData;\n /** Present when `quote.needPermit === true`. Must be signed off-chain. */\n permitTypedData?: PermitTypedData;\n /** The main source-chain transaction to sign and broadcast. */\n tx: EvmTxData;\n}\n\nconst OVERRIDE_KEYS = new Set([\n \"value\",\n \"gasLimit\",\n \"gasPrice\",\n \"maxFeePerGas\",\n \"maxPriorityFeePerGas\",\n \"nonce\",\n \"from\",\n \"type\",\n \"accessList\",\n \"chainId\",\n \"customData\",\n \"blockTag\",\n]);\n\nconst toDecimalString = (v: unknown): string => {\n if (v === undefined || v === null) {\n return \"0\";\n }\n if (typeof v === \"bigint\") {\n return v.toString();\n }\n if (typeof v === \"number\") {\n return Math.trunc(v).toString();\n }\n return String(v);\n};\n\n/**\n * EVM-only guard. Non-EVM chains have very different transaction / message\n * shapes and are intentionally not supported by the API-driven flow yet.\n *\n * TODO(non-evm): implement per-chain unsigned transaction / message builders\n * for Solana, Tron, Sui, Aptos, Near and Ton so MPC integrators can sign them\n * through their own infrastructure.\n */\nconst assertEvm = (token: TokenConfig | undefined): void => {\n if (!token || (token as any).chainType !== \"evm\") {\n throw new Error(\"API-driven custody currently supports EVM chains only\");\n }\n};\n\nconst getSendAmountWei = (serviceType: Service, quote: any): string => {\n const { isExactOutput } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n if (isExactOutput) {\n return quote?.quote?.amountIn;\n }\n return quote?.quoteParam?.amountWei;\n};\n\n/**\n * Encode an EVM `{ contract, method, param }` send payload (as produced by\n * `@stableflow/wallet-evm`) into serializable calldata WITHOUT a signer.\n *\n * The last element of `param` is treated as an ethers overrides object\n * (`{ value, gasLimit, ... }`) when all of its keys are known override keys.\n */\nconst encodeContractCall = (\n sendParam: { contract: any; method: string; param: any[] }\n): Omit<EvmTxData, \"chainId\" | \"from\"> => {\n const { contract, method, param } = sendParam;\n\n if (!contract?.interface || contract?.target === undefined) {\n throw new Error(\"Invalid sendParam: missing contract interface/target\");\n }\n\n const to = typeof contract.target === \"string\"\n ? contract.target\n : String(contract.target);\n\n let args: any[] = Array.isArray(param) ? param : [];\n let value: unknown;\n let gasLimit: unknown;\n\n if (args.length > 0) {\n const last = args[args.length - 1];\n const isOverride =\n last !== null &&\n typeof last === \"object\" &&\n !Array.isArray(last) &&\n Object.keys(last).length > 0 &&\n Object.keys(last).every((k) => OVERRIDE_KEYS.has(k));\n if (isOverride) {\n args = args.slice(0, -1);\n value = (last as any).value;\n gasLimit = (last as any).gasLimit;\n }\n }\n\n const data = contract.interface.encodeFunctionData(method, args);\n\n return {\n to,\n data,\n value: toDecimalString(value),\n gasLimit: gasLimit === undefined || gasLimit === null ? undefined : toDecimalString(gasLimit),\n };\n};\n\n/**\n * Build a plain token transfer (OneClick \"simple\" deposit path with no proxy):\n * ERC20 `transfer(depositAddress, amountWei)` or a native-token transfer.\n */\nconst buildTransferTx = (params: {\n chainId: number;\n from: string;\n fromToken: TokenConfig;\n depositAddress: string;\n amountWei: string;\n}): EvmTxData => {\n const { chainId, from, fromToken, depositAddress, amountWei } = params;\n\n if (!depositAddress) {\n throw new Error(\"Quote has no depositAddress to build transfer transaction\");\n }\n\n if (fromToken.contractAddress === \"eth\") {\n return {\n chainId,\n from,\n to: depositAddress,\n data: \"0x\",\n value: toDecimalString(amountWei),\n };\n }\n\n const iface = new ethers.Interface(erc20Abi as any);\n const data = iface.encodeFunctionData(\"transfer\", [depositAddress, amountWei]);\n\n return {\n chainId,\n from,\n to: fromToken.contractAddress,\n data,\n value: \"0\",\n };\n};\n\n/**\n * Build the main unsigned source-chain transaction from a quote, mirroring the\n * branching in `BridgeSFA.send` but producing serializable calldata instead of\n * signing/broadcasting.\n */\nexport const buildSendTx = (serviceType: Service, quote: any): EvmTxData => {\n const fromToken: TokenConfig = quote?.quoteParam?.fromToken;\n assertEvm(fromToken);\n\n const chainId = fromToken.chainId as number;\n const from = quote?.quoteParam?.refundTo;\n const sendParam = quote?.sendParam;\n\n // Native service already produces a serializable { target, calldata, value, gasLimit }.\n if (sendParam?.txRequest) {\n const txRequest = sendParam.txRequest;\n return {\n chainId,\n from,\n to: txRequest.target,\n data: txRequest.calldata,\n value: toDecimalString(txRequest.value),\n gasLimit: txRequest.gasLimit === undefined || txRequest.gasLimit === null\n ? undefined\n : toDecimalString(txRequest.gasLimit),\n };\n }\n\n const { isOneClickService } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n if (isOneClickService) {\n // Proxy path -> contract call; simple path -> plain transfer to depositAddress.\n if (sendParam) {\n return { chainId, from, ...encodeContractCall(sendParam) };\n }\n return buildTransferTx({\n chainId,\n from,\n fromToken,\n depositAddress: quote?.quote?.depositAddress,\n amountWei: getSendAmountWei(serviceType, quote),\n });\n }\n\n if (!sendParam) {\n throw new Error(\"Quote has no sendParam to build transaction\");\n }\n\n return { chainId, from, ...encodeContractCall(sendParam) };\n};\n\n/**\n * Build the ERC20 approve transaction(s) for a quote that requires approval.\n * On Ethereum an additional `approveResetTx` (approve 0) is returned so the\n * integrator can reset a stale allowance before setting a new one.\n */\nexport const buildApproveTx = (\n serviceType: Service,\n quote: any\n): { approveTx?: EvmTxData; approveResetTx?: EvmTxData } => {\n if (!quote?.needApprove) {\n return {};\n }\n\n const fromToken: TokenConfig = quote?.quoteParam?.fromToken;\n assertEvm(fromToken);\n\n if (fromToken.contractAddress === \"eth\") {\n // Native token needs no approval.\n return {};\n }\n\n const chainId = fromToken.chainId as number;\n const from = quote?.quoteParam?.refundTo;\n const spender = quote?.approveSpender;\n if (!spender) {\n throw new Error(\"Quote requires approval but has no approveSpender\");\n }\n\n const amountWei = getSendAmountWei(serviceType, quote);\n const iface = new ethers.Interface(erc20Abi as any);\n\n const approveTx: EvmTxData = {\n chainId,\n from,\n to: fromToken.contractAddress,\n data: iface.encodeFunctionData(\"approve\", [spender, amountWei]),\n value: \"0\",\n };\n\n const result: { approveTx?: EvmTxData; approveResetTx?: EvmTxData } = { approveTx };\n\n if (fromToken.chainName === \"Ethereum\") {\n result.approveResetTx = {\n chainId,\n from,\n to: fromToken.contractAddress,\n data: iface.encodeFunctionData(\"approve\", [spender, \"0\"]),\n value: \"0\",\n };\n }\n\n return result;\n};\n\n/**\n * Build the EIP-712 `Permit` typed data for a permit-required route, returned\n * unsigned. The integrator signs it with their MPC/Fireblocks signer, splits\n * the signature into `v/r/s`, and passes the assembled `permitSignature` to\n * `BridgeSFA.report`.\n */\nexport const buildPermitTypedData = async (params: {\n permitToken: TokenConfig;\n permitAmountWei: string;\n permitSpender: string;\n owner: string;\n}): Promise<PermitTypedData> => {\n const { permitToken, permitAmountWei, permitSpender, owner } = params;\n assertEvm(permitToken);\n\n if (!owner) {\n throw new Error(\"buildPermitTypedData requires the permit owner address\");\n }\n\n const provider = evmRpcFallbackProvider(permitToken);\n const erc20 = new ethers.Contract(permitToken.contractAddress, erc20Abi as any, provider);\n\n const [nonce, name] = await Promise.all([\n erc20.nonces(owner),\n erc20.name(),\n ]);\n\n // Mirror @stableflow/wallet-evm signTypedData: USDC uses version \"2\".\n const version = permitToken.symbol === \"USDC\" ? \"2\" : \"1\";\n const deadline = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 3;\n\n const domain = {\n name,\n version,\n chainId: Number(permitToken.chainId),\n verifyingContract: permitToken.contractAddress,\n };\n\n const types = {\n Permit: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n };\n\n const values = {\n owner,\n spender: permitSpender,\n value: toDecimalString(permitAmountWei),\n nonce: nonce.toString(),\n deadline,\n };\n\n return {\n domain,\n types,\n values,\n deadline,\n nonce: Number(nonce),\n token: permitToken.contractAddress,\n spender: permitSpender,\n owner,\n };\n};\n","import type { GetStatusParams, SubmitDepositTxResponse } from '@stableflow/core';\nimport {\n OpenAPI,\n Service,\n ServiceBackend,\n OneClickSwapType,\n TransactionStatus,\n tokens,\n type TokenConfig,\n type WalletConfig,\n getRouteStatus,\n Csl,\n CancelablePromise,\n StableflowStatus,\n LayerZeroStatus,\n OneClickStatus,\n postRequest,\n getPrices,\n} from '@stableflow/core';\nimport Big from 'big.js';\nimport { ServiceMap } from './service-map';\nimport { formatQuoteError, getQuoteModes } from './utils';\nimport {\n buildApproveTx,\n buildPermitTypedData,\n buildSendTx,\n type BuildTransactionResult,\n} from './tx-builder';\n\n/**\n * Normalized ERC20 permit signature passed to `BridgeSFA.send` / `BridgeSFA.report`\n * when a route requires a permit (`quote.needPermit === true`).\n */\nexport interface PermitSignature {\n amount: string;\n deadline: number;\n nonce: number;\n owner: string;\n r: string;\n s: string;\n v: 27 | 28;\n}\n\nexport interface GetAllQuoteParams {\n singleService?: Service;\n disabledServices?: Service[];\n dry?: boolean;\n /**\n * @deprecated The SDK now fetches trusted token prices internally. Any value\n * passed here is ignored and overridden by the built-in price source.\n */\n prices?: Record<string, string>;\n fromToken: TokenConfig;\n toToken: TokenConfig;\n wallet: WalletConfig;\n evmWallet?: WalletConfig | null;\n evmAddress?: string | null;\n recipient: string;\n refundTo: string;\n amountWei: string;\n slippageTolerance: number;\n minInputAmount?: string;\n /** @deprecated Please migrate to oneclickParams */\n appFees?: { recipient: string; fee: number; }[];\n oneclickParams?: {\n appFees?: { recipient: string; fee: number; }[];\n swapType?: OneClickSwapType;\n isProxy?: boolean;\n };\n}\n\nconst submitOthersTx = (\n requestBody: {\n address: string;\n amount?: string;\n deposit_address: string;\n destination_domain_id?: number;\n fee?: string;\n project: \"nearintents\" | \"layerzero\" | \"cctp\";\n receive_address: string;\n source_domain_id?: number;\n out_amount?: string;\n from_chain?: string;\n symbol?: string;\n to_chain?: string;\n to_symbol?: string;\n tx_hash?: string;\n layer_zero_permit?: unknown;\n frax_zero_permit?: unknown;\n cctp_permit?: unknown;\n },\n): CancelablePromise<SubmitDepositTxResponse> => {\n return postRequest('/v0/trade/add', requestBody);\n};\n\n/**\n * Full cross-chain bridge API (multi-route quote, send, status).\n * Install `@stableflow/bridges` alongside `@stableflow/core`.\n */\nexport class BridgeSFA {\n public static async getAllQuote(params: GetAllQuoteParams): Promise<Array<{ serviceType: Service; quote?: any; error?: string }>> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"BridgeSFA.getAllQuote\", \"blue-400\", \"params: %o\", params);\n\n const results: Array<{ serviceType: Service; quote?: any; error?: string }> = [];\n\n let { minInputAmount = \"1\", disabledServices } = params;\n if (Big(minInputAmount).lte(0)) {\n minInputAmount = \"1\";\n }\n\n if (\n !params.fromToken\n || !params.fromToken.contractAddress\n || !params.toToken\n || !params.toToken.contractAddress\n || !params.refundTo\n || !params.recipient\n || !params.amountWei\n || Big(params.amountWei).lte(minInputAmount)\n ) {\n throw new Error('Invalid parameters');\n }\n\n // Always use trusted prices fetched by the SDK. Any caller-supplied\n // `params.prices` is ignored/overridden to prevent wrong prices from\n // causing incorrect appFees and on-chain losses.\n params.prices = await getPrices();\n\n const formatQuoteParams = (service: Service) => {\n const _params: any = {\n dry: params.dry,\n amountWei: params.amountWei,\n refundTo: params.refundTo || \"\",\n recipient: params.recipient,\n wallet: params.wallet,\n fromToken: params.fromToken,\n toToken: params.toToken,\n prices: params.prices,\n slippageTolerance: params.slippageTolerance,\n evmWallet: params.evmWallet,\n evmAddress: params.evmAddress,\n };\n\n if (([\n Service.OneClick,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0,\n Service.CCTPOneClick,\n Service.OneClickCCTP,\n Service.FraxZeroOneClick,\n Service.OneClickFraxZero,\n ] as Service[]).includes(service)) {\n // _params.slippageTolerance = params.slippageTolerance * 100;\n _params.originAsset = params.fromToken.assetId;\n _params.destinationAsset = params.toToken.assetId;\n _params.refundType = \"ORIGIN_CHAIN\";\n _params.appFees = params.oneclickParams?.appFees || params.appFees;\n _params.swapType = params.oneclickParams?.swapType;\n _params.isProxy = params.oneclickParams?.isProxy;\n }\n if (([\n Service.Usdt0,\n Service.CCTP,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0,\n Service.CCTPOneClick,\n Service.OneClickCCTP,\n ] as Service[]).includes(service)) {\n _params.originChain = params.fromToken.chainName;\n _params.destinationChain = params.toToken.chainName;\n }\n return _params;\n };\n\n const fromToken = tokens.find(token => token.contractAddress.toLowerCase() === params.fromToken.contractAddress.toLowerCase());\n const toToken = tokens.find(token => token.contractAddress.toLowerCase() === params.toToken.contractAddress.toLowerCase());\n\n if (!fromToken || !toToken) {\n throw new Error('Token pair not supported');\n }\n\n const isFromUsdt = [\"USDT\", \"USD₮0\"].includes(fromToken.symbol);\n const isToUsdt = [\"USDT\", \"USD₮0\"].includes(toToken.symbol);\n const isFromUsdc = [\"USDC\"].includes(fromToken.symbol);\n const isToUsdc = [\"USDC\"].includes(toToken.symbol);\n\n const quoteServices: any = [];\n const pushQuoteService = (_service: Service) => {\n const serviceStatus = getRouteStatus(_service, disabledServices);\n if (serviceStatus.disabled) {\n return;\n }\n const quoteParams = formatQuoteParams(_service);\n csl(\"BridgeSFA.getAllQuote\", \"blue-400\", \"%s quoteParams: %o\", _service, quoteParams);\n quoteServices.push({\n service: _service,\n quote: () => {\n return ServiceMap[_service].quote(quoteParams);\n },\n });\n };\n\n for (const serviceType of Object.values(Service)) {\n if (\n fromToken.services.includes(serviceType)\n && toToken.services.includes(serviceType)\n ) {\n pushQuoteService(serviceType);\n }\n }\n\n if (\n fromToken.services.includes(Service.Usdt0)\n && toToken.services.includes(Service.OneClick)\n && fromToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (toToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.Usdt0OneClick);\n }\n } else {\n pushQuoteService(Service.Usdt0OneClick);\n }\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.Usdt0)\n && toToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (fromToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.OneClickUsdt0);\n }\n } else {\n pushQuoteService(Service.OneClickUsdt0);\n }\n }\n\n if (\n fromToken.services.includes(Service.FraxZero)\n && toToken.services.includes(Service.OneClick)\n ) {\n pushQuoteService(Service.FraxZeroOneClick);\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.FraxZero)\n ) {\n pushQuoteService(Service.OneClickFraxZero);\n }\n\n if (\n fromToken.services.includes(Service.CCTP)\n && toToken.services.includes(Service.OneClick)\n && fromToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdc && isToUsdc) {\n if (toToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.CCTPOneClick);\n }\n } else {\n pushQuoteService(Service.CCTPOneClick);\n }\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.CCTP)\n && toToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdc && isToUsdc) {\n if (fromToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.OneClickCCTP);\n }\n } else {\n pushQuoteService(Service.OneClickCCTP);\n }\n }\n\n if (params.singleService) {\n const quoteService = quoteServices.find((service: any) => service.service === params.singleService);\n if (quoteService) {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n }\n return results;\n }\n\n csl(\"BridgeSFA.getAllQuote\", \"blue-400\", \"quoteServices: %o\", quoteServices);\n\n const promises: Promise<void>[] = [];\n for (const quoteService of quoteServices) {\n const promise = (async () => {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n })();\n promises.push(promise);\n }\n await Promise.allSettled(promises);\n return results;\n }\n\n public static async send(\n serviceType: Service,\n params: {\n wallet: any;\n quote: any;\n permitSignature?: PermitSignature;\n }\n ): Promise<string> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.send) {\n throw new Error(`Service ${serviceType} does not support send method`);\n }\n\n const { quote, wallet, permitSignature } = params;\n\n if (!quote) {\n throw new Error('Quote data is required');\n }\n\n if (quote.needPermit) {\n if (!permitSignature) {\n throw new Error('Permit signature is required');\n }\n }\n\n const sendParams: any = {\n wallet,\n };\n\n const { isExactOutput, isOneClickService } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n const fromToken = quote.quoteParam.fromToken;\n const depositAddress = quote.quote?.depositAddress;\n const sendParam = quote.sendParam;\n\n let _amountWei = quote.quoteParam?.amountWei;\n if (isExactOutput) {\n _amountWei = quote.quote?.amountIn;\n }\n\n if (isOneClickService) {\n sendParams.sendParam = sendParam;\n sendParams.fromToken = fromToken;\n sendParams.depositAddress = depositAddress;\n sendParams.amountWei = _amountWei;\n } else {\n for (const key in sendParam) {\n sendParams[key] = sendParam[key];\n }\n }\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"sendParams: %o\", sendParams);\n\n const txhash = await service.send(sendParams);\n\n try {\n const reportData = BridgeSFA.buildReportData(serviceType, {\n quote,\n txhash,\n permitSignature,\n });\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"reportData: %o\", reportData);\n\n submitOthersTx(reportData);\n } catch (error) {\n csl(\"BridgeSFA.send\", \"red-400\", \"report tx failed: %o\", error);\n }\n\n return txhash;\n }\n\n /**\n * Build the backend report payload for a submitted source-chain transaction.\n * Shared by `send` (fire-and-forget) and `report` (awaited).\n */\n private static buildReportData(\n serviceType: Service,\n params: {\n quote: any;\n txhash: string;\n permitSignature?: PermitSignature;\n }\n ): Parameters<typeof submitOthersTx>[0] {\n const { quote, txhash, permitSignature } = params;\n\n const { isExactOutput, isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n const fromToken = quote.quoteParam.fromToken;\n const toToken = quote.quoteParam.toToken;\n\n let _amountWei = quote.quoteParam?.amountWei;\n if (isExactOutput) {\n _amountWei = quote.quote?.amountIn;\n }\n\n const reportData: any = {\n project: ServiceBackend[serviceType] as any,\n address: quote.quoteParam?.refundTo,\n amount: isExactOutput ? quote.quote.amountInFormatted : Big(_amountWei || 0).div(10 ** (fromToken?.decimals || 6)).toFixed(fromToken?.decimals || 6, 0),\n out_amount: quote.outputAmount,\n deposit_address: isOneClickService ? quote.quote?.depositAddress : \"\",\n receive_address: quote.quoteParam?.recipient,\n from_chain: fromToken.blockchain,\n symbol: /^USD₮0$/i.test(fromToken.symbol) ? \"USDT\" : fromToken.symbol,\n to_chain: toToken.blockchain,\n to_symbol: /^USD₮0$/i.test(toToken.symbol) ? \"USDT\" : toToken.symbol,\n tx_hash: \"\",\n };\n\n if (permitSignature) {\n if (([Service.OneClickUsdt0] as Service[]).includes(serviceType)) {\n reportData.layer_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n if (([Service.OneClickCCTP] as Service[]).includes(serviceType)) {\n reportData.cctp_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n if (([Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n reportData.frax_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n }\n\n reportData.tx_hash = txhash;\n\n let _depositAddress = txhash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote.quoteParam?.depositAddress || txhash;\n }\n if (!reportData.deposit_address) {\n reportData.deposit_address = _depositAddress;\n }\n\n if (serviceType === Service.Native) {\n const quoteIds = quote?.orders?.map?.((order: any) => order.quoteId) || [];\n reportData.quoteIds = quoteIds;\n }\n\n return reportData;\n }\n\n /**\n * API-driven custody: build the serializable, unsigned transaction data for a\n * route WITHOUT a signer. Intended for MPC wallets (e.g. Fireblocks) that sign\n * and broadcast through their own infrastructure.\n *\n * Returns any required `approveTx` (and `approveResetTx` on Ethereum), the\n * `permitTypedData` to sign off-chain when `quote.needPermit`, and the main\n * `tx`. After the integrator broadcasts `tx`, call `BridgeSFA.report` with the\n * resulting hash (and the permit signature, if any) so StableFlow can execute\n * the destination leg.\n *\n * EVM only for now; non-EVM source chains throw.\n */\n public static async buildTransaction(\n serviceType: Service,\n params: { quote: any }\n ): Promise<BuildTransactionResult> {\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n const { quote } = params;\n if (!quote) {\n throw new Error('Quote data is required');\n }\n\n const tx = buildSendTx(serviceType, quote);\n const { approveTx, approveResetTx } = buildApproveTx(serviceType, quote);\n\n const result: BuildTransactionResult = {\n chainId: tx.chainId,\n from: tx.from,\n tx,\n };\n\n if (approveTx) {\n result.approveTx = approveTx;\n }\n if (approveResetTx) {\n result.approveResetTx = approveResetTx;\n }\n\n if (quote.needPermit) {\n result.permitTypedData = await buildPermitTypedData({\n permitToken: quote.permitToken,\n permitAmountWei: quote.permitAmountWei,\n permitSpender: quote.permitSpender,\n owner: quote.quoteParam?.evmAddress || quote.quoteParam?.refundTo,\n });\n }\n\n return result;\n }\n\n /**\n * API-driven custody: report an externally signed & broadcast source-chain\n * transaction back to StableFlow so it can track and execute the destination\n * leg. Pair with `BridgeSFA.buildTransaction`.\n *\n * When `quote.needPermit === true`, `permitSignature` is required.\n */\n public static report(\n serviceType: Service,\n params: {\n quote: any;\n hash: string;\n permitSignature?: PermitSignature;\n }\n ): CancelablePromise<SubmitDepositTxResponse> {\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n const { quote, hash, permitSignature } = params;\n if (!quote) {\n throw new Error('Quote data is required');\n }\n if (!hash) {\n throw new Error('Transaction hash is required');\n }\n if (quote.needPermit && !permitSignature) {\n throw new Error('Permit signature is required');\n }\n\n const reportData = BridgeSFA.buildReportData(serviceType, {\n quote,\n txhash: hash,\n permitSignature,\n });\n\n return submitOthersTx(reportData);\n }\n\n public static async getStatus(\n serviceType: Service,\n params: {\n quote: any;\n hash: string;\n }\n ): Promise<{ status: TransactionStatus; toChainTxHash?: string; }> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.getStatus) {\n throw new Error(`Service ${serviceType} does not support getStatus method`);\n }\n\n const { quote, hash } = params;\n\n const getStatusParams: GetStatusParams = {};\n\n const { isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n getStatusParams.depositAddress = isOneClickService ? quote.quote.depositAddress : \"\";\n getStatusParams.hash = hash;\n\n if (!isOneClickService) {\n let _depositAddress = hash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote?.quoteParam?.depositAddress || hash;\n }\n getStatusParams.depositAddress = _depositAddress;\n }\n\n csl(\"getStatus\", \"fuchsia-500\", \"getStatusParams: %o\", getStatusParams);\n\n const result: { status: TransactionStatus; toChainTxHash?: string; } = { status: TransactionStatus.Pending };\n const response = await service.getStatus(getStatusParams);\n\n if (([Service.CCTP, Service.Native] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.Usdt0] as Service[]).includes(serviceType)) {\n const _result = response?.data?.[0];\n const status = _result?.status?.name;\n if (status === LayerZeroStatus.DELIVERED) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.destination?.tx?.txHash;\n }\n if ([LayerZeroStatus.FAILED, LayerZeroStatus.BLOCKED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClick] as Service[]).includes(serviceType)) {\n const status = response?.status;\n\n if (status === OneClickStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = response?.swapDetails?.destinationChainTxHashes?.[0]?.hash;\n }\n\n if ([OneClickStatus.REFUNDED, OneClickStatus.FAILED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClickUsdt0, Service.Usdt0OneClick, Service.CCTPOneClick, Service.OneClickCCTP, Service.FraxZero, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n return result;\n }\n}\n","import { ethers } from \"ethers\";\nimport { USDT0_CONFIG } from \"./config\";\nimport { OFT_ABI } from \"./contract\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { usdt0Chains } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const getHopMsgFee = async (params: any) => {\n const {\n sendParam,\n toToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const execTime = new ExecTime({ type: \"getHopMsgFee\", logStyle: \"lime-800\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[\"Arbitrum\"];\n const destinationLayerzero = USDT0_CONFIG[toToken.chainName];\n\n let arbitrumOft = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n arbitrumOft = originLayerzero.oftLegacy || originLayerzero.oft;\n }\n\n execTime.breakpoint();\n const provider = evmRpcFallbackProvider(usdt0Chains[\"arb\"]);\n const oftContractRead = new ethers.Contract(arbitrumOft!, OFT_ABI, provider);\n execTime.log(\"provider init\");\n\n try {\n execTime.breakpoint();\n const msgFee = await oftContractRead.quoteSend.staticCall(sendParam, false);\n execTime.log(\"quoteSend\");\n\n const [nativeFee] = msgFee;\n\n execTime.logTotal(\"getHopMsgFee\");\n\n return nativeFee * 100n / 100n;\n } catch (error) {\n csl(\"getHopMsgFee\", \"red-500\", \"getHopMsgFee failed: %o\", error);\n throw new Error(\"Quote multi hop message fee failed\");\n }\n};\n"]}
|