@allbridge/bridge-core-sdk 3.29.2-alpha.2 → 3.30.0-alpha.2

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.
Files changed (46) hide show
  1. package/dist/browser/index.js +2 -2
  2. package/dist/browser/index.js.map +4 -4
  3. package/dist/cjs/index.js +2 -2
  4. package/dist/cjs/index.js.map +4 -4
  5. package/dist/esm/index.js +2 -2
  6. package/dist/esm/index.js.map +4 -4
  7. package/dist/src/client/core-api/core-api-mapper.js +2 -0
  8. package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
  9. package/dist/src/client/core-api/core-api.model.d.ts +13 -2
  10. package/dist/src/client/core-api/core-api.model.js +2 -0
  11. package/dist/src/client/core-api/core-api.model.js.map +1 -1
  12. package/dist/src/index.js +4 -0
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/services/bridge/evm/index.d.ts +2 -0
  15. package/dist/src/services/bridge/evm/index.js +32 -0
  16. package/dist/src/services/bridge/evm/index.js.map +1 -1
  17. package/dist/src/services/bridge/index.js +7 -0
  18. package/dist/src/services/bridge/index.js.map +1 -1
  19. package/dist/src/services/bridge/sol/bridge-tx-service.js +2 -0
  20. package/dist/src/services/bridge/sol/bridge-tx-service.js.map +1 -1
  21. package/dist/src/services/bridge/sol/payer-with-token-service.js +2 -0
  22. package/dist/src/services/bridge/sol/payer-with-token-service.js.map +1 -1
  23. package/dist/src/services/bridge/stx/index.js +24 -16
  24. package/dist/src/services/bridge/stx/index.js.map +1 -1
  25. package/dist/src/services/bridge/sui/index.js +2 -0
  26. package/dist/src/services/bridge/sui/index.js.map +1 -1
  27. package/dist/src/services/bridge/trx/index.js +2 -0
  28. package/dist/src/services/bridge/trx/index.js.map +1 -1
  29. package/dist/src/services/bridge/utils.d.ts +1 -0
  30. package/dist/src/services/bridge/utils.js +35 -8
  31. package/dist/src/services/bridge/utils.js.map +1 -1
  32. package/dist/src/services/index.d.ts +3 -0
  33. package/dist/src/services/index.js +42 -0
  34. package/dist/src/services/index.js.map +1 -1
  35. package/dist/src/services/models/abi/XReserveBridge.d.ts +246 -0
  36. package/dist/src/services/models/abi/XReserveBridge.js +318 -0
  37. package/dist/src/services/models/abi/XReserveBridge.js.map +1 -0
  38. package/dist/src/services/models/stx/clarigen-types.d.ts +72 -0
  39. package/dist/src/services/models/stx/clarigen-types.js +226 -0
  40. package/dist/src/services/models/stx/clarigen-types.js.map +1 -1
  41. package/dist/src/tokens-info/tokens-info.model.d.ts +11 -0
  42. package/dist/src/tokens-info/tokens-info.model.js.map +1 -1
  43. package/dist/src/version.d.ts +1 -1
  44. package/dist/src/version.js +1 -1
  45. package/dist/src/version.js.map +1 -1
  46. package/package.json +1 -1
@@ -203,6 +203,8 @@ class AllbridgeCoreSdkService {
203
203
  case core_api_model_1.Messenger.CCTP:
204
204
  case core_api_model_1.Messenger.CCTP_V2:
205
205
  return this.getAmountToBeReceivedComputeCctp(amountToSendFloat, sourceChainToken, destinationChainToken, messenger);
206
+ case core_api_model_1.Messenger.X_RESERVE:
207
+ return this.getAmountToBeReceivedComputeXReserve(amountToSendFloat, sourceChainToken, destinationChainToken);
206
208
  case core_api_model_1.Messenger.OFT:
207
209
  return this.getAmountToBeReceivedComputeOft(amountToSendFloat, sourceChainToken, destinationChainToken);
208
210
  }
@@ -239,6 +241,20 @@ class AllbridgeCoreSdkService {
239
241
  }
240
242
  }
241
243
  }
244
+ getAmountToBeReceivedComputeXReserve(amountToSendFloat, sourceChainToken, destinationChainToken) {
245
+ (0, utils_1.validateAmountGtZero)(amountToSendFloat);
246
+ (0, utils_1.validateAmountDecimals)("amountToSendFloat", amountToSendFloat, sourceChainToken.decimals);
247
+ const xReserve = this.getXReserveConfig(sourceChainToken, destinationChainToken);
248
+ const amountToSend = (0, calculation_1.convertFloatAmountToInt)(amountToSendFloat, sourceChainToken.decimals);
249
+ const result = amountToSend.mul((0, big_js_1.Big)(1).minus(xReserve.feeShare)).minus(xReserve.feeConst).round(0, big_js_1.Big.roundDown);
250
+ if (result.lte(0)) {
251
+ const minAmount = (0, big_js_1.Big)(xReserve.feeConst).div((0, big_js_1.Big)(1).minus(xReserve.feeShare));
252
+ const minAmountFloat = (0, calculation_1.convertIntAmountToFloat)(minAmount, sourceChainToken.decimals);
253
+ throw new index_1.SdkError(`Amount is too low for xReserve route: amount must be greater than ${minAmountFloat.toFixed(2, big_js_1.Big.roundUp)} ${sourceChainToken.symbol ?? ""}`.trim());
254
+ }
255
+ const resultInDestPrecision = (0, calculation_1.convertAmountPrecision)(result, sourceChainToken.decimals, destinationChainToken.decimals).round(0);
256
+ return (0, calculation_1.convertIntAmountToFloat)(resultInDestPrecision, destinationChainToken.decimals).toFixed();
257
+ }
242
258
  async getAmountToBeReceivedComputeOft(amountToSendFloat, sourceChainToken, destinationChainToken) {
243
259
  (0, utils_1.validateAmountGtZero)(amountToSendFloat);
244
260
  (0, utils_1.validateAmountDecimals)("amountToSendFloat", amountToSendFloat, sourceChainToken.decimals);
@@ -276,6 +292,8 @@ class AllbridgeCoreSdkService {
276
292
  case core_api_model_1.Messenger.CCTP:
277
293
  case core_api_model_1.Messenger.CCTP_V2:
278
294
  return this.getAmountToSendComputeCctp(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger);
295
+ case core_api_model_1.Messenger.X_RESERVE:
296
+ return this.getAmountToSendComputeXReserve(amountToBeReceivedFloat, sourceChainToken, destinationChainToken);
279
297
  case core_api_model_1.Messenger.OFT:
280
298
  return this.getAmountToSendComputeOft(amountToBeReceivedFloat, sourceChainToken, destinationChainToken);
281
299
  }
@@ -316,6 +334,30 @@ class AllbridgeCoreSdkService {
316
334
  }
317
335
  }
