orbiterfin-sdk 0.1.15

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/orbiter.model.ts","../src/lib/orbiter.service.ts","../src/lib/vm-service/vm.factory.ts","../src/lib/vm-service/implement/evm.service.ts","../src/lib/vm-service/vm.service.ts","../src/abi/erc20.ts","../src/abi/orbiter.ts","../src/abi/opool.ts","../src/lib/vm-service/implement/cario.service.ts","../src/lib/vm-service/implement/imx.service.ts","../src/lib/vm-service/implement/lpr.service.ts","../src/lib/vm-service/implement/solana.service.ts","../src/lib/vm-service/implement/t.service.ts","../src/lib/vm-service/implement/zklite.service.ts","../src/lib/vm-service/implement/tron.service.ts","../src/lib/vm-service/implement/btc.service.ts","../src/lib/vm-service/implement/fuel.service.ts","../src/lib/vm-service/implement/aptos.service.ts","../src/lib/vm-service/implement/sui.service.ts","../src/lib/api-service/api.interface.ts","../src/lib/config.service.ts","../src/lib/api-service/api.service.ts","../src/lib/router.service.ts","../src/utils/tools.ts"],"sourcesContent":["export * from './lib/orbiter.model'\nexport * from './lib/orbiter.service'\nexport * from './lib/api-service/api.interface'\nexport * from './lib/api-service/api.service'\nexport * from './lib/router.service'\n","import { Token } from './api-service/api.interface'\n\nexport interface ConfigOptions {\n apiEndpoint: ENDPOINT\n dealerId?: string\n apiKey?: string\n channelId?: string\n defaultRouterType?: RouterType\n}\n\nexport enum ENDPOINT {\n TESTNET = 'https://testnet-api.orbiter.finance/sdk',\n MAINNET = 'https://api.orbiter.finance/sdk',\n}\n\nexport enum CDNENDPOINT {\n TESTNET = 'https://testnet-cdn.orbiter.finance/config',\n MAINNET = 'https://cdn.orbiter.finance/config',\n}\n\nexport interface TradePair {\n srcChainId: string\n dstChainId: string\n srcTokenSymbol: string\n dstTokenSymbol: string\n routerType?: RouterType\n}\n\nexport enum RouterType {\n EOA = 'EOA',\n CONTRACT = 'CONTRACT',\n}\n\nexport interface Chain {\n id: string\n name: string\n}\n\nexport interface TransactionParams {\n routerType: RouterType\n srcAddress: string\n dstAddress: string\n value: string\n amount: string\n raw: unknown\n simulationAmountPlusWithHoldingFee?: SimulationAmountPlusWithHoldingFeeType\n}\n\nexport interface SimulationAmountPlusWithHoldingFeeType {\n sendAmount: {\n amount: string\n isNativeCurrency: boolean\n token?: Token\n }\n withholdingFee: {\n amount: string\n isNativeCurrency: boolean\n token?: Token\n }\n isOPool: boolean\n type: string\n opool: any\n}\n\nexport interface ApproveParams {\n ownerAddress: string\n spenderAddress: string\n value: string\n amount: string\n raw: unknown\n}\n\nexport interface DynamicPointParams {\n chainId: string\n symbol: string\n withholdingFee: string\n tradeFee: string\n}\n","import { VMType } from '@orbiter-finance/vm-core'\nimport { VMServiceFactory } from './vm-service/vm.factory'\nimport { ConfigService } from './config.service'\nimport {\n Token,\n Transaction,\n ChainConfig,\n RouterConfig,\n TxType,\n TxHistoryItem,\n APIPageResponse,\n} from './api-service/api.interface'\nimport { ApiService } from './api-service/api.service'\nimport { Chain, ConfigOptions, TradePair, RouterType, DynamicPointParams } from './orbiter.model'\nimport { Router } from './router.service'\nimport { getTonOrbiterHash } from '../utils/tools'\n\nexport class OrbiterClient {\n private readonly _config: ConfigOptions\n private readonly _apiService: ApiService\n private readonly _configService: ConfigService\n private readonly _VMServiceFactory: VMServiceFactory\n private readonly _defaultRouterType: RouterType\n\n constructor(config: ConfigOptions) {\n this._config = config\n this._apiService = new ApiService(this._config.apiEndpoint, this._config.apiKey, this._config.channelId)\n this._configService = new ConfigService(this._apiService, config)\n this._VMServiceFactory = new VMServiceFactory(this._configService)\n this._defaultRouterType = this._config.defaultRouterType || RouterType.CONTRACT\n }\n\n async init() {\n await this._configService.initConfig()\n }\n\n static async create(config: ConfigOptions): Promise<OrbiterClient> {\n const client = new OrbiterClient(config)\n await client.init()\n return client\n }\n\n createRouter(tradePair: TradePair): Router {\n const srcChainConfig = this._configService.getChainConfigById(tradePair.srcChainId)\n if (!srcChainConfig) {\n throw new Error(`createRouter fail, error: unavailable source chainId: ${tradePair.srcChainId}.`)\n }\n const srcVMService = this._VMServiceFactory.getVMService(srcChainConfig.vm)\n if (!srcVMService) {\n throw new Error(`createRouter fail, error: unavailable source chain vm type: ${srcChainConfig.vm}.`)\n }\n const srcToken = srcChainConfig.tokens.find((token) => {\n return token.symbol === tradePair.srcTokenSymbol\n })\n if (!srcToken) {\n throw new Error(`createRouter fail, error: unavailable source token: ${tradePair.srcTokenSymbol}.`)\n }\n const dstChainConfig = this._configService.getChainConfigById(tradePair.dstChainId)\n if (!dstChainConfig) {\n throw new Error(`createRouter fail, error: unavailable destination chainId: ${tradePair.dstChainId}.`)\n }\n const dstToken = dstChainConfig.tokens.find((token) => {\n return token.symbol === tradePair.dstTokenSymbol\n })\n if (!dstToken) {\n throw new Error(`createRouter fail, error: unavailable destination token: ${tradePair.srcTokenSymbol}.`)\n }\n const routerConfig = this._configService.getRouterConfig(tradePair)\n if (!routerConfig) {\n throw new Error(\n `createRouter fail, error: unavailable router, line: '${tradePair.srcChainId}/${tradePair.dstChainId}-${tradePair.srcTokenSymbol}/${tradePair.dstTokenSymbol}.`,\n )\n }\n\n const availableRouterTypes: RouterType[] = []\n let firstRouterType = tradePair.routerType || this._defaultRouterType\n if (this.checkTradePairType(srcChainConfig, dstChainConfig, routerConfig, firstRouterType)) {\n availableRouterTypes.push(firstRouterType)\n }\n const secondaryRouterType = firstRouterType == RouterType.EOA ? RouterType.CONTRACT : RouterType.EOA\n if (this.checkTradePairType(srcChainConfig, dstChainConfig, routerConfig, secondaryRouterType)) {\n availableRouterTypes.push(secondaryRouterType)\n }\n if (availableRouterTypes.length == 0) {\n throw new Error(\n `createRouter fail, error: no available router type, line: '${tradePair.srcChainId}/${tradePair.dstChainId}-${tradePair.srcTokenSymbol}/${tradePair.dstTokenSymbol}.`,\n )\n }\n const basePoint =\n routerConfig.point != undefined\n ? routerConfig.point.toString()\n : this._configService.getBasePointRule(tradePair.dstChainId, tradePair.dstTokenSymbol)\n const channelId = this._config.channelId?.indexOf('official-') == 0 ? undefined : this._config.channelId\n return new Router(\n srcChainConfig,\n srcToken,\n dstChainConfig,\n dstToken,\n basePoint,\n srcVMService,\n routerConfig,\n availableRouterTypes,\n channelId,\n )\n }\n\n private checkTradePairType(\n srcChainConfig: ChainConfig,\n dstChainConfig: ChainConfig,\n routerConfig: RouterConfig,\n routerType: RouterType,\n ) {\n if (routerType == RouterType.EOA) {\n if (\n srcChainConfig.vm == dstChainConfig.vm ||\n (srcChainConfig.vm == VMType.EVM &&\n [VMType.LPRVM, VMType.ZKLITEVM, VMType.ZKSPVM, VMType.IMXVM].includes(dstChainConfig.vm)) ||\n (dstChainConfig.vm == VMType.EVM &&\n [VMType.LPRVM, VMType.ZKLITEVM, VMType.ZKSPVM, VMType.IMXVM].includes(srcChainConfig.vm)) ||\n [VMType.TVM, VMType.SOLANAVM, VMType.FUELVM].includes(srcChainConfig.vm)\n ) {\n return true\n }\n } else if (routerType == RouterType.CONTRACT) {\n if (routerType == RouterType.CONTRACT && routerConfig.endpointContract) {\n return true\n }\n }\n return false\n }\n\n getAllChains(): Chain[] {\n const chainConfigs = this._configService.getChainConfigs()\n return [\n ...chainConfigs.map((chainConfig) => {\n return {\n id: chainConfig.chainId,\n name: chainConfig.name,\n }\n }),\n ]\n }\n\n getAllSymbols(): string[] {\n const chains = this.getAllChains()\n const symbols: Set<string> = new Set()\n chains.forEach((chain) => {\n const tokens = this.getAvailableTokens(chain.id)\n tokens.forEach((token) => {\n symbols.add(token.symbol)\n })\n })\n return [...symbols]\n }\n\n getChainConfig(chainId: string): ChainConfig | undefined {\n return this._configService.getChainConfigById(chainId)\n }\n\n getAvailableTokens(chainId: string): Token[] {\n const chainConfig = this._configService.getChainConfigById(chainId)\n let availableTokens: Token[] = []\n if (chainConfig) {\n const routerConfigs = this._configService.getRouterConfigs()\n const availableRouters = routerConfigs.filter((routerConfig) => {\n return routerConfig.srcChain === chainConfig.chainId\n })\n\n const availableTokenAddresses = availableRouters.map((availableRouter) => {\n return availableRouter.srcToken\n })\n\n availableTokens = chainConfig.tokens.filter((token) => {\n return availableTokenAddresses.includes(token.address)\n })\n }\n return availableTokens\n }\n\n getAllTradePairs(): TradePair[] {\n const routerConfigs = this._configService.getRouterConfigs()\n const tradePairs: TradePair[] = []\n routerConfigs.forEach((router) => {\n const srcChainConfig = this._configService?.getChainConfigById(router.srcChain)\n const dstChainConfig = this._configService?.getChainConfigById(router.tgtChain)\n if (dstChainConfig) {\n const srcToken = srcChainConfig?.tokens.find((token) => {\n return token.address === router.srcToken\n })\n const dstToken = dstChainConfig?.tokens.find((token) => {\n return token.address === router.tgtToken\n })\n\n if (srcChainConfig && dstChainConfig && srcToken && dstToken) {\n // if (srcChainConfig?.vm == dstChainConfig.vm\n // || (srcChainConfig?.vm == VMType.EVM && [VMType.LPRVM, VMType.ZKLITEVM, VMType.ZKSPVM].includes(dstChainConfig.vm))\n // || (dstChainConfig?.vm == VMType.EVM && [VMType.LPRVM, VMType.ZKLITEVM, VMType.ZKSPVM].includes(srcChainConfig.vm))\n // || [VMType.TVM, VMType.SOLANAVM, VMType.FUELVM].includes(srcChainConfig.vm)\n // ) {\n // tradePairs.push({\n // srcChainId: router.srcChain,\n // dstChainId: router.tgtChain,\n // srcTokenSymbol: srcToken.symbol,\n // dstTokenSymbol: dstToken.symbol,\n // routerType: RouterType.EOA\n // })\n // }\n // if (router.endpointContract) {\n // tradePairs.push({\n // srcChainId: router.srcChain,\n // dstChainId: router.tgtChain,\n // srcTokenSymbol: srcToken.symbol,\n // dstTokenSymbol: dstToken.symbol,\n // routerType: RouterType.CONTRACT\n // })\n // }\n tradePairs.push({\n srcChainId: router.srcChain,\n dstChainId: router.tgtChain,\n srcTokenSymbol: srcToken.symbol,\n dstTokenSymbol: dstToken.symbol,\n })\n }\n }\n })\n\n return tradePairs\n }\n\n getAvailableTradePairs(srcChainId?: string, srcTokenSymbol?: string): TradePair[] {\n const targetTradePairs: TradePair[] = this.getAllTradePairs().filter((tradePair) => {\n if (srcChainId && tradePair.srcChainId != srcChainId) {\n return false\n }\n if (srcTokenSymbol && tradePair.srcTokenSymbol != srcTokenSymbol) {\n return false\n }\n return true\n })\n\n return targetTradePairs\n }\n\n async getTransactionHistory(address: string, txType: TxType, offset: number = 0) {\n return await this._apiService.getTransactionHistory(address, txType, offset)\n }\n\n async getTransactionStatus(\n hash: string,\n chainId?: string,\n address?: string,\n value?: string,\n ): Promise<{\n chainId: string\n hash: string\n sender: string\n receiver: string\n amount: string\n symbol: string\n timestamp: string\n status: number\n opStatus: number\n targetId: string\n targetAmount: string\n targetSymbol: string\n targetChain: string\n }> {\n if (chainId?.includes('TON')) {\n // Patch: fix tonhash inconsistency issue\n try {\n hash = await getTonOrbiterHash(chainId, hash)\n } catch (error) {\n const e = error as Error\n console.error(`getTonOrbiterHash error ${e.message}`)\n }\n }\n return await this._apiService.getTransactionStatus(hash, chainId, address, value)\n }\n\n async getUserOpoint(address: string): Promise<{\n address: string\n summary: {\n [key: string]: number\n }\n points: number\n }> {\n return await this._apiService.getUserOpoint(address)\n }\n\n async getDynamicPoint(param: DynamicPointParams): Promise<string> {\n return await this._apiService.getDynamicPoint(param)\n }\n}\n","import { VMType } from \"@orbiter-finance/vm-core\";\nimport { ConfigService } from \"../config.service\";\nimport { EVMService } from \"./implement/evm.service\";\nimport { CAIROVMService } from \"./implement/cario.service\";\nimport { IMXVMService } from \"./implement/imx.service\";\nimport { LPRVMService } from \"./implement/lpr.service\";\nimport { SolanaVMService } from \"./implement/solana.service\";\nimport { TVMService } from \"./implement/t.service\";\nimport { ZKLITEVMService } from \"./implement/zklite.service\";\nimport { TRONVMService } from \"./implement/tron.service\";\nimport { BTCVMService } from \"./implement/btc.service\";\nimport { FUELVMService } from \"./implement/fuel.service\";\nimport { APTOSVMService } from \"./implement/aptos.service\";\nimport { SUIVMService } from \"./implement/sui.service\";\nimport { VMService } from \"./vm.service\";\n\nexport class VMServiceFactory {\n private _services: { [key: string]: VMService } = {};\n private configService: ConfigService;\n\n constructor(configService: ConfigService) {\n this.configService = configService;\n }\n\n getVMService(vmType: VMType): VMService | undefined {\n if (!this._services[vmType]) {\n return this.createVMService(vmType);\n } else {\n return this._services[vmType];\n }\n }\n\n createVMService(vmType: VMType): VMService | undefined {\n let service: VMService | undefined;\n switch (vmType) {\n case VMType.EVM:\n service = new EVMService(this.configService);\n break;\n case VMType.IMXVM:\n service = new IMXVMService(this.configService);\n break;\n case VMType.LPRVM:\n service = new LPRVMService(this.configService);\n break;\n case VMType.SOLANAVM:\n service = new SolanaVMService(this.configService);\n break;\n case VMType.CAIROVM:\n service = new CAIROVMService(this.configService);\n break;\n case VMType.TVM:\n service = new TVMService(this.configService);\n break;\n case VMType.ZKLITEVM:\n service = new ZKLITEVMService(this.configService);\n break;\n case VMType.TRONVM:\n service = new TRONVMService(this.configService);\n break;\n case VMType.BTCVM:\n service = new BTCVMService(this.configService);\n break; \n case VMType.FUELVM:\n service = new FUELVMService(this.configService);\n break;\n case VMType.APTOSVM: \n service = new APTOSVMService(this.configService);\n break;\n case VMType.SUIVM: \n service = new SUIVMService(this.configService);\n break;\n default:\n service = undefined;\n break;\n }\n if (service) {\n this._services[vmType] = service;\n }\n return service;\n }\n\n}","import BigNumber from 'bignumber.js'\nimport { hexlify, Interface, toUtf8Bytes, TransactionRequest } from 'ethers'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType, SimulationAmountPlusWithHoldingFeeType, TransactionParams } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\nimport { ERC20_ABI } from '../../../abi/erc20'\nimport { Orbiter_V3_ABI_EVM } from '../../../abi/orbiter'\nimport { Orbiter_OPOOL_ABI } from '../../../abi'\n\nexport class EVMService extends VMService {\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n simulationAmountPlusWithHoldingFee?: SimulationAmountPlusWithHoldingFeeType,\n ): Promise<TransactionParams> {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n if (routerType == RouterType.CONTRACT && !contractAddress) {\n throw new Error('contractAddress is required')\n }\n\n let transaction: TransactionRequest | undefined\n if (simulationAmountPlusWithHoldingFee && simulationAmountPlusWithHoldingFee?.isOPool) {\n const srcToken = simulationAmountPlusWithHoldingFee.sendAmount?.token\n const feeToken = simulationAmountPlusWithHoldingFee.withholdingFee?.token\n\n if (!srcToken || !feeToken) {\n throw new Error('srcToken not defined or feeToken not defined')\n }\n\n const bridgeAmount = new BigNumber(simulationAmountPlusWithHoldingFee.sendAmount.amount)\n .multipliedBy(10 ** srcToken.decimals)\n .toFixed(0)\n const feeAmount = new BigNumber(simulationAmountPlusWithHoldingFee.withholdingFee.amount)\n .multipliedBy(10 ** feeToken.decimals)\n .toFixed(0)\n\n let value = new BigNumber('0')\n\n if (simulationAmountPlusWithHoldingFee.sendAmount.isNativeCurrency) {\n value = value.plus(bridgeAmount)\n }\n\n if (simulationAmountPlusWithHoldingFee.withholdingFee.isNativeCurrency) {\n value = value.plus(feeAmount)\n }\n\n const _interface = new Interface(Orbiter_OPOOL_ABI)\n const recipient = makerAddress\n const data = hexlify(\n toUtf8Bytes(channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`),\n )\n const callData = _interface.encodeFunctionData('inbox', [\n recipient,\n feeToken.address,\n feeAmount,\n srcToken.address,\n bridgeAmount,\n data,\n ])\n\n transaction = {\n to: contractAddress,\n data: callData,\n value: value.toFixed(0),\n }\n } else if (routerType === RouterType.EOA && !channelId) {\n if (srcAddress !== dstAddress) {\n throw new Error(\n `EVM EOA transfer not support cross address transfer, srcAddress:${srcAddress}, dstAddress:${dstAddress}.`,\n )\n }\n if (srcToken.isNative) {\n transaction = {\n to: makerAddress,\n value: value,\n data: '0x',\n }\n } else {\n const _interface = new Interface(ERC20_ABI)\n const recipient = makerAddress\n const amount = value\n const callData = _interface.encodeFunctionData('transfer', [recipient, amount])\n transaction = {\n to: srcToken.address,\n data: callData,\n value: '0',\n }\n }\n } else if (routerType === RouterType.CONTRACT || channelId) {\n const _interface = new Interface(Orbiter_V3_ABI_EVM)\n const to = makerAddress\n let tStr = `&t=${dstAddress}`\n if (srcAddress && dstAddress && String(srcAddress).toLowerCase() === String(dstAddress).toLowerCase()) {\n tStr = ''\n }\n const data = hexlify(toUtf8Bytes(channelId ? `c=${vc}${tStr}&app=${channelId}` : `c=${vc}${tStr}`))\n if (srcToken.isNative) {\n const callData = _interface.encodeFunctionData('transfer', [to, data])\n transaction = {\n to: contractAddress,\n data: callData,\n value,\n }\n } else {\n const token = srcToken.address\n const callData = _interface.encodeFunctionData('transferToken', [token, to, value, data])\n transaction = {\n to: contractAddress,\n data: callData,\n value: '0',\n }\n }\n }\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n simulationAmountPlusWithHoldingFee,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: transaction,\n }\n }\n\n async createApprove(\n ownerAddress: string,\n spenderAddress: string,\n approveToken: Token,\n chainId: string,\n value: string,\n ) {\n const _interface = new Interface(ERC20_ABI)\n const amount = value\n const callData = _interface.encodeFunctionData('approve', [spenderAddress, amount])\n const transaction: TransactionRequest = {\n to: approveToken.address,\n data: callData,\n value: '0',\n }\n return {\n ownerAddress,\n spenderAddress,\n value,\n amount: new BigNumber(value).div(10 ** approveToken.decimals).toFixed(0),\n raw: transaction,\n }\n }\n\n async createAllowance(ownerAddress: string, spenderAddress: string, approveToken: Token, chainId: string) {\n const _interface = new Interface(ERC20_ABI)\n const callData = _interface.encodeFunctionData('allowance', [ownerAddress, spenderAddress])\n const transaction: TransactionRequest = {\n to: approveToken.address,\n data: callData,\n value: '0',\n }\n return transaction\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { Token } from '../api-service/api.interface'\nimport { ConfigService } from '../config.service'\nimport { ApproveParams, RouterType, SimulationAmountPlusWithHoldingFeeType, TransactionParams } from '../orbiter.model'\n\nexport class VMService {\n private readonly _configService: ConfigService\n\n constructor(configService: ConfigService) {\n this._configService = configService\n }\n\n isValidTransferType(routerType: RouterType): boolean {\n return true\n }\n\n getAmountWithVc(amount: string, token: Token, vc: string) {\n const value = new BigNumber(amount).multipliedBy(10 ** token.decimals).toFixed(0)\n if (value.length <= vc.length) {\n throw new Error(`value length too short`)\n }\n const header = value.slice(0, value.length - vc.length)\n const valueWithVc = header + vc\n return new BigNumber(valueWithVc).div(10 ** token.decimals).toFixed()\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n simulationAmountPlusWithHoldingFee?: SimulationAmountPlusWithHoldingFeeType,\n ext?: any,\n ): Promise<TransactionParams> {\n throw new Error(`createTransfer need implement, params: \n srcAddress: ${srcAddress}, srcToken: ${JSON.stringify(srcToken)}, dstAddress: ${dstAddress}, dstToken: ${JSON.stringify(dstToken)}, value: ${value}, vc: ${vc}, \n routerType: ${routerType}, makerAddress: ${makerAddress}, chainId: ${chainId}, contractAddress: ${contractAddress}, channelId: ${channelId}, simulationAmountPlusWithHoldingFee: ${simulationAmountPlusWithHoldingFee}`)\n }\n\n async createApprove(\n ownerAddress: string,\n spenderAddress: string,\n approveToken: Token,\n chainId: string,\n value: string,\n ): Promise<ApproveParams> {\n throw new Error(`createApprove need implement, params: \n ownerAddress: ${ownerAddress}, spenderAddress: ${spenderAddress}, approveToken: ${JSON.stringify(approveToken)}, value: ${value}, chainId: ${chainId}`)\n }\n\n async createAllowance(\n ownerAddress: string,\n spenderAddress: string,\n approveToken: Token,\n chainId: string,\n ): Promise<unknown> {\n throw new Error(`checkAllowance need implement, params: \n ownerAddress: ${ownerAddress}, spenderAddress: ${spenderAddress}, approveToken: ${JSON.stringify(approveToken)}, chainId: ${chainId}`)\n }\n}\n","const ERC20_ABI = [\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\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\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\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\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\n\n\nconst ZETA_ERC20_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"decimals_\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainid_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum CoinType\",\n \"name\": \"coinType_\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasLimit_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"systemContractAddress_\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"CallerIsNotFungibleModule\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"GasFeeTransferFailed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"LowAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"LowBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroAddress\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroGasCoin\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ZeroGasPrice\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes\",\n \"name\": \"from\",\n \"type\": \"bytes\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"gasLimit\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"UpdatedGasLimit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"protocolFlatFee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"UpdatedProtocolFlatFee\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"systemContract\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"UpdatedSystemContract\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes\",\n \"name\": \"to\",\n \"type\": \"bytes\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"gasfee\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"protocolFlatFee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdrawal\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"CHAIN_ID\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"COIN_TYPE\",\n \"outputs\": [\n {\n \"internalType\": \"enum CoinType\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"FUNGIBLE_MODULE_ADDRESS\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"GAS_LIMIT\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PROTOCOL_FLAT_FEE\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"SYSTEM_CONTRACT_ADDRESS\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\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\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\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\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasLimit\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"updateGasLimit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"protocolFlatFee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"updateProtocolFlatFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"addr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"updateSystemContractAddress\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"to\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"withdrawGasFee\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n]\n\nconst STARKNET_ERC20_ABI = [\n {\n \"members\": [\n {\n \"name\": \"low\",\n \"offset\": 0,\n \"type\": \"felt\"\n },\n {\n \"name\": \"high\",\n \"offset\": 1,\n \"type\": \"felt\"\n }\n ],\n \"name\": \"Uint256\",\n \"size\": 2,\n \"type\": \"struct\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"name\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"recipient\",\n \"type\": \"felt\"\n }\n ],\n \"name\": \"constructor\",\n \"outputs\": [],\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"name\",\n \"type\": \"felt\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"symbol\",\n \"type\": \"felt\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"totalSupply\",\n \"type\": \"Uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"decimals\",\n \"type\": \"felt\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"felt\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"Uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"spender\",\n \"type\": \"felt\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"remaining\",\n \"type\": \"Uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"success\",\n \"type\": \"felt\"\n }\n ],\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"sender\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"recipient\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"success\",\n \"type\": \"felt\"\n }\n ],\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"success\",\n \"type\": \"felt\"\n }\n ],\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"added_value\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"name\": \"success\",\n \"type\": \"felt\"\n }\n ],\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"spender\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"subtracted_value\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"name\": \"success\",\n \"type\": \"felt\"\n }\n ],\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"recipient\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"user\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"Uint256\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [],\n \"type\": \"function\"\n }\n]\n\nexport {\n ERC20_ABI,\n ZETA_ERC20_ABI,\n STARKNET_ERC20_ABI\n}","const Orbiter_V3_ABI_EVM = [{\n \"anonymous\": false,\n \"inputs\": [{ \"indexed\": true, \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }, {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n}, {\n \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }, {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }], \"name\": \"transfer\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\"\n}, {\n \"inputs\": [{ \"internalType\": \"contract IERC20\", \"name\": \"token\", \"type\": \"address\" }, {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n }, { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }, {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }], \"name\": \"transferToken\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\"\n}, {\n \"inputs\": [{\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n }, { \"internalType\": \"address[]\", \"name\": \"tos\", \"type\": \"address[]\" }, {\n \"internalType\": \"uint256[]\",\n \"name\": \"values\",\n \"type\": \"uint256[]\"\n }], \"name\": \"transferTokens\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\"\n}, {\n \"inputs\": [\n { \"internalType\": \"address[]\", \"name\": \"tos\", \"type\": \"address[]\" }, {\n \"internalType\": \"uint256[]\",\n \"name\": \"values\",\n \"type\": \"uint256[]\"\n }], \"name\": \"transfers\", \"outputs\": [], \"stateMutability\": \"payable\", \"type\": \"function\"\n}];\n\nconst Orbiter_V4_ABI_EVM = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressInsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedInnerCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"SafeERC20FailedOperation\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"TransferTo\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TransferTo\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"extra\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"extra\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"transferToken\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"tos\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"values\",\n \"type\": \"uint256[]\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"extras\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"transferTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address[]\",\n \"name\": \"tos\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"values\",\n \"type\": \"uint256[]\"\n }\n ],\n \"name\": \"transferTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"tos\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"values\",\n \"type\": \"uint256[]\"\n }\n ],\n \"name\": \"transfers\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"tos\",\n \"type\": \"address[]\"\n },\n {\n \"internalType\": \"uint256[]\",\n \"name\": \"values\",\n \"type\": \"uint256[]\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"extras\",\n \"type\": \"bytes[]\"\n }\n ],\n \"name\": \"transfers\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n]\n\nconst Orbiter_V3_ABI_STARKNET = [\n {\n \"members\": [\n {\n \"name\": \"low\",\n \"offset\": 0,\n \"type\": \"felt\"\n },\n {\n \"name\": \"high\",\n \"offset\": 1,\n \"type\": \"felt\"\n }\n ],\n \"name\": \"Uint256\",\n \"size\": 2,\n \"type\": \"struct\"\n },\n {\n \"data\": [\n {\n \"name\": \"to\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"Uint256\"\n },\n {\n \"name\": \"token\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"ext_len\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"ext\",\n \"type\": \"felt*\"\n }\n ],\n \"keys\": [],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"_token\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"_amount\",\n \"type\": \"Uint256\"\n },\n {\n \"name\": \"_ext_len\",\n \"type\": \"felt\"\n },\n {\n \"name\": \"_ext\",\n \"type\": \"felt*\"\n }\n ],\n \"name\": \"transferERC20\",\n \"outputs\": [],\n \"type\": \"function\"\n }\n]\n\n\nexport {\n Orbiter_V3_ABI_EVM,\n Orbiter_V4_ABI_EVM,\n Orbiter_V3_ABI_STARKNET,\n}","export const SOLANA_OPOOL_ABI = {\n \"version\": \"0.1.0\",\n \"name\": \"opool\",\n \"instructions\": [\n {\n \"name\": \"initialize\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"opoolVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"paused\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"lock\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"lockState\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"setMakerList\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"makerValid\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"makers\",\n \"type\": {\n \"vec\": \"publicKey\"\n }\n },\n {\n \"name\": \"status\",\n \"type\": {\n \"vec\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"transferOwner\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"setManagerList\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenToManager\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"tokens\",\n \"type\": {\n \"vec\": \"publicKey\"\n }\n },\n {\n \"name\": \"managers\",\n \"type\": {\n \"vec\": \"publicKey\"\n }\n }\n ]\n },\n {\n \"name\": \"setTokenReceiver\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenToReceiver\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"tokens\",\n \"type\": {\n \"vec\": \"publicKey\"\n }\n },\n {\n \"name\": \"receivers\",\n \"type\": {\n \"vec\": \"publicKey\"\n }\n }\n ]\n },\n {\n \"name\": \"inbox\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"source\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"destination\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"feeReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenToReceiver\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenAddress\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"inboxNative\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"feeReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"destination\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenToReceiver\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"nativeToken\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"outbox\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"source\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"destination\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"contractAuthority\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"makerValid\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"thisBump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"outboxNative\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"source\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"destination\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"contractAuthority\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"makerValid\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"thisBump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ]\n },\n {\n \"name\": \"withdraw\",\n \"accounts\": [\n {\n \"name\": \"state\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"user\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"source\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"destination\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenToManager\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"contractAuthority\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"thisBump\",\n \"type\": \"u8\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"MappingTokenToManager\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mappings\",\n \"type\": {\n \"vec\": {\n \"defined\": \"PubkeyPair\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MappingTokenToReceiver\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mappings\",\n \"type\": {\n \"vec\": {\n \"defined\": \"PubkeyPair\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MappingMakerToBool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mappings\",\n \"type\": {\n \"vec\": {\n \"defined\": \"PubkeyBoolPair\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitializeState\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"paused\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"VaultMes\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"currentPragmaId\",\n \"type\": \"publicKey\"\n }\n ]\n }\n }\n ],\n \"types\": [\n {\n \"name\": \"PubkeyPair\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"key\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"value\",\n \"type\": \"publicKey\"\n }\n ]\n }\n },\n {\n \"name\": \"PubkeyBoolPair\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"key\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"value\",\n \"type\": \"bool\"\n }\n ]\n }\n }\n ],\n \"events\": [\n {\n \"name\": \"OwnerChangeEvent\",\n \"fields\": [\n {\n \"name\": \"oldOwner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"LockEvent\",\n \"fields\": [\n {\n \"name\": \"stateKey\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"lockState\",\n \"type\": \"bool\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"ChangeMakers\",\n \"fields\": [\n {\n \"name\": \"stateKey\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newMakers\",\n \"type\": {\n \"vec\": \"publicKey\"\n },\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"InboxEvent\",\n \"fields\": [\n {\n \"name\": \"token\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"sender\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"receiver\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"InboxFeeEvent\",\n \"fields\": [\n {\n \"name\": \"sender\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"feeReceiver\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"feeAmount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"InboxNativeEvent\",\n \"fields\": [\n {\n \"name\": \"sender\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"receiver\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"OutboxEvent\",\n \"fields\": [\n {\n \"name\": \"token\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"sender\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"receiver\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"OutboxBatchEvent\",\n \"fields\": [\n {\n \"name\": \"token\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"to\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"FeeChanged\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newFee\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"FeeReceiverChanged\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newFeeReceiver\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"WithdrawEvent\",\n \"fields\": [\n {\n \"name\": \"token\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"user\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"NoPermission\",\n \"msg\": \"No permission to perform this action.\"\n },\n {\n \"code\": 6001,\n \"name\": \"AlreadyInitialized\",\n \"msg\": \"Initialization has been performed.\"\n },\n {\n \"code\": 6002,\n \"name\": \"InsufficientAmount\",\n \"msg\": \"Insufficient amount.\"\n },\n {\n \"code\": 6003,\n \"name\": \"ContractPaused\",\n \"msg\": \"Contract is paused.\"\n },\n {\n \"code\": 6004,\n \"name\": \"NonFeeReceiver\",\n \"msg\": \"Invalid fee receiver.\"\n },\n {\n \"code\": 6005,\n \"name\": \"InvalidLength\",\n \"msg\": \"Invalid length.\"\n },\n {\n \"code\": 6006,\n \"name\": \"InvalidFeeAmount\",\n \"msg\": \"Invalid fee amount\"\n },\n {\n \"code\": 6007,\n \"name\": \"InvalidAssociatedTokenAddress\",\n \"msg\": \"Invalid associated token address\"\n },\n {\n \"code\": 6008,\n \"name\": \"Overflow\",\n \"msg\": \"Overflow\"\n },\n {\n \"code\": 6009,\n \"name\": \"NotMaker\",\n \"msg\": \"Not a maker.\"\n },\n {\n \"code\": 6010,\n \"name\": \"NotTokenReceiver\",\n \"msg\": \"Not a token receiver.\"\n },\n {\n \"code\": 6011,\n \"name\": \"NotManager\",\n \"msg\": \"Not a manager\"\n }\n ]\n}\n\nexport const Orbiter_OPOOL_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: '_owner',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: '_makers',\n type: 'address[]',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'target',\n type: 'address',\n },\n ],\n name: 'AddressEmptyCode',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'AddressInsufficientBalance',\n type: 'error',\n },\n {\n inputs: [],\n name: 'FailedInnerCall',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'OwnableInvalidOwner',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'OwnableUnauthorizedAccount',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ReentrancyGuardReentrantCall',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'SafeERC20FailedOperation',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'bridgeReceiver',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'bridgeToken',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'feeReceiver',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'feeToken',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'feeAmount',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'bridgeAmount',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'Inbox',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'Outbox',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'feeReceiver',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'feeToken',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'feeAmount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'bridgeToken',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'bridgeAmount',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'inbox',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'makerList',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n name: 'managerList',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'outbox',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'tos',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amounts',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'datas',\n type: 'bytes[]',\n },\n ],\n name: 'outboxBatch',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'makers',\n type: 'address[]',\n },\n {\n internalType: 'bool[]',\n name: 'status',\n type: 'bool[]',\n },\n ],\n name: 'setMakerList',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'tokens',\n type: 'address[]',\n },\n {\n internalType: 'address[]',\n name: 'managers',\n type: 'address[]',\n },\n ],\n name: 'setManagerList',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'tokens',\n type: 'address[]',\n },\n {\n internalType: 'address[]',\n name: 'receivers',\n type: 'address[]',\n },\n ],\n name: 'setTokenReceiver',\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: 'tokenReceivers',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n]\n\n","import BigNumber from 'bignumber.js'\nimport { Contract, shortString, uint256 } from 'starknet'\nimport { Orbiter_V3_ABI_STARKNET } from '../../../abi/orbiter'\nimport { STARKNET_ERC20_ABI } from '../../../abi/erc20'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class CAIROVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.EOA) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n if (!contractAddress) {\n throw new Error('contractAddress is required')\n }\n const amount = uint256.bnToUint256(value)\n\n // const tokenContract = new Contract(STARKNET_ERC20_ABI, srcToken.address);\n // const approveCall = tokenContract.populate('approve', [\n // contractAddress,\n // amount\n // ]);\n\n const contract = new Contract(Orbiter_V3_ABI_STARKNET, contractAddress)\n const data = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n const ext = shortString.splitLongString(data).map((item) => shortString.encodeShortString(item))\n const call = contract.populate('transferERC20', [srcToken.address, makerAddress, amount, ext])\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: call,\n }\n }\n\n async createApprove(\n ownerAddress: string,\n spenderAddress: string,\n approveToken: Token,\n chainId: string,\n value: string,\n ) {\n const contract = new Contract(STARKNET_ERC20_ABI, approveToken.address)\n const amount = uint256.bnToUint256(value)\n const call = contract.populate('approve', [spenderAddress, amount])\n return {\n ownerAddress,\n spenderAddress,\n value,\n amount: new BigNumber(value).div(10 ** approveToken.decimals).toFixed(0),\n raw: call,\n }\n }\n\n async createAllowance(ownerAddress: string, spenderAddress: string, approveToken: Token, chainId: string) {\n const contract = new Contract(STARKNET_ERC20_ABI, approveToken.address)\n const call = contract.populate('allowance', [ownerAddress, spenderAddress])\n return call\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class IMXVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n getAmountWithVc(amount: string, token: Token, vc: string): string {\n let decimals = token.decimals\n if (token.isNative) {\n decimals = 9\n }\n const value = new BigNumber(amount).multipliedBy(10 ** decimals).toFixed(0)\n if (value.length <= vc.length) {\n throw new Error(`value length too short`)\n }\n const header = value.slice(0, value.length - vc.length)\n const valueWithVc = header + vc\n return new BigNumber(valueWithVc).div(10 ** decimals).toFixed()\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n if (srcAddress !== dstAddress) {\n throw new Error(`IMX not support cross address tranfer.`)\n }\n\n const call = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: call,\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class LPRVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n const call = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: call,\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { hexlify, parseUnits, toUtf8Bytes } from 'ethers'\nimport { PublicKey, Transaction, TransactionInstruction, SystemProgram } from '@solana/web3.js'\nimport { createTransferInstruction, getAssociatedTokenAddress, TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType, SimulationAmountPlusWithHoldingFeeType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\nimport { BN, Program, AnchorProvider } from '@project-serum/anchor'\nimport { SOLANA_OPOOL_ABI } from '../../../abi/opool'\n\nexport class SolanaVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n simulationAmountPlusWithHoldingFee?: SimulationAmountPlusWithHoldingFeeType,\n ext?: any,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n const srcAddressPublicKey = new PublicKey(srcAddress)\n const srcTokenPublicKey = new PublicKey(srcToken.address)\n const makerAddressPublicKey = new PublicKey(makerAddress)\n const srcAddressTokenAccount = await getAssociatedTokenAddress(srcTokenPublicKey, srcAddressPublicKey)\n const makerAddressTokenAccount = await getAssociatedTokenAddress(srcTokenPublicKey, makerAddressPublicKey, true)\n\n let transaction: Transaction\n\n if (simulationAmountPlusWithHoldingFee && simulationAmountPlusWithHoldingFee.isOPool) {\n const contractAddressPublicKey = new PublicKey(contractAddress || '')\n const program = new Program(SOLANA_OPOOL_ABI as any, contractAddressPublicKey, ext?.adapter)\n const group = simulationAmountPlusWithHoldingFee.opool\n\n const state = group.state\n const feeReceiver = group.feeReceiver\n const tokenToReceiver = group.tokenToReceiver\n\n const memo = Buffer.from(\n hexlify(\n toUtf8Bytes(channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`),\n ),\n 'utf-8',\n )\n transaction = new Transaction().add(\n await (program.methods.inbox as any)(\n new BN(\n parseUnits(\n String(simulationAmountPlusWithHoldingFee.sendAmount.amount),\n simulationAmountPlusWithHoldingFee.sendAmount.token?.decimals,\n ).toString(),\n ),\n new BN(\n parseUnits(\n String(simulationAmountPlusWithHoldingFee.withholdingFee.amount),\n simulationAmountPlusWithHoldingFee.withholdingFee.token?.decimals,\n ).toString(),\n ),\n memo,\n )\n .accounts({\n state: new PublicKey(state),\n user: srcAddressPublicKey,\n source: srcAddressTokenAccount,\n destination: makerAddressTokenAccount,\n tokenAddress: srcTokenPublicKey,\n tokenToReceiver: new PublicKey(tokenToReceiver),\n feeReceiver: new PublicKey(feeReceiver),\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction(),\n )\n } else if (srcToken?.isNative) {\n transaction = new Transaction()\n .add(\n SystemProgram.transfer({\n fromPubkey: new PublicKey(srcAddress),\n toPubkey: new PublicKey(makerAddress),\n lamports: Number(value),\n }),\n )\n .add(\n new TransactionInstruction({\n keys: [{ pubkey: srcAddressPublicKey, isSigner: true, isWritable: true }],\n data: Buffer.from(\n hexlify(\n toUtf8Bytes(\n channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`,\n ),\n ),\n 'utf-8',\n ),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n } else {\n transaction = new Transaction()\n .add(\n createTransferInstruction(\n srcAddressTokenAccount,\n makerAddressTokenAccount,\n srcAddressPublicKey,\n Number(value),\n [],\n TOKEN_PROGRAM_ID,\n ),\n )\n .add(\n new TransactionInstruction({\n keys: [{ pubkey: srcAddressPublicKey, isSigner: true, isWritable: true }],\n data: Buffer.from(\n hexlify(\n toUtf8Bytes(\n channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`,\n ),\n ),\n 'utf-8',\n ),\n programId: new PublicKey('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n }),\n )\n }\n\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: transaction,\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport TonWeb from 'tonweb'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class TVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n const data = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n const srcTonAddress = new TonWeb.Address(srcAddress)\n const makerTonAddress = new TonWeb.Address(makerAddress)\n\n const forwardPayload = new TonWeb.boc.Cell()\n forwardPayload.bits.writeUint(0, 128)\n forwardPayload.bits.writeString(data)\n\n if (srcToken.isNative) {\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: forwardPayload,\n }\n } else {\n const queryId = new Date().getHours() * 3600 + new Date().getMinutes() * 60 + new Date().getSeconds()\n const jettonTransferBody = new TonWeb.boc.Cell()\n jettonTransferBody.bits.writeUint(0xf8a7ea5, 32)\n jettonTransferBody.bits.writeUint(queryId, 64)\n jettonTransferBody.bits.writeCoins(new TonWeb.utils.BN(value))\n jettonTransferBody.bits.writeAddress(makerTonAddress)\n jettonTransferBody.bits.writeAddress(srcTonAddress)\n jettonTransferBody.bits.writeBit(false)\n jettonTransferBody.bits.writeCoins(TonWeb.utils.toNano('0'))\n jettonTransferBody.bits.writeBit(true)\n jettonTransferBody.refs.push(forwardPayload)\n\n const payloadBase64 = TonWeb.utils.bytesToBase64(await jettonTransferBody.toBoc(false))\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: payloadBase64,\n }\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class ZKLITEVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n getAmountWithVc(amount: string, token: Token, vc: string): string {\n let decimals = token.decimals\n if (token.isNative) {\n decimals = 9\n }\n const value = new BigNumber(amount).multipliedBy(10 ** decimals).toFixed(0)\n if (value.length <= vc.length) {\n throw new Error(`value length too short`)\n }\n const header = value.slice(0, value.length - vc.length)\n const valueWithVc = header + vc\n return new BigNumber(valueWithVc).div(10 ** decimals).toFixed()\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n if (srcAddress !== dstAddress) {\n throw new Error(`ZKSync Lite not support cross address tranfer.`)\n }\n\n let call = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: call,\n }\n }\n}\n","import { TronWeb, Types as TronTypes, BigNumber } from 'tronweb'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class TRONVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.EOA) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n if (!contractAddress) {\n throw new Error('contractAddress is required')\n }\n\n const url = this.getUrl(chainId)\n if (!url) {\n throw new Error(`Unsupported Tron chainId: ${chainId}`)\n }\n const tronWeb = new TronWeb({\n fullHost: url,\n })\n\n const callData = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n const bytesData = tronWeb.toHex(callData)\n\n const functionSelector = 'transferToken(address,address,uint256,bytes)'\n const params: TronTypes.ContractFunctionParameter[] = [\n { type: 'address', value: srcToken.address },\n { type: 'address', value: makerAddress },\n { type: 'uint256', value: value },\n { type: 'bytes', value: bytesData },\n ]\n\n const transaction = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n {\n txLocal: true,\n },\n params,\n srcAddress,\n )\n\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toString(),\n raw: transaction,\n }\n }\n\n async createApprove(\n ownerAddress: string,\n spenderAddress: string,\n approveToken: Token,\n chainId: string,\n value: string,\n ) {\n const url = this.getUrl(chainId)\n if (!url) {\n throw new Error(`Unsupported Tron chainId: ${chainId}`)\n }\n const tronWeb = new TronWeb({\n fullHost: url,\n })\n\n const functionSelector = 'approve(address,uint256)'\n const params: TronTypes.ContractFunctionParameter[] = [\n { type: 'address', value: spenderAddress },\n { type: 'uint256', value: value },\n ]\n\n const transaction = await tronWeb.transactionBuilder.triggerSmartContract(\n approveToken.address,\n functionSelector,\n {\n txLocal: true,\n },\n params,\n ownerAddress,\n )\n\n return {\n ownerAddress,\n spenderAddress,\n value,\n amount: new BigNumber(value).div(10 ** approveToken.decimals).toString(),\n raw: transaction,\n }\n }\n\n async createAllowance(ownerAddress: string, spenderAddress: string, approveToken: Token, chainId: string) {\n const url = this.getUrl(chainId)\n if (!url) {\n throw new Error(`Unsupported Tron chainId: ${chainId}`)\n }\n const tronWeb = new TronWeb({\n fullHost: url,\n })\n\n const functionSelector = 'allowance(address,address)'\n const params: TronTypes.ContractFunctionParameter[] = [\n { type: 'address', value: ownerAddress },\n { type: 'address', value: spenderAddress },\n ]\n\n const transaction = await tronWeb.transactionBuilder.triggerSmartContract(\n approveToken.address,\n functionSelector,\n {\n txLocal: true,\n },\n params,\n ownerAddress,\n )\n\n return transaction\n }\n\n getUrl(chainId: string) {\n let url: string | undefined\n if (chainId === '3448148188') {\n url = 'https://nile.trongrid.io'\n } else if (chainId === '728126428') {\n url = 'https://api.trongrid.io'\n } else if (chainId === '2494104990') {\n url = 'https://api.shasta.trongrid.io'\n }\n return url\n }\n}\n","import BigNumber from 'bignumber.js'\nimport * as bitcoin from 'bitcoinjs-lib'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class BTCVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n //only support native currency\n if (!srcToken.isNative) {\n throw new Error('only support native currency')\n }\n const psbt = new bitcoin.Psbt()\n psbt.addOutput({\n address: makerAddress,\n value: Number(value),\n })\n const callDataBuffer = bitcoin.payments.embed({\n data: [\n Buffer.from(\n channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`,\n 'utf-8',\n ),\n ],\n }).output\n if (!callDataBuffer) {\n throw new Error('create callDataBuffer failed')\n }\n psbt.addOutput({\n script: callDataBuffer,\n value: 0,\n })\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: psbt,\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { hexlify, toUtf8Bytes } from 'ethers'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class FUELVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.CONTRACT) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n const hexCall = hexlify(\n toUtf8Bytes(channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`),\n )\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: hexCall,\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { hexlify, toUtf8Bytes } from 'ethers'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class APTOSVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.EOA) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n const hexCall = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n // const requestData = {\n // function: `${contractAddress}::message::transfer_token`,\n // typeArguments: [\n // srcToken.address,\n // ],\n // functionArguments: [\n // makerAddress,\n // Number(value),\n // hexCall,\n // ]\n // };\n const requestData = {\n function: `${contractAddress}::message::transfer_coin`,\n typeArguments: ['0x1::fungible_asset::Metadata'],\n functionArguments: [srcToken.address, makerAddress, Number(value), hexCall],\n }\n\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: requestData,\n }\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { Token } from '../../api-service/api.interface'\nimport { RouterType } from '../../orbiter.model'\nimport { VMService } from '../vm.service'\n\nexport class SUIVMService extends VMService {\n isValidTransferType(routerType: RouterType): boolean {\n if (routerType == RouterType.EOA) {\n return false\n }\n return true\n }\n\n async createTransaction(\n srcAddress: string,\n srcToken: Token,\n dstAddress: string,\n dstToken: Token,\n value: string,\n vc: string,\n routerType: RouterType,\n makerAddress: string,\n chainId: string,\n contractAddress?: string,\n channelId?: string,\n ) {\n if (!this.isValidTransferType(routerType)) {\n throw new Error(`not support for router type: ${routerType}`)\n }\n\n const hexCall = channelId ? `c=${vc}&t=${dstAddress}&app=${channelId}` : `c=${vc}&t=${dstAddress}`\n return {\n routerType,\n srcAddress,\n dstAddress,\n value,\n amount: new BigNumber(value).div(10 ** srcToken.decimals).toFixed(0),\n raw: hexCall,\n }\n }\n}\n","import { VMType } from '@orbiter-finance/vm-core'\n\nexport interface APIResponse<T> {\n status: string\n message: string\n result: T\n}\n\nexport interface APIPageResponse<T> {\n count: number\n rows: T[]\n offset?: number\n limit?: number\n}\n\nexport interface ChainConfig {\n chainId: string\n networkId: string\n internalId: number\n name: string\n nativeCurrency: Token\n tokens: Token[]\n contracts: Contract[]\n vm: VMType\n}\n\nexport interface Token {\n name: string\n symbol: string\n decimals: number\n coinKey: string\n address: string\n isNative?: boolean\n}\n\nexport interface Contract {\n name: string\n address: string\n}\n\nexport interface RouterConfig {\n line: string\n endpoint: string\n endpointContract?: string\n srcChain: string\n tgtChain: string\n srcToken: string\n tgtToken: string\n maxAmt: string\n minAmt: string\n tradeFee: string\n withholdingFee: string\n vc: string\n state: RouterState\n type: string\n opool?: {\n [key: string]: string\n }\n compRatio: number\n spentTime: number\n tieredFee: TieredFee[]\n point?: number | undefined\n}\n\nexport interface TieredFee {\n range: [number, number]\n tradeFee: number\n withholdingFee: number\n}\n\nexport enum RouterState {\n AVAILABLE = 'available',\n DISABLED = 'disabled',\n}\n\nexport interface Transaction {\n sourceId: string\n targetId: string\n sourceChain: string\n targetChain: string\n sourceAmount: string\n sourceMaker: string\n sourceAddress: string\n targetAddress: string\n sourceSymbol: string\n targetSymbol: string\n status: number\n sourceTime: string\n targetTime: string\n points?: string\n}\n\nexport interface PointRule {\n [chain: string]: {\n [symbol: string]: string\n }\n}\n\n// 0 bridge 1 collector 2 swap(include same chain) 3 commission 4 same chain swap\nexport enum TxType {\n BRIDGE = '0',\n COLLECTOR = '1',\n SWAP = '2',\n COMMISSION = '3',\n SAME_CHAIN_SWAP = '4',\n}\n\nexport interface TxHistoryItem extends Transaction {\n txType: TxType\n // 0: bridge info\n targetAmount?: string\n finalAmount?: string | null\n originSymbol?: string | null\n originToken?: string | null\n originAmount?: string | null\n finalSymbol?: string | null\n finalToken?: string | null\n\n // 2: swap info\n sourceTokenInfo?: TokenInfo\n targetTokenInfo?: TokenInfo\n sourceToken?: string\n}\n\nexport interface TokenInfo {\n chainId: number\n address: string\n symbol: string\n name: string\n decimals: number\n priceUSD: string\n coinKey: string\n logoURI: string\n}\n","import { ApiService } from './api-service/api.service'\nimport { ConfigOptions, TradePair } from './orbiter.model'\nimport { ChainConfig, PointRule, RouterConfig, RouterState } from './api-service/api.interface'\n\nexport class ConfigService {\n private _chainConfigs?: ChainConfig[]\n private _routerConfigs?: RouterConfig[]\n private _basePointRules?: PointRule\n\n constructor(\n private readonly _apiService: ApiService,\n private readonly _config: ConfigOptions,\n ) {}\n\n async initConfig() {\n await Promise.allSettled([this.initChainConfigs(), this.initRouterConfigs(), this.initBasePointRules()])\n }\n\n async initChainConfigs() {\n try {\n const chainConfigs = await this._apiService.getChainList()\n this._chainConfigs = chainConfigs\n } catch (error) {\n const e = error as Error\n throw new Error(`init chainConfigs fail, error: ${e.message}, stack: ${e.stack}`)\n }\n }\n\n async initRouterConfigs() {\n try {\n const routerConfigs = await this._apiService.getRouterList(this._config.dealerId)\n this._routerConfigs = routerConfigs.filter((routerConfig) => {\n return routerConfig.state === RouterState.AVAILABLE\n })\n } catch (error) {\n const e = error as Error\n throw new Error(`init routerConfigs fail, error: ${e.message}, stack: ${e.stack}`)\n }\n }\n\n async initBasePointRules() {\n try {\n const basePointRules = await this._apiService.getBasePointRules()\n this._basePointRules = basePointRules\n } catch (error) {\n const e = error as Error\n console.error(`init basePointRules fail, error: ${e.message}`)\n this._basePointRules = {}\n }\n }\n\n getRouterConfigs() {\n if (!this._routerConfigs) {\n throw new Error(`getRouterConfigs fail, error: config need init.`)\n }\n return this._routerConfigs\n }\n\n getRouterConfig(tradePair: TradePair): RouterConfig | undefined {\n if (!this._routerConfigs) {\n throw new Error(`getRouterConfig fail, error: config need init.`)\n }\n const line = `${tradePair.srcChainId}/${tradePair.dstChainId}-${tradePair.srcTokenSymbol}/${tradePair.dstTokenSymbol}`\n\n return this._routerConfigs.find((router) => {\n return router.line === line\n })\n }\n\n getChainConfigs(): ChainConfig[] {\n if (!this._chainConfigs) {\n throw new Error(`getChainConfigs fail, error: config need init.`)\n }\n\n return this._chainConfigs\n }\n\n getChainConfigByName(chainName: string): ChainConfig | undefined {\n if (!this._chainConfigs) {\n throw new Error(`getChainConfigByName fail, error: config need init.`)\n }\n\n const chainConfig = this._chainConfigs.find((chainConfig) => {\n return chainConfig.name === chainName\n })\n\n return chainConfig\n }\n\n getChainConfigById(chainId: string): ChainConfig | undefined {\n if (!this._chainConfigs) {\n throw new Error(`getChainConfigById fail, error: config need init.`)\n }\n\n const chainConfig = this._chainConfigs.find((chainConfig) => {\n return chainConfig.chainId === chainId\n })\n\n return chainConfig\n }\n\n getBasePointRule(chainId: string, symbol: string) {\n if (!this._basePointRules) {\n throw new Error(`getBasePointRule fail, error: config need init.`)\n }\n const chainRules = this._basePointRules[chainId]\n let basePoint = '0'\n if (chainRules) {\n basePoint = chainRules[symbol] || '0'\n }\n return basePoint\n }\n}\n","import { ENDPOINT, CDNENDPOINT, DynamicPointParams } from '../orbiter.model'\nimport {\n APIPageResponse,\n APIResponse,\n ChainConfig,\n PointRule,\n RouterConfig,\n Token,\n TxHistoryItem,\n TxType,\n} from './api.interface'\n\nexport class ApiService {\n private apiEndpoint: ENDPOINT\n private cdnEndpoint: CDNENDPOINT\n private apiKey?: string\n private channelId?: string\n constructor(apiEndpoint: ENDPOINT, apiKey?: string, channelId?: string) {\n this.apiEndpoint = apiEndpoint\n this.apiKey = apiKey\n this.channelId = channelId\n if (apiEndpoint == ENDPOINT.MAINNET) {\n this.cdnEndpoint = CDNENDPOINT.MAINNET\n } else {\n this.cdnEndpoint = CDNENDPOINT.TESTNET\n }\n }\n\n private async fetchAPIGet<T>(path: string, params?: Record<string, any>): Promise<T> {\n const url = new URL(`${this.apiEndpoint}${path}`)\n if (params) {\n Object.keys(params).forEach((key) => {\n const param = params[key]\n if (param) {\n url.searchParams.append(key, param)\n }\n })\n }\n\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n headers['X-Channel'] = 'bridge-sdk'\n if (this.apiKey) headers['X-API-Key'] = this.apiKey\n if (this.channelId) headers['X-Channel-ID'] = this.channelId\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers,\n })\n\n if (!response.ok) {\n throw new Error(`Error ${response.status}: ${response.statusText}`)\n }\n\n const data: APIResponse<T> = await response.json()\n if (data.status !== 'success') {\n throw new Error(data.message)\n }\n\n return data.result\n }\n\n private async fetchCDNGet<T>(path: string): Promise<T> {\n const url = new URL(`${this.cdnEndpoint}${path}`)\n const response = await fetch(url.toString())\n\n if (!response.ok) {\n throw new Error(`Error ${response.status}: ${response.statusText}`)\n }\n\n const data = (await response.json()) as T\n return data\n }\n\n async getChainList(): Promise<ChainConfig[]> {\n let chainConfigs: ChainConfig[] = []\n try {\n chainConfigs = await this.fetchAPIGet<ChainConfig[]>('/chains')\n } catch (error) {\n console.log(`getChainList From API Fail, will try cdn backup`)\n chainConfigs = await this.fetchCDNGet<ChainConfig[]>('/chains.json')\n }\n return chainConfigs\n }\n\n async getTokenList(): Promise<Record<string, Token[]>> {\n return await this.fetchAPIGet<Record<string, Token[]>>('/tokens')\n }\n\n async getRouterList(dealerId?: string): Promise<RouterConfig[]> {\n const entry = 'contract'\n let routers: RouterConfig[] = []\n try {\n routers = await this.fetchAPIGet<RouterConfig[]>('/routers/v2', dealerId ? { dealerId, entry } : { entry })\n } catch (error) {\n console.log(`getRouterList From API Fail, will try cdn backup`)\n routers = await this.fetchCDNGet<RouterConfig[]>('/routers.json')\n }\n return routers\n }\n\n async getBasePointRules(): Promise<PointRule> {\n return await this.fetchAPIGet<PointRule>('/routers/base-point')\n }\n\n async getSimulatedReceiveAmount(\n line: string,\n value: string,\n nonce?: string,\n dealer?: string,\n brokerageTradeFeeRate?: number,\n ): Promise<{ receiveAmount: string; router: RouterConfig }> {\n return await this.fetchAPIGet<{ receiveAmount: string; router: RouterConfig }>(\n '/routers/simulation/receiveAmount',\n {\n line,\n value,\n nonce,\n dealer,\n brokerageTradeFeeRate,\n },\n )\n }\n\n async getTransactionHistory(address: string, txType: TxType, offset?: number) {\n return await this.fetchAPIGet<APIPageResponse<TxHistoryItem>>('/transaction/history', {\n address,\n txType,\n offset,\n })\n }\n\n async getTransactionStatus(hash: string, chainId?: string, address?: string, value?: string): Promise<any> {\n return await this.fetchAPIGet<any>(`/transaction/status/${hash}`, { chainId, address, value })\n }\n\n async getUserOpoint(address: string): Promise<any> {\n return await this.fetchAPIGet<any>(`/opoints/user/${address}`)\n }\n\n async getDynamicPoint(param: DynamicPointParams): Promise<string> {\n return await this.fetchAPIGet<any>(`/routers/point`, param)\n }\n}\n","import BigNumber from 'bignumber.js'\nimport { isValidAddress } from '@orbiter-finance/vm-core'\nimport { padStart } from '../utils/tools'\nimport { ChainConfig, RouterConfig, Token } from './api-service/api.interface'\nimport { ApproveParams, RouterType, TransactionParams } from './orbiter.model'\nimport { VMService } from './vm-service/vm.service'\n\nexport class Router {\n constructor(\n public readonly srcChainConfig: ChainConfig,\n public readonly srcToken: Token,\n public readonly dstChainConfig: ChainConfig,\n public readonly dstToken: Token,\n public readonly basePoint: string,\n private readonly _VMService: VMService,\n public readonly routerConfig: RouterConfig,\n public readonly routerTypes: RouterType[],\n private readonly _channelId?: string,\n ) {}\n\n get routerId() {\n return `${this.srcChainConfig.chainId}-${this.srcToken.symbol}-${this.dstChainConfig.chainId}-${this.dstToken.symbol}`\n }\n\n get vc() {\n return this.routerConfig.vc\n }\n\n get withholdingFee() {\n return this.routerConfig.withholdingFee\n }\n\n get tradeFee() {\n return this.routerConfig.tradeFee\n }\n\n get makerAddress() {\n const address = this.routerConfig?.endpoint\n if (!address) {\n throw new Error(`getMakerAddress fail`)\n }\n return address\n }\n\n get contractAddress() {\n return this.routerConfig.endpointContract\n }\n\n get spentTime() {\n return this.routerConfig.spentTime\n }\n\n // private _getAmountWithVc(amount: string) {\n // const value = new BigNumber(amount).multipliedBy(10 ** this.srcToken.decimals).toFixed(0);\n // const vc = this.vc;\n // if (value.length <= vc.length) {\n // throw new Error(`value length too short`);\n // }\n // const header = value.slice(0, value.length - vc.length);\n // const valueWithVc = header + vc;\n // return new BigNumber(valueWithVc).div(10 ** this.srcToken.decimals).toFixed();\n // }\n\n async createTransaction(\n srcAddress: string,\n dstAddress: string,\n amount: string,\n ext?: any,\n ): Promise<TransactionParams> {\n const value = new BigNumber(amount).multipliedBy(10 ** this.srcToken.decimals).toFixed(0)\n\n if (!(await isValidAddress(srcAddress, this.srcChainConfig.vm))) {\n throw new Error(`srcAddress format error: ${srcAddress}`)\n }\n // if (!await isValidAddress(dstAddress, this.dstChainConfig.vm)) {\n // throw new Error(`dstAddress format error: ${dstAddress}`);\n // }\n\n const vc = this.vc\n for (const routerType of this.routerTypes) {\n try {\n const simulationAmountPlusWithHoldingFeeGroup = this.simulationAmountPlusWithHoldingFee(amount)\n const transaction = await this._VMService.createTransaction(\n srcAddress,\n this.srcToken,\n dstAddress,\n this.dstToken,\n value,\n vc,\n routerType,\n this.makerAddress,\n this.srcChainConfig.chainId,\n this.contractAddress,\n this._channelId,\n simulationAmountPlusWithHoldingFeeGroup.isOPool\n ? simulationAmountPlusWithHoldingFeeGroup\n : undefined,\n ext,\n )\n return transaction\n } catch {\n continue\n }\n }\n throw new Error(`createTransaction fail, error: no available router type.`)\n }\n\n async createApprove(ownerAddress: string, amount: string, token?: Token): Promise<ApproveParams> {\n const value = new BigNumber(amount).multipliedBy(10 ** this.srcToken.decimals).toFixed(0)\n\n const spenderAddress = this.contractAddress\n if (!spenderAddress) {\n throw new Error(`createApprove fail, unavailable target contract address.`)\n }\n\n if (!(await isValidAddress(ownerAddress, this.srcChainConfig.vm))) {\n throw new Error(`ownerAddress format error: ${ownerAddress}`)\n }\n if (!(await isValidAddress(spenderAddress, this.srcChainConfig.vm))) {\n throw new Error(`spenderAddress format error: ${spenderAddress}`)\n }\n\n return this._VMService.createApprove(\n ownerAddress,\n spenderAddress,\n token || this.srcToken,\n this.srcChainConfig.chainId,\n value,\n )\n }\n\n async createAllowance(ownerAddress: string, token?: Token) {\n const spenderAddress = this.contractAddress\n if (!spenderAddress) {\n throw new Error(`createAllowance fail, unavailable target contract address.`)\n }\n if (!(await isValidAddress(ownerAddress, this.srcChainConfig.vm))) {\n throw new Error(`ownerAddress format error: ${ownerAddress}`)\n }\n if (!(await isValidAddress(spenderAddress, this.srcChainConfig.vm))) {\n throw new Error(`spenderAddress format error: ${spenderAddress}`)\n }\n\n return this._VMService.createAllowance(\n ownerAddress,\n spenderAddress,\n token || this.srcToken,\n this.srcChainConfig.chainId,\n )\n }\n\n getMinSendAmountMinusWithHoldingFee() {\n const minAmt = new BigNumber(this.routerConfig.minAmt)\n const withholdingFee = new BigNumber(this.routerConfig.withholdingFee)\n return this.getIsOPool() ? minAmt.toFixed() : minAmt.minus(withholdingFee).toFixed()\n }\n\n getMinSendAmount() {\n return this.routerConfig.minAmt\n }\n\n getMaxSendAmount() {\n return this.routerConfig.maxAmt\n }\n\n getIsOPool() {\n return this.routerConfig.type === 'opool-cross-chain'\n }\n\n equalFeeTokenBridgeToken() {\n return (\n this.routerConfig?.opool?.feeToken?.toLocaleLowerCase() === this.routerConfig?.srcToken?.toLocaleLowerCase()\n )\n }\n\n simulationAmountPlusWithHoldingFee(amount: string) {\n let amountBigNumber = new BigNumber(this._VMService.getAmountWithVc(amount, this.srcToken, this.vc)) //FIXME: need vc or not\n // let amountBigNumber = new BigNumber(amount);\n // if (this.routerType == RouterType.EOA) {\n // amountBigNumber = new BigNumber(this._getAmountWithVc(amount));\n // }\n\n //minAmt needs minus withHolding fee\n const minAmt = new BigNumber(this.getMinSendAmountMinusWithHoldingFee())\n const maxAmt = new BigNumber(this.getMaxSendAmount())\n if (amountBigNumber.lt(minAmt) || amountBigNumber.gt(maxAmt.multipliedBy(1.05))) { throw new Error(\n `amount ${amount} is not in the allow scale: min: ${this.routerConfig.minAmt} max: ${this.routerConfig.maxAmt}`,\n )\n }\n\n let tradeFeeRate = new BigNumber(this.tradeFee)\n let withholdingFee = new BigNumber(this.withholdingFee)\n const originWithholdingFee = withholdingFee\n if (this.routerConfig.tieredFee) {\n // const subWithholdingFeeAmount = amountBigNumber.minus(withholdingFee).toNumber()\n const item = this.routerConfig.tieredFee.find(\n (row) =>\n amountBigNumber.gt(new BigNumber(row.range[0] || 0)) &&\n amountBigNumber.lte(new BigNumber(row.range[1])),\n )\n if (item) {\n if (item.tradeFee != undefined) {\n tradeFeeRate = new BigNumber(item.tradeFee)\n }\n if (item.withholdingFee != undefined) {\n withholdingFee = new BigNumber(item.withholdingFee)\n }\n }\n }\n\n // const tFee = new BigNumber(originWithholdingFee)\n // .minus(withholdingFee)\n // .multipliedBy(tradeFeeRate)\n // .dividedBy(100)\n // .toString()\n // withholdingFee = new BigNumber(this.routerConfig.withholdingFee).minus(tFee)\n\n let sendAmount = amountBigNumber.toFixed()\n\n // plus withHolding fee\n amountBigNumber = amountBigNumber.plus(withholdingFee)\n const nonce = '0' //to avoid receive value over mini value\n const safeLength = this._getTargetAmountSafeLengthByToken(this.dstToken.symbol, this.dstToken.decimals)\n const targetNonce = padStart(nonce.substring(nonce.length - safeLength), safeLength, '0')\n const result = this._getResponseIntent(\n amountBigNumber.toString(),\n '0',\n tradeFeeRate.toNumber(),\n 0,\n withholdingFee.toString(),\n targetNonce,\n this.dstToken.decimals - safeLength,\n )\n\n if (!this.getIsOPool()) {\n sendAmount = amountBigNumber.toFixed()\n }\n const receiveAmount = new BigNumber(result.responseAmount).toFixed()\n\n const tokenList = this.srcChainConfig.tokens.concat([this.srcChainConfig.nativeCurrency])\n\n return {\n sendAmount: {\n amount: sendAmount,\n token: tokenList.find((item) => {\n return item.address.toLocaleLowerCase() === this.routerConfig.srcToken.toLocaleLowerCase()\n }),\n isNativeCurrency:\n this.srcChainConfig.nativeCurrency.address.toLocaleLowerCase() ===\n this.routerConfig.srcToken.toLocaleLowerCase(),\n },\n withholdingFee: {\n amount: withholdingFee.toFixed(),\n token: tokenList.find((item) => {\n return (\n item.address.toLocaleLowerCase() ===\n (this.getIsOPool()\n ? this.routerConfig?.opool?.feeToken?.toLocaleLowerCase()\n : this.routerConfig.srcToken.toLocaleLowerCase())\n )\n }),\n isNativeCurrency:\n (this.getIsOPool()\n ? this.routerConfig?.opool?.feeToken?.toLocaleLowerCase()\n : this.routerConfig.srcToken.toLocaleLowerCase()) ===\n this.srcChainConfig.nativeCurrency.address.toLocaleLowerCase(),\n },\n tradeFeeRate: tradeFeeRate.toString(),\n type: this.routerConfig.type,\n isOPool: this.getIsOPool(),\n receiveAmount,\n opool: this.routerConfig.opool,\n }\n }\n\n simulationAmount(amount: string) {\n let amountBigNumber = new BigNumber(this._VMService.getAmountWithVc(amount, this.srcToken, this.vc)) //FIXME: need vc or not\n // let amountBigNumber = new BigNumber(amount);\n // if (this.routerType === RouterType.EOA) {\n // amountBigNumber = new BigNumber(this._getAmountWithVc(amount));\n // }\n\n if (\n amountBigNumber.lt(Number(this.routerConfig.minAmt)) ||\n amountBigNumber.gt(Number(this.routerConfig.maxAmt) * 1.02)\n ) {\n // 2% endurance rate\n throw new Error(\n `amount ${amount} is not in the allow scale: min: ${this.routerConfig.minAmt} max: ${this.routerConfig.maxAmt}`,\n )\n }\n\n let tradeFeeRate = new BigNumber(this.tradeFee)\n let withholdingFee = new BigNumber(this.withholdingFee)\n const originWithholdingFee = withholdingFee\n if (this.routerConfig.tieredFee) {\n const subWithholdingFeeAmount = amountBigNumber.minus(withholdingFee).toNumber()\n const item = this.routerConfig.tieredFee.find(\n (row) => subWithholdingFeeAmount > row.range[0] && subWithholdingFeeAmount <= row.range[1],\n )\n if (item) {\n if (item.tradeFee != undefined) {\n tradeFeeRate = new BigNumber(item.tradeFee)\n }\n if (item.withholdingFee != undefined) {\n withholdingFee = new BigNumber(item.withholdingFee)\n }\n }\n }\n\n const tFee = new BigNumber(originWithholdingFee)\n .minus(withholdingFee)\n .multipliedBy(tradeFeeRate)\n .dividedBy(100)\n .toString()\n withholdingFee = new BigNumber(this.routerConfig.withholdingFee).minus(tFee)\n\n const nonce = '1000'\n const safeLength = this._getTargetAmountSafeLengthByToken(this.dstToken.symbol, this.dstToken.decimals)\n const targetNonce = padStart(nonce.substring(nonce.length - safeLength), safeLength, '0')\n const result = this._getResponseIntent(\n amountBigNumber.toString(),\n '0',\n tradeFeeRate.toNumber(),\n 0,\n withholdingFee.toString(),\n targetNonce,\n this.dstToken.decimals - safeLength,\n )\n\n const sendAmount = amountBigNumber.toFixed()\n const receiveAmount = new BigNumber(result.responseAmount).toFixed()\n return {\n sendAmount,\n receiveAmount,\n }\n }\n\n private _getResponseIntent(\n amountE: string,\n securityCode: string,\n tradeFeeRate: number,\n brokerageTradeFeeRate: number,\n withholdingFeeAmount: string,\n targetSafeCode: string,\n preservePrecision: number,\n ) {\n const amount = new BigNumber(amountE)\n const tradeAmount = amount.minus(securityCode).minus(withholdingFeeAmount)\n\n const tradingFeeAmount = tradeAmount.times(tradeFeeRate).div(100)\n const brokerageTradeFeeAmount = tradeAmount.times(brokerageTradeFeeRate || 0).div(100)\n\n const responseAmount = tradeAmount.minus(tradingFeeAmount).minus(brokerageTradeFeeAmount)\n const responseAmountStr = responseAmount.toFixed(preservePrecision, 1)\n const responseAmountArr = responseAmountStr.split('.')\n const amountAfter = responseAmountArr[1] || ''\n const result = {\n code: 0,\n value: amount.toString(),\n tradeAmount: tradeAmount.toString(),\n tradeFeeAmount: tradingFeeAmount.toString(),\n brokerageTradeFeeAmount: brokerageTradeFeeAmount.toString(),\n withholdingFeeAmount,\n responseAmountOrigin: responseAmountStr,\n responseAmount: new BigNumber(\n `${responseAmountArr[0]}.${amountAfter.substring(0, preservePrecision)}${targetSafeCode}`,\n ).toString(),\n }\n return result\n }\n\n private _getTargetAmountSafeLengthByToken(symbol: string, decimal: number) {\n if (decimal >= 18) {\n return 5\n }\n if (symbol === 'BTC') {\n return 2\n }\n if (symbol === 'USDT' || symbol === 'USDC' || symbol === 'DAI') {\n return 4\n }\n return 4\n }\n}\n","export function padStart(str: string, length: number, chars: string = ' '): string {\n const paddingLength = length - str.length;\n \n if (paddingLength <= 0) {\n return str;\n }\n\n const repeatedChars = chars.repeat(Math.ceil(paddingLength / chars.length));\n const padding = repeatedChars.slice(0, paddingLength);\n\n return padding + str;\n}\n\n\nexport async function getTonOrbiterHash(chainId:string,hash:string) {\n const apiBase = chainId === 'TON' ? 'https://tonapi.io' : 'https://testnet.tonapi.io';\n const response = await fetch(`${apiBase}/v2/traces/${hash}`, {\n method: 'GET',\n });\n\n if (!response.ok) {\n throw new Error(`Error ${response.status}: ${response.statusText}`);\n }\n const data = await response.json();\n return data.children?.[0]?.transaction?.hash;\n}"],"mappings":"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CJ,EACA,KAAM,2BACN,KAAM,OACV,EACA,CACI,UAAW,GACX,OAAQ,CACJ,CACI,QAAS,GACT,aAAc,UACd,KAAM,iBACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,cACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,YACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,eACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,QACd,KAAM,OACN,KAAM,OACV,CACJ,EACA,KAAM,QACN,KAAM,OACV,EACA,CACI,UAAW,GACX,OAAQ,CACJ,CACI,QAAS,GACT,aAAc,UACd,KAAM,QACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,KACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,SACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,QACd,KAAM,OACN,KAAM,OACV,CACJ,EACA,KAAM,SACN,KAAM,OACV,EACA,CACI,UAAW,GACX,OAAQ,CACJ,CACI,QAAS,GACT,aAAc,UACd,KAAM,gBACN,KAAM,SACV,EACA,CACI,QAAS,GACT,aAAc,UACd,KAAM,WACN,KAAM,SACV,CACJ,EACA,KAAM,uBACN,KAAM,OACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,UACd,KAAM,cACN,KAAM,SACV,EACA,CACI,aAAc,UACd,KAAM,WACN,KAAM,SACV,EACA,CACI,aAAc,UACd,KAAM,YACN,KAAM,SACV,EACA,CACI,aAAc,UACd,KAAM,cACN,KAAM,SACV,EACA,CACI,aAAc,UACd,KAAM,eACN,KAAM,SACV,EACA,CACI,aAAc,QACd,KAAM,OACN,KAAM,OACV,CACJ,EACA,KAAM,QACN,QAAS,CAAC,EACV,gBAAiB,UACjB,KAAM,UACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,UACd,KAAM,GACN,KAAM,SACV,CACJ,EACA,KAAM,YACN,QAAS,CACL,CACI,aAAc,OACd,KAAM,GACN,KAAM,MACV,CACJ,EACA,gBAAiB,OACjB,KAAM,UACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,UACd,KAAM,GACN,KAAM,SACV,CACJ,EACA,KAAM,cACN,QAAS,CACL,CACI,aAAc,UACd,KAAM,GACN,KAAM,SACV,CACJ,EACA,gBAAiB,OACjB,KAAM,UACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,UACd,KAAM,QACN,KAAM,SACV,EACA,CACI,aAAc,UACd,KAAM,KACN,KAAM,SACV,EACA,CACI,aAAc,UACd,KAAM,SACN,KAAM,SACV,EACA,CACI,aAAc,QACd,KAAM,OACN,KAAM,OACV,CACJ,EACA,KAAM,SACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,UACd,KAAM,QACN,KAAM,SACV,EACA,CACI,aAAc,YACd,KAAM,MACN,KAAM,WACV,EACA,CACI,aAAc,YACd,KAAM,UACN,KAAM,WACV,EACA,CACI,aAAc,UACd,KAAM,QACN,KAAM,SACV,CACJ,EACA,KAAM,cACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACV,EACA,CACI,OAAQ,CAAC,EACT,KAAM,QACN,QAAS,CACL,CACI,aAAc,UACd,KAAM,GACN,KAAM,SACV,CACJ,EACA,gBAAiB,OACjB,KAAM,UACV,EACA,CACI,OAAQ,CAAC,EACT,KAAM,oBACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,YACd,KAAM,SACN,KAAM,WACV,EACA,CACI,aAAc,SACd,KAAM,SACN,KAAM,QACV,CACJ,EACA,KAAM,eACN,QAAS,CAAC,EACV,gBAAiB,aACjB,KAAM,UACV,EACA,CACI,OAAQ,CACJ,CACI,aAAc,YACd,KAAM,SACN,KAAM,WACV,EACA,CACI,aAAc,YACd,KAAM,WACN,KAAM,WACV,CACJ,EACA,KAAM,iBACN,QAAS,CAAC,EA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","names":["index_exports","__export","ApiService","CDNENDPOINT","ENDPOINT","OrbiterClient","Router","RouterState","RouterType","TxType","__toCommonJS","ENDPOINT","CDNENDPOINT","RouterType","import_vm_core","import_vm_core","import_bignumber","import_ethers","import_bignumber","VMService","configService","__publicField","routerType","amount","token","vc","value","BigNumber","valueWithVc","srcAddress","srcToken","dstAddress","dstToken","makerAddress","chainId","contractAddress","channelId","simulationAmountPlusWithHoldingFee","ext","ownerAddress","spenderAddress","approveToken","ERC20_ABI","STARKNET_ERC20_ABI","Orbiter_V3_ABI_EVM","Orbiter_V3_ABI_STARKNET","SOLANA_OPOOL_ABI","Orbiter_OPOOL_ABI","EVMService","VMService","srcAddress","srcToken","dstAddress","dstToken","value","vc","routerType","makerAddress","chainId","contractAddress","channelId","simulationAmountPlusWithHoldingFee","transaction","feeToken","bridgeAmount","BigNumber","feeAmount","_interface","Orbiter_OPOOL_ABI","recipient","data","callData","ERC20_ABI","amount","Orbiter_V3_ABI_EVM","to","tStr","token","ownerAddress","spenderAddress","approveToken","import_bignumber","import_starknet","CAIROVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","amount","contract","Orbiter_V3_ABI_STARKNET","data","ext","item","call","BigNumber","ownerAddress","spenderAddress","approveToken","STARKNET_ERC20_ABI","import_bignumber","IMXVMService","VMService","routerType","amount","token","vc","decimals","value","BigNumber","valueWithVc","srcAddress","srcToken","dstAddress","dstToken","makerAddress","chainId","contractAddress","channelId","call","import_bignumber","LPRVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","call","BigNumber","import_bignumber","import_ethers","import_web3","import_spl_token","import_anchor","SolanaVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","simulationAmountPlusWithHoldingFee","ext","srcAddressPublicKey","srcTokenPublicKey","makerAddressPublicKey","srcAddressTokenAccount","makerAddressTokenAccount","transaction","contractAddressPublicKey","program","SOLANA_OPOOL_ABI","group","state","feeReceiver","tokenToReceiver","memo","BigNumber","import_bignumber","import_tonweb","TVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","data","srcTonAddress","TonWeb","makerTonAddress","forwardPayload","BigNumber","queryId","jettonTransferBody","payloadBase64","import_bignumber","ZKLITEVMService","VMService","routerType","amount","token","vc","decimals","value","BigNumber","valueWithVc","srcAddress","srcToken","dstAddress","dstToken","makerAddress","chainId","contractAddress","channelId","call","import_tronweb","TRONVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","url","tronWeb","callData","bytesData","functionSelector","params","transaction","ownerAddress","spenderAddress","approveToken","import_bignumber","bitcoin","BTCVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","psbt","callDataBuffer","BigNumber","import_bignumber","import_ethers","FUELVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","hexCall","BigNumber","import_bignumber","APTOSVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","hexCall","requestData","BigNumber","import_bignumber","SUIVMService","VMService","routerType","srcAddress","srcToken","dstAddress","dstToken","value","vc","makerAddress","chainId","contractAddress","channelId","hexCall","BigNumber","VMServiceFactory","configService","__publicField","vmType","service","EVMService","IMXVMService","LPRVMService","SolanaVMService","CAIROVMService","TVMService","ZKLITEVMService","TRONVMService","BTCVMService","FUELVMService","APTOSVMService","SUIVMService","RouterState","TxType","ConfigService","_apiService","_config","__publicField","chainConfigs","error","e","routerConfigs","routerConfig","basePointRules","tradePair","line","router","chainName","chainConfig","chainId","symbol","chainRules","basePoint","ApiService","apiEndpoint","apiKey","channelId","__publicField","path","params","url","key","param","headers","response","data","chainConfigs","dealerId","entry","routers","line","value","nonce","dealer","brokerageTradeFeeRate","address","txType","offset","hash","chainId","import_bignumber","import_vm_core","padStart","str","length","chars","paddingLength","getTonOrbiterHash","chainId","hash","response","Router","srcChainConfig","srcToken","dstChainConfig","dstToken","basePoint","_VMService","routerConfig","routerTypes","_channelId","address","srcAddress","dstAddress","amount","ext","value","BigNumber","vc","routerType","simulationAmountPlusWithHoldingFeeGroup","ownerAddress","token","spenderAddress","minAmt","withholdingFee","amountBigNumber","maxAmt","tradeFeeRate","originWithholdingFee","item","row","sendAmount","nonce","safeLength","targetNonce","padStart","result","receiveAmount","tokenList","subWithholdingFeeAmount","tFee","amountE","securityCode","brokerageTradeFeeRate","withholdingFeeAmount","targetSafeCode","preservePrecision","tradeAmount","tradingFeeAmount","brokerageTradeFeeAmount","responseAmountStr","responseAmountArr","amountAfter","symbol","decimal","OrbiterClient","_OrbiterClient","config","__publicField","ApiService","ConfigService","VMServiceFactory","client","tradePair","srcChainConfig","srcVMService","srcToken","token","dstChainConfig","dstToken","routerConfig","availableRouterTypes","firstRouterType","secondaryRouterType","basePoint","channelId","Router","routerType","chainConfig","chains","symbols","chain","chainId","availableTokens","availableTokenAddresses","availableRouter","routerConfigs","tradePairs","router","srcChainId","srcTokenSymbol","address","txType","offset","hash","value","getTonOrbiterHash","error","param"]}