@allbridge/bridge-core-sdk 3.27.0-alpha.15 → 3.27.0-alpha.17

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.
@@ -1,4 +1,4 @@
1
- import { ChainType } from "./chain.enums";
1
+ import { ChainSymbol, ChainType } from "./chain.enums";
2
2
  /**
3
3
  * Contains blockchain's basic information
4
4
  */
@@ -6,7 +6,7 @@ export interface BasicChainProperties {
6
6
  /**
7
7
  * The symbol of the chain representing one of the supported blockchain networks (e.g., "ETH" for Ethereum). For more details, see: {@link ChainSymbol}.
8
8
  */
9
- chainSymbol: string;
9
+ chainSymbol: ChainSymbol;
10
10
  /**
11
11
  * Common Blockchain Id</br>
12
12
  * A 0x-prefixed hexadecimal string</br>
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/chains/models.ts"],"names":[],"mappings":"","sourcesContent":["import { ChainType } from \"./chain.enums\";\n\n/**\n * Contains blockchain's basic information\n */\nexport interface BasicChainProperties {\n /**\n * The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n */\n chainSymbol: string;\n /**\n * Common Blockchain Id</br>\n * A 0x-prefixed hexadecimal string</br>\n * Optional.\n */\n chainId?: string; // A 0x-prefixed hexadecimal string\n /**\n * Blockchain name\n */\n name: string;\n /**\n * Blockchain type. For more details, see: {@link ChainType}.\n */\n chainType: ChainType;\n}\nexport interface AdditionalBasicChainProperties extends Omit<BasicChainProperties, \"chainSymbol\"> {\n /**\n * The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n */\n chainSymbol: string;\n}\n"]}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/chains/models.ts"],"names":[],"mappings":"","sourcesContent":["import { ChainSymbol, ChainType } from \"./chain.enums\";\n\n/**\n * Contains blockchain's basic information\n */\nexport interface BasicChainProperties {\n /**\n * The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n */\n chainSymbol: ChainSymbol;\n /**\n * Common Blockchain Id</br>\n * A 0x-prefixed hexadecimal string</br>\n * Optional.\n */\n chainId?: string; // A 0x-prefixed hexadecimal string\n /**\n * Blockchain name\n */\n name: string;\n /**\n * Blockchain type. For more details, see: {@link ChainType}.\n */\n chainType: ChainType;\n}\nexport interface AdditionalBasicChainProperties extends Omit<BasicChainProperties, \"chainSymbol\"> {\n /**\n * The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n */\n chainSymbol: string;\n}\n"]}
@@ -90,7 +90,7 @@ function mapChainDetailsFromDto(chainSymbol, dto) {
90
90
  ? {
91
91
  payerAddress: dto.abrPayer.payerAddress,
92
92
  abrToken: {
93
- chainSymbol,
93
+ chainSymbol: chainSymbol,
94
94
  tokenAddress: dto.abrPayer.tokenAddress,
95
95
  decimals: dto.abrPayer.tokenDecimals,
96
96
  },
@@ -1 +1 @@
1
- {"version":3,"file":"core-api-mapper.js","sourceRoot":"","sources":["../../../../src/client/core-api/core-api-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Chains } from \"../../chains\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport {\n AbrPayerAvailability,\n ChainDetails,\n ChainDetailsMap,\n ChainDetailsMapWithFlags,\n ChainDetailsWithTokensWithFlags,\n MessengerTransferTime,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n TransferTime,\n} from \"../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../utils/calculation\";\nimport {\n AbrPayerAvailabilityTypeDTO,\n ChainDetailsDTO,\n ChainDetailsResponse,\n Messenger,\n MessengerKeyDTO,\n MessengerTransferTimeDTO,\n PoolInfoResponse,\n TokenDTO,\n TransferTimeDTO,\n} from \"./core-api.model\";\n\nexport function mapChainDetailsResponseToChainDetailsMap(response: ChainDetailsResponse): ChainDetailsMapWithFlags {\n return Object.entries(response).reduce<ChainDetailsMapWithFlags>((map, entry) => {\n const chainSymbol = entry[0];\n const chainDetailsDTO = entry[1];\n const chainDetails = mapChainDetailsFromDto(chainSymbol, chainDetailsDTO);\n if (chainDetails) {\n map[chainSymbol] = chainDetails;\n }\n return map;\n }, {});\n}\n\nexport function mapChainDetailsResponseToPoolInfoMap(response: ChainDetailsResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, chainDetailsDTO] of Object.entries(response)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetailsDTO.tokens) {\n const poolKey = mapPoolKeyObjectToPoolKey({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n const imbalance = calculatePoolInfoImbalance(token.poolInfo);\n poolInfoMap[poolKey] = { ...token.poolInfo, imbalance };\n }\n }\n return poolInfoMap;\n}\n\nfunction mapTokenWithChainDetailsFromDto(chainDetails: ChainDetails, dto: TokenDTO): TokenWithChainDetailsWithFlags {\n const { name: chainName, ...chainDetailsWithoutName } = chainDetails;\n const { poolInfo: _poolInfo, ...dtoWithoutPoolInfo } = dto;\n return {\n ...dtoWithoutPoolInfo,\n ...chainDetailsWithoutName,\n chainName,\n };\n}\n\nfunction mapMessengerKeyDtoToMessenger(dto: MessengerKeyDTO): Messenger | null {\n switch (dto) {\n case MessengerKeyDTO.ALLBRIDGE:\n return Messenger.ALLBRIDGE;\n case MessengerKeyDTO.WORMHOLE:\n return Messenger.WORMHOLE;\n case MessengerKeyDTO.CCTP:\n return Messenger.CCTP;\n case MessengerKeyDTO.CCTP_V2:\n return Messenger.CCTP_V2;\n case MessengerKeyDTO.OFT:\n return Messenger.OFT;\n }\n}\n\nfunction mapTransferTimeFromDto(dto: TransferTimeDTO): TransferTime {\n return Object.entries(dto).reduce<TransferTime>((result, [key, value]) => {\n result[key as ChainSymbol] = mapMessengerTransferTimeFromDto(value);\n return result;\n }, {});\n}\n\nfunction mapMessengerTransferTimeFromDto(dto: MessengerTransferTimeDTO): MessengerTransferTime {\n return Object.entries(dto).reduce<MessengerTransferTime>((messengerTransferTime, [key, value]) => {\n const messenger = mapMessengerKeyDtoToMessenger(key as MessengerKeyDTO);\n if (messenger && value != null) {\n messengerTransferTime[messenger] = value;\n }\n return messengerTransferTime;\n }, {});\n}\n\nfunction mapChainDetailsFromDto(chainSymbol: string, dto: ChainDetailsDTO): ChainDetailsWithTokensWithFlags | null {\n const basicChainProperties = Chains.getChainsProperties()[chainSymbol];\n if (!basicChainProperties) {\n return null;\n }\n const chainDetails: ChainDetails = {\n ...basicChainProperties,\n allbridgeChainId: dto.chainId,\n bridgeId: dto.bridgeId,\n paddingUtilId: dto.paddingUtilId,\n bridgeAddress: dto.bridgeAddress,\n oftBridgeAddress: dto.oftBridgeAddress,\n yieldAddress: dto.yieldAddress,\n abrPayer: dto.abrPayer\n ? {\n payerAddress: dto.abrPayer.payerAddress,\n abrToken: {\n chainSymbol,\n tokenAddress: dto.abrPayer.tokenAddress,\n decimals: dto.abrPayer.tokenDecimals,\n },\n payerAvailability: mapAbrPayerAvailabilityFromDto(dto.abrPayer.payerAvailability),\n }\n : undefined,\n transferTime: mapTransferTimeFromDto(dto.transferTime),\n txCostAmount: dto.txCostAmount,\n confirmations: dto.confirmations,\n suiAddresses: dto.suiAddresses,\n };\n return {\n ...chainDetails,\n tokens: dto.tokens.map((tokenDto) => mapTokenWithChainDetailsFromDto(chainDetails, tokenDto)),\n };\n}\n\nfunction mapAbrPayerAvailabilityFromDto(dto: AbrPayerAvailabilityTypeDTO): AbrPayerAvailability {\n if (!dto) return {};\n const out: AbrPayerAvailability = {};\n\n for (const [humanReadableKey, isAvailable] of Object.entries(dto)) {\n if (!isAvailable) continue;\n\n const messengerKey =\n dtoKeyToMessengerKey[humanReadableKey as (typeof MessengerKeyDTO)[keyof typeof MessengerKeyDTO]];\n\n if (messengerKey) {\n out[messengerKey] = true;\n }\n }\n\n return out;\n}\n\n// Build mapping from human-readable DTO key (\"Allbridge\") to Messenger key (\"ALLBRIDGE\")\nconst dtoKeyToMessengerKey: Record<(typeof MessengerKeyDTO)[keyof typeof MessengerKeyDTO], keyof typeof Messenger> =\n Object.fromEntries(\n Object.entries(MessengerKeyDTO).map(([enumKey, humanReadable]) => {\n return [humanReadable, enumKey as keyof typeof Messenger];\n })\n ) as any;\n\nexport function mapPoolKeyToPoolKeyObject(poolKey: string): PoolKeyObject {\n const dividerPosition = poolKey.indexOf(\"_\");\n return {\n chainSymbol: poolKey.substring(0, dividerPosition),\n poolAddress: poolKey.substring(dividerPosition + 1),\n };\n}\n\nexport function mapPoolKeyObjectToPoolKey(poolKeyObject: PoolKeyObject): string {\n return poolKeyObject.chainSymbol + \"_\" + poolKeyObject.poolAddress;\n}\n\nexport function mapChainDetailsMapToPoolKeyObjects(chainDetailsMap: ChainDetailsMap): PoolKeyObject[] {\n const result = [];\n for (const [chainSymbolValue, chainDetails] of Object.entries(chainDetailsMap)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetails.tokens) {\n result.push({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n }\n }\n return result;\n}\n\nexport function mapPoolInfoResponseToPoolInfoMap(responseBody: PoolInfoResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, poolInfoByAddress] of Object.entries(responseBody)) {\n const chainSymbol = chainSymbolValue;\n for (const [poolAddress, poolInfo] of Object.entries(poolInfoByAddress)) {\n poolInfo.imbalance = calculatePoolInfoImbalance(poolInfo);\n poolInfoMap[mapPoolKeyObjectToPoolKey({ chainSymbol, poolAddress })] = poolInfo;\n }\n }\n return poolInfoMap;\n}\n"]}
1
+ {"version":3,"file":"core-api-mapper.js","sourceRoot":"","sources":["../../../../src/client/core-api/core-api-mapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Chains } from \"../../chains\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport {\n AbrPayerAvailability,\n ChainDetails,\n ChainDetailsMap,\n ChainDetailsMapWithFlags,\n ChainDetailsWithTokensWithFlags,\n MessengerTransferTime,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n TransferTime,\n} from \"../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../utils/calculation\";\nimport {\n AbrPayerAvailabilityTypeDTO,\n ChainDetailsDTO,\n ChainDetailsResponse,\n Messenger,\n MessengerKeyDTO,\n MessengerTransferTimeDTO,\n PoolInfoResponse,\n TokenDTO,\n TransferTimeDTO,\n} from \"./core-api.model\";\n\nexport function mapChainDetailsResponseToChainDetailsMap(response: ChainDetailsResponse): ChainDetailsMapWithFlags {\n return Object.entries(response).reduce<ChainDetailsMapWithFlags>((map, entry) => {\n const chainSymbol = entry[0];\n const chainDetailsDTO = entry[1];\n const chainDetails = mapChainDetailsFromDto(chainSymbol, chainDetailsDTO);\n if (chainDetails) {\n map[chainSymbol] = chainDetails;\n }\n return map;\n }, {});\n}\n\nexport function mapChainDetailsResponseToPoolInfoMap(response: ChainDetailsResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, chainDetailsDTO] of Object.entries(response)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetailsDTO.tokens) {\n const poolKey = mapPoolKeyObjectToPoolKey({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n const imbalance = calculatePoolInfoImbalance(token.poolInfo);\n poolInfoMap[poolKey] = { ...token.poolInfo, imbalance };\n }\n }\n return poolInfoMap;\n}\n\nfunction mapTokenWithChainDetailsFromDto(chainDetails: ChainDetails, dto: TokenDTO): TokenWithChainDetailsWithFlags {\n const { name: chainName, ...chainDetailsWithoutName } = chainDetails;\n const { poolInfo: _poolInfo, ...dtoWithoutPoolInfo } = dto;\n return {\n ...dtoWithoutPoolInfo,\n ...chainDetailsWithoutName,\n chainName,\n };\n}\n\nfunction mapMessengerKeyDtoToMessenger(dto: MessengerKeyDTO): Messenger | null {\n switch (dto) {\n case MessengerKeyDTO.ALLBRIDGE:\n return Messenger.ALLBRIDGE;\n case MessengerKeyDTO.WORMHOLE:\n return Messenger.WORMHOLE;\n case MessengerKeyDTO.CCTP:\n return Messenger.CCTP;\n case MessengerKeyDTO.CCTP_V2:\n return Messenger.CCTP_V2;\n case MessengerKeyDTO.OFT:\n return Messenger.OFT;\n }\n}\n\nfunction mapTransferTimeFromDto(dto: TransferTimeDTO): TransferTime {\n return Object.entries(dto).reduce<TransferTime>((result, [key, value]) => {\n result[key as ChainSymbol] = mapMessengerTransferTimeFromDto(value);\n return result;\n }, {});\n}\n\nfunction mapMessengerTransferTimeFromDto(dto: MessengerTransferTimeDTO): MessengerTransferTime {\n return Object.entries(dto).reduce<MessengerTransferTime>((messengerTransferTime, [key, value]) => {\n const messenger = mapMessengerKeyDtoToMessenger(key as MessengerKeyDTO);\n if (messenger && value != null) {\n messengerTransferTime[messenger] = value;\n }\n return messengerTransferTime;\n }, {});\n}\n\nfunction mapChainDetailsFromDto(chainSymbol: string, dto: ChainDetailsDTO): ChainDetailsWithTokensWithFlags | null {\n const basicChainProperties = Chains.getChainsProperties()[chainSymbol];\n if (!basicChainProperties) {\n return null;\n }\n const chainDetails: ChainDetails = {\n ...basicChainProperties,\n allbridgeChainId: dto.chainId,\n bridgeId: dto.bridgeId,\n paddingUtilId: dto.paddingUtilId,\n bridgeAddress: dto.bridgeAddress,\n oftBridgeAddress: dto.oftBridgeAddress,\n yieldAddress: dto.yieldAddress,\n abrPayer: dto.abrPayer\n ? {\n payerAddress: dto.abrPayer.payerAddress,\n abrToken: {\n chainSymbol: chainSymbol as ChainSymbol,\n tokenAddress: dto.abrPayer.tokenAddress,\n decimals: dto.abrPayer.tokenDecimals,\n },\n payerAvailability: mapAbrPayerAvailabilityFromDto(dto.abrPayer.payerAvailability),\n }\n : undefined,\n transferTime: mapTransferTimeFromDto(dto.transferTime),\n txCostAmount: dto.txCostAmount,\n confirmations: dto.confirmations,\n suiAddresses: dto.suiAddresses,\n };\n return {\n ...chainDetails,\n tokens: dto.tokens.map((tokenDto) => mapTokenWithChainDetailsFromDto(chainDetails, tokenDto)),\n };\n}\n\nfunction mapAbrPayerAvailabilityFromDto(dto: AbrPayerAvailabilityTypeDTO): AbrPayerAvailability {\n if (!dto) return {};\n const out: AbrPayerAvailability = {};\n\n for (const [humanReadableKey, isAvailable] of Object.entries(dto)) {\n if (!isAvailable) continue;\n\n const messengerKey =\n dtoKeyToMessengerKey[humanReadableKey as (typeof MessengerKeyDTO)[keyof typeof MessengerKeyDTO]];\n\n if (messengerKey) {\n out[messengerKey] = true;\n }\n }\n\n return out;\n}\n\n// Build mapping from human-readable DTO key (\"Allbridge\") to Messenger key (\"ALLBRIDGE\")\nconst dtoKeyToMessengerKey: Record<(typeof MessengerKeyDTO)[keyof typeof MessengerKeyDTO], keyof typeof Messenger> =\n Object.fromEntries(\n Object.entries(MessengerKeyDTO).map(([enumKey, humanReadable]) => {\n return [humanReadable, enumKey as keyof typeof Messenger];\n })\n ) as any;\n\nexport function mapPoolKeyToPoolKeyObject(poolKey: string): PoolKeyObject {\n const dividerPosition = poolKey.indexOf(\"_\");\n return {\n chainSymbol: poolKey.substring(0, dividerPosition),\n poolAddress: poolKey.substring(dividerPosition + 1),\n };\n}\n\nexport function mapPoolKeyObjectToPoolKey(poolKeyObject: PoolKeyObject): string {\n return poolKeyObject.chainSymbol + \"_\" + poolKeyObject.poolAddress;\n}\n\nexport function mapChainDetailsMapToPoolKeyObjects(chainDetailsMap: ChainDetailsMap): PoolKeyObject[] {\n const result = [];\n for (const [chainSymbolValue, chainDetails] of Object.entries(chainDetailsMap)) {\n const chainSymbol = chainSymbolValue;\n for (const token of chainDetails.tokens) {\n result.push({\n chainSymbol,\n poolAddress: token.poolAddress,\n });\n }\n }\n return result;\n}\n\nexport function mapPoolInfoResponseToPoolInfoMap(responseBody: PoolInfoResponse): PoolInfoMap {\n const poolInfoMap: PoolInfoMap = {};\n for (const [chainSymbolValue, poolInfoByAddress] of Object.entries(responseBody)) {\n const chainSymbol = chainSymbolValue;\n for (const [poolAddress, poolInfo] of Object.entries(poolInfoByAddress)) {\n poolInfo.imbalance = calculatePoolInfoImbalance(poolInfo);\n poolInfoMap[mapPoolKeyObjectToPoolKey({ chainSymbol, poolAddress })] = poolInfo;\n }\n }\n return poolInfoMap;\n}\n"]}
@@ -420,7 +420,10 @@ async function getGasFeeOptions(sourceChainToken, destinationAllbridgeChainId, m
420
420
  [models_1.AmountFormat.FLOAT]: (0, calculation_1.convertIntAmountToFloat)(gasFeeIntWithStables, sourceChainToken.decimals).toFixed(),
421
421
  };
422
422
  }
423
- if (transactionCostResponse.abrExchangeRate && sourceChainToken.abrPayer) {
423
+ const messengerKey = core_api_model_1.Messenger[messenger];
424
+ if (transactionCostResponse.abrExchangeRate &&
425
+ sourceChainToken.abrPayer &&
426
+ sourceChainToken.abrPayer.payerAvailability[messengerKey]) {
424
427
  const gasFeeIntWithStables = (0, calculation_1.convertAmountPrecision)(new big_js_1.Big(transactionCostResponse.fee).mul(transactionCostResponse.abrExchangeRate), chains_1.Chains.getChainDecimalsByType(sourceChainToken.chainType), sourceChainToken.abrPayer.abrToken.decimals).toFixed(0, big_js_1.Big.roundUp);
425
428
  gasFeeOptions[models_1.FeePaymentMethod.WITH_ARB] = {
426
429
  [models_1.AmountFormat.INT]: gasFeeIntWithStables,
@@ -466,7 +469,12 @@ async function getExtraGasMaxLimits(sourceChainToken, destinationChainToken, mes
466
469
  [models_1.AmountFormat.FLOAT]: maxAmountFloatInStable,
467
470
  };
468
471
  }
469
- if (transactionCostResponse.abrExchangeRate && sourceChainToken.abrPayer) {
472
+ let abrAvailable;
473
+ const messengerKey = core_api_model_1.Messenger[messenger];
474
+ if (transactionCostResponse.abrExchangeRate &&
475
+ sourceChainToken.abrPayer &&
476
+ sourceChainToken.abrPayer.payerAvailability[messengerKey]) {
477
+ abrAvailable = true;
470
478
  const maxAmountFloatInStable = (0, big_js_1.Big)(maxAmountFloatInSourceNative)
471
479
  .mul(transactionCostResponse.abrExchangeRate)
472
480
  .toFixed(sourceChainToken.abrPayer.abrToken.decimals, big_js_1.Big.roundDown);
@@ -492,7 +500,7 @@ async function getExtraGasMaxLimits(sourceChainToken, destinationChainToken, mes
492
500
  },
493
501
  },
494
502
  exchangeRate: transactionCostResponse.exchangeRate,
495
- abrExchangeRate: transactionCostResponse.abrExchangeRate,
503
+ abrExchangeRate: abrAvailable ? transactionCostResponse.abrExchangeRate : undefined,
496
504
  sourceNativeTokenPrice: transactionCostResponse.sourceNativeTokenPrice,
497
505
  };
498
506
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/services/bridge/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport { ContractIdString, createAddress, parseContractId } from \"@stacks/transactions\";\nimport { Address } from \"@stellar/stellar-sdk\";\nimport algosdk, { Address as AlgoAddress } from \"algosdk\";\nimport { Big, BigSource } from \"big.js\";\nimport randomBytes from \"randombytes\";\nimport { utils as TronWebUtils } from \"tronweb\";\nimport { Web3 } from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport {\n AmountNotEnoughError,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitExceededError,\n InvalidGasFeePaymentOptionError,\n OFTDoesNotSupportedError,\n SdkError,\n} from \"../../exceptions\";\nimport {\n AmountFormat,\n ChainType,\n ExtraGasMaxLimitResponse,\n ExtraGasMaxLimits,\n FeePaymentMethod,\n GasFeeOptions,\n SwapParams,\n} from \"../../models\";\nimport { ChainDetailsMap, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertAmountPrecision, convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { assertNever } from \"../../utils/utils\";\nimport {\n SendParams,\n TxSendParams,\n TxSendParamsAlg,\n TxSendParamsEvm,\n TxSendParamsSol,\n TxSendParamsSrb,\n TxSendParamsStx,\n TxSendParamsSui,\n TxSendParamsTrx,\n TxSwapParams,\n TxSwapParamsEvm,\n TxSwapParamsSol,\n TxSwapParamsSrb,\n TxSwapParamsSui,\n TxSwapParamsTrx,\n} from \"./models\";\n\n// 1. OVERLOADS\nexport function formatAddress(address: string, from: ChainType, to: ChainType.EVM | ChainType.SUI): string;\nexport function formatAddress(address: string, from: ChainType, to: ChainType.TRX): Buffer;\nexport function formatAddress(address: string, from: ChainType, to: ChainType.SOLANA | ChainType.SRB): number[];\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] | Buffer;\n\n// 2. COMMON Realization\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] | Buffer {\n let buffer: Buffer;\n switch (from) {\n case ChainType.EVM: {\n buffer = evmAddressToBuffer32(address);\n break;\n }\n case ChainType.SOLANA: {\n buffer = new PublicKey(address).toBuffer();\n break;\n }\n case ChainType.TRX: {\n buffer = tronAddressToBuffer32(address);\n break;\n }\n case ChainType.SRB: {\n buffer = new Address(address).toBuffer();\n break;\n }\n case ChainType.SUI: {\n buffer = evmAddressToBuffer32(address);\n break;\n }\n case ChainType.ALG: {\n buffer = algAddressToBuffer32(address);\n break;\n }\n case ChainType.STX: {\n buffer = stxAddressToBuffer32(address);\n break;\n }\n }\n\n switch (to) {\n case ChainType.EVM: {\n return \"0x\" + buffer.toString(\"hex\");\n }\n case ChainType.SOLANA: {\n return Array.from(buffer);\n }\n case ChainType.TRX: {\n return buffer;\n }\n case ChainType.SRB: {\n return buffer.toJSON().data;\n }\n case ChainType.SUI: {\n return \"0x\" + buffer.toString(\"hex\");\n }\n case ChainType.ALG: {\n return buffer;\n }\n case ChainType.STX: {\n return buffer;\n }\n }\n}\n\nexport function normalizeSuiHex(hex: string): string {\n return hex.replace(/^0x/i, \"\");\n}\n\nexport function hexToBuffer(hex: string): Buffer {\n return Buffer.from(hex.replace(/^0x/i, \"\"), \"hex\");\n}\n\nexport function evmAddressToBuffer32(address: string): Buffer {\n const length = 32;\n const buff = hexToBuffer(address);\n return Buffer.concat([Buffer.alloc(length - buff.length, 0), buff], length);\n}\n\nexport function algAddressToBuffer32(address: string): Buffer {\n if (algosdk.isValidAddress(address)) {\n return Buffer.from(AlgoAddress.fromString(address).publicKey);\n }\n\n if (/^\\d+$/.test(address)) {\n let hex = BigInt(address).toString(16);\n hex = hex.padStart(64, \"0\");\n return Buffer.from(hex, \"hex\");\n }\n throw new SdkError(`Unexpected Alg address: ${address}`);\n}\n\nexport function stxAddressToBuffer32(address: string): Buffer {\n if (address.includes(\".\")) {\n const [addr, name] = parseContractId(address as ContractIdString);\n if (!addr || !name) {\n throw new SdkError(`Unexpected Alg address: ${address}`);\n }\n const hashBytes = Buffer.from(createAddress(addr).hash160, \"hex\");\n const hash = Web3.utils.keccak256(Buffer.concat([hashBytes, Buffer.from(name)]));\n return hexToBuffer(hash);\n }\n\n const hashBytes = Buffer.from(createAddress(address).hash160, \"hex\");\n return bufferToSize(hashBytes, 32);\n}\n\nexport function tronAddressToBuffer32(address: string): Buffer {\n const ethAddress = tronAddressToEthAddress(address);\n const buffer = hexToBuffer(ethAddress);\n return bufferToSize(buffer, 32);\n}\n\nexport function tronAddressToEthAddress(address: string): string {\n const bytes = TronWebUtils.crypto.decodeBase58Address(address);\n if (!bytes) return \"\";\n return TronWebUtils.bytes.byteArray2hexStr(bytes).replace(/^41/, \"0x\");\n}\n\nfunction bufferToSize(buffer: Buffer, size: number): Buffer {\n if (buffer.length >= size) {\n return buffer;\n }\n const result = Buffer.alloc(size, 0);\n buffer.copy(result, size - buffer.length);\n return result;\n}\n\nexport function getTokenByTokenAddress(\n chainDetailsMap: ChainDetailsMap,\n chainSymbol: string,\n tokenAddress: string\n): TokenWithChainDetails {\n const chainDetail = chainDetailsMap[chainSymbol];\n if (!chainDetail) {\n throw new SdkError(\"Cannot find chain detail for \" + chainSymbol);\n }\n const token = chainDetail.tokens.find((value) => value.tokenAddress.toUpperCase() === tokenAddress.toUpperCase());\n if (!token) {\n throw new SdkError(\"Cannot find token info about token \" + tokenAddress + \" on chain \" + chainSymbol);\n }\n return token;\n}\n\nexport function getNonce(): Buffer {\n return randomBytes(32);\n}\n\nexport function getNonceBigInt(): bigint {\n const bigint = randomBytes(32).readBigInt64BE();\n if (bigint < 0) {\n return bigint * -1n;\n }\n return bigint;\n}\n\n// 1. OVERLOADS\nexport function prepareTxSwapParams(\n bridgeChainType: ChainType.EVM | ChainType.SUI,\n params: SwapParams\n): TxSwapParamsEvm | TxSwapParamsSui;\nexport function prepareTxSwapParams(bridgeChainType: ChainType.TRX, params: SwapParams): TxSwapParamsTrx;\nexport function prepareTxSwapParams(\n bridgeChainType: ChainType.SOLANA | ChainType.SRB,\n params: SwapParams\n): TxSwapParamsSol | TxSwapParamsSrb;\nexport function prepareTxSwapParams(bridgeChainType: ChainType, params: SwapParams): TxSwapParams;\n\n// 2. COMMON Realization\nexport function prepareTxSwapParams(bridgeChainType: ChainType, params: SwapParams): TxSwapParams {\n const txSwapParams = {} as TxSwapParams;\n const sourceToken = params.sourceToken;\n txSwapParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n txSwapParams.contractAddress = sourceToken.bridgeAddress;\n txSwapParams.fromAccountAddress = params.fromAccountAddress;\n switch (bridgeChainType) {\n case ChainType.SUI: {\n if (!sourceToken.originTokenAddress) {\n throw new SdkError(\"SUI sourceToken must contain 'originTokenAddress'\");\n }\n txSwapParams.fromTokenAddress = sourceToken.originTokenAddress;\n break;\n }\n case ChainType.ALG: {\n txSwapParams.fromTokenAddress = sourceToken.tokenAddress;\n break;\n }\n default: {\n txSwapParams.fromTokenAddress = formatAddress(sourceToken.tokenAddress, bridgeChainType, bridgeChainType);\n }\n }\n txSwapParams.toAccountAddress = params.toAccountAddress;\n switch (bridgeChainType) {\n case ChainType.SUI: {\n if (!params.destinationToken.originTokenAddress) {\n throw new SdkError(\"SUI destinationToken must contain 'originTokenAddress'\");\n }\n txSwapParams.toTokenAddress = params.destinationToken.originTokenAddress;\n break;\n }\n case ChainType.ALG: {\n txSwapParams.toTokenAddress = params.destinationToken.tokenAddress;\n break;\n }\n default: {\n txSwapParams.toTokenAddress = formatAddress(\n params.destinationToken.tokenAddress,\n bridgeChainType,\n bridgeChainType\n );\n }\n }\n txSwapParams.minimumReceiveAmount = params.minimumReceiveAmount\n ? convertFloatAmountToInt(params.minimumReceiveAmount, params.destinationToken.decimals).toFixed()\n : \"0\";\n return txSwapParams;\n}\n\n// 1. OVERLOADS\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.EVM | ChainType.SUI,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsEvm | TxSendParamsSui>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.TRX,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsTrx>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.ALG,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsAlg>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.STX,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsStx>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.SOLANA | ChainType.SRB,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsSol | TxSendParamsSrb>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParams>;\n\n// 2. COMMON Realization\nexport async function prepareTxSendParams(\n bridgeChainType: ChainType,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParams> {\n const txSendParams = {} as TxSendParams;\n\n txSendParams.fromChainId = params.sourceToken.allbridgeChainId;\n txSendParams.fromChainSymbol = params.sourceToken.chainSymbol;\n const toChainType = Chains.getChainProperty(params.destinationToken.chainSymbol).chainType;\n if (bridgeChainType === ChainType.SUI) {\n if (!params.sourceToken.originTokenAddress) {\n throw new SdkError(\"SUI token must contain 'originTokenAddress'\");\n }\n txSendParams.fromTokenAddress = params.sourceToken.originTokenAddress;\n } else {\n txSendParams.fromTokenAddress = params.sourceToken.tokenAddress;\n }\n\n txSendParams.toChainId = params.destinationToken.allbridgeChainId;\n txSendParams.toTokenAddress = params.destinationToken.tokenAddress;\n\n txSendParams.gasFeePaymentMethod = params.gasFeePaymentMethod ?? FeePaymentMethod.WITH_NATIVE_CURRENCY;\n if (txSendParams.gasFeePaymentMethod === FeePaymentMethod.WITH_ARB) {\n if (!params.sourceToken.abrPayer) {\n throw new SdkError(\"Source token must contain 'abrPayer' for ARB0 payment method\");\n }\n }\n\n const sourceToken = params.sourceToken;\n\n switch (params.messenger) {\n case Messenger.CCTP:\n if (!sourceToken.cctpAddress || !params.destinationToken.cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n txSendParams.contractAddress = sourceToken.cctpAddress;\n break;\n case Messenger.CCTP_V2:\n if (!sourceToken.cctpV2Address || !params.destinationToken.cctpV2Address) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n txSendParams.contractAddress = sourceToken.cctpV2Address;\n\n break;\n case Messenger.OFT:\n if (\n !sourceToken.oftBridgeAddress ||\n !params.destinationToken.oftBridgeAddress ||\n sourceToken.oftId !== params.destinationToken.oftId\n ) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n txSendParams.contractAddress = sourceToken.oftBridgeAddress;\n break;\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE:\n txSendParams.contractAddress = sourceToken.bridgeAddress;\n break;\n }\n\n txSendParams.messenger = params.messenger;\n txSendParams.fromAccountAddress = params.fromAccountAddress;\n txSendParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n\n //Fee\n let { fee, feeFormat } = params;\n if (!fee) {\n const gasFeeOptions = await getGasFeeOptions(\n params.sourceToken,\n txSendParams.toChainId,\n txSendParams.messenger,\n api\n );\n\n const gasFeeOption = gasFeeOptions[txSendParams.gasFeePaymentMethod];\n if (!gasFeeOption) {\n throw new InvalidGasFeePaymentOptionError();\n }\n fee = gasFeeOption[AmountFormat.INT];\n feeFormat = AmountFormat.INT;\n }\n if (feeFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.fee = convertFloatAmountToInt(fee, Chains.getChainDecimalsByType(sourceToken.chainType)).toFixed(\n 0\n );\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.fee = convertFloatAmountToInt(fee, sourceToken.decimals).toFixed(0);\n break;\n case FeePaymentMethod.WITH_ARB:\n if (!sourceToken.abrPayer) {\n throw new SdkError(\"Source token must contain 'abrPayer' for ARB0 payment method\");\n }\n txSendParams.fee = convertFloatAmountToInt(fee, sourceToken.abrPayer.abrToken.decimals).toFixed(0);\n break;\n default: {\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n }\n } else {\n txSendParams.fee = fee;\n }\n\n //ExtraGas\n const { extraGas, extraGasFormat } = params;\n if (extraGas && +extraGas > 0) {\n const extraGasLimits = await getExtraGasMaxLimits(\n sourceToken,\n params.destinationToken,\n txSendParams.messenger,\n api\n );\n\n let extraGasDecimals: number;\n let extraGasDestRate: Big;\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n extraGasDecimals = Chains.getChainDecimalsByType(sourceToken.chainType);\n extraGasDestRate = Big(extraGasLimits.exchangeRate);\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n extraGasDecimals = sourceToken.decimals;\n extraGasDestRate = Big(extraGasLimits.exchangeRate).div(extraGasLimits.sourceNativeTokenPrice);\n break;\n case FeePaymentMethod.WITH_ARB:\n if (!sourceToken.abrPayer) {\n throw new SdkError(\"Source token must contain 'abrPayer' for ARB0 payment method\");\n }\n if (!extraGasLimits.abrExchangeRate) {\n throw new SdkError(\"Cannot transfer WITH_ARB option\");\n }\n extraGasDecimals = sourceToken.abrPayer.abrToken.decimals;\n extraGasDestRate = Big(extraGasLimits.exchangeRate).div(extraGasLimits.abrExchangeRate);\n break;\n default: {\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n }\n\n switch (extraGasFormat ?? AmountFormat.INT) {\n case AmountFormat.FLOAT: {\n txSendParams.extraGas = convertFloatAmountToInt(extraGas, extraGasDecimals).toFixed(0);\n\n const extraGasDestFloat = extraGasDestRate.mul(extraGas);\n txSendParams.extraGasDest = convertFloatAmountToInt(\n extraGasDestFloat,\n Chains.getChainDecimalsByType(params.destinationToken.chainType)\n ).toFixed(0, Big.roundDown);\n break;\n }\n case AmountFormat.INT: {\n txSendParams.extraGas = extraGas;\n\n const extraGasFloat = convertIntAmountToFloat(\n txSendParams.extraGas,\n Chains.getChainDecimalsByType(sourceToken.chainType)\n );\n const extraGasDestFloat = extraGasDestRate.mul(extraGasFloat);\n txSendParams.extraGasDest = convertFloatAmountToInt(\n extraGasDestFloat,\n Chains.getChainDecimalsByType(params.destinationToken.chainType)\n ).toFixed(0, Big.roundDown);\n break;\n }\n }\n validateExtraGasNotExceeded(txSendParams.extraGas, txSendParams.gasFeePaymentMethod, extraGasLimits);\n }\n\n if (![ChainType.SUI, ChainType.ALG].includes(bridgeChainType)) {\n txSendParams.fromTokenAddress = formatAddress(txSendParams.fromTokenAddress, bridgeChainType, bridgeChainType);\n }\n txSendParams.toAccountAddress = formatAddress(params.toAccountAddress, toChainType, bridgeChainType);\n txSendParams.toTokenAddress = formatAddress(txSendParams.toTokenAddress, toChainType, bridgeChainType);\n\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n validateAmountEnough(txSendParams.amount, sourceToken.decimals, txSendParams.fee, txSendParams.extraGas);\n break;\n case FeePaymentMethod.WITH_ARB: {\n const { abrExchangeRate } = await api.getReceiveTransactionCost({\n sourceChainId: txSendParams.fromChainId,\n destinationChainId: txSendParams.toChainId,\n messenger: txSendParams.messenger,\n sourceToken: params.sourceToken.tokenAddress,\n });\n txSendParams.abrExchangeRate = abrExchangeRate;\n break;\n }\n default:\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n return txSendParams;\n}\n\nfunction validateAmountEnough(\n amountInt: BigSource,\n decimals: number,\n feeInt: BigSource,\n extraGasInt: BigSource | undefined\n) {\n const amountTotal = Big(amountInt)\n .minus(feeInt)\n .minus(extraGasInt ?? 0);\n if (amountTotal.lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(amountTotal).minus(1).neg(),\n decimals\n ).toFixed()} stables is missing`\n );\n }\n}\n\nexport async function getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationAllbridgeChainId: number,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<GasFeeOptions> {\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationAllbridgeChainId,\n messenger,\n sourceToken: sourceChainToken.tokenAddress,\n });\n\n const gasFeeOptions: GasFeeOptions = {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: {\n [AmountFormat.INT]: transactionCostResponse.fee,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n transactionCostResponse.fee,\n Chains.getChainDecimalsByType(sourceChainToken.chainType)\n ).toFixed(),\n },\n adminFeeShareWithExtras: transactionCostResponse.adminFeeShareWithExtras,\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.sourceNativeTokenPrice),\n Chains.getChainDecimalsByType(sourceChainToken.chainType),\n sourceChainToken.decimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(gasFeeIntWithStables, sourceChainToken.decimals).toFixed(),\n };\n }\n if (transactionCostResponse.abrExchangeRate && sourceChainToken.abrPayer) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.abrExchangeRate),\n Chains.getChainDecimalsByType(sourceChainToken.chainType),\n sourceChainToken.abrPayer.abrToken.decimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_ARB] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n gasFeeIntWithStables,\n sourceChainToken.abrPayer.abrToken.decimals\n ).toFixed(),\n };\n }\n\n return gasFeeOptions;\n}\n\nfunction validateExtraGasNotExceeded(\n extraGasInt: string,\n gasFeePaymentMethod: FeePaymentMethod,\n extraGasLimits: ExtraGasMaxLimitResponse\n) {\n const extraGasMaxLimit = extraGasLimits.extraGasMax[gasFeePaymentMethod];\n if (!extraGasMaxLimit) {\n throw new InvalidGasFeePaymentOptionError(`Impossible to pay extra gas by '${gasFeePaymentMethod}' payment method`);\n }\n const extraGasMaxIntLimit = extraGasMaxLimit[AmountFormat.INT];\n if (Big(extraGasInt).gt(extraGasMaxIntLimit)) {\n throw new ExtraGasMaxLimitExceededError(\n `Extra gas ${extraGasInt} in int format, exceeded limit ${extraGasMaxIntLimit} for '${gasFeePaymentMethod}' payment method`\n );\n }\n}\n\nexport async function getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<ExtraGasMaxLimitResponse> {\n const extraGasMaxLimits: ExtraGasMaxLimits = {};\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger,\n sourceToken: sourceChainToken.tokenAddress,\n });\n const maxAmount = destinationChainToken.txCostAmount.maxAmount;\n const maxAmountFloat = convertIntAmountToFloat(\n maxAmount,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed();\n const maxAmountFloatInSourceNative = Big(maxAmountFloat)\n .div(transactionCostResponse.exchangeRate)\n .toFixed(Chains.getChainDecimalsByType(sourceChainToken.chainType), Big.roundDown);\n const maxAmountInSourceNative = convertFloatAmountToInt(\n maxAmountFloatInSourceNative,\n Chains.getChainDecimalsByType(sourceChainToken.chainType)\n ).toFixed(0);\n extraGasMaxLimits[FeePaymentMethod.WITH_NATIVE_CURRENCY] = {\n [AmountFormat.INT]: maxAmountInSourceNative,\n [AmountFormat.FLOAT]: maxAmountFloatInSourceNative,\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const maxAmountFloatInStable = Big(maxAmountFloatInSourceNative)\n .mul(transactionCostResponse.sourceNativeTokenPrice)\n .toFixed(sourceChainToken.decimals, Big.roundDown);\n extraGasMaxLimits[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: convertFloatAmountToInt(maxAmountFloatInStable, sourceChainToken.decimals).toFixed(0),\n [AmountFormat.FLOAT]: maxAmountFloatInStable,\n };\n }\n if (transactionCostResponse.abrExchangeRate && sourceChainToken.abrPayer) {\n const maxAmountFloatInStable = Big(maxAmountFloatInSourceNative)\n .mul(transactionCostResponse.abrExchangeRate)\n .toFixed(sourceChainToken.abrPayer.abrToken.decimals, Big.roundDown);\n extraGasMaxLimits[FeePaymentMethod.WITH_ARB] = {\n [AmountFormat.INT]: convertFloatAmountToInt(\n maxAmountFloatInStable,\n sourceChainToken.abrPayer.abrToken.decimals\n ).toFixed(0),\n [AmountFormat.FLOAT]: maxAmountFloatInStable,\n };\n }\n return {\n extraGasMax: extraGasMaxLimits,\n destinationChain: {\n gasAmountMax: {\n [AmountFormat.INT]: maxAmount,\n [AmountFormat.FLOAT]: maxAmountFloat,\n },\n swap: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.swap,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.swap,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n transfer: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.transfer,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.transfer,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n },\n exchangeRate: transactionCostResponse.exchangeRate,\n abrExchangeRate: transactionCostResponse.abrExchangeRate,\n sourceNativeTokenPrice: transactionCostResponse.sourceNativeTokenPrice,\n };\n}\n\nexport function isSendParams(params: SwapParams | SendParams): params is SendParams {\n return params.sourceToken.chainSymbol !== params.destinationToken.chainSymbol;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/services/bridge/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport { ContractIdString, createAddress, parseContractId } from \"@stacks/transactions\";\nimport { Address } from \"@stellar/stellar-sdk\";\nimport algosdk, { Address as AlgoAddress } from \"algosdk\";\nimport { Big, BigSource } from \"big.js\";\nimport randomBytes from \"randombytes\";\nimport { utils as TronWebUtils } from \"tronweb\";\nimport { Web3 } from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport {\n AmountNotEnoughError,\n CCTPDoesNotSupportedError,\n ExtraGasMaxLimitExceededError,\n InvalidGasFeePaymentOptionError,\n OFTDoesNotSupportedError,\n SdkError,\n} from \"../../exceptions\";\nimport {\n AmountFormat,\n ChainType,\n ExtraGasMaxLimitResponse,\n ExtraGasMaxLimits,\n FeePaymentMethod,\n GasFeeOptions,\n SwapParams,\n} from \"../../models\";\nimport { ChainDetailsMap, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertAmountPrecision, convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { assertNever } from \"../../utils/utils\";\nimport {\n SendParams,\n TxSendParams,\n TxSendParamsAlg,\n TxSendParamsEvm,\n TxSendParamsSol,\n TxSendParamsSrb,\n TxSendParamsStx,\n TxSendParamsSui,\n TxSendParamsTrx,\n TxSwapParams,\n TxSwapParamsEvm,\n TxSwapParamsSol,\n TxSwapParamsSrb,\n TxSwapParamsSui,\n TxSwapParamsTrx,\n} from \"./models\";\n\n// 1. OVERLOADS\nexport function formatAddress(address: string, from: ChainType, to: ChainType.EVM | ChainType.SUI): string;\nexport function formatAddress(address: string, from: ChainType, to: ChainType.TRX): Buffer;\nexport function formatAddress(address: string, from: ChainType, to: ChainType.SOLANA | ChainType.SRB): number[];\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] | Buffer;\n\n// 2. COMMON Realization\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] | Buffer {\n let buffer: Buffer;\n switch (from) {\n case ChainType.EVM: {\n buffer = evmAddressToBuffer32(address);\n break;\n }\n case ChainType.SOLANA: {\n buffer = new PublicKey(address).toBuffer();\n break;\n }\n case ChainType.TRX: {\n buffer = tronAddressToBuffer32(address);\n break;\n }\n case ChainType.SRB: {\n buffer = new Address(address).toBuffer();\n break;\n }\n case ChainType.SUI: {\n buffer = evmAddressToBuffer32(address);\n break;\n }\n case ChainType.ALG: {\n buffer = algAddressToBuffer32(address);\n break;\n }\n case ChainType.STX: {\n buffer = stxAddressToBuffer32(address);\n break;\n }\n }\n\n switch (to) {\n case ChainType.EVM: {\n return \"0x\" + buffer.toString(\"hex\");\n }\n case ChainType.SOLANA: {\n return Array.from(buffer);\n }\n case ChainType.TRX: {\n return buffer;\n }\n case ChainType.SRB: {\n return buffer.toJSON().data;\n }\n case ChainType.SUI: {\n return \"0x\" + buffer.toString(\"hex\");\n }\n case ChainType.ALG: {\n return buffer;\n }\n case ChainType.STX: {\n return buffer;\n }\n }\n}\n\nexport function normalizeSuiHex(hex: string): string {\n return hex.replace(/^0x/i, \"\");\n}\n\nexport function hexToBuffer(hex: string): Buffer {\n return Buffer.from(hex.replace(/^0x/i, \"\"), \"hex\");\n}\n\nexport function evmAddressToBuffer32(address: string): Buffer {\n const length = 32;\n const buff = hexToBuffer(address);\n return Buffer.concat([Buffer.alloc(length - buff.length, 0), buff], length);\n}\n\nexport function algAddressToBuffer32(address: string): Buffer {\n if (algosdk.isValidAddress(address)) {\n return Buffer.from(AlgoAddress.fromString(address).publicKey);\n }\n\n if (/^\\d+$/.test(address)) {\n let hex = BigInt(address).toString(16);\n hex = hex.padStart(64, \"0\");\n return Buffer.from(hex, \"hex\");\n }\n throw new SdkError(`Unexpected Alg address: ${address}`);\n}\n\nexport function stxAddressToBuffer32(address: string): Buffer {\n if (address.includes(\".\")) {\n const [addr, name] = parseContractId(address as ContractIdString);\n if (!addr || !name) {\n throw new SdkError(`Unexpected Alg address: ${address}`);\n }\n const hashBytes = Buffer.from(createAddress(addr).hash160, \"hex\");\n const hash = Web3.utils.keccak256(Buffer.concat([hashBytes, Buffer.from(name)]));\n return hexToBuffer(hash);\n }\n\n const hashBytes = Buffer.from(createAddress(address).hash160, \"hex\");\n return bufferToSize(hashBytes, 32);\n}\n\nexport function tronAddressToBuffer32(address: string): Buffer {\n const ethAddress = tronAddressToEthAddress(address);\n const buffer = hexToBuffer(ethAddress);\n return bufferToSize(buffer, 32);\n}\n\nexport function tronAddressToEthAddress(address: string): string {\n const bytes = TronWebUtils.crypto.decodeBase58Address(address);\n if (!bytes) return \"\";\n return TronWebUtils.bytes.byteArray2hexStr(bytes).replace(/^41/, \"0x\");\n}\n\nfunction bufferToSize(buffer: Buffer, size: number): Buffer {\n if (buffer.length >= size) {\n return buffer;\n }\n const result = Buffer.alloc(size, 0);\n buffer.copy(result, size - buffer.length);\n return result;\n}\n\nexport function getTokenByTokenAddress(\n chainDetailsMap: ChainDetailsMap,\n chainSymbol: string,\n tokenAddress: string\n): TokenWithChainDetails {\n const chainDetail = chainDetailsMap[chainSymbol];\n if (!chainDetail) {\n throw new SdkError(\"Cannot find chain detail for \" + chainSymbol);\n }\n const token = chainDetail.tokens.find((value) => value.tokenAddress.toUpperCase() === tokenAddress.toUpperCase());\n if (!token) {\n throw new SdkError(\"Cannot find token info about token \" + tokenAddress + \" on chain \" + chainSymbol);\n }\n return token;\n}\n\nexport function getNonce(): Buffer {\n return randomBytes(32);\n}\n\nexport function getNonceBigInt(): bigint {\n const bigint = randomBytes(32).readBigInt64BE();\n if (bigint < 0) {\n return bigint * -1n;\n }\n return bigint;\n}\n\n// 1. OVERLOADS\nexport function prepareTxSwapParams(\n bridgeChainType: ChainType.EVM | ChainType.SUI,\n params: SwapParams\n): TxSwapParamsEvm | TxSwapParamsSui;\nexport function prepareTxSwapParams(bridgeChainType: ChainType.TRX, params: SwapParams): TxSwapParamsTrx;\nexport function prepareTxSwapParams(\n bridgeChainType: ChainType.SOLANA | ChainType.SRB,\n params: SwapParams\n): TxSwapParamsSol | TxSwapParamsSrb;\nexport function prepareTxSwapParams(bridgeChainType: ChainType, params: SwapParams): TxSwapParams;\n\n// 2. COMMON Realization\nexport function prepareTxSwapParams(bridgeChainType: ChainType, params: SwapParams): TxSwapParams {\n const txSwapParams = {} as TxSwapParams;\n const sourceToken = params.sourceToken;\n txSwapParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n txSwapParams.contractAddress = sourceToken.bridgeAddress;\n txSwapParams.fromAccountAddress = params.fromAccountAddress;\n switch (bridgeChainType) {\n case ChainType.SUI: {\n if (!sourceToken.originTokenAddress) {\n throw new SdkError(\"SUI sourceToken must contain 'originTokenAddress'\");\n }\n txSwapParams.fromTokenAddress = sourceToken.originTokenAddress;\n break;\n }\n case ChainType.ALG: {\n txSwapParams.fromTokenAddress = sourceToken.tokenAddress;\n break;\n }\n default: {\n txSwapParams.fromTokenAddress = formatAddress(sourceToken.tokenAddress, bridgeChainType, bridgeChainType);\n }\n }\n txSwapParams.toAccountAddress = params.toAccountAddress;\n switch (bridgeChainType) {\n case ChainType.SUI: {\n if (!params.destinationToken.originTokenAddress) {\n throw new SdkError(\"SUI destinationToken must contain 'originTokenAddress'\");\n }\n txSwapParams.toTokenAddress = params.destinationToken.originTokenAddress;\n break;\n }\n case ChainType.ALG: {\n txSwapParams.toTokenAddress = params.destinationToken.tokenAddress;\n break;\n }\n default: {\n txSwapParams.toTokenAddress = formatAddress(\n params.destinationToken.tokenAddress,\n bridgeChainType,\n bridgeChainType\n );\n }\n }\n txSwapParams.minimumReceiveAmount = params.minimumReceiveAmount\n ? convertFloatAmountToInt(params.minimumReceiveAmount, params.destinationToken.decimals).toFixed()\n : \"0\";\n return txSwapParams;\n}\n\n// 1. OVERLOADS\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.EVM | ChainType.SUI,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsEvm | TxSendParamsSui>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.TRX,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsTrx>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.ALG,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsAlg>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.STX,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsStx>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType.SOLANA | ChainType.SRB,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParamsSol | TxSendParamsSrb>;\nexport function prepareTxSendParams(\n bridgeChainType: ChainType,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParams>;\n\n// 2. COMMON Realization\nexport async function prepareTxSendParams(\n bridgeChainType: ChainType,\n params: SendParams,\n api: AllbridgeCoreClient\n): Promise<TxSendParams> {\n const txSendParams = {} as TxSendParams;\n\n txSendParams.fromChainId = params.sourceToken.allbridgeChainId;\n txSendParams.fromChainSymbol = params.sourceToken.chainSymbol;\n const toChainType = Chains.getChainProperty(params.destinationToken.chainSymbol).chainType;\n if (bridgeChainType === ChainType.SUI) {\n if (!params.sourceToken.originTokenAddress) {\n throw new SdkError(\"SUI token must contain 'originTokenAddress'\");\n }\n txSendParams.fromTokenAddress = params.sourceToken.originTokenAddress;\n } else {\n txSendParams.fromTokenAddress = params.sourceToken.tokenAddress;\n }\n\n txSendParams.toChainId = params.destinationToken.allbridgeChainId;\n txSendParams.toTokenAddress = params.destinationToken.tokenAddress;\n\n txSendParams.gasFeePaymentMethod = params.gasFeePaymentMethod ?? FeePaymentMethod.WITH_NATIVE_CURRENCY;\n if (txSendParams.gasFeePaymentMethod === FeePaymentMethod.WITH_ARB) {\n if (!params.sourceToken.abrPayer) {\n throw new SdkError(\"Source token must contain 'abrPayer' for ARB0 payment method\");\n }\n }\n\n const sourceToken = params.sourceToken;\n\n switch (params.messenger) {\n case Messenger.CCTP:\n if (!sourceToken.cctpAddress || !params.destinationToken.cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n txSendParams.contractAddress = sourceToken.cctpAddress;\n break;\n case Messenger.CCTP_V2:\n if (!sourceToken.cctpV2Address || !params.destinationToken.cctpV2Address) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n txSendParams.contractAddress = sourceToken.cctpV2Address;\n\n break;\n case Messenger.OFT:\n if (\n !sourceToken.oftBridgeAddress ||\n !params.destinationToken.oftBridgeAddress ||\n sourceToken.oftId !== params.destinationToken.oftId\n ) {\n throw new OFTDoesNotSupportedError(\"Such route does not support OFT protocol\");\n }\n txSendParams.contractAddress = sourceToken.oftBridgeAddress;\n break;\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE:\n txSendParams.contractAddress = sourceToken.bridgeAddress;\n break;\n }\n\n txSendParams.messenger = params.messenger;\n txSendParams.fromAccountAddress = params.fromAccountAddress;\n txSendParams.amount = convertFloatAmountToInt(params.amount, sourceToken.decimals).toFixed();\n\n //Fee\n let { fee, feeFormat } = params;\n if (!fee) {\n const gasFeeOptions = await getGasFeeOptions(\n params.sourceToken,\n txSendParams.toChainId,\n txSendParams.messenger,\n api\n );\n\n const gasFeeOption = gasFeeOptions[txSendParams.gasFeePaymentMethod];\n if (!gasFeeOption) {\n throw new InvalidGasFeePaymentOptionError();\n }\n fee = gasFeeOption[AmountFormat.INT];\n feeFormat = AmountFormat.INT;\n }\n if (feeFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.fee = convertFloatAmountToInt(fee, Chains.getChainDecimalsByType(sourceToken.chainType)).toFixed(\n 0\n );\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.fee = convertFloatAmountToInt(fee, sourceToken.decimals).toFixed(0);\n break;\n case FeePaymentMethod.WITH_ARB:\n if (!sourceToken.abrPayer) {\n throw new SdkError(\"Source token must contain 'abrPayer' for ARB0 payment method\");\n }\n txSendParams.fee = convertFloatAmountToInt(fee, sourceToken.abrPayer.abrToken.decimals).toFixed(0);\n break;\n default: {\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n }\n } else {\n txSendParams.fee = fee;\n }\n\n //ExtraGas\n const { extraGas, extraGasFormat } = params;\n if (extraGas && +extraGas > 0) {\n const extraGasLimits = await getExtraGasMaxLimits(\n sourceToken,\n params.destinationToken,\n txSendParams.messenger,\n api\n );\n\n let extraGasDecimals: number;\n let extraGasDestRate: Big;\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n extraGasDecimals = Chains.getChainDecimalsByType(sourceToken.chainType);\n extraGasDestRate = Big(extraGasLimits.exchangeRate);\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n extraGasDecimals = sourceToken.decimals;\n extraGasDestRate = Big(extraGasLimits.exchangeRate).div(extraGasLimits.sourceNativeTokenPrice);\n break;\n case FeePaymentMethod.WITH_ARB:\n if (!sourceToken.abrPayer) {\n throw new SdkError(\"Source token must contain 'abrPayer' for ARB0 payment method\");\n }\n if (!extraGasLimits.abrExchangeRate) {\n throw new SdkError(\"Cannot transfer WITH_ARB option\");\n }\n extraGasDecimals = sourceToken.abrPayer.abrToken.decimals;\n extraGasDestRate = Big(extraGasLimits.exchangeRate).div(extraGasLimits.abrExchangeRate);\n break;\n default: {\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n }\n\n switch (extraGasFormat ?? AmountFormat.INT) {\n case AmountFormat.FLOAT: {\n txSendParams.extraGas = convertFloatAmountToInt(extraGas, extraGasDecimals).toFixed(0);\n\n const extraGasDestFloat = extraGasDestRate.mul(extraGas);\n txSendParams.extraGasDest = convertFloatAmountToInt(\n extraGasDestFloat,\n Chains.getChainDecimalsByType(params.destinationToken.chainType)\n ).toFixed(0, Big.roundDown);\n break;\n }\n case AmountFormat.INT: {\n txSendParams.extraGas = extraGas;\n\n const extraGasFloat = convertIntAmountToFloat(\n txSendParams.extraGas,\n Chains.getChainDecimalsByType(sourceToken.chainType)\n );\n const extraGasDestFloat = extraGasDestRate.mul(extraGasFloat);\n txSendParams.extraGasDest = convertFloatAmountToInt(\n extraGasDestFloat,\n Chains.getChainDecimalsByType(params.destinationToken.chainType)\n ).toFixed(0, Big.roundDown);\n break;\n }\n }\n validateExtraGasNotExceeded(txSendParams.extraGas, txSendParams.gasFeePaymentMethod, extraGasLimits);\n }\n\n if (![ChainType.SUI, ChainType.ALG].includes(bridgeChainType)) {\n txSendParams.fromTokenAddress = formatAddress(txSendParams.fromTokenAddress, bridgeChainType, bridgeChainType);\n }\n txSendParams.toAccountAddress = formatAddress(params.toAccountAddress, toChainType, bridgeChainType);\n txSendParams.toTokenAddress = formatAddress(txSendParams.toTokenAddress, toChainType, bridgeChainType);\n\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n validateAmountEnough(txSendParams.amount, sourceToken.decimals, txSendParams.fee, txSendParams.extraGas);\n break;\n case FeePaymentMethod.WITH_ARB: {\n const { abrExchangeRate } = await api.getReceiveTransactionCost({\n sourceChainId: txSendParams.fromChainId,\n destinationChainId: txSendParams.toChainId,\n messenger: txSendParams.messenger,\n sourceToken: params.sourceToken.tokenAddress,\n });\n txSendParams.abrExchangeRate = abrExchangeRate;\n break;\n }\n default:\n return assertNever(txSendParams.gasFeePaymentMethod, \"Unhandled FeePaymentMethod\");\n }\n return txSendParams;\n}\n\nfunction validateAmountEnough(\n amountInt: BigSource,\n decimals: number,\n feeInt: BigSource,\n extraGasInt: BigSource | undefined\n) {\n const amountTotal = Big(amountInt)\n .minus(feeInt)\n .minus(extraGasInt ?? 0);\n if (amountTotal.lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(amountTotal).minus(1).neg(),\n decimals\n ).toFixed()} stables is missing`\n );\n }\n}\n\nexport async function getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationAllbridgeChainId: number,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<GasFeeOptions> {\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationAllbridgeChainId,\n messenger,\n sourceToken: sourceChainToken.tokenAddress,\n });\n\n const gasFeeOptions: GasFeeOptions = {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: {\n [AmountFormat.INT]: transactionCostResponse.fee,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n transactionCostResponse.fee,\n Chains.getChainDecimalsByType(sourceChainToken.chainType)\n ).toFixed(),\n },\n adminFeeShareWithExtras: transactionCostResponse.adminFeeShareWithExtras,\n };\n\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.sourceNativeTokenPrice),\n Chains.getChainDecimalsByType(sourceChainToken.chainType),\n sourceChainToken.decimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(gasFeeIntWithStables, sourceChainToken.decimals).toFixed(),\n };\n }\n\n const messengerKey = Messenger[messenger] as keyof typeof Messenger;\n if (\n transactionCostResponse.abrExchangeRate &&\n sourceChainToken.abrPayer &&\n sourceChainToken.abrPayer.payerAvailability[messengerKey]\n ) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.abrExchangeRate),\n Chains.getChainDecimalsByType(sourceChainToken.chainType),\n sourceChainToken.abrPayer.abrToken.decimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_ARB] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n gasFeeIntWithStables,\n sourceChainToken.abrPayer.abrToken.decimals\n ).toFixed(),\n };\n }\n\n return gasFeeOptions;\n}\n\nfunction validateExtraGasNotExceeded(\n extraGasInt: string,\n gasFeePaymentMethod: FeePaymentMethod,\n extraGasLimits: ExtraGasMaxLimitResponse\n) {\n const extraGasMaxLimit = extraGasLimits.extraGasMax[gasFeePaymentMethod];\n if (!extraGasMaxLimit) {\n throw new InvalidGasFeePaymentOptionError(`Impossible to pay extra gas by '${gasFeePaymentMethod}' payment method`);\n }\n const extraGasMaxIntLimit = extraGasMaxLimit[AmountFormat.INT];\n if (Big(extraGasInt).gt(extraGasMaxIntLimit)) {\n throw new ExtraGasMaxLimitExceededError(\n `Extra gas ${extraGasInt} in int format, exceeded limit ${extraGasMaxIntLimit} for '${gasFeePaymentMethod}' payment method`\n );\n }\n}\n\nexport async function getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<ExtraGasMaxLimitResponse> {\n const extraGasMaxLimits: ExtraGasMaxLimits = {};\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceChainToken.allbridgeChainId,\n destinationChainId: destinationChainToken.allbridgeChainId,\n messenger,\n sourceToken: sourceChainToken.tokenAddress,\n });\n const maxAmount = destinationChainToken.txCostAmount.maxAmount;\n const maxAmountFloat = convertIntAmountToFloat(\n maxAmount,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed();\n const maxAmountFloatInSourceNative = Big(maxAmountFloat)\n .div(transactionCostResponse.exchangeRate)\n .toFixed(Chains.getChainDecimalsByType(sourceChainToken.chainType), Big.roundDown);\n const maxAmountInSourceNative = convertFloatAmountToInt(\n maxAmountFloatInSourceNative,\n Chains.getChainDecimalsByType(sourceChainToken.chainType)\n ).toFixed(0);\n extraGasMaxLimits[FeePaymentMethod.WITH_NATIVE_CURRENCY] = {\n [AmountFormat.INT]: maxAmountInSourceNative,\n [AmountFormat.FLOAT]: maxAmountFloatInSourceNative,\n };\n\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const maxAmountFloatInStable = Big(maxAmountFloatInSourceNative)\n .mul(transactionCostResponse.sourceNativeTokenPrice)\n .toFixed(sourceChainToken.decimals, Big.roundDown);\n extraGasMaxLimits[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: convertFloatAmountToInt(maxAmountFloatInStable, sourceChainToken.decimals).toFixed(0),\n [AmountFormat.FLOAT]: maxAmountFloatInStable,\n };\n }\n\n let abrAvailable;\n const messengerKey = Messenger[messenger] as keyof typeof Messenger;\n if (\n transactionCostResponse.abrExchangeRate &&\n sourceChainToken.abrPayer &&\n sourceChainToken.abrPayer.payerAvailability[messengerKey]\n ) {\n abrAvailable = true;\n const maxAmountFloatInStable = Big(maxAmountFloatInSourceNative)\n .mul(transactionCostResponse.abrExchangeRate)\n .toFixed(sourceChainToken.abrPayer.abrToken.decimals, Big.roundDown);\n extraGasMaxLimits[FeePaymentMethod.WITH_ARB] = {\n [AmountFormat.INT]: convertFloatAmountToInt(\n maxAmountFloatInStable,\n sourceChainToken.abrPayer.abrToken.decimals\n ).toFixed(0),\n [AmountFormat.FLOAT]: maxAmountFloatInStable,\n };\n }\n\n return {\n extraGasMax: extraGasMaxLimits,\n destinationChain: {\n gasAmountMax: {\n [AmountFormat.INT]: maxAmount,\n [AmountFormat.FLOAT]: maxAmountFloat,\n },\n swap: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.swap,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.swap,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n transfer: {\n [AmountFormat.INT]: destinationChainToken.txCostAmount.transfer,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n destinationChainToken.txCostAmount.transfer,\n Chains.getChainDecimalsByType(destinationChainToken.chainType)\n ).toFixed(),\n },\n },\n exchangeRate: transactionCostResponse.exchangeRate,\n abrExchangeRate: abrAvailable ? transactionCostResponse.abrExchangeRate : undefined,\n sourceNativeTokenPrice: transactionCostResponse.sourceNativeTokenPrice,\n };\n}\n\nexport function isSendParams(params: SwapParams | SendParams): params is SendParams {\n return params.sourceToken.chainSymbol !== params.destinationToken.chainSymbol;\n}\n"]}
@@ -1 +1 @@
1
- export declare const VERSION = "3.27.0-alpha.15";
1
+ export declare const VERSION = "3.27.0-alpha.17";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = "3.27.0-alpha.15";
4
+ exports.VERSION = "3.27.0-alpha.17";
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,iBAAiB,CAAC","sourcesContent":["export const VERSION = \"3.27.0-alpha.15\";\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,iBAAiB,CAAC","sourcesContent":["export const VERSION = \"3.27.0-alpha.17\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allbridge/bridge-core-sdk",
3
- "version": "3.27.0-alpha.15",
3
+ "version": "3.27.0-alpha.17",
4
4
  "main": "./dist/cjs/index.js",
5
5
  "module": "./dist/esm/index.js",
6
6
  "types": "./dist/src/index.d.ts",