318
336
  }
337
+ getAmountToSendComputeXReserve(amountToBeReceivedFloat, sourceChainToken, destinationChainToken) {
338
+ (0, utils_1.validateAmountGtZero)(amountToBeReceivedFloat);
339
+ (0, utils_1.validateAmountDecimals)("amountToBeReceivedFloat", amountToBeReceivedFloat, destinationChainToken.decimals);
340
+ const xReserve = this.getXReserveConfig(sourceChainToken, destinationChainToken);
341
+ const amountToBeReceived = (0, calculation_1.convertFloatAmountToInt)(amountToBeReceivedFloat, destinationChainToken.decimals);
342
+ const amountInSourcePrecision = (0, calculation_1.convertAmountPrecision)(amountToBeReceived, destinationChainToken.decimals, sourceChainToken.decimals).round(0);
343
+ const result = amountInSourcePrecision
344
+ .plus(xReserve.feeConst)
345
+ .div((0, big_js_1.Big)(1).minus(xReserve.feeShare))
346
+ .round(0, big_js_1.Big.roundUp);
347
+ if (result.lte(0)) {
348
+ throw new index_1.SdkError("Amount is too low for xReserve route");
349
+ }
350
+ return (0, calculation_1.convertIntAmountToFloat)(result, sourceChainToken.decimals).toFixed();
351
+ }
352
+ getXReserveConfig(sourceChainToken, destinationChainToken) {
353
+ if (!sourceChainToken.xReserve || !destinationChainToken.xReserve) {
354
+ throw new index_1.SdkError("Such route does not support xReserve protocol");
355
+ }
356
+ if ((0, big_js_1.Big)(sourceChainToken.xReserve.feeShare).gte(1)) {
357
+ throw new index_1.SdkError("xReserve feeShare must be less than 1");
358
+ }
359
+ return sourceChainToken.xReserve;
360
+ }
319
361
  async getAmountToSendComputeOft(amountToBeReceivedFloat, sourceChainToken, destinationChainToken) {
320
362
  (0, utils_1.validateAmountGtZero)(amountToBeReceivedFloat);
321
363
  (0, utils_1.validateAmountDecimals)("amountToBeReceivedFloat", amountToBeReceivedFloat, destinationChainToken.decimals);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Big } from \"big.js\";\nimport { Chains } from \"../chains\";\nimport { ApiClientImpl } from \"../client/core-api/api-client\";\nimport { ApiClientCaching } from \"../client/core-api/api-client-caching\";\nimport {\n AddressStatus,\n CheckAddressResponse,\n GasBalanceResponse,\n Messenger,\n PendingInfoDTO,\n TransferStatusResponse,\n} from \"../client/core-api/core-api.model\";\nimport { AllbridgeCoreClientImpl } from \"../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered, AllbridgeCoreClientFilteredImpl } from \"../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreClientPoolInfoCaching } from \"../client/core-api/core-client-pool-info-caching\";\nimport { mainnet } from \"../configs\";\nimport {\n AllbridgeCoreSdkOptions,\n BasicChainProperties,\n NodeRpcUrls,\n OFTDoesNotSupportedError,\n SdkError,\n} from \"../index\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitResponse,\n GasFeeOptions,\n GetTokenBalanceParams,\n InsufficientPoolLiquidityError,\n NodeRpcUrlNotInitializedError,\n PendingStatusInfoResponse,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n} from \"../models\";\nimport { ChainDetailsMap, PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../tokens-info\";\nimport {\n aprInPercents,\n convertAmountPrecision,\n convertFloatAmountToInt,\n convertIntAmountToFloat,\n fromSystemPrecision,\n getFeePercent,\n getSwapFromVUsdPoolInfo,\n swapFromVUsd,\n swapFromVUsdReverse,\n swapToVUsd,\n swapToVUsdReverse,\n} from \"../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../utils/calculation/constants\";\nimport { getSendAmountDetails } from \"../utils/calculation/swap-and-bridge-details\";\nimport {\n swapAndBridgeFeeCalculation,\n swapAndBridgeFeeCalculationReverse,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nimport { getPoolInfoByToken, validateAmountDecimals, validateAmountGtZero } from \"../utils/utils\";\nimport { BridgeService, DefaultBridgeService } from \"./bridge\";\nimport { GetNativeTokenBalanceParams } from \"./bridge/models\";\nimport { getExtraGasMaxLimits, getGasFeeOptions } from \"./bridge/utils\";\nimport { DefaultLiquidityPoolService, LiquidityPoolService } from \"./liquidity-pool\";\nimport { DefaultTokenService, TokenService } from \"./token\";\nimport { DefaultYieldService, YieldService } from \"./yield\";\n\nexport class NodeRpcUrlsConfig {\n constructor(private nodeRpcUrls: NodeRpcUrls) {}\n\n getNodeRpcUrl(chainSymbol: string): string {\n const nodeRpcUrl = this.nodeRpcUrls[chainSymbol];\n if (nodeRpcUrl !== undefined) {\n return nodeRpcUrl;\n } else {\n throw new NodeRpcUrlNotInitializedError(chainSymbol);\n }\n }\n}\n\nexport class AllbridgeCoreSdkService {\n readonly api: AllbridgeCoreClientFiltered;\n\n private readonly tokenService: TokenService;\n\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n yield: YieldService;\n\n constructor(\n public readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions = mainnet\n ) {\n Chains.addChainsProperties(params.additionalChainsProperties as Record<string, BasicChainProperties>);\n const apiClient = new ApiClientImpl(params);\n const apiClientCaching = new ApiClientCaching(apiClient);\n const coreClient = new AllbridgeCoreClientImpl(apiClientCaching);\n const coreClientPoolInfoCaching = new AllbridgeCoreClientPoolInfoCaching(coreClient);\n this.api = new AllbridgeCoreClientFilteredImpl(coreClientPoolInfoCaching, params);\n this.tokenService = new DefaultTokenService(this.api, nodeRpcUrlsConfig, params);\n this.bridge = new DefaultBridgeService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.pool = new DefaultLiquidityPoolService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.yield = new DefaultYieldService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.params = params;\n }\n\n async chainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n return this.api.getChainDetailsMap(type);\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return this.api.tokens(type);\n }\n\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n const map = await this.api.getChainDetailsMap(type);\n const chainDetails = map[chainSymbol];\n if (!chainDetails) {\n return [];\n }\n return chainDetails.tokens;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.api.getTransferStatus(chainSymbol, txId);\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.api.getGasBalance(chainSymbol, address);\n }\n\n async checkAddress(): Promise<CheckAddressResponse> {\n return new Promise((resolve) => {\n resolve({\n status: AddressStatus.OK,\n gasBalance: null,\n });\n });\n }\n\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmountInt = swapToVUsd(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken)\n );\n const destPoolInfo = await getPoolInfoByToken(this.api, destToken);\n const amountResultIntFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolInfo\n );\n\n let pendingInfoDTO: PendingInfoDTO | undefined;\n const pendingInfo = await this.api.getPendingInfo();\n for (const tokenAddress in pendingInfo[destToken.chainSymbol]) {\n const info = pendingInfo[destToken.chainSymbol];\n if (!info) {\n throw new SdkError(\"Cannot find pending info for \" + destToken.chainSymbol);\n }\n pendingInfoDTO = info[tokenAddress];\n }\n if (pendingInfoDTO) {\n const destPoolAfterPending = getSwapFromVUsdPoolInfo(pendingInfoDTO.totalSentAmount, destPoolInfo);\n const amountResultIntAfterPendingFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolAfterPending\n );\n\n let estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n if (Big(amountResultIntAfterPendingFormatted.int).gt(amountResultIntFormatted.int)) {\n estimatedAmount = { min: amountResultIntFormatted, max: amountResultIntAfterPendingFormatted };\n } else {\n estimatedAmount = { min: amountResultIntAfterPendingFormatted, max: amountResultIntFormatted };\n }\n\n return {\n pendingTxs: pendingInfoDTO.pendingTxs,\n pendingAmount: {\n [AmountFormat.INT]: convertAmountPrecision(\n pendingInfoDTO.totalSentAmount,\n SYSTEM_PRECISION,\n destToken.decimals\n ).toFixed(0),\n [AmountFormat.FLOAT]: convertIntAmountToFloat(pendingInfoDTO.totalSentAmount, SYSTEM_PRECISION).toFixed(),\n },\n estimatedAmount,\n };\n }\n return {\n pendingTxs: 0,\n pendingAmount: {\n [AmountFormat.INT]: \"0\",\n [AmountFormat.FLOAT]: \"0\",\n },\n estimatedAmount: {\n min: amountResultIntFormatted,\n max: amountResultIntFormatted,\n },\n };\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.tokenService.getTokenBalance(params, provider);\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.tokenService.getNativeTokenBalance(params, provider);\n }\n\n async calculateFeePercentOnSourceChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const vUsdInSourcePrecision = fromSystemPrecision(vUsdInSystemPrecision, sourceChainToken.decimals);\n return getFeePercent(amountInt, vUsdInSourcePrecision);\n }\n\n async calculateFeePercentOnDestinationChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const usd = swapFromVUsd(\n vUsdInSystemPrecision,\n destinationChainToken,\n await getPoolInfoByToken(this.api, destinationChainToken)\n );\n const vUsdInDestinationPrecision = fromSystemPrecision(vUsdInSystemPrecision, destinationChainToken.decimals);\n return getFeePercent(vUsdInDestinationPrecision, usd);\n }\n\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n return {\n amountToSendFloat: Big(amountToSendFloat).toFixed(),\n amountToBeReceivedFloat: await this.getAmountToBeReceived(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n return {\n amountToSendFloat: await this.getAmountToSend(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n amountToBeReceivedFloat: Big(amountToBeReceivedFloat).toFixed(),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToBeReceived(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<string> {\n return this.getAmountToBeReceivedCompute(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n async () => await getPoolInfoByToken(this.api, sourceChainToken),\n async () => await getPoolInfoByToken(this.api, destinationChainToken)\n );\n }\n\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.getAmountToBeReceivedCompute(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n async () => await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider),\n async () => await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider)\n );\n }\n\n async getAmountToBeReceivedCompute(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger = Messenger.ALLBRIDGE,\n sourcePool: () => Promise<PoolInfo>,\n destPool: () => Promise<PoolInfo>\n ): Promise<string> {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE: {\n return this.getAmountToBeReceivedComputeWithPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n await sourcePool(),\n await destPool()\n );\n }\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.getAmountToBeReceivedComputeCctp(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n case Messenger.OFT:\n return this.getAmountToBeReceivedComputeOft(amountToSendFloat, sourceChainToken, destinationChainToken);\n }\n }\n\n getAmountToBeReceivedComputeWithPools(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n const vUsd = swapToVUsd(amountToSend, sourceChainToken, sourcePool);\n return this.getAmountFromVUsdFormatted(vUsd, destinationChainToken, destinationPool).float;\n }\n\n getAmountToBeReceivedComputeCctp(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger.CCTP | Messenger.CCTP_V2\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n switch (messenger) {\n case Messenger.CCTP: {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n case Messenger.CCTP_V2: {\n if (\n !sourceChainToken.cctpV2Address ||\n !destinationChainToken.cctpV2Address ||\n !sourceChainToken.cctpV2FeeShare\n ) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(sourceChainToken.cctpV2FeeShare)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n }\n }\n\n async getAmountToBeReceivedComputeOft(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<string> {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n if (\n !sourceChainToken.oftBridgeAddress ||\n !destinationChainToken.oftBridgeAddress ||\n sourceChainToken.oftId !== destinationChainToken.oftId\n ) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const { adminFeeShareWithExtras } = await this.api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger: Messenger.OFT,\n sourceToken: sourceChainToken.tokenAddress,\n });\n if (!adminFeeShareWithExtras) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(adminFeeShareWithExtras)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n\n async getAmountToSend(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<string> {\n return this.getAmountToSendCompute(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n () => getPoolInfoByToken(this.api, sourceChainToken),\n () => getPoolInfoByToken(this.api, destinationChainToken)\n );\n }\n\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.getAmountToSendCompute(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n () => this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider),\n () => this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider)\n );\n }\n\n async getAmountToSendCompute(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger = Messenger.ALLBRIDGE,\n sourcePool: () => Promise<PoolInfo>,\n destPool: () => Promise<PoolInfo>\n ): Promise<string> {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE: {\n return this.getAmountToSendComputeWithPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n await sourcePool(),\n await destPool()\n );\n }\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.getAmountToSendComputeCctp(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n case Messenger.OFT:\n return this.getAmountToSendComputeOft(amountToBeReceivedFloat, sourceChainToken, destinationChainToken);\n }\n }\n\n getAmountToSendComputeWithPools(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n const vUsd = swapFromVUsdReverse(amountToBeReceived, destinationChainToken, destinationPool);\n const resultInt = swapToVUsdReverse(vUsd, sourceChainToken, sourcePool);\n if (Big(resultInt).lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return convertIntAmountToFloat(resultInt, sourceChainToken.decimals).toFixed();\n }\n\n getAmountToSendComputeCctp(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger.CCTP | Messenger.CCTP_V2\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n switch (messenger) {\n case Messenger.CCTP: {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n case Messenger.CCTP_V2: {\n if (\n !sourceChainToken.cctpV2Address ||\n !destinationChainToken.cctpV2Address ||\n !sourceChainToken.cctpV2FeeShare\n ) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(sourceChainToken.cctpV2FeeShare)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n }\n }\n\n async getAmountToSendComputeOft(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<string> {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n if (\n !sourceChainToken.oftId ||\n !destinationChainToken.oftId ||\n !sourceChainToken.oftBridgeAddress ||\n sourceChainToken.oftId !== destinationChainToken.oftId\n ) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const { adminFeeShareWithExtras } = await this.api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger: Messenger.OFT,\n sourceToken: sourceChainToken.tokenAddress,\n });\n if (!adminFeeShareWithExtras) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(adminFeeShareWithExtras)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return getGasFeeOptions(sourceChainToken, destinationChainToken.allbridgeChainId, messenger, this.api);\n }\n\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return sourceChainToken.transferTime?.[destinationChainToken.chainSymbol]?.[messenger] ?? null;\n }\n\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return await this.api.getPoolInfoByKey({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress });\n }\n\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n if (tokens) {\n const tokensArray = tokens instanceof Array ? tokens : [tokens];\n const poolKeys: PoolKeyObject[] = tokensArray.map((t) => {\n return { chainSymbol: t.chainSymbol, poolAddress: t.poolAddress };\n });\n return this.api.refreshPoolInfo(poolKeys);\n }\n return this.api.refreshPoolInfo();\n }\n\n aprInPercents(apr: string): string {\n return aprInPercents(apr);\n }\n\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<ExtraGasMaxLimitResponse> {\n return await getExtraGasMaxLimits(sourceChainToken, destinationChainToken, messenger, this.api);\n }\n\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmount = swapToVUsd(amountInTokenPrecision, sourceToken, await getPoolInfoByToken(this.api, sourceToken));\n return {\n [AmountFormat.INT]: vUsdAmount,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(vUsdAmount, SYSTEM_PRECISION).toFixed(),\n };\n }\n\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.getAmountFromVUsdFormatted(vUsdAmount, destToken, await getPoolInfoByToken(this.api, destToken));\n }\n\n private getAmountFromVUsdFormatted(\n vUsdAmountInt: string,\n destToken: TokenWithChainDetails,\n destPoolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n ): AmountFormatted {\n validateAmountGtZero(vUsdAmountInt);\n const amountResultInt = swapFromVUsd(vUsdAmountInt, destToken, destPoolInfo);\n if (Big(amountResultInt).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return {\n [AmountFormat.INT]: amountResultInt,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(amountResultInt, destToken.decimals).toFixed(),\n };\n }\n\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return swapAndBridgeFeeCalculation(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n }\n\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n const result = swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n const newAmount = result.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;\n if (Big(newAmount).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return result;\n }\n\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n return getSendAmountDetails(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken),\n destToken,\n await getPoolInfoByToken(this.api, destToken)\n );\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Big } from \"big.js\";\nimport { Chains } from \"../chains\";\nimport { ApiClientImpl } from \"../client/core-api/api-client\";\nimport { ApiClientCaching } from \"../client/core-api/api-client-caching\";\nimport {\n AddressStatus,\n CheckAddressResponse,\n GasBalanceResponse,\n Messenger,\n PendingInfoDTO,\n TransferStatusResponse,\n} from \"../client/core-api/core-api.model\";\nimport { AllbridgeCoreClientImpl } from \"../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered, AllbridgeCoreClientFilteredImpl } from \"../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreClientPoolInfoCaching } from \"../client/core-api/core-client-pool-info-caching\";\nimport { mainnet } from \"../configs\";\nimport {\n AllbridgeCoreSdkOptions,\n BasicChainProperties,\n NodeRpcUrls,\n OFTDoesNotSupportedError,\n SdkError,\n} from \"../index\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitResponse,\n GasFeeOptions,\n GetTokenBalanceParams,\n InsufficientPoolLiquidityError,\n NodeRpcUrlNotInitializedError,\n PendingStatusInfoResponse,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n} from \"../models\";\nimport { ChainDetailsMap, PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../tokens-info\";\nimport {\n aprInPercents,\n convertAmountPrecision,\n convertFloatAmountToInt,\n convertIntAmountToFloat,\n fromSystemPrecision,\n getFeePercent,\n getSwapFromVUsdPoolInfo,\n swapFromVUsd,\n swapFromVUsdReverse,\n swapToVUsd,\n swapToVUsdReverse,\n} from \"../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../utils/calculation/constants\";\nimport { getSendAmountDetails } from \"../utils/calculation/swap-and-bridge-details\";\nimport {\n swapAndBridgeFeeCalculation,\n swapAndBridgeFeeCalculationReverse,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nimport { getPoolInfoByToken, validateAmountDecimals, validateAmountGtZero } from \"../utils/utils\";\nimport { BridgeService, DefaultBridgeService } from \"./bridge\";\nimport { GetNativeTokenBalanceParams } from \"./bridge/models\";\nimport { getExtraGasMaxLimits, getGasFeeOptions } from \"./bridge/utils\";\nimport { DefaultLiquidityPoolService, LiquidityPoolService } from \"./liquidity-pool\";\nimport { DefaultTokenService, TokenService } from \"./token\";\nimport { DefaultYieldService, YieldService } from \"./yield\";\n\nexport class NodeRpcUrlsConfig {\n constructor(private nodeRpcUrls: NodeRpcUrls) {}\n\n getNodeRpcUrl(chainSymbol: string): string {\n const nodeRpcUrl = this.nodeRpcUrls[chainSymbol];\n if (nodeRpcUrl !== undefined) {\n return nodeRpcUrl;\n } else {\n throw new NodeRpcUrlNotInitializedError(chainSymbol);\n }\n }\n}\n\nexport class AllbridgeCoreSdkService {\n readonly api: AllbridgeCoreClientFiltered;\n\n private readonly tokenService: TokenService;\n\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n yield: YieldService;\n\n constructor(\n public readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions = mainnet\n ) {\n Chains.addChainsProperties(params.additionalChainsProperties as Record<string, BasicChainProperties>);\n const apiClient = new ApiClientImpl(params);\n const apiClientCaching = new ApiClientCaching(apiClient);\n const coreClient = new AllbridgeCoreClientImpl(apiClientCaching);\n const coreClientPoolInfoCaching = new AllbridgeCoreClientPoolInfoCaching(coreClient);\n this.api = new AllbridgeCoreClientFilteredImpl(coreClientPoolInfoCaching, params);\n this.tokenService = new DefaultTokenService(this.api, nodeRpcUrlsConfig, params);\n this.bridge = new DefaultBridgeService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.pool = new DefaultLiquidityPoolService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.yield = new DefaultYieldService(this.api, nodeRpcUrlsConfig, params, this.tokenService);\n this.params = params;\n }\n\n async chainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n return this.api.getChainDetailsMap(type);\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return this.api.tokens(type);\n }\n\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n const map = await this.api.getChainDetailsMap(type);\n const chainDetails = map[chainSymbol];\n if (!chainDetails) {\n return [];\n }\n return chainDetails.tokens;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.api.getTransferStatus(chainSymbol, txId);\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.api.getGasBalance(chainSymbol, address);\n }\n\n async checkAddress(): Promise<CheckAddressResponse> {\n return new Promise((resolve) => {\n resolve({\n status: AddressStatus.OK,\n gasBalance: null,\n });\n });\n }\n\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmountInt = swapToVUsd(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken)\n );\n const destPoolInfo = await getPoolInfoByToken(this.api, destToken);\n const amountResultIntFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolInfo\n );\n\n let pendingInfoDTO: PendingInfoDTO | undefined;\n const pendingInfo = await this.api.getPendingInfo();\n for (const tokenAddress in pendingInfo[destToken.chainSymbol]) {\n const info = pendingInfo[destToken.chainSymbol];\n if (!info) {\n throw new SdkError(\"Cannot find pending info for \" + destToken.chainSymbol);\n }\n pendingInfoDTO = info[tokenAddress];\n }\n if (pendingInfoDTO) {\n const destPoolAfterPending = getSwapFromVUsdPoolInfo(pendingInfoDTO.totalSentAmount, destPoolInfo);\n const amountResultIntAfterPendingFormatted: AmountFormatted = this.getAmountFromVUsdFormatted(\n vUsdAmountInt,\n destToken,\n destPoolAfterPending\n );\n\n let estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n if (Big(amountResultIntAfterPendingFormatted.int).gt(amountResultIntFormatted.int)) {\n estimatedAmount = { min: amountResultIntFormatted, max: amountResultIntAfterPendingFormatted };\n } else {\n estimatedAmount = { min: amountResultIntAfterPendingFormatted, max: amountResultIntFormatted };\n }\n\n return {\n pendingTxs: pendingInfoDTO.pendingTxs,\n pendingAmount: {\n [AmountFormat.INT]: convertAmountPrecision(\n pendingInfoDTO.totalSentAmount,\n SYSTEM_PRECISION,\n destToken.decimals\n ).toFixed(0),\n [AmountFormat.FLOAT]: convertIntAmountToFloat(pendingInfoDTO.totalSentAmount, SYSTEM_PRECISION).toFixed(),\n },\n estimatedAmount,\n };\n }\n return {\n pendingTxs: 0,\n pendingAmount: {\n [AmountFormat.INT]: \"0\",\n [AmountFormat.FLOAT]: \"0\",\n },\n estimatedAmount: {\n min: amountResultIntFormatted,\n max: amountResultIntFormatted,\n },\n };\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.tokenService.getTokenBalance(params, provider);\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.tokenService.getNativeTokenBalance(params, provider);\n }\n\n async calculateFeePercentOnSourceChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const vUsdInSourcePrecision = fromSystemPrecision(vUsdInSystemPrecision, sourceChainToken.decimals);\n return getFeePercent(amountInt, vUsdInSourcePrecision);\n }\n\n async calculateFeePercentOnDestinationChain(\n amountFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n validateAmountGtZero(amountFloat);\n validateAmountDecimals(\"amountFloat\", amountFloat, sourceChainToken.decimals);\n const amountInt = convertFloatAmountToInt(amountFloat, sourceChainToken.decimals);\n if (amountInt.eq(0)) {\n return 0;\n }\n const vUsdInSystemPrecision = swapToVUsd(\n amountInt,\n sourceChainToken,\n await getPoolInfoByToken(this.api, sourceChainToken)\n );\n const usd = swapFromVUsd(\n vUsdInSystemPrecision,\n destinationChainToken,\n await getPoolInfoByToken(this.api, destinationChainToken)\n );\n const vUsdInDestinationPrecision = fromSystemPrecision(vUsdInSystemPrecision, destinationChainToken.decimals);\n return getFeePercent(vUsdInDestinationPrecision, usd);\n }\n\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n return {\n amountToSendFloat: Big(amountToSendFloat).toFixed(),\n amountToBeReceivedFloat: await this.getAmountToBeReceived(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n return {\n amountToSendFloat: await this.getAmountToSend(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n ),\n amountToBeReceivedFloat: Big(amountToBeReceivedFloat).toFixed(),\n gasFeeOptions: await this.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger),\n };\n }\n\n async getAmountToBeReceived(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<string> {\n return this.getAmountToBeReceivedCompute(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n async () => await getPoolInfoByToken(this.api, sourceChainToken),\n async () => await getPoolInfoByToken(this.api, destinationChainToken)\n );\n }\n\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.getAmountToBeReceivedCompute(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n async () => await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider),\n async () => await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider)\n );\n }\n\n async getAmountToBeReceivedCompute(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger = Messenger.ALLBRIDGE,\n sourcePool: () => Promise<PoolInfo>,\n destPool: () => Promise<PoolInfo>\n ): Promise<string> {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE: {\n return this.getAmountToBeReceivedComputeWithPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n await sourcePool(),\n await destPool()\n );\n }\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.getAmountToBeReceivedComputeCctp(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n case Messenger.X_RESERVE:\n return this.getAmountToBeReceivedComputeXReserve(amountToSendFloat, sourceChainToken, destinationChainToken);\n case Messenger.OFT:\n return this.getAmountToBeReceivedComputeOft(amountToSendFloat, sourceChainToken, destinationChainToken);\n }\n }\n\n getAmountToBeReceivedComputeWithPools(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n const vUsd = swapToVUsd(amountToSend, sourceChainToken, sourcePool);\n return this.getAmountFromVUsdFormatted(vUsd, destinationChainToken, destinationPool).float;\n }\n\n getAmountToBeReceivedComputeCctp(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger.CCTP | Messenger.CCTP_V2\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n switch (messenger) {\n case Messenger.CCTP: {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n case Messenger.CCTP_V2: {\n if (\n !sourceChainToken.cctpV2Address ||\n !destinationChainToken.cctpV2Address ||\n !sourceChainToken.cctpV2FeeShare\n ) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(sourceChainToken.cctpV2FeeShare)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n }\n }\n\n getAmountToBeReceivedComputeXReserve(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const xReserve = this.getXReserveConfig(sourceChainToken, destinationChainToken);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n const result = amountToSend.mul(Big(1).minus(xReserve.feeShare)).minus(xReserve.feeConst).round(0, Big.roundDown);\n if (result.lte(0)) {\n const minAmount = Big(xReserve.feeConst).div(Big(1).minus(xReserve.feeShare));\n const minAmountFloat = convertIntAmountToFloat(minAmount, sourceChainToken.decimals);\n\n throw new SdkError(\n `Amount is too low for xReserve route: amount must be greater than ${minAmountFloat.toFixed(2, Big.roundUp)} ${sourceChainToken.symbol ?? \"\"}`.trim()\n );\n }\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n\n async getAmountToBeReceivedComputeOft(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<string> {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n if (\n !sourceChainToken.oftBridgeAddress ||\n !destinationChainToken.oftBridgeAddress ||\n sourceChainToken.oftId !== destinationChainToken.oftId\n ) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const { adminFeeShareWithExtras } = await this.api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger: Messenger.OFT,\n sourceToken: sourceChainToken.tokenAddress,\n });\n if (!adminFeeShareWithExtras) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const result = amountToSend.mul(Big(1).minus(adminFeeShareWithExtras)).round(0, Big.roundUp);\n const resultInDestPrecision = convertAmountPrecision(\n result,\n sourceChainToken.decimals,\n destinationChainToken.decimals\n ).round(0);\n\n return convertIntAmountToFloat(resultInDestPrecision, destinationChainToken.decimals).toFixed();\n }\n\n async getAmountToSend(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<string> {\n return this.getAmountToSendCompute(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n () => getPoolInfoByToken(this.api, sourceChainToken),\n () => getPoolInfoByToken(this.api, destinationChainToken)\n );\n }\n\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.getAmountToSendCompute(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n () => this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider),\n () => this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider)\n );\n }\n\n async getAmountToSendCompute(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger = Messenger.ALLBRIDGE,\n sourcePool: () => Promise<PoolInfo>,\n destPool: () => Promise<PoolInfo>\n ): Promise<string> {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE: {\n return this.getAmountToSendComputeWithPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n await sourcePool(),\n await destPool()\n );\n }\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.getAmountToSendComputeCctp(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n case Messenger.X_RESERVE:\n return this.getAmountToSendComputeXReserve(amountToBeReceivedFloat, sourceChainToken, destinationChainToken);\n case Messenger.OFT:\n return this.getAmountToSendComputeOft(amountToBeReceivedFloat, sourceChainToken, destinationChainToken);\n }\n }\n\n getAmountToSendComputeWithPools(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n const vUsd = swapFromVUsdReverse(amountToBeReceived, destinationChainToken, destinationPool);\n const resultInt = swapToVUsdReverse(vUsd, sourceChainToken, sourcePool);\n if (Big(resultInt).lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return convertIntAmountToFloat(resultInt, sourceChainToken.decimals).toFixed();\n }\n\n getAmountToSendComputeCctp(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger.CCTP | Messenger.CCTP_V2\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n switch (messenger) {\n case Messenger.CCTP: {\n if (!sourceChainToken.cctpAddress || !destinationChainToken.cctpAddress || !sourceChainToken.cctpFeeShare) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(sourceChainToken.cctpFeeShare)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n case Messenger.CCTP_V2: {\n if (\n !sourceChainToken.cctpV2Address ||\n !destinationChainToken.cctpV2Address ||\n !sourceChainToken.cctpV2FeeShare\n ) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(sourceChainToken.cctpV2FeeShare)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n }\n }\n\n getAmountToSendComputeXReserve(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const xReserve = this.getXReserveConfig(sourceChainToken, destinationChainToken);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n const amountInSourcePrecision = convertAmountPrecision(\n amountToBeReceived,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n\n const result = amountInSourcePrecision\n .plus(xReserve.feeConst)\n .div(Big(1).minus(xReserve.feeShare))\n .round(0, Big.roundUp);\n if (result.lte(0)) {\n throw new SdkError(\"Amount is too low for xReserve route\");\n }\n\n return convertIntAmountToFloat(result, sourceChainToken.decimals).toFixed();\n }\n\n private getXReserveConfig(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): NonNullable<TokenWithChainDetails[\"xReserve\"]> {\n if (!sourceChainToken.xReserve || !destinationChainToken.xReserve) {\n throw new SdkError(\"Such route does not support xReserve protocol\");\n }\n if (Big(sourceChainToken.xReserve.feeShare).gte(1)) {\n throw new SdkError(\"xReserve feeShare must be less than 1\");\n }\n return sourceChainToken.xReserve;\n }\n\n async getAmountToSendComputeOft(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<string> {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n if (\n !sourceChainToken.oftId ||\n !destinationChainToken.oftId ||\n !sourceChainToken.oftBridgeAddress ||\n sourceChainToken.oftId !== destinationChainToken.oftId\n ) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const { adminFeeShareWithExtras } = await this.api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger: Messenger.OFT,\n sourceToken: sourceChainToken.tokenAddress,\n });\n if (!adminFeeShareWithExtras) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n const result = amountToBeReceived.div(Big(1).minus(adminFeeShareWithExtras)).round(0, Big.roundDown);\n const resultInSourcePrecision = convertAmountPrecision(\n result,\n destinationChainToken.decimals,\n sourceChainToken.decimals\n ).round(0);\n return convertIntAmountToFloat(resultInSourcePrecision, sourceChainToken.decimals).toFixed();\n }\n\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return getGasFeeOptions(sourceChainToken, destinationChainToken.allbridgeChainId, messenger, this.api);\n }\n\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return sourceChainToken.transferTime?.[destinationChainToken.chainSymbol]?.[messenger] ?? null;\n }\n\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return await this.api.getPoolInfoByKey({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress });\n }\n\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n if (tokens) {\n const tokensArray = tokens instanceof Array ? tokens : [tokens];\n const poolKeys: PoolKeyObject[] = tokensArray.map((t) => {\n return { chainSymbol: t.chainSymbol, poolAddress: t.poolAddress };\n });\n return this.api.refreshPoolInfo(poolKeys);\n }\n return this.api.refreshPoolInfo();\n }\n\n aprInPercents(apr: string): string {\n return aprInPercents(apr);\n }\n\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<ExtraGasMaxLimitResponse> {\n return await getExtraGasMaxLimits(sourceChainToken, destinationChainToken, messenger, this.api);\n }\n\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n const vUsdAmount = swapToVUsd(amountInTokenPrecision, sourceToken, await getPoolInfoByToken(this.api, sourceToken));\n return {\n [AmountFormat.INT]: vUsdAmount,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(vUsdAmount, SYSTEM_PRECISION).toFixed(),\n };\n }\n\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.getAmountFromVUsdFormatted(vUsdAmount, destToken, await getPoolInfoByToken(this.api, destToken));\n }\n\n private getAmountFromVUsdFormatted(\n vUsdAmountInt: string,\n destToken: TokenWithChainDetails,\n destPoolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n ): AmountFormatted {\n validateAmountGtZero(vUsdAmountInt);\n const amountResultInt = swapFromVUsd(vUsdAmountInt, destToken, destPoolInfo);\n if (Big(amountResultInt).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return {\n [AmountFormat.INT]: amountResultInt,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(amountResultInt, destToken.decimals).toFixed(),\n };\n }\n\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return swapAndBridgeFeeCalculation(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n }\n\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n const result = swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision,\n {\n decimals: sourceToken.decimals,\n feeShare: sourceToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, sourceToken),\n },\n {\n decimals: destToken.decimals,\n feeShare: destToken.feeShare,\n poolInfo: await getPoolInfoByToken(this.api, destToken),\n }\n );\n const newAmount = result.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;\n if (Big(newAmount).lt(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n return result;\n }\n\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n validateAmountGtZero(amount);\n let amountInTokenPrecision;\n if (amountFormat == AmountFormat.FLOAT) {\n validateAmountDecimals(\"amount\", amount, sourceToken.decimals);\n amountInTokenPrecision = convertFloatAmountToInt(amount, sourceToken.decimals).toFixed();\n } else {\n amountInTokenPrecision = amount;\n }\n\n return getSendAmountDetails(\n amountInTokenPrecision,\n sourceToken,\n await getPoolInfoByToken(this.api, sourceToken),\n destToken,\n await getPoolInfoByToken(this.api, destToken)\n );\n }\n}\n"]}
@@ -0,0 +1,246 @@
1
+ declare const artifact: {
2
+ readonly abi: readonly [{
3
+ readonly inputs: readonly [{
4
+ readonly internalType: "uint256";
5
+ readonly name: "chainId_";
6
+ readonly type: "uint256";
7
+ }, {
8
+ readonly internalType: "address";
9
+ readonly name: "tokenAddress";
10
+ readonly type: "address";
11
+ }, {
12
+ readonly internalType: "address";
13
+ readonly name: "xReserve_";
14
+ readonly type: "address";
15
+ }];
16
+ readonly stateMutability: "nonpayable";
17
+ readonly type: "constructor";
18
+ }, {
19
+ readonly anonymous: false;
20
+ readonly inputs: readonly [{
21
+ readonly indexed: true;
22
+ readonly internalType: "address";
23
+ readonly name: "previousOwner";
24
+ readonly type: "address";
25
+ }, {
26
+ readonly indexed: true;
27
+ readonly internalType: "address";
28
+ readonly name: "newOwner";
29
+ readonly type: "address";
30
+ }];
31
+ readonly name: "OwnershipTransferred";
32
+ readonly type: "event";
33
+ }, {
34
+ readonly anonymous: false;
35
+ readonly inputs: readonly [{
36
+ readonly indexed: false;
37
+ readonly internalType: "address";
38
+ readonly name: "sender";
39
+ readonly type: "address";
40
+ }, {
41
+ readonly indexed: false;
42
+ readonly internalType: "bytes32";
43
+ readonly name: "recipient";
44
+ readonly type: "bytes32";
45
+ }, {
46
+ readonly indexed: false;
47
+ readonly internalType: "uint256";
48
+ readonly name: "amount";
49
+ readonly type: "uint256";
50
+ }, {
51
+ readonly indexed: false;
52
+ readonly internalType: "uint256";
53
+ readonly name: "destinationChainId";
54
+ readonly type: "uint256";
55
+ }, {
56
+ readonly indexed: false;
57
+ readonly internalType: "uint256";
58
+ readonly name: "adminFeeTokenAmount";
59
+ readonly type: "uint256";
60
+ }, {
61
+ readonly indexed: false;
62
+ readonly internalType: "uint256";
63
+ readonly name: "maxFee";
64
+ readonly type: "uint256";
65
+ }];
66
+ readonly name: "TokensSent";
67
+ readonly type: "event";
68
+ }, {
69
+ readonly anonymous: false;
70
+ readonly inputs: readonly [{
71
+ readonly indexed: false;
72
+ readonly internalType: "bytes32";
73
+ readonly name: "recipientWalletAddress";
74
+ readonly type: "bytes32";
75
+ }];
76
+ readonly name: "TokensSentExtras";
77
+ readonly type: "event";
78
+ }, {
79
+ readonly stateMutability: "payable";
80
+ readonly type: "fallback";
81
+ }, {
82
+ readonly inputs: readonly [];
83
+ readonly name: "adminFeeShareBP";
84
+ readonly outputs: readonly [{
85
+ readonly internalType: "uint256";
86
+ readonly name: "";
87
+ readonly type: "uint256";
88
+ }];
89
+ readonly stateMutability: "view";
90
+ readonly type: "function";
91
+ }, {
92
+ readonly inputs: readonly [{
93
+ readonly internalType: "uint256";
94
+ readonly name: "amount";
95
+ readonly type: "uint256";
96
+ }, {
97
+ readonly internalType: "bytes32";
98
+ readonly name: "recipient";
99
+ readonly type: "bytes32";
100
+ }, {
101
+ readonly internalType: "uint256";
102
+ readonly name: "destinationChainId";
103
+ readonly type: "uint256";
104
+ }];
105
+ readonly name: "bridge";
106
+ readonly outputs: readonly [];
107
+ readonly stateMutability: "nonpayable";
108
+ readonly type: "function";
109
+ }, {
110
+ readonly inputs: readonly [{
111
+ readonly internalType: "uint256";
112
+ readonly name: "amount";
113
+ readonly type: "uint256";
114
+ }, {
115
+ readonly internalType: "bytes32";
116
+ readonly name: "recipient";
117
+ readonly type: "bytes32";
118
+ }, {
119
+ readonly internalType: "bytes32";
120
+ readonly name: "recipientWalletAddress";
121
+ readonly type: "bytes32";
122
+ }, {
123
+ readonly internalType: "uint256";
124
+ readonly name: "destinationChainId";
125
+ readonly type: "uint256";
126
+ }];
127
+ readonly name: "bridgeWithWalletAddress";
128
+ readonly outputs: readonly [];
129
+ readonly stateMutability: "nonpayable";
130
+ readonly type: "function";
131
+ }, {
132
+ readonly inputs: readonly [];
133
+ readonly name: "chainId";
134
+ readonly outputs: readonly [{
135
+ readonly internalType: "uint256";
136
+ readonly name: "";
137
+ readonly type: "uint256";
138
+ }];
139
+ readonly stateMutability: "view";
140
+ readonly type: "function";
141
+ }, {
142
+ readonly inputs: readonly [{
143
+ readonly internalType: "uint256";
144
+ readonly name: "chainId_";
145
+ readonly type: "uint256";
146
+ }];
147
+ readonly name: "getDomainByChainId";
148
+ readonly outputs: readonly [{
149
+ readonly internalType: "uint32";
150
+ readonly name: "";
151
+ readonly type: "uint32";
152
+ }];
153
+ readonly stateMutability: "view";
154
+ readonly type: "function";
155
+ }, {
156
+ readonly inputs: readonly [];
157
+ readonly name: "maxFeeShare";
158
+ readonly outputs: readonly [{
159
+ readonly internalType: "uint256";
160
+ readonly name: "";
161
+ readonly type: "uint256";
162
+ }];
163
+ readonly stateMutability: "view";
164
+ readonly type: "function";
165
+ }, {
166
+ readonly inputs: readonly [];
167
+ readonly name: "owner";
168
+ readonly outputs: readonly [{
169
+ readonly internalType: "address";
170
+ readonly name: "";
171
+ readonly type: "address";
172
+ }];
173
+ readonly stateMutability: "view";
174
+ readonly type: "function";
175
+ }, {
176
+ readonly inputs: readonly [{
177
+ readonly internalType: "uint256";
178
+ readonly name: "chainId_";
179
+ readonly type: "uint256";
180
+ }, {
181
+ readonly internalType: "uint32";
182
+ readonly name: "domain";
183
+ readonly type: "uint32";
184
+ }];
185
+ readonly name: "registerBridgeDestination";
186
+ readonly outputs: readonly [];
187
+ readonly stateMutability: "nonpayable";
188
+ readonly type: "function";
189
+ }, {
190
+ readonly inputs: readonly [];
191
+ readonly name: "renounceOwnership";
192
+ readonly outputs: readonly [];
193
+ readonly stateMutability: "nonpayable";
194
+ readonly type: "function";
195
+ }, {
196
+ readonly inputs: readonly [{
197
+ readonly internalType: "uint256";
198
+ readonly name: "adminFeeShareBP_";
199
+ readonly type: "uint256";
200
+ }];
201
+ readonly name: "setAdminFeeShare";
202
+ readonly outputs: readonly [];
203
+ readonly stateMutability: "nonpayable";
204
+ readonly type: "function";
205
+ }, {
206
+ readonly inputs: readonly [{
207
+ readonly internalType: "uint256";
208
+ readonly name: "maxFeeShare_";
209
+ readonly type: "uint256";
210
+ }];
211
+ readonly name: "setMaxFeeShare";
212
+ readonly outputs: readonly [];
213
+ readonly stateMutability: "nonpayable";
214
+ readonly type: "function";
215
+ }, {
216
+ readonly inputs: readonly [{
217
+ readonly internalType: "address";
218
+ readonly name: "newOwner";
219
+ readonly type: "address";
220
+ }];
221
+ readonly name: "transferOwnership";
222
+ readonly outputs: readonly [];
223
+ readonly stateMutability: "nonpayable";
224
+ readonly type: "function";
225
+ }, {
226
+ readonly inputs: readonly [{
227
+ readonly internalType: "uint256";
228
+ readonly name: "chainId_";
229
+ readonly type: "uint256";
230
+ }];
231
+ readonly name: "unregisterBridgeDestination";
232
+ readonly outputs: readonly [];
233
+ readonly stateMutability: "nonpayable";
234
+ readonly type: "function";
235
+ }, {
236
+ readonly inputs: readonly [];
237
+ readonly name: "withdrawFeeInTokens";
238
+ readonly outputs: readonly [];
239
+ readonly stateMutability: "nonpayable";
240
+ readonly type: "function";
241
+ }, {
242
+ readonly stateMutability: "payable";
243
+ readonly type: "receive";
244
+ }];
245
+ };
246
+ export default artifact;