@allbridge/bridge-core-sdk 3.18.0 → 3.19.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/configs/mainnet.ts", "../../src/services/index.ts", "../../src/exceptions/exceptions.ts", "../../src/chains/chain.enums.ts", "../../src/chains/index.ts", "../../src/client/core-api/api-client.ts", "../../src/version.ts", "../../src/utils/calculation/index.ts", "../../src/client/core-api/core-api.model.ts", "../../src/client/core-api/core-api-mapper.ts", "../../node_modules/.pnpm/timed-cache@2.0.0/node_modules/timed-cache/cache.js", "../../src/client/core-api/api-client-caching.ts", "../../src/client/core-api/core-client-base.ts", "../../src/client/core-api/core-client-filtered.ts", "../../src/client/core-api/core-client-pool-info-caching.ts", "../../src/services/bridge/index.ts", "../../src/utils/utils.ts", "../../src/services/bridge/evm/index.ts", "../../src/services/models/abi/Bridge.json", "../../src/services/models/abi/CctpBridge.json", "../../src/services/utils/sol/accounts.ts", "../../src/services/utils/sol/anchor-provider.ts", "../../src/services/bridge/models/bridge.ts", "../../src/services/bridge/utils.ts", "../../src/services/bridge/raw-bridge-transaction-builder.ts", "../../src/services/bridge/sol/index.ts", "../../src/services/models/sol/types/bridge.ts", "../../src/services/models/sol/types/cctp_bridge.ts", "../../src/services/utils/sol/index.ts", "../../src/services/utils/sol/compute-budget.ts", "../../src/utils/sol/utils.ts", "../../src/services/models/sol/index.ts", "../../src/services/bridge/sol/jupiter.ts", "../../src/services/bridge/srb/index.ts", "../../src/services/models/srb/bridge-contract.ts", "../../src/services/bridge/trx/index.ts", "../../src/services/utils/index.ts", "../../src/services/utils/trx/index.ts", "../../src/services/liquidity-pool/index.ts", "../../src/services/utils/calculation/index.ts", "../../src/services/models/abi/Pool.json", "../../src/services/liquidity-pool/models/pool.model.ts", "../../src/services/liquidity-pool/models/pool.ts", "../../src/services/liquidity-pool/evm/index.ts", "../../src/services/liquidity-pool/raw-pool-transaction-builder.ts", "../../src/services/liquidity-pool/sol/index.ts", "../../src/services/liquidity-pool/srb/index.ts", "../../src/services/models/srb/pool-contract.ts", "../../src/services/liquidity-pool/trx/index.ts", "../../src/utils/calculation/swap-and-bridge-fee-calc.ts", "../../src/utils/calculation/swap-and-bridge-details.ts", "../../src/utils/sol/index.ts", "../../src/utils/srb/index.ts", "../../src/services/models/srb/token-contract.ts", "../../src/utils/index.ts", "../../src/models/index.ts", "../../src/services/token/index.ts", "../../src/services/token/evm/index.ts", "../../src/services/token/models/token.ts", "../../src/services/token/sol/index.ts", "../../src/services/token/srb/index.ts", "../../src/services/models/abi/ERC20.json", "../../src/services/token/trx/index.ts"],
4
- "sourcesContent": ["import { BigSource } from \"big.js\";\nimport { AdditionalBasicChainProperties } from \"./chains/models\";\nimport { mainnet } from \"./configs\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n BridgeService,\n ChainDetailsMap,\n CheckAddressResponse,\n ExtraGasMaxLimitResponse,\n GasBalanceResponse,\n GasFeeOptions,\n GetNativeTokenBalanceParams,\n GetTokenBalanceParams,\n LiquidityPoolService,\n Messenger,\n PendingStatusInfoResponse,\n PoolInfo,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n TokenWithChainDetails,\n TransferStatusResponse,\n} from \"./models\";\nimport { AllbridgeCoreSdkService, NodeRpcUrlsConfig } from \"./services\";\nimport { CctpParams } from \"./services/bridge/sol\";\nimport { DefaultUtils, Utils } from \"./utils\";\n\nexport * from \"./configs\";\nexport * from \"./models\";\n\nexport interface AllbridgeCoreSdkOptions {\n coreApiUrl: string;\n /**\n * A set of query parameters to be added to all requests to the Core API.\n */\n coreApiQueryParams?: Record<string, string>;\n /**\n * A set of headers to be added to all requests to the Core API.\n */\n coreApiHeaders?: Record<string, string>;\n /**\n * Jupiter v6 Swap Api\n */\n jupiterUrl: string;\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n sorobanNetworkPassphrase: string;\n /**\n * Optional. Will be used in methods</br>\n * {@link LiquidityPoolService.getPoolInfoFromChain} and {@link LiquidityPoolService.getAmountToBeWithdrawn}</br>\n * to fetch information from the blockchain with fewer HTTP requests using JSON-RPC API\n */\n tronJsonRpc?: string;\n cctpParams: CctpParams;\n /**\n * The number of seconds that pool information taken from the chain will be cached.\n *\n * @type {number}\n */\n cachePoolInfoChainSec: number;\n\n /**\n * @Internal\n * Optional additional properties to merge with the default properties.\n */\n additionalChainsProperties?: Record<string, AdditionalBasicChainProperties>;\n}\n\n/**\n * Type representing RPC node URLs for different blockchain chains.</br>\n * Provide node RPC URL for chain connection you intend to communicate with</br>\n * - required for SOL, TRX chains</br>\n * - optional for EVM chains -- you can interact by passing a {@link Provider} that will be used to communicate with the chain</br>\n * @typedef {Record<string, string>} NodeRpcUrls\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {string} rpcUrl - The RPC node URL for the specified chain.\n */\nexport type NodeRpcUrls = Record<string, string>;\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nexport interface NodeUrlsConfig {\n solanaRpcUrl: string;\n tronRpcUrl: string;\n}\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nfunction isNodeUrlsConfig(nodeUrls: NodeUrlsConfig | NodeRpcUrls): nodeUrls is NodeUrlsConfig {\n return \"solanaRpcUrl\" in nodeUrls;\n}\n\nexport class AllbridgeCoreSdk {\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n utils: Utils;\n\n private service: AllbridgeCoreSdkService;\n\n /**\n * Initializes the SDK object.\n * @param nodeUrls node rpc urls for full functionality\n * @param params\n * Optional.\n * If not defined, the default {@link mainnet} parameters are used.\n */\n constructor(nodeUrls: NodeUrlsConfig | NodeRpcUrls, params: AllbridgeCoreSdkOptions = mainnet) {\n let nodeRpcUrlsConfig: NodeRpcUrlsConfig;\n if (isNodeUrlsConfig(nodeUrls)) {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig({ SOL: nodeUrls.solanaRpcUrl, TRX: nodeUrls.tronRpcUrl });\n } else {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig(nodeUrls);\n }\n this.service = new AllbridgeCoreSdkService(nodeRpcUrlsConfig, params);\n this.bridge = this.service.bridge;\n this.pool = this.service.pool;\n this.utils = new DefaultUtils(nodeRpcUrlsConfig, params);\n this.params = params;\n }\n\n /**\n * Returns {@link ChainDetailsMap} containing a list of supported tokens groped by chain.\n *\n * @param type - A string value which specifies ChainDetailsMap to retrieve.\n * Can be either 'swap' for send or 'pool' for liquidity pools setup.\n * Defaults to 'swap'.\n */\n async chainDetailsMap(type: \"swap\" | \"pool\" = \"swap\"): Promise<ChainDetailsMap> {\n return this.service.chainDetailsMap(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens}.\n *\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n * @returns A promise that resolves to an array of {@link TokenWithChainDetails}.\n */\n async tokens(type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokens(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens} on the selected chain.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n */\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokensByChain(chainSymbol, type);\n }\n\n /**\n * Fetches information about tokens transfer by chosen chainSymbol and transaction Id from the Allbridge Core API.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param txId\n */\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.service.getTransferStatus(chainSymbol, txId);\n }\n\n /**\n * Get gas balance\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param address\n */\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.service.getGasBalance(chainSymbol, address);\n }\n\n /**\n * Check address and show gas balance\n * @Deprecated\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param recipientAddress\n * @param tokenAddress\n */\n async checkAddress(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n chainSymbol: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n recipientAddress: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenAddress?: string\n ): Promise<CheckAddressResponse> {\n return await this.service.checkAddress();\n }\n\n /**\n * Returns information about pending transactions for the same destination chain and the amount of tokens can be received as a result of transfer considering pending transactions.\n * @param amount the amount of tokens that will be sent\n * @param amountFormat amount format\n * @param sourceToken selected token transfer from\n * @param destToken selected token transfer to\n * @returns range of possible amount based on already pending transactions\n */\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n return this.service.getPendingStatusInfo(amount, amountFormat, sourceToken, destToken);\n }\n\n /**\n * Get token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.service.getTokenBalance(params, provider);\n }\n\n /**\n * Get native (gas) token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.service.getNativeTokenBalance(params, provider);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee from the initial amount that is charged when swapping from the selected source chain.\n * (Does not include fee related to the destination chain. Does not include gas fee)\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @returns fee percent\n */\n async calculateFeePercentOnSourceChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnSourceChain(amountFloat, sourceChainToken);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee that is charged when swapping to the selected destination chain. The destination chain fee percent applies to the amount after the source chain fee.\n * (Does not include fee related to the source chain. Does not include gas fee)\n * @see {@link calculateFeePercentOnSourceChain}\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns fee percent\n */\n async calculateFeePercentOnDestinationChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnDestinationChain(amountFloat, sourceChainToken, destinationChainToken);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToBeReceived(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToBeReceived(amountToSendFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on actual blockchain pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToBeReceivedFromChain(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on passed pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToBeReceivedFromPools(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToSend(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToSend(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on actual blockchain pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToSendFromChain(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on passed pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToSendFromPools(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Fetches possible ways to pay the transfer gas fee.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n * @returns {@link GasFeeOptions}\n */\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return this.service.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets the average time in ms to complete a transfer for given tokens and messenger.\n * @param sourceChainToken selected token on the source chain.\n * @param destinationChainToken selected token on the destination chain.\n * @param messenger\n * @returns Average transfer time in milliseconds or null if a given combination of tokens and messenger is not supported.\n */\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return this.service.getAverageTransferTime(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets information about the poolInfo by token\n * @param token\n * @returns poolInfo\n */\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return this.service.getPoolInfoByToken(token);\n }\n\n /**\n * Forces refresh of cached information about the state of liquidity pools.\n * Outdated cache leads to calculated amounts being less accurate.\n * The cache is invalidated at regular intervals, but it can be forced to be refreshed by calling this method.+\n *\n * @param tokens if present, the corresponding liquidity pools will be updated\n */\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n return this.service.refreshPoolInfo(tokens);\n }\n\n /**\n * Convert APR to percentage view\n * @param apr\n * @returns aprPercentageView\n */\n aprInPercents(apr: string): string {\n return this.service.aprInPercents(apr);\n }\n\n /**\n * Get possible limit of extra gas amount.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns {@link ExtraGasMaxLimitResponse}\n */\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<ExtraGasMaxLimitResponse> {\n return this.service.getExtraGasMaxLimits(sourceChainToken, destinationChainToken);\n }\n\n /**\n * @param amount - amount\n * @param amountFormat - AmountFormat\n * @param sourceToken - selected token on the source chain\n * @return virtual amount\n */\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n return this.service.getVUsdFromAmount(amount, amountFormat, sourceToken);\n }\n\n /**\n * @param vUsdAmount - amount of vUsd, int format\n * @param destToken selected token on the destination chain\n * @return amount of destToken\n */\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.service.getAmountFromVUsd(vUsdAmount, destToken);\n }\n\n /**\n * @Deprecated Use {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculation(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * @Deprecated Use {@link getAmountToBeReceived} and then {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculationReverse(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * Show amount changes (fee and amount adjustment) during send through pools on source and destination chains\n */\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n return this.service.getSendAmountDetails(amount, amountFormat, sourceToken, destToken);\n }\n}\n", "import { AllbridgeCoreSdkOptions, NodeRpcUrls, NodeUrlsConfig } from \"../index\";\n\nexport const mainnet: AllbridgeCoreSdkOptions = {\n coreApiUrl: \"https://core.api.allbridgecoreapi.net\",\n coreApiQueryParams: {},\n coreApiHeaders: {},\n jupiterUrl: \"https://quote-api.jup.ag/v6\",\n wormholeMessengerProgramId: \"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth\",\n solanaLookUpTable: \"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj\",\n sorobanNetworkPassphrase: \"Public Global Stellar Network ; September 2015\",\n tronJsonRpc: \"https://api.trongrid.io/jsonrpc\",\n cctpParams: {\n cctpTransmitterProgramId: \"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd\",\n cctpTokenMessengerMinter: \"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3\",\n cctpDomains: { ETH: 0, AVA: 1, OPT: 2, ARB: 3, SOL: 5, BAS: 6, POL: 7 },\n },\n cachePoolInfoChainSec: 20,\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n * @Deprecated use {@link nodeRpcUrlsDefault}\n */\nexport const nodeUrlsDefault: NodeUrlsConfig = {\n solanaRpcUrl: \"https://api.mainnet-beta.solana.com\",\n tronRpcUrl: \"https://api.trongrid.io\",\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n */\nexport const nodeRpcUrlsDefault: NodeRpcUrls = {\n SOL: \"https://api.mainnet-beta.solana.com\",\n TRX: \"https://api.trongrid.io\",\n SRB: \"https://rpc.stellar.org:443\",\n STLR: \"https://horizon.stellar.org\",\n};\n", "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 { AllbridgeCoreSdkOptions, BasicChainProperties, NodeRpcUrls, SdkError } 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\";\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 private readonly api: AllbridgeCoreClientFiltered;\n\n private readonly tokenService: TokenService;\n\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n\n constructor(nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions = mainnet) {\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.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 const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\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 const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToBeReceivedFromPools(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n if (messenger && messenger == 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\n const vUsd = swapToVUsd(amountToSend, sourceChainToken, sourcePool);\n return this.getAmountFromVUsdFormatted(vUsd, destinationChainToken, destinationPool).float;\n }\n\n async getAmountToSend(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger\n ): Promise<string> {\n const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\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 const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToSendFromPools(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n if (messenger && messenger == 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\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 async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return getGasFeeOptions(\n sourceChainToken.allbridgeChainId,\n sourceChainToken.chainType,\n destinationChainToken.allbridgeChainId,\n sourceChainToken.decimals,\n messenger,\n this.api\n );\n }\n\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n sourceChainToken.transferTime?.[destinationChainToken.chainSymbol]?.[messenger] ?? null\n );\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 ): Promise<ExtraGasMaxLimitResponse> {\n return await getExtraGasMaxLimits(sourceChainToken, destinationChainToken, 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", "export abstract class SdkRootError extends Error {\n public errorCode: ErrorCode;\n\n protected constructor(code: ErrorCode, message?: string) {\n super(message);\n this.errorCode = code;\n }\n}\n\nexport class SdkError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.SDK_ERROR, message);\n }\n}\n\nexport class InvalidAmountError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_AMOUNT_ERROR, message);\n }\n}\n\nexport class AmountNotEnoughError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.AMOUNT_NOT_ENOUGH_ERROR, message);\n }\n}\n\nexport class InsufficientPoolLiquidityError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INSUFFICIENT_POOL_LIQUIDITY_ERROR, message);\n }\n}\n\nexport class JupiterError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.JUPITER_ERROR, message);\n }\n}\n\nexport class InvalidGasFeePaymentOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR, message);\n }\n}\n\nexport class InvalidMessengerOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_MESSENGER_OPTION_ERROR, message);\n }\n}\n\nexport class MethodNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.METHOD_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class VerifyTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.VERIFY_TX_ERROR, message);\n }\n}\n\nexport class InvalidTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_TX_ERROR, message);\n }\n}\n\nexport class ExtraGasMaxLimitExceededError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR, message);\n }\n}\n\nexport class ArgumentInvalidDecimalsError extends SdkRootError {\n constructor(argName: string, decimalsIs: number, decimalsRequired: number) {\n super(\n ErrorCode.ARGUMENT_INVALID_DECIMALS_ERROR,\n `Argument '${argName}' decimals '${decimalsIs}' cannot be greater than '${decimalsRequired}'`\n );\n }\n}\n\nexport class TimeoutError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.TIMEOUT_ERROR, message);\n }\n}\n\nexport class NodeRpcUrlNotInitializedError extends SdkRootError {\n constructor(chainSymbol: string) {\n super(ErrorCode.NODE_RPC_URL_NOT_INITIALIZED_ERROR, `For chain '${chainSymbol}' Node RPC URL not initialized`);\n }\n}\n\nexport class CCTPDoesNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.CCTP_DOES_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class TxTooLargeError extends SdkRootError {\n constructor() {\n super(\n ErrorCode.TX_TOO_LARGE,\n \"Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency\"\n );\n }\n}\n\nexport enum ErrorCode {\n SDK_ERROR = \"SdkError\",\n INVALID_AMOUNT_ERROR = \"InvalidAmountError\",\n AMOUNT_NOT_ENOUGH_ERROR = \"AmountNotEnoughError\",\n INSUFFICIENT_POOL_LIQUIDITY_ERROR = \"InsufficientPoolLiquidityError\",\n JUPITER_ERROR = \"JupiterError\",\n INVALID_GAS_FEE_PAYMENT_OPTION_ERROR = \"InvalidGasFeePaymentOptionError\",\n INVALID_MESSENGER_OPTION_ERROR = \"InvalidMessengerOptionError\",\n METHOD_NOT_SUPPORTED_ERROR = \"MethodNotSupportedError\",\n VERIFY_TX_ERROR = \"VerifyTxError\",\n INVALID_TX_ERROR = \"InvalidTxError\",\n EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR = \"ExtraGasMaxLimitExceededError\",\n ARGUMENT_INVALID_DECIMALS_ERROR = \"ArgumentInvalidDecimalsError\",\n TIMEOUT_ERROR = \"TimeoutError\",\n NODE_RPC_URL_NOT_INITIALIZED_ERROR = \"NodeRpcUrlNotInitializedError\",\n CCTP_DOES_NOT_SUPPORTED_ERROR = \"CCTPDoesNotSupportedError\",\n TX_TOO_LARGE = \"TxTooLargeError\",\n}\n", "export enum ChainSymbol {\n /**\n * The BNB Smart Chain main network.\n */\n BSC = \"BSC\",\n\n /**\n * The Ethereum main network.\n */\n ETH = \"ETH\",\n\n /**\n * The Base main network.\n */\n BAS = \"BAS\",\n\n /**\n * The Solana network.\n */\n SOL = \"SOL\",\n\n /**\n * The TRON network.\n */\n TRX = \"TRX\",\n\n /**\n * The Polygon network.\n */\n POL = \"POL\",\n\n /**\n * The Arbitrum network.\n */\n ARB = \"ARB\",\n\n /**\n * The Celo network.\n */\n CEL = \"CEL\",\n\n /**\n * The Avalanche main network.\n */\n AVA = \"AVA\",\n\n /**\n * The Soroban network.\n */\n SRB = \"SRB\",\n\n /**\n * The Stellar network.\n */\n STLR = \"STLR\",\n\n /**\n * The OP Mainnet network.\n */\n OPT = \"OPT\",\n}\n\nexport enum ChainType {\n EVM = \"EVM\",\n SOLANA = \"SOLANA\",\n TRX = \"TRX\",\n SRB = \"SRB\",\n}\n", "import { SdkError } from \"../exceptions\";\nimport { ChainSymbol, ChainType } from \"./chain.enums\";\nimport { BasicChainProperties } from \"./models\";\n\n/**\n * Native gas tokens decimals by ChainType\n */\nconst chainDecimalsByType: Record<ChainType, number> = {\n EVM: 18,\n SOLANA: 9,\n TRX: 6,\n SRB: 7,\n};\n\nconst defaultProperties: Record<string, BasicChainProperties> = {\n [ChainSymbol.BSC]: {\n chainSymbol: ChainSymbol.BSC,\n chainId: \"0x38\",\n name: \"BNB Chain\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ETH]: {\n chainSymbol: ChainSymbol.ETH,\n chainId: \"0x1\",\n name: \"Ethereum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.BAS]: {\n chainSymbol: ChainSymbol.BAS,\n chainId: \"0x2105\",\n name: \"Base\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ARB]: {\n chainSymbol: ChainSymbol.ARB,\n chainId: \"0xa4b1\",\n name: \"Arbitrum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.AVA]: {\n chainSymbol: ChainSymbol.AVA,\n chainId: \"0xa86a\",\n name: \"Avalanche\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.CEL]: {\n chainSymbol: ChainSymbol.CEL,\n chainId: \"0xa4ec\",\n name: \"Celo\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.POL]: {\n chainSymbol: ChainSymbol.POL,\n chainId: \"0x89\",\n name: \"Polygon\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.OPT]: {\n chainSymbol: ChainSymbol.OPT,\n chainId: \"0xa\",\n name: \"OP Mainnet\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.SOL]: {\n chainSymbol: ChainSymbol.SOL,\n name: \"Solana\",\n chainType: ChainType.SOLANA,\n },\n [ChainSymbol.TRX]: {\n chainSymbol: ChainSymbol.TRX,\n name: \"Tron\",\n chainType: ChainType.TRX,\n },\n [ChainSymbol.SRB]: {\n chainSymbol: ChainSymbol.SRB,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n [ChainSymbol.STLR]: {\n chainSymbol: ChainSymbol.STLR,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n};\n\nexport const Chains = (() => {\n let chainProperties: Record<string, BasicChainProperties> = { ...defaultProperties };\n\n return {\n addChainsProperties(additionalProperties?: Record<string, BasicChainProperties>) {\n chainProperties = { ...chainProperties, ...additionalProperties };\n },\n\n getChainProperty(chainSymbol: string): BasicChainProperties {\n const property = chainProperties[chainSymbol];\n if (!property) {\n throw new SdkError(`Cannot find chain properties for ${chainSymbol}`);\n }\n return property;\n },\n\n getChainsProperties(): Record<string, BasicChainProperties> {\n return chainProperties;\n },\n\n getChainDecimalsByType(chainType: ChainType): number {\n return chainDecimalsByType[chainType];\n },\n };\n})();\n", "import axios, { Axios } from \"axios\";\nimport { ChainDetailsMapWithFlags, PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { VERSION } from \"../../version\";\nimport {\n mapChainDetailsResponseToChainDetailsMap,\n mapChainDetailsResponseToPoolInfoMap,\n mapPoolInfoResponseToPoolInfoMap,\n} from \"./core-api-mapper\";\nimport {\n ChainDetailsResponse,\n GasBalanceResponse,\n PendingInfoResponse,\n PoolInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientParams } from \"./core-client-base\";\n\nexport interface TokenInfo {\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n}\n\nexport interface ApiClient {\n getTokenInfo(): Promise<TokenInfo>;\n\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class ApiClientImpl implements ApiClient {\n private api: Axios;\n\n constructor(params: AllbridgeCoreClientParams) {\n this.api = axios.create({\n baseURL: params.coreApiUrl,\n headers: {\n Accept: \"application/json\",\n ...params.coreApiHeaders,\n \"x-Sdk-Agent\": \"AllbridgeCoreSDK/\" + VERSION,\n },\n params: params.coreApiQueryParams,\n });\n }\n\n async getTokenInfo(): Promise<TokenInfo> {\n const { data } = await this.api.get<ChainDetailsResponse>(\"/token-info\", { params: { filter: \"all\" } });\n return {\n chainDetailsMap: mapChainDetailsResponseToChainDetailsMap(data),\n poolInfoMap: mapChainDetailsResponseToPoolInfoMap(data),\n };\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const { data } = await this.api.get<PendingInfoResponse>(\"/pending-info\");\n return data;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const { data } = await this.api.get<GasBalanceResponse>(`/check/${chainSymbol}/${address}`);\n return data;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n const { data } = await this.api.get<TransferStatusResponse>(`/chain/${chainSymbol}/${txId}`);\n return data;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const { data } = await this.api.post<ReceiveTransactionCostResponse>(\"/receive-fee\", args, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n return {\n exchangeRate: data.exchangeRate,\n fee: data.fee,\n sourceNativeTokenPrice: data.sourceNativeTokenPrice,\n };\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n const poolKeys = pools instanceof Array ? pools : [pools];\n const { data } = await this.api.post<PoolInfoResponse>(\n \"/pool-info\",\n { pools: poolKeys },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return mapPoolInfoResponseToPoolInfoMap(data);\n }\n}\n", "export const VERSION = \"3.18.0\";\n", "import { Big, BigSource } from \"big.js\";\nimport BN from \"bn.js\";\nimport { InsufficientPoolLiquidityError } from \"../../exceptions\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { SYSTEM_PRECISION } from \"./constants\";\n\nexport function getFeePercent(input: BigSource, output: BigSource): number {\n return Big(100).minus(Big(100).times(output).div(input)).toNumber();\n}\n\nexport function toSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, decimals, SYSTEM_PRECISION).round(0, Big.roundDown);\n}\n\nexport function fromSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, SYSTEM_PRECISION, decimals);\n}\n\nexport function convertAmountPrecision(amount: BigSource, decimalsFrom: number, decimalsTo: number): Big {\n const dif = Big(decimalsTo).minus(decimalsFrom).toNumber();\n return Big(amount).times(toPowBase10(dif));\n}\n\nexport function toPowBase10(decimals: number): Big {\n return Big(10).pow(decimals);\n}\n\nexport function convertFloatAmountToInt(amountFloat: BigSource, decimals: number): Big {\n return Big(amountFloat).times(toPowBase10(decimals));\n}\n\nexport function convertIntAmountToFloat(amountInt: BigSource, decimals: number): Big {\n const amountValue = Big(amountInt);\n if (amountValue.eq(0)) {\n return Big(0);\n }\n return Big(amountValue).div(toPowBase10(decimals));\n}\n\nexport function calculatePoolInfoImbalance(poolInfo: Pick<PoolInfo, \"tokenBalance\" | \"vUsdBalance\">): string {\n return convertIntAmountToFloat(Big(poolInfo.tokenBalance).minus(poolInfo.vUsdBalance).toFixed(), SYSTEM_PRECISION)\n .div(2)\n .toFixed();\n}\n\nexport function swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return \"0\";\n }\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithoutFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).plus(inSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round(0, Big.roundDown).toFixed();\n}\n\nexport function swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return Big(0).toFixed();\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n return Big(result).minus(fee).round(0, Big.roundDown).toFixed();\n}\n\nexport function getSwapFromVUsdPoolInfo(\n vUsdAmount: BigSource,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\"> {\n const amountValue = Big(vUsdAmount);\n if (amountValue.lte(0)) {\n return poolInfo;\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n return {\n aValue: poolInfo.aValue,\n dValue: poolInfo.dValue,\n tokenBalance: newAmount.toFixed(0),\n vUsdBalance: vUsdBalance.toFixed(0),\n };\n}\n\n/**\n * @param amount - vUsd amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapToVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amount);\n if (vUsdNewAmount.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const tokenBalance = getY(vUsdNewAmount, poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision, decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare).round(0, Big.roundUp);\n return Big(amountWithoutFee).plus(fee).round(0, Big.roundDown);\n}\n\n/**\n * @param amount - amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapFromVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amount).times(reversedFeeShare).round(0, Big.roundUp);\n const amountWithFee = Big(amount).plus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).minus(inSystemPrecision);\n if (tokenBalance.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round(0, Big.roundDown);\n}\n\n// y = (sqrt(x(4ad\u00B3 + x (4a(d - x) - d )\u00B2)) + x (4a(d - x) - d ))/8ax\n// commonPart = 4a(d - x) - d\n// sqrt = sqrt(x * (4ad\u00B3 + x * commonPart\u00B2)\n// y = (sqrt + x * commonPart) / divider\nexport function getY(x: BigSource, a: BigSource, d: BigSource): Big {\n const commonPartBig = Big(4).times(a).times(Big(d).minus(x)).minus(d);\n const dCubed = Big(d).pow(3);\n const commonPartSquared = commonPartBig.pow(2);\n const sqrtBig = Big(x)\n .times(Big(x).times(commonPartSquared).plus(Big(4).times(a).times(dCubed)))\n .sqrt()\n .round(0, Big.roundDown);\n const dividerBig = Big(8).times(a).times(x);\n const result = commonPartBig.times(x).plus(sqrtBig).div(dividerBig).round(0, Big.roundDown);\n if (result.eq(0)) {\n return Big(0);\n }\n return result.plus(1); // +1 to offset rounding errors\n}\n\nexport function getEarned(userLpAmount: string, userRewardDebt: string, accRewardPerShareP: string, p: number): string {\n const userLpAmountBN = new BN(userLpAmount);\n const accRewardPerSharePBN = new BN(accRewardPerShareP);\n const userRewardDebtBN = new BN(userRewardDebt);\n const rewards = userLpAmountBN.mul(accRewardPerSharePBN).shrn(p);\n return rewards.sub(userRewardDebtBN).toString();\n}\n\nexport function aprInPercents(apr: string): string {\n return Big(apr).gt(0) ? `${Number(Big(apr).times(100).toFixed(2)).toLocaleString()}%` : \"N/A\";\n}\n\n// a = 8Axy(x+y)\n// b = xy(16A - 4) / 3\n// c = sqrt(a\u00B2 + b\u00B3)\n// D = cbrt(a + c) + cbrt(a - c)\nexport function getD(aValue: string, x: string, y: string): string {\n const xy = Big(x).times(y);\n const xPlusY = Big(x).plus(y);\n const a = Big(8).times(aValue).times(xy).times(xPlusY);\n const b = xy.times(Big(16).times(aValue).minus(4)).div(3);\n const aSquared = a.times(a);\n const bCubed = b.times(b).times(b);\n const a2b3 = aSquared.plus(bCubed);\n const c = Big(a2b3).sqrt();\n const cbrtAPlusC = Big(Math.cbrt(+a.plus(c).toFixed()));\n const cbrtAMinusC = Big(Math.cbrt(+a.minus(c).toFixed()));\n return cbrtAPlusC.plus(cbrtAMinusC).toFixed();\n}\n", "import { ChainSymbol } from \"../../chains/chain.enums\";\nimport { PoolInfo } from \"../../tokens-info\";\n\nexport type ChainDetailsResponse = Record<string, ChainDetailsDTO>;\n\nexport interface ChainDetailsDTO {\n tokens: TokenDTO[];\n chainId: number;\n bridgeAddress: string;\n transferTime: TransferTimeDTO;\n txCostAmount: TxCostAmountDTO;\n confirmations: number;\n}\n\nexport enum AddressStatus {\n OK = \"OK\",\n INVALID = \"INVALID\",\n FORBIDDEN = \"FORBIDDEN\",\n UNINITIALIZED = \"UNINITIALIZED\",\n CONTRACT_ADDRESS = \"CONTRACT_ADDRESS\",\n WRONG_ASSOCIATED_ACCOUNT_OWNER = \"WRONG_ASSOCIATED_ACCOUNT_OWNER\",\n}\n\nexport interface TokenDTO {\n symbol: string;\n name: string;\n decimals: number;\n poolAddress: string;\n tokenAddress: string;\n poolInfo: PoolInfoDTO;\n feeShare: string;\n apr: string;\n apr7d: string;\n apr30d: string;\n lpRate: string;\n flags: {\n swap: boolean;\n pool: boolean;\n };\n}\n\nexport interface PoolInfoDTO {\n aValue: string;\n dValue: string;\n tokenBalance: string;\n vUsdBalance: string;\n totalLpAmount: string;\n accRewardPerShareP: string;\n p: number;\n}\n\nexport enum MessengerKeyDTO {\n ALLBRIDGE = \"allbridge\",\n WORMHOLE = \"wormhole\",\n CCTP = \"cctp\",\n}\n\nexport type TransferTimeDTO = Record<string, MessengerTransferTimeDTO>;\n\nexport interface TxCostAmountDTO {\n maxAmount: string;\n swap: string;\n transfer: string;\n}\n\nexport type MessengerTransferTimeDTO = {\n [messenger in MessengerKeyDTO]: number;\n};\n\nexport enum Messenger {\n ALLBRIDGE = 1,\n WORMHOLE = 2,\n CCTP = 3,\n}\n\nexport interface ReceiveTransactionCostRequest {\n sourceChainId: number;\n destinationChainId: number;\n messenger: Messenger;\n}\n\nexport interface ReceiveTransactionCostResponse {\n exchangeRate: string;\n fee: string;\n sourceNativeTokenPrice: string;\n}\n\nexport interface GasBalanceResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface CheckAddressResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface TransferStatusResponse {\n txId: string;\n\n sourceChainSymbol: ChainSymbol;\n destinationChainSymbol: ChainSymbol;\n\n sendAmount: string;\n sendAmountFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n senderAddress: string;\n recipientAddress: string;\n\n signaturesCount: number;\n signaturesNeeded: number;\n\n send: BridgeTransaction;\n receive?: BridgeTransaction;\n}\n\nexport interface BridgeTransaction {\n txId: string;\n\n sourceChainId: number;\n destinationChainId: number;\n\n fee: string;\n feeFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n amount: string;\n amountFormatted: number;\n virtualAmount: string;\n\n bridgeContract: string;\n sender: string;\n recipient: string;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n hash: string;\n\n messenger: Messenger;\n\n blockTime: number;\n blockId: string;\n\n confirmations: number;\n confirmationsNeeded: number;\n\n isClaimable?: boolean;\n}\n\nexport type PoolInfoResponse = Record<ChainSymbol, PoolInfo>;\nexport type PendingInfoResponse = Partial<Record<ChainSymbol, TokenPendingInfoDTO>>;\nexport type TokenPendingInfoDTO = Record<string, PendingInfoDTO>;\n\nexport interface PendingInfoDTO {\n pendingTxs: number;\n totalSentAmount: string;\n}\n", "import { Chains } from \"../../chains\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport {\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 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 default:\n return null;\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) {\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 /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (!basicChainProperties) {\n return null;\n }\n const chainDetails: ChainDetails = {\n ...basicChainProperties,\n allbridgeChainId: dto.chainId,\n bridgeAddress: dto.bridgeAddress,\n transferTime: mapTransferTimeFromDto(dto.transferTime),\n txCostAmount: dto.txCostAmount,\n confirmations: dto.confirmations,\n };\n return {\n ...chainDetails,\n tokens: dto.tokens.map((tokenDto) => mapTokenWithChainDetailsFromDto(chainDetails, tokenDto)),\n };\n}\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", "/**\n * ///////////////////////////////////////\n * //////////// Cache module /////////////\n * ///////////////////////////////////////\n *\n * This module offers object caching mechanisms for\n * third-party modules. It allows to manage the lifecycle\n * of cached objects by associating them with a time-to-live.\n */\n\n/**\n * Shortcut function for checking if an object has\n * a given property directly on itself.\n */\nconst has = (obj, key) => obj !== null && Object.prototype.hasOwnProperty.call(obj, key);\n\n/**\n * A prefix used to forbid access to internal properties\n * of the object storage.\n */\nconst prefix = '__cache__';\n\n/**\n * If the key is an object, we serialize it, so it\n * can be cached transparently.\n */\nconst serialize = function (key) {\n if (typeof key !== 'string') {\n return (prefix + JSON.stringify(key));\n }\n return (prefix + key);\n};\n\n/**\n * The `timed-cache` implementation.\n */\nclass Cache {\n\n /**\n * Cache constructor.\n * @param {*} options the `options` object\n * holder used by the cache implementation. \n */\n constructor(options = { defaultTtl: 60 * 1000 }) {\n // The cache storage.\n this.cache = {};\n // The default cached objects expiration\n // delay is expressed in milliseconds and\n // is defined by an internal default value\n // or a user value if it is passed to the\n // constructor.\n this.defaultTtl = options.defaultTtl || 60 * 1000;\n }\n\n /**\n * Puts a key/value pair into the cache storage.\n */\n put(key, value, options) {\n const ttl = (options ? options.ttl : undefined) || this.defaultTtl;\n const callback = (options ? options.callback : undefined) || function () {};\n const key_ = serialize(key);\n \n // Checking whether the given key already\n // has a value.\n const v = this.cache[key_];\n \n if (v) {\n // We clear the timeout associated with\n // the existing value.\n clearTimeout(v.handle);\n }\n \n // We then create a new timeout function for\n // the new value.\n const handle = setTimeout(() => this.remove(key), ttl);\n \n // And we save the value into the cache storage\n // with the handle.\n this.cache[key_] = { handle, data: value, callback };\n }\n\n /**\n * Returns a cached value associated with the\n * given key if it exists, returns an undefined\n * value otherwise.\n */\n get(key) {\n const value = this.cache[serialize(key)];\n return (value && value.data);\n }\n\n /**\n * Clears the cache entry associated\n * with the given `key`.\n */\n remove(key) {\n const key_ = serialize(key);\n const value = this.cache[key_];\n \n if (value) {\n clearTimeout(value.handle);\n delete this.cache[key_];\n value.callback(key, value.data);\n }\n }\n\n /**\n * Clears the internal cache.\n */\n clear() {\n for (const entry in this.cache) {\n if (has(this.cache, entry)) {\n clearTimeout(this.cache[entry].handle);\n }\n }\n this.cache = {};\n }\n\n /**\n * Returns the size of the cache object in\n * terms of referenced elements.\n */\n size() {\n return (Object.keys(this.cache).length);\n }\n}\n\nexport default Cache;\n", "import Cache from \"timed-cache\";\nimport { PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { ApiClient, TokenInfo } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nconst _20_SECONDS_TTL = 20 * 1000;\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport class ApiClientCaching implements ApiClient {\n private tokenInfoCache: Cache<Promise<TokenInfo>>;\n private pendingInfoCache: Cache<Promise<PendingInfoResponse>>;\n private gasBalanceCache: Cache<Promise<GasBalanceResponse>>;\n private receivedTransactionCache: Cache<ReceiveTransactionCostResponse>;\n\n constructor(private apiClient: ApiClient) {\n this.tokenInfoCache = new Cache({ defaultTtl: _55_SECONDS_TTL });\n this.receivedTransactionCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.pendingInfoCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.gasBalanceCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n }\n\n getTokenInfo(): Promise<TokenInfo> {\n const TOKEN_INFO_CACHE_KEY = \"TOKEN_INFO_CACHE_KEY\";\n const tokenInfo = this.tokenInfoCache.get(TOKEN_INFO_CACHE_KEY);\n if (tokenInfo) {\n return tokenInfo;\n }\n const tokenInfoPromise = this.apiClient.getTokenInfo();\n this.tokenInfoCache.put(TOKEN_INFO_CACHE_KEY, tokenInfoPromise);\n return tokenInfoPromise;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const GAS_BALANCE_CACHE_KEY = `GAS_BALANCE_${chainSymbol}_${address}`;\n const gasBalance = this.gasBalanceCache.get(GAS_BALANCE_CACHE_KEY);\n if (gasBalance) {\n return gasBalance;\n }\n const gasBalancePromise = this.apiClient.getGasBalance(chainSymbol, address);\n this.gasBalanceCache.put(GAS_BALANCE_CACHE_KEY, gasBalancePromise);\n return gasBalancePromise;\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const PENDING_INFO_CACHE_KEY = \"PENDING_INFO_CACHE_KEY\";\n const pendingInfo = this.pendingInfoCache.get(PENDING_INFO_CACHE_KEY);\n if (pendingInfo) {\n return pendingInfo;\n }\n const pendingInfoPromise = this.apiClient.getPendingInfo();\n this.pendingInfoCache.put(PENDING_INFO_CACHE_KEY, pendingInfoPromise);\n return pendingInfoPromise;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const RECEIVE_TX_COST_KEY = `RECEIVE_TX_COST_${args.sourceChainId}_${args.destinationChainId}_${args.messenger}`;\n const transactionCost = this.receivedTransactionCache.get(RECEIVE_TX_COST_KEY);\n if (transactionCost) {\n return transactionCost;\n }\n const fetchedTransactionCost = await this.apiClient.getReceiveTransactionCost(args);\n this.receivedTransactionCache.put(RECEIVE_TX_COST_KEY, fetchedTransactionCost);\n return fetchedTransactionCost;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import {\n ChainDetailsMapWithFlags,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { ApiClient } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nexport interface AllbridgeCoreClientParams {\n coreApiUrl: string;\n coreApiHeaders?: Record<string, string>;\n coreApiQueryParams?: Record<string, string>;\n}\n\nexport interface AllbridgeCoreClient {\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n}\n\nexport interface AllbridgeCoreClientWithTokens extends AllbridgeCoreClient {\n getChainDetailsMap(): Promise<ChainDetailsMapWithFlags>;\n\n tokens(): Promise<TokenWithChainDetailsWithFlags[]>;\n}\n\nexport interface AllbridgeCoreClientWithPoolInfo extends AllbridgeCoreClientWithTokens {\n getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class AllbridgeCoreClientImpl implements AllbridgeCoreClientWithPoolInfo {\n constructor(private apiClient: ApiClient) {}\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n return (await this.apiClient.getTokenInfo()).chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n const map = await this.getChainDetailsMap();\n return Object.values(map).flatMap((chainDetails) => chainDetails.tokens);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.apiClient.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.apiClient.getGasBalance(chainSymbol, address);\n }\n\n async getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }> {\n return await this.apiClient.getTokenInfo();\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.apiClient.getReceiveTransactionCost(args);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return await this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import { AllbridgeCoreSdkOptions } from \"../../index\";\nimport {\n ChainDetailsMap,\n PoolInfo,\n PoolKeyObject,\n TokenWithChainDetails,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClient, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\nimport { AllbridgeCoreClientPoolsExt } from \"./core-client-pool-info-caching\";\n\nexport interface AllbridgeCoreClientFiltered extends AllbridgeCoreClient, AllbridgeCoreClientPoolsExt {\n getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap>;\n\n tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]>;\n}\n\nexport class AllbridgeCoreClientFilteredImpl implements AllbridgeCoreClientFiltered {\n private readonly isStaging: boolean;\n\n constructor(\n private client: AllbridgeCoreClientWithTokens & AllbridgeCoreClientPoolsExt,\n params: AllbridgeCoreSdkOptions\n ) {\n this.isStaging = params.coreApiQueryParams?.staging === \"true\";\n }\n\n async getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n const chainDetailsMapWithFlags = await this.client.getChainDetailsMap();\n const result: ChainDetailsMap = {};\n\n for (const key in chainDetailsMapWithFlags) {\n const chainDetailsWithTokensWithFlag = chainDetailsMapWithFlags[key];\n if (chainDetailsWithTokensWithFlag) {\n result[key] = {\n ...chainDetailsWithTokensWithFlag,\n tokens: filterAndConvertToTokenWithChainDetails(chainDetailsWithTokensWithFlag.tokens, type, this.isStaging),\n };\n }\n }\n return result;\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return filterAndConvertToTokenWithChainDetails(await this.client.tokens(), type, this.isStaging);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.client.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.client.getReceiveTransactionCost(args);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n return this.client.cachePut(poolKeyObject, poolInfo);\n }\n\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n return this.client.getPoolInfoByKey(poolKeyObject);\n }\n\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n return this.client.refreshPoolInfo(poolKeyObjects);\n }\n}\n\nfunction filterAndConvertToTokenWithChainDetails(\n tokens: TokenWithChainDetailsWithFlags[],\n type: \"swap\" | \"pool\",\n isStaging: boolean\n): TokenWithChainDetails[] {\n return tokens.filter((token) => (isStaging ? true : token.flags[type])).map(convertToTokenWithChainDetails);\n}\n\nfunction convertToTokenWithChainDetails(token: TokenWithChainDetailsWithFlags): TokenWithChainDetails {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { flags, ...rest } = token;\n return rest;\n}\n", "import Cache from \"timed-cache\";\nimport { SdkError } from \"../../exceptions\";\nimport {\n ChainDetailsMapWithFlags,\n PoolInfo,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { mapChainDetailsMapToPoolKeyObjects, mapPoolKeyObjectToPoolKey } from \"./core-api-mapper\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientWithPoolInfo, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\n\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport interface AllbridgeCoreClientPoolsExt {\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo>;\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void>;\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void;\n}\n\nexport class AllbridgeCoreClientPoolInfoCaching implements AllbridgeCoreClientWithTokens, AllbridgeCoreClientPoolsExt {\n private readonly poolInfoCache;\n\n constructor(private readonly client: AllbridgeCoreClientWithPoolInfo) {\n this.poolInfoCache = new PoolInfoCache();\n }\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n return result.chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n return await this.client.tokens();\n }\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.client.getTransferStatus(chainSymbol, txId);\n }\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return this.client.getReceiveTransactionCost(args);\n }\n\n getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n const poolInfo = this.poolInfoCache.get(poolKeyObject);\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (poolInfo) {\n return poolInfo;\n } else {\n const poolInfoMap = await this.client.getPoolInfoMap(poolKeyObject);\n this.poolInfoCache.putAll(poolInfoMap);\n const result = poolInfoMap[mapPoolKeyObjectToPoolKey(poolKeyObject)];\n if (result) {\n return result;\n }\n throw new SdkError(\n \"Cannot find pool info for \" + poolKeyObject.poolAddress + \" on chain \" + poolKeyObject.chainSymbol\n );\n }\n }\n\n async refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n let poolInfoMap;\n if (poolKeyObjects) {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n poolInfoMap = await this.client.getPoolInfoMap(poolKeyObjects);\n } else {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n poolInfoMap = await this.client.getPoolInfoMap(mapChainDetailsMapToPoolKeyObjects(result.chainDetailsMap));\n }\n this.poolInfoCache.putAll(poolInfoMap);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n this.poolInfoCache.put(mapPoolKeyObjectToPoolKey(poolKeyObject), poolInfo);\n }\n}\n\nclass PoolInfoCache {\n private cache;\n\n constructor() {\n this.cache = new Cache<PoolInfo>({ defaultTtl: _55_SECONDS_TTL });\n }\n\n putAll(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n this.cache.put(key, value);\n }\n }\n\n putAllIfNotExists(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n if (!this.cache.get(key)) {\n this.cache.put(key, value);\n }\n }\n }\n\n put(key: string, poolInfo: PoolInfo) {\n this.cache.put(key, poolInfo);\n }\n\n get(poolKeyObject: PoolKeyObject): PoolInfo | undefined {\n const key = mapPoolKeyObjectToPoolKey(poolKeyObject);\n return this.cache.get(key);\n }\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { CCTPDoesNotSupportedError } from \"../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../index\";\nimport { TokenWithChainDetails } from \"../../tokens-info\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { EvmBridgeService } from \"./evm\";\nimport { ApproveParams, CheckAllowanceParams, GetAllowanceParams, SendParams } from \"./models\";\nimport { ChainBridgeService } from \"./models/bridge\";\nimport { DefaultRawBridgeTransactionBuilder, RawBridgeTransactionBuilder } from \"./raw-bridge-transaction-builder\";\nimport { SolanaBridgeService } from \"./sol\";\nimport { SrbBridgeService } from \"./srb\";\nimport { TronBridgeService } from \"./trx\";\n\nexport interface BridgeService {\n rawTxBuilder: RawBridgeTransactionBuilder;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.send}<p>\n * Send tokens through the ChainBridgeService\n * @param provider - will be used to access the network\n * @param params\n */\n send(provider: Provider, params: SendParams): Promise<TransactionResponse>;\n}\n\nexport class DefaultBridgeService implements BridgeService {\n public rawTxBuilder: RawBridgeTransactionBuilder;\n\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawBridgeTransactionBuilder(api, nodeRpcUrlsConfig, params, tokenService);\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n let provider: Provider | undefined;\n let params: GetAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as GetAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return await this.tokenService.getAllowance({ ...params, spender }, provider);\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n let provider: Provider | undefined;\n let params: CheckAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as CheckAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return this.tokenService.checkAllowance({ ...params, spender }, provider);\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.approve(provider, { ...approveData, spender });\n }\n\n async send(provider: Provider, params: SendParams): Promise<TransactionResponse> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).send(params);\n }\n}\n\nexport function getSpender(token: TokenWithChainDetails, messenger?: Messenger): string {\n if (messenger && messenger == Messenger.CCTP) {\n if (token.cctpAddress) {\n return token.cctpAddress;\n } else {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n } else {\n return token.bridgeAddress;\n }\n}\n\nexport function getChainBridgeService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainBridgeService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmBridgeService(provider as unknown as Web3, api, nodeRpcUrlsConfig);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmBridgeService(new Web3(nodeRpcUrl), api, nodeRpcUrlsConfig);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronBridgeService(provider, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new TronBridgeService(new TronWeb({ fullHost: nodeRpcUrl }), api);\n }\n }\n case ChainType.SOLANA: {\n return new SolanaBridgeService(\n nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n {\n wormholeMessengerProgramId: params.wormholeMessengerProgramId,\n solanaLookUpTable: params.solanaLookUpTable,\n cctpParams: params.cctpParams,\n jupiterUrl: params.jupiterUrl,\n },\n api\n );\n }\n case ChainType.SRB: {\n return new SrbBridgeService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { AllbridgeCoreClientPoolsExt } from \"../client/core-api/core-client-pool-info-caching\";\nimport { ArgumentInvalidDecimalsError, InvalidAmountError, TimeoutError } from \"../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../tokens-info\";\n\nexport async function getPoolInfoByToken(\n api: AllbridgeCoreClientPoolsExt,\n sourceChainToken: TokenWithChainDetails\n): Promise<PoolInfo> {\n return await api.getPoolInfoByKey({\n chainSymbol: sourceChainToken.chainSymbol,\n poolAddress: sourceChainToken.poolAddress,\n });\n}\n\nexport function validateAmountGtZero(amount: BigSource) {\n if (Big(amount).lte(0)) {\n throw new InvalidAmountError(\"Amount must be greater than zero\");\n }\n}\n\nexport function validateAmountDecimals(argName: string, amountFloat: number | string | Big, decimalRequired: number) {\n const amount = Big(amountFloat).toFixed();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [integerPart, fractionalPart] = amount.split(\".\");\n\n if (fractionalPart && fractionalPart.length > decimalRequired) {\n throw new ArgumentInvalidDecimalsError(argName, fractionalPart.length, decimalRequired);\n }\n}\n\nexport async function promiseWithTimeout<T>(promise: Promise<T>, msg: string, timeoutMs: number): Promise<T> {\n return (await Promise.race([\n promise,\n new Promise((resolve, reject) => {\n setTimeout(() => reject(new TimeoutError(msg)), timeoutMs);\n }),\n ])) as any as T;\n}\n\nexport async function promiseWithTimeoutAndRetries<T>(\n toTry: () => Promise<T>,\n msg: string,\n maxRetries: number,\n timeoutMs: number\n): Promise<T> {\n if (maxRetries < 1)\n throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${maxRetries} was received.`);\n let attemptCount = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition,no-constant-condition\n while (true) {\n try {\n return await promiseWithTimeout(toTry(), msg, timeoutMs);\n } catch (error) {\n if (++attemptCount >= maxRetries) throw new TimeoutError(msg);\n }\n }\n}\n\n/**\n * Keep calling a `fn` for `secondsToWait` seconds, if `keepWaitingIf` is true.\n * Returns an array of all attempts to call the function.\n */\nexport async function withExponentialBackoff<T>(\n fn: (previousFailure?: T) => Promise<T>,\n keepWaitingIf: (result: T) => boolean,\n secondsToWait: number,\n exponentialFactor = 1.5,\n verbose = false\n): Promise<T[]> {\n const attempts: T[] = [];\n\n let count = 0;\n const initialAttempt = await fn();\n attempts.push(initialAttempt);\n if (!keepWaitingIf(initialAttempt)) return attempts;\n\n const waitUntil = new Date(Date.now() + secondsToWait * 1000).valueOf();\n let waitTime = 1000;\n let totalWaitTime = waitTime;\n\n while (Date.now() < waitUntil) {\n const lastAttempt = attempts[attempts.length - 1];\n if (lastAttempt === undefined || !keepWaitingIf(lastAttempt)) break;\n\n count++;\n // Wait a beat\n if (verbose) {\n console.info(\n `Waiting ${waitTime}ms before trying again (bringing the total wait time to ${totalWaitTime}ms so far, of total ${\n secondsToWait * 1000\n }ms)`\n );\n }\n await new Promise((res) => setTimeout(res, waitTime));\n // Exponential backoff\n waitTime = waitTime * exponentialFactor;\n if (new Date(Date.now() + waitTime).valueOf() > waitUntil) {\n waitTime = waitUntil - Date.now();\n if (verbose) {\n console.info(`was gonna wait too long; new waitTime: ${waitTime}ms`);\n }\n }\n totalWaitTime = waitTime + totalWaitTime;\n // Try again\n const nextAttempt = await fn(lastAttempt);\n attempts.push(nextAttempt);\n if (verbose && keepWaitingIf(nextAttempt)) {\n console.info(\n `${count}. Called ${fn.name}; ${attempts.length} prev attempts. Most recent: ${JSON.stringify(\n attempts[attempts.length - 1],\n null,\n 2\n )}`\n );\n }\n }\n\n return attempts;\n}\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport BN from \"bn.js\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n ChainSymbol,\n ChainType,\n FeePaymentMethod,\n Messenger,\n SdkError,\n SwapParams,\n TransactionResponse,\n} from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport bridgeAbi from \"../../models/abi/Bridge.json\";\nimport cctpBridgeAbi from \"../../models/abi/CctpBridge.json\";\nimport { Bridge as BridgeContract } from \"../../models/abi/types/Bridge\";\nimport { CctpBridge as CctpBridgeContract } from \"../../models/abi/types/CctpBridge\";\nimport { BaseContract, PayableTransactionObject } from \"../../models/abi/types/types\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { formatAddress, getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class EvmBridgeService extends ChainBridgeService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient, private nodeRpcUrlsConfig: NodeRpcUrlsConfig) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionSend(params);\n return this.sendRawTransaction(rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const bridgeContract = this.getBridgeContract(contractAddress);\n\n const swapMethod = bridgeContract.methods.swap(\n amount,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount\n );\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n data: swapMethod.encodeABI(),\n });\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = txSendParams;\n\n const nonce = \"0x\" + getNonce().toString(\"hex\");\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n if (messenger === Messenger.CCTP) {\n const cctp = await this.buildRawTransactionCctpSend(params, txSendParams, totalFee);\n sendMethod = cctp.sendMethod;\n value = cctp.value;\n } else {\n const bridgeContract = this.getBridgeContract(contractAddress);\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n 0\n );\n value = totalFee;\n }\n }\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n value: value,\n data: sendMethod.encodeABI(),\n });\n }\n\n private async buildRawTransactionCctpSend(\n params: SendParams,\n txSendParams: TxSendParams,\n totalFee: string\n ): Promise<{\n sendMethod: PayableTransactionObject<void>;\n value: string;\n }> {\n const { amount, contractAddress, toChainId, toAccountAddress, gasFeePaymentMethod } = txSendParams;\n\n const cctpBridgeContract: CctpBridgeContract = this.getContract(cctpBridgeAbi as AbiItem[], contractAddress);\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n if (params.destinationToken.chainType === ChainType.SOLANA) {\n let recipientWalletAddress: string | number[];\n const receiverAccount = new PublicKey(params.toAccountAddress);\n const receiveMint = new PublicKey(params.destinationToken.tokenAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n const provider = buildAnchorProvider(\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n params.toAccountAddress\n );\n anchor.setProvider(provider);\n const accountData = await anchor.Spl.token(provider).account.token.fetchNullable(receiveUserToken);\n if (accountData?.authority.equals(receiverAccount)) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n const tokenAccounts = await provider.connection.getTokenAccountsByOwner(receiverAccount, {\n mint: receiveMint,\n });\n if (tokenAccounts.value.length === 0 && !accountData) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else if (tokenAccounts.value.length > 0) {\n const firstTokenAccount = tokenAccounts.value[0];\n\n if (!firstTokenAccount?.pubkey) {\n throw new SdkError(\"First token account or its public key is undefined\");\n }\n recipientWalletAddress = formatAddress(firstTokenAccount.pubkey.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n throw new SdkError(\"Associated account has wrong owner\");\n }\n }\n\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n 0\n );\n value = totalFee;\n }\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, totalFee);\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, 0);\n value = totalFee;\n }\n }\n return { sendMethod, value };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction) {\n const estimateGas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n const { transactionHash } = await this.web3.eth.sendTransaction({\n ...(rawTransaction as Object),\n gas: estimateGas,\n ...feeOptions,\n });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getBridgeContract(contractAddress: string): BridgeContract {\n return this.getContract<BridgeContract>(bridgeAbi as AbiItem[], contractAddress);\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainPrecision\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"gas\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"BridgingFeeFromTokens\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"bridgeTransactionCost\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"messageTransactionCost\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceiveFee\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Received\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"sendToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sendAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Swapped\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensReceived\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addPool\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canSwap\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageGasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hasReceivedMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"hasSentMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hashMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"otherBridgeTokens\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isSupported\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"otherBridges\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"pools\",\n \"outputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"processedMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isProcessed\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"registerBridge\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"sentMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isSent\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setAllbridgeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_rebalancer\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRebalancer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setWormholeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapAndBridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdrawBridgingFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGasTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainPrecision_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpMessenger_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpTransmitter_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedExtraGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RecipientReplaced\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensSentExtras\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromGas\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromTokens\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"relayerFee\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeTokenAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridgeWithWalletAddress\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalMessage\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalAttestation\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"changeRecipient\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getDomainByChainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"nonce\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"isMessageProcessed\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"domain\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"registerBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeShareBP_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unregisterBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"withdrawFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGas\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport async function getAssociatedAccount(publicKey: PublicKey, mintAccount: PublicKey): Promise<PublicKey> {\n return anchor.utils.token.associatedAddress({\n mint: mintAccount,\n owner: publicKey,\n });\n}\n\nexport async function getConfigAccount(programId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress([anchor.utils.bytes.utf8.encode(\"config\")], programId);\n return configPda;\n}\n\nexport async function getLockAccount(nonce: number[], bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [lockPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"lock\"), Uint8Array.from(nonce)],\n bridgeProgramId\n );\n return lockPda;\n}\n\nexport async function getPriceAccount(chainId: number, gasOracleProgramId: PublicKey): Promise<PublicKey> {\n const [pricePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"price_v2\"), Uint8Array.from([chainId])],\n gasOracleProgramId\n );\n return pricePda;\n}\n\nexport async function getAuthorityAccount(bridgeProgramId: PublicKey): Promise<PublicKey> {\n const configAccount = await getConfigAccount(bridgeProgramId);\n const [poolAuthority] = await PublicKey.findProgramAddress([configAccount.toBuffer()], bridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getCctpAuthorityAccount(\n cctpBridgeAccount: PublicKey,\n cctpBridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [poolAuthority] = await PublicKey.findProgramAddress([cctpBridgeAccount.toBuffer()], cctpBridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getBridgeTokenAccount(mintAccount: PublicKey, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), mintAccount.toBytes()],\n bridgeProgramId\n );\n return poolPda;\n}\n\nexport async function getOtherChainTokenAccount(\n chainId: number,\n token: Buffer,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [otherChainTokenPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"other_bridge_token\"), Buffer.from([chainId]), token],\n bridgeProgramId\n );\n return otherChainTokenPda;\n}\n\nexport async function getChainBridgeAccount(chainId: number, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"chain_bridge\"), Uint8Array.from([chainId])],\n bridgeProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getGasUsageAccount(chainId: number, messengerProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"gas_usage\"), Uint8Array.from([chainId])],\n messengerProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getSendMessageAccount(\n messageWithSigner: Uint8Array,\n messengerProgramId: PublicKey\n): Promise<PublicKey> {\n const [sentMessagePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"sent_message\"), messageWithSigner],\n messengerProgramId\n );\n return sentMessagePda;\n}\n\nexport async function getUserDepositAccount(\n userPublicKey: PublicKey,\n tokenMintAccount: PublicKey,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [userDepositPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"user_deposit\"), tokenMintAccount.toBytes(), userPublicKey.toBytes()],\n bridgeProgramId\n );\n return userDepositPda;\n}\n\nexport async function getCctpBridgeAccount(mintAccount: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"cctp_bridge\"), mintAccount.toBytes()],\n cctpBridgeProgramId\n );\n return configPda;\n}\n\nexport async function getCctpBridgeTokenAccount(token: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), token.toBytes()],\n cctpBridgeProgramId\n );\n return poolPda;\n}\n\nexport function getCctpLockAccount(cctpBridgeProgramId: PublicKey, messageSentEventDataAccount: PublicKey): PublicKey {\n const [tokenMessengerEventAuthority] = PublicKey.findProgramAddressSync(\n [anchor.utils.bytes.utf8.encode(\"lock\"), messageSentEventDataAccount.toBuffer()],\n cctpBridgeProgramId\n );\n return tokenMessengerEventAuthority;\n}\n\nexport function getCctpAccounts(\n domain: number,\n mintAccount: PublicKey,\n cctpTransmitterProgramId: PublicKey,\n cctpTokenMessengerMinter: PublicKey\n) {\n const messageTransmitterAccount = findProgramAddress(\"message_transmitter\", cctpTransmitterProgramId);\n const tokenMessenger = findProgramAddress(\"token_messenger\", cctpTokenMessengerMinter);\n const tokenMessengerEventAuthority = findProgramAddress(\"__event_authority\", cctpTokenMessengerMinter);\n const tokenMinter = findProgramAddress(\"token_minter\", cctpTokenMessengerMinter);\n const localToken = findProgramAddress(\"local_token\", cctpTokenMessengerMinter, [mintAccount]);\n const remoteTokenMessengerKey = findProgramAddress(\"remote_token_messenger\", cctpTokenMessengerMinter, [\n domain.toString(),\n ]);\n const authorityPda = findProgramAddress(\"sender_authority\", cctpTokenMessengerMinter);\n return {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n };\n}\n\nfunction findProgramAddress(\n label: string,\n programId: PublicKey,\n extraSeeds: (string | number[] | Buffer | PublicKey)[] = []\n): PublicKey {\n const seeds = [Buffer.from(anchor.utils.bytes.utf8.encode(label))];\n for (const extraSeed of extraSeeds) {\n if (typeof extraSeed === \"string\") {\n seeds.push(Buffer.from(anchor.utils.bytes.utf8.encode(extraSeed)));\n } else if (Array.isArray(extraSeed)) {\n seeds.push(Buffer.from(extraSeed));\n } else if (Buffer.isBuffer(extraSeed)) {\n seeds.push(extraSeed);\n } else {\n seeds.push(extraSeed.toBuffer());\n }\n }\n const res = PublicKey.findProgramAddressSync(seeds, programId);\n return res[0];\n}\n", "import { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\n\nexport function buildAnchorProvider(solanaRpcUrl: string, accountAddress: string): Provider {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SendParams, SwapParams } from \"./bridge.model\";\n\nexport abstract class ChainBridgeService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n /**\n * @Deprecated Use {@link buildRawTransactionSend} or {@link buildRawTransactionSwap} instead<p>\n * Send tokens through the ChainBridgeService\n * @param params\n */\n abstract send(params: SendParams): Promise<TransactionResponse>;\n abstract buildRawTransactionSend(params: SendParams): Promise<RawTransaction>;\n abstract buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction>;\n}\n", "import { PublicKey } from \"@solana/web3.js\";\nimport { Address } from \"@stellar/stellar-sdk\";\nimport { Big, BigSource } from \"big.js\";\nimport randomBytes from \"randombytes\";\n/* @ts-expect-error Could not find a declaration file for module \"tronweb\"*/\nimport * as TronWebLib from \"tronweb\";\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 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 { SendParams, TxSendParams, TxSwapParams } from \"./models\";\n\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] {\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 }\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.toJSON().data;\n }\n case ChainType.SRB: {\n return buffer.toJSON().data;\n }\n }\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\nfunction 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 return Buffer.from(TronWebLib.utils.crypto.decodeBase58Address(address)).toString(\"hex\").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\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 txSwapParams.fromTokenAddress = formatAddress(sourceToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.toAccountAddress = params.toAccountAddress;\n txSwapParams.toTokenAddress = formatAddress(params.destinationToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.minimumReceiveAmount = params.minimumReceiveAmount\n ? convertFloatAmountToInt(params.minimumReceiveAmount, params.destinationToken.decimals).toFixed()\n : \"0\";\n return txSwapParams;\n}\n\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 txSendParams.fromTokenAddress = params.sourceToken.tokenAddress;\n\n txSendParams.toChainId = params.destinationToken.allbridgeChainId;\n txSendParams.toTokenAddress = params.destinationToken.tokenAddress;\n\n if (params.gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_STABLECOIN;\n } else {\n // default FeePaymentMethod.WITH_NATIVE_CURRENCY\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_NATIVE_CURRENCY;\n }\n const sourceToken = params.sourceToken;\n if (params.messenger === 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 } else {\n txSendParams.contractAddress = sourceToken.bridgeAddress;\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 txSendParams.fromChainId,\n params.sourceToken.chainType,\n txSendParams.toChainId,\n sourceToken.decimals,\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 }\n } else {\n txSendParams.fee = fee;\n }\n\n //ExtraGas\n const { extraGas, extraGasFormat } = params;\n if (extraGas && +extraGas > 0) {\n if (extraGasFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.extraGas = convertFloatAmountToInt(\n extraGas,\n Chains.getChainDecimalsByType(sourceToken.chainType)\n ).toFixed(0);\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.extraGas = convertFloatAmountToInt(extraGas, sourceToken.decimals).toFixed(0);\n break;\n }\n } else {\n txSendParams.extraGas = extraGas;\n }\n await validateExtraGasNotExceeded(\n txSendParams.extraGas,\n txSendParams.gasFeePaymentMethod,\n sourceToken,\n params.destinationToken,\n api\n );\n }\n\n txSendParams.fromTokenAddress = formatAddress(txSendParams.fromTokenAddress, bridgeChainType, bridgeChainType);\n txSendParams.toAccountAddress = formatAddress(params.toAccountAddress, toChainType, bridgeChainType);\n txSendParams.toTokenAddress = formatAddress(txSendParams.toTokenAddress, toChainType, bridgeChainType);\n if (txSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n validateAmountEnough(txSendParams.amount, sourceToken.decimals, txSendParams.fee, txSendParams.extraGas);\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 sourceAllbridgeChainId: number,\n sourceChainType: ChainType,\n destinationAllbridgeChainId: number,\n sourceChainTokenDecimals: number,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<GasFeeOptions> {\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceAllbridgeChainId,\n destinationChainId: destinationAllbridgeChainId,\n messenger,\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(sourceChainType)\n ).toFixed(),\n },\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.sourceNativeTokenPrice),\n Chains.getChainDecimalsByType(sourceChainType),\n sourceChainTokenDecimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(gasFeeIntWithStables, sourceChainTokenDecimals).toFixed(),\n };\n }\n\n return gasFeeOptions;\n}\n\nasync function validateExtraGasNotExceeded(\n extraGasInt: string,\n gasFeePaymentMethod: FeePaymentMethod,\n sourceToken: TokenWithChainDetails,\n destinationToken: TokenWithChainDetails,\n api: AllbridgeCoreClient\n) {\n const extraGasLimits = await getExtraGasMaxLimits(sourceToken, destinationToken, api);\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 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: Messenger.ALLBRIDGE,\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 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 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", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, SendParams, SwapParams } from \"./models\";\nimport { isSendParams } from \"./utils\";\nimport { getChainBridgeService, getSpender } from \"./index\";\n\nexport interface RawBridgeTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for initiating the transfer of tokens\n * @param params\n * @param provider - will be used to access the network\n */\n send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawBridgeTransactionBuilder implements RawBridgeTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n let provider: Provider | undefined;\n let approveData: ApproveParams;\n if (b) {\n provider = a as Provider;\n approveData = b;\n } else {\n approveData = a as ApproveParams;\n }\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender,\n },\n provider\n );\n }\n\n async send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n if (isSendParams(params)) {\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSend(params);\n }\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSwap(params);\n }\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { BN, Program, Spl, web3 } from \"@project-serum/anchor\";\nimport {\n Connection,\n Keypair,\n PublicKey,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n TransactionMessageArgs,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\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 JupiterError,\n MethodNotSupportedError,\n SdkError,\n SdkRootError,\n} from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams, TxFeeParams } from \"../../../models\";\nimport { convertIntAmountToFloat } from \"../../../utils/calculation\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SwapAndBridgeSolData, SwapAndBridgeSolDataCctpData } from \"../../models/sol\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { CctpBridge as CctpBridgeType, IDL as cctpBridgeIdl } from \"../../models/sol/types/cctp_bridge\";\nimport { getMessage, getTokenAccountData, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpBridgeTokenAccount,\n getCctpLockAccount,\n getChainBridgeAccount,\n getConfigAccount,\n getGasUsageAccount,\n getLockAccount,\n getOtherChainTokenAccount,\n getPriceAccount,\n getSendMessageAccount,\n} from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { addUnitLimitAndUnitPriceToTx, addUnitLimitAndUnitPriceToVersionedTx } from \"../../utils/sol/compute-budget\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport { JupiterService } from \"./jupiter\";\n\nexport interface SolanaBridgeParams {\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n jupiterUrl: string;\n}\n\nexport interface CctpParams {\n cctpTransmitterProgramId: string;\n cctpTokenMessengerMinter: string;\n cctpDomains: CctpDomains;\n}\n\n/**\n * Type representing a map of CCTP domains to their corresponding numeric values.\n *\n * @typedef {Record<string, number>} CctpDomains\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {number} value - The numeric value associated with the specified chain.\n */\nexport type CctpDomains = Record<string, number>;\n\nconst COMPUTE_UNIT_LIMIT = 1000000;\n\nconst JUP_ADD_INDEX = 1.1;\n\nexport class SolanaBridgeService extends ChainBridgeService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n jupiterService: JupiterService;\n\n constructor(public solanaRpcUrl: string, public params: SolanaBridgeParams, public api: AllbridgeCoreClient) {\n super();\n this.jupiterService = new JupiterService(solanaRpcUrl, params.jupiterUrl);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildSwapTransaction(\n txSwapParams,\n params.sourceToken.poolAddress,\n params.destinationToken.poolAddress,\n params.txFeeParams\n );\n }\n\n private async buildSwapTransaction(\n params: TxSwapParams,\n poolAddress: string,\n toPoolAddress: string,\n txFeeParams?: TxFeeParams\n ): Promise<VersionedTransaction> {\n const {\n fromAccountAddress,\n amount,\n contractAddress,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount,\n } = params;\n const account = fromAccountAddress;\n const bridgeAddress = contractAddress;\n const tokenAddress = fromTokenAddress;\n const receiveTokenAddress = toTokenAddress;\n const receivePoolAddress = toPoolAddress;\n const receiverOriginal = toAccountAddress;\n\n const userAccount = new PublicKey(account);\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const configAccount = await getConfigAccount(bridge.programId);\n\n const sendMint = new PublicKey(tokenAddress);\n const sendBridgeToken = await getBridgeTokenAccount(sendMint, bridge.programId);\n const sendPool = new PublicKey(poolAddress);\n const sendUserToken = await getAssociatedAccount(userAccount, sendMint);\n\n const receiverAccount = new PublicKey(receiverOriginal);\n const receiveMint = new PublicKey(receiveTokenAddress);\n const receiveBridgeToken = await getBridgeTokenAccount(receiveMint, bridge.programId);\n const receivePool = new PublicKey(receivePoolAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ];\n\n try {\n await getTokenAccountData(receiveUserToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createReceiveUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: receiveMint,\n owner: receiverAccount,\n associatedAccount: receiveUserToken,\n })\n .instruction();\n preInstructions.push(createReceiveUserTokenInstruction);\n }\n const transaction = await bridge.methods\n .swap(new BN(amount), new BN(minimumReceiveAmount || 0))\n .accounts({\n payer: userAccount,\n config: configAccount,\n bridgeAuthority,\n user: userAccount,\n sendBridgeToken,\n sendMint,\n sendPool,\n sendUserToken,\n receiveBridgeToken,\n receiveMint,\n receivePool,\n receiveUserToken,\n })\n .preInstructions(preInstructions)\n .transaction();\n\n const connection = provider.connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n await addUnitLimitAndUnitPriceToTx(transaction, txFeeParams, this.solanaRpcUrl);\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n let solTxSendParams = this.addPoolAddress(params, txSendParams);\n\n const isJupiterForStableCoin = solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN;\n\n let jupTx;\n if (isJupiterForStableCoin) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, true);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, false);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n if (e instanceof SdkRootError) {\n throw e;\n }\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation Jupiter swap transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation Jupiter swap transaction\");\n }\n }\n }\n\n let swapAndBridgeTx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined = undefined;\n switch (txSendParams.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n }\n\n if (isJupiterForStableCoin) {\n if (!jupTx) {\n throw new JupiterError(\"Swap tx is absent\");\n }\n swapAndBridgeTx = await this.jupiterService.amendJupiterWithSdkTx(jupTx, swapAndBridgeTx);\n }\n\n await addUnitLimitAndUnitPriceToVersionedTx(swapAndBridgeTx, params.txFeeParams, this.solanaRpcUrl);\n\n if (requiredMessageSigner) {\n swapAndBridgeTx.sign([requiredMessageSigner]);\n }\n return swapAndBridgeTx;\n }\n\n private async processJup(\n solTxSendParams: SolTxSendParams,\n params: SendParams,\n exactOut: boolean\n ): Promise<{\n tx: VersionedTransaction;\n solTxSendUpdatedParams: {\n amount: string;\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n };\n }> {\n const { fee, extraGas, gasFeePaymentMethod } = await this.convertStableCoinFeeAndExtraGasToNativeCurrency(\n params.sourceToken.decimals,\n solTxSendParams\n );\n\n let amountToProcess = exactOut ? Big(fee) : Big(solTxSendParams.fee);\n if (extraGas) {\n amountToProcess = amountToProcess.plus(extraGas);\n }\n if (!exactOut) {\n amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);\n }\n\n const { tx, amountIn } = await this.jupiterService.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut\n );\n\n let newAmount: string;\n if (exactOut) {\n if (!amountIn) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n newAmount = Big(solTxSendParams.amount).minus(amountIn).toFixed(0);\n } else {\n newAmount = Big(solTxSendParams.amount).minus(amountToProcess).toFixed(0);\n }\n if (Big(newAmount).lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(newAmount).minus(1).neg(),\n params.sourceToken.decimals\n ).toFixed()} stables is missing`\n );\n }\n return {\n tx: tx,\n solTxSendUpdatedParams: {\n amount: newAmount,\n fee: fee,\n extraGas: extraGas,\n gasFeePaymentMethod: gasFeePaymentMethod,\n },\n };\n }\n\n private addPoolAddress(params: SendParams, txSendParams: TxSendParams): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n\n async convertStableCoinFeeAndExtraGasToNativeCurrency(\n tokenDecimals: number,\n solTxSendParams: SolTxSendParams\n ): Promise<{ fee: string; extraGas?: string; gasFeePaymentMethod: FeePaymentMethod }> {\n if (solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n const sourceNativeTokenPrice = (\n await this.api.getReceiveTransactionCost({\n sourceChainId: solTxSendParams.fromChainId,\n destinationChainId: solTxSendParams.toChainId,\n messenger: solTxSendParams.messenger,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n let extraGas;\n if (solTxSendParams.extraGas) {\n extraGas = Big(solTxSendParams.extraGas)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n }\n return { fee, extraGas, gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY };\n }\n return {\n fee: solTxSendParams.fee,\n extraGas: solTxSendParams.extraGas,\n gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY,\n };\n }\n\n private getExtraGasInstruction(\n extraGas: string,\n userAccount: PublicKey,\n configAccount: PublicKey\n ): TransactionInstruction | undefined {\n return web3.SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: configAccount,\n lamports: +extraGas,\n });\n }\n\n private async prepareSwapAndBridgeData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolData> {\n const {\n amount,\n contractAddress,\n fromChainId,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n poolAddress,\n extraGas,\n } = txSendParams;\n const tokenAddress = fromTokenAddress;\n const account = fromAccountAddress;\n const destinationChainId = toChainId;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n const bridgeAddress = contractAddress;\n const sourceChainId = fromChainId;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n const nonce = Array.from(getNonce());\n const poolAccount = new PublicKey(poolAddress);\n const vUsdAmount = await getVUsdAmount(amount, bridge, poolAccount);\n\n const lockAccount = await getLockAccount(nonce, bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const userToken = await getAssociatedAccount(new PublicKey(account), new PublicKey(tokenAddress));\n const bridgeTokenAccount = await getBridgeTokenAccount(new PublicKey(tokenAddress), bridge.programId);\n const chainBridgeAccount = await getChainBridgeAccount(destinationChainId, bridge.programId);\n const otherBridgeTokenAccount = await getOtherChainTokenAccount(\n destinationChainId,\n Buffer.from(receiveTokenAddress),\n bridge.programId\n );\n\n const configAccount = await getConfigAccount(bridge.programId);\n const configAccountInfo = await bridge.account.config.fetch(configAccount);\n const priceAccount = await getPriceAccount(destinationChainId, configAccountInfo.gasOracleProgramId);\n const thisGasPriceAccount = await getPriceAccount(sourceChainId, configAccountInfo.gasOracleProgramId);\n\n const message = getMessage({\n amount: vUsdAmount,\n recipient: Buffer.from(receiverInBuffer32),\n nonce: Buffer.from(nonce),\n receiveToken: Buffer.from(receiveTokenAddress),\n destinationChainId,\n sourceChainId,\n chainBridge: (await getAuthorityAccount(bridge.programId)).toBuffer(),\n });\n\n const swapAndBridgeData = {} as SwapAndBridgeSolData;\n\n swapAndBridgeData.bridge = bridge;\n swapAndBridgeData.amount = new BN(amount);\n swapAndBridgeData.vusdAmount = new BN(vUsdAmount);\n swapAndBridgeData.nonce = nonce;\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.poolAccount = poolAccount;\n swapAndBridgeData.lockAccount = lockAccount;\n swapAndBridgeData.bridgeAuthority = bridgeAuthority;\n swapAndBridgeData.userToken = userToken;\n swapAndBridgeData.bridgeTokenAccount = bridgeTokenAccount;\n swapAndBridgeData.chainBridgeAccount = chainBridgeAccount;\n swapAndBridgeData.otherBridgeTokenAccount = otherBridgeTokenAccount;\n swapAndBridgeData.userAccount = new PublicKey(account);\n swapAndBridgeData.destinationChainId = destinationChainId;\n // @ts-expect-error\n swapAndBridgeData.mint = new PublicKey(tokenAddress);\n swapAndBridgeData.config = configAccount;\n swapAndBridgeData.configAccountInfo = configAccountInfo;\n swapAndBridgeData.gasPrice = priceAccount;\n swapAndBridgeData.thisGasPrice = thisGasPriceAccount;\n swapAndBridgeData.message = message;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n configAccount\n );\n }\n return swapAndBridgeData;\n }\n\n private async buildSwapAndBridgeAllbridgeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<VersionedTransaction> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const allbridgeMessengerProgramId = configAccountInfo.allbridgeMessengerProgramId;\n const messengerGasUsageAccount = await getGasUsageAccount(destinationChainId, allbridgeMessengerProgramId);\n const messengerConfig = await getConfigAccount(allbridgeMessengerProgramId);\n\n const sentMessageAccount = await getSendMessageAccount(message, allbridgeMessengerProgramId);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const transaction = await bridge.methods\n .swapAndBridge({\n vusdAmount,\n nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n messenger: allbridgeMessengerProgramId,\n messengerGasUsage: messengerGasUsageAccount,\n messengerConfig,\n sentMessageAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString()).connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n private async convertToVersionedTransaction(tx: Transaction, connection: Connection): Promise<VersionedTransaction> {\n const allbridgeTableAccount = await connection\n .getAddressLookupTable(new PublicKey(this.params.solanaLookUpTable))\n .then((res) => res.value);\n if (!allbridgeTableAccount) {\n throw new SdkError(\"Cannot find allbridgeLookupTableAccount\");\n }\n const messageV0 = new web3.TransactionMessage({\n payerKey: tx.feePayer,\n recentBlockhash: tx.recentBlockhash,\n instructions: tx.instructions,\n } as TransactionMessageArgs).compileToV0Message([allbridgeTableAccount]);\n return new web3.VersionedTransaction(messageV0);\n }\n\n private async buildSwapAndBridgeWormholeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<{ transaction: VersionedTransaction; messageAccount: Keypair }> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n\n const [whBridgeAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Bridge\")],\n new PublicKey(wormholeProgramId)\n );\n const [whFeeCollectorAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"fee_collector\")],\n new PublicKey(wormholeProgramId)\n );\n const [whSequenceAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Sequence\"), bridgeAuthority.toBuffer()],\n new PublicKey(wormholeProgramId)\n );\n\n const messengerGasUsageAccount = await getGasUsageAccount(\n destinationChainId,\n configAccountInfo.wormholeMessengerProgramId\n );\n const wormholeMessengerConfigAccount = await getConfigAccount(configAccountInfo.wormholeMessengerProgramId);\n const messageAccount = Keypair.generate();\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n\n const bridgeAccountInfo = await provider.connection.getAccountInfo(whBridgeAccount);\n if (bridgeAccountInfo == null) {\n throw new SdkError(\"Cannot fetch wormhole bridge account info\");\n }\n const feeLamports = new BN(bridgeAccountInfo.data.slice(16, 24), \"le\").toString();\n\n const feeInstruction = SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: whFeeCollectorAccount,\n lamports: +feeLamports,\n });\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const accounts = {\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n messengerGasUsage: messengerGasUsageAccount,\n wormholeProgram: wormholeProgramId,\n bridge: whBridgeAccount,\n message: messageAccount.publicKey,\n wormholeMessenger: configAccountInfo.wormholeMessengerProgramId,\n sequence: whSequenceAccount,\n feeCollector: whFeeCollectorAccount,\n wormholeMessengerConfig: wormholeMessengerConfigAccount,\n clock: web3.SYSVAR_CLOCK_PUBKEY,\n };\n\n const transaction = await bridge.methods\n .swapAndBridgeWormhole({\n vusdAmount,\n nonce: nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts(accounts)\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n feeInstruction,\n ])\n .postInstructions(instructions)\n .signers([messageAccount])\n .transaction();\n transaction.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(transaction, provider.connection), messageAccount };\n }\n\n private async prepareSwapAndBridgeCctpData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolDataCctpData> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpAddress = contractAddress;\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const CHAIN_ID = 4;\n\n const account = fromAccountAddress;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const cctpBridge: Program<CctpBridgeType> = new Program<CctpBridgeType>(cctpBridgeIdl, cctpAddress, provider);\n const mint = new PublicKey(fromTokenAddress);\n const cctpBridgeAccount = await getCctpBridgeAccount(mint, cctpBridge.programId);\n const userAccount = new PublicKey(account);\n\n const configAccountInfo = await cctpBridge.account.cctpBridge.fetch(cctpBridgeAccount);\n\n const swapAndBridgeData = {} as SwapAndBridgeSolDataCctpData;\n\n swapAndBridgeData.cctpBridge = cctpBridge;\n swapAndBridgeData.cctpBridgeAccount = cctpBridgeAccount;\n swapAndBridgeData.cctpAddressAccount = new PublicKey(cctpAddress);\n swapAndBridgeData.amount = new BN(amount);\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.userToken = await getAssociatedAccount(userAccount, mint);\n swapAndBridgeData.bridgeAuthority = await getCctpAuthorityAccount(cctpBridgeAccount, cctpBridge.programId);\n swapAndBridgeData.bridgeTokenAccount = await getCctpBridgeTokenAccount(mint, cctpBridge.programId);\n swapAndBridgeData.chainBridgeAccount = await getChainBridgeAccount(toChainId, cctpBridge.programId);\n swapAndBridgeData.userAccount = userAccount;\n swapAndBridgeData.destinationChainId = toChainId;\n swapAndBridgeData.mint = mint;\n swapAndBridgeData.gasPrice = await getPriceAccount(toChainId, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.thisGasPrice = await getPriceAccount(CHAIN_ID, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.provider = provider;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n cctpBridgeAccount\n );\n }\n return swapAndBridgeData;\n }\n\n async buildSwapAndBridgeCctpTransaction(\n destinationChainSymbol: string,\n swapAndBridgeData: SwapAndBridgeSolDataCctpData\n ): Promise<{ transaction: VersionedTransaction; messageSentEventDataKeypair: Keypair }> {\n const {\n cctpBridge,\n cctpBridgeAccount,\n amount,\n recipient,\n receiveToken,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n userAccount,\n destinationChainId,\n mint,\n gasPrice,\n thisGasPrice,\n extraGasInstruction,\n provider,\n } = swapAndBridgeData;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;\n const cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(\"CCTP is not configured\");\n }\n const cctpTransmitterProgramId = new PublicKey(cctpTransmitterProgramIdAddress);\n const cctpTokenMessengerMinter = new PublicKey(cctpTokenMessengerMinterAddress);\n const {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n } = getCctpAccounts(domain, mint, cctpTransmitterProgramId, cctpTokenMessengerMinter);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const messageSentEventDataKeypair = Keypair.generate();\n const lockAccount = getCctpLockAccount(cctpBridge.programId, messageSentEventDataKeypair.publicKey);\n\n const tx = await cctpBridge.methods\n .bridge({\n amount,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint: mint,\n user: userAccount,\n cctpBridge: cctpBridgeAccount,\n\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n lock: lockAccount,\n\n cctpMessenger: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger: tokenMessenger,\n tokenMinter: tokenMinter,\n localToken: localToken,\n remoteTokenMessengerKey: remoteTokenMessengerKey,\n authorityPda: authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n\n bridgeToken: bridgeTokenAccount,\n gasPrice: gasPrice,\n thisGasPrice: thisGasPrice,\n chainBridge: chainBridgeAccount,\n userToken,\n bridgeAuthority: bridgeAuthority,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 2000000,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = provider.connection;\n tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n tx.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(tx, connection), messageSentEventDataKeypair };\n }\n\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n}\n\ninterface SolTxSendParams extends TxSendParams {\n poolAddress: string;\n}\n", "export interface Bridge {\n version: \"0.1.0\";\n name: \"bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"initializePool\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"token\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializePoolArgs\";\n };\n }\n ];\n },\n {\n name: \"initDepositAccount\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"deposit\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdraw\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amountLp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"swapAndBridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sentMessageAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swapAndBridgeWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"wormholeProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"message\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sequence\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"feeCollector\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"clock\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sendMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"receiveMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendPool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivePool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwapWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"claimRewards\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAdmin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAdmin\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"startBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"stopBridge\";\n accounts: [\n {\n name: \"stopAuthority\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"setRebalancer\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"rebalancer\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setStopAuthority\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAllbridgeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setWormholeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setPoolFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setBalanceRatioMin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n },\n {\n name: \"setPoolAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"addOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"removeOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"adjustTotalLpAmount\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n }\n ];\n accounts: [\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"address\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"config\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"rebalancer\";\n type: \"publicKey\";\n },\n {\n name: \"stopAuthority\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"canSwap\";\n type: \"bool\";\n },\n {\n name: \"canDeposit\";\n type: \"bool\";\n },\n {\n name: \"canWithdraw\";\n type: \"bool\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"sentTokenAddress\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"slot\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"otherBridgeToken\";\n type: {\n kind: \"struct\";\n fields: [];\n };\n },\n {\n name: \"pool\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"d\";\n type: \"u64\";\n },\n {\n name: \"tokenBalance\";\n type: \"u64\";\n },\n {\n name: \"vUsdBalance\";\n type: \"u64\";\n },\n {\n name: \"reserves\";\n type: \"u64\";\n },\n {\n name: \"decimals\";\n type: \"u8\";\n },\n {\n name: \"totalLpAmount\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"accRewardPerShareP\";\n type: \"u128\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"unlock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n },\n {\n name: \"vUsdAmount\";\n type: \"u64\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"userDeposit\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"userAddress\";\n type: \"publicKey\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"lpAmount\";\n type: \"u64\";\n },\n {\n name: \"rewardDebt\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"InitializePoolArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UnlockArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: \"publicKey\";\n },\n {\n name: \"sourceChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: \"publicKey\";\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"RewardError\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"FeeTooHigh\";\n }\n ];\n };\n },\n {\n name: \"Messenger\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"None\";\n },\n {\n name: \"Allbridge\";\n },\n {\n name: \"Wormhole\";\n }\n ];\n };\n },\n {\n name: \"ActionType\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"Deposit\";\n },\n {\n name: \"Withdraw\";\n },\n {\n name: \"Swap\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"AccountAlreadyInitialized\";\n msg: \"This account has already been initialized\";\n },\n {\n code: 6001;\n name: \"AdminAuthorityInvalid\";\n msg: \"This instruction requires admin authority\";\n },\n {\n code: 6002;\n name: \"InvalidSignature\";\n msg: \"Provided signature has wrong signer or message\";\n },\n {\n code: 6003;\n name: \"InvalidHash\";\n msg: \"Wrong unlock message hash\";\n },\n {\n code: 6004;\n name: \"PoolOverflow\";\n msg: \"PoolInfo overflow\";\n },\n {\n code: 6005;\n name: \"ReservesExhausted\";\n msg: \"Reserves exhausted\";\n },\n {\n code: 6006;\n name: \"ZeroAmount\";\n msg: \"Zero amount\";\n },\n {\n code: 6007;\n name: \"ZeroChanges\";\n msg: \"Zero changes\";\n },\n {\n code: 6008;\n name: \"HighVusdAmount\";\n msg: \"vUSD amount is too high\";\n },\n {\n code: 6009;\n name: \"BalanceRatioExceeded\";\n msg: \"Balance ratio exceeded\";\n },\n {\n code: 6010;\n name: \"InsufficientReceivedAmount\";\n msg: \"Received insufficient amount\";\n },\n {\n code: 6011;\n name: \"ForbiddenAction\";\n msg: \"ForbiddenAction\";\n },\n {\n code: 6012;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: Bridge = {\n version: \"0.1.0\",\n name: \"bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"initializePool\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"token\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializePoolArgs\",\n },\n },\n ],\n },\n {\n name: \"initDepositAccount\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"deposit\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdraw\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amountLp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"swapAndBridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sentMessageAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swapAndBridgeWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"wormholeProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"message\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sequence\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"feeCollector\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"clock\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sendMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"receiveMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendPool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivePool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwapWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"claimRewards\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAdmin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAdmin\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"startBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"stopBridge\",\n accounts: [\n {\n name: \"stopAuthority\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"setRebalancer\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"rebalancer\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setStopAuthority\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAllbridgeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setWormholeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setPoolFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setBalanceRatioMin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n {\n name: \"setPoolAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"addOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"removeOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"adjustTotalLpAmount\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n ],\n accounts: [\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"address\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"config\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"rebalancer\",\n type: \"publicKey\",\n },\n {\n name: \"stopAuthority\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"canSwap\",\n type: \"bool\",\n },\n {\n name: \"canDeposit\",\n type: \"bool\",\n },\n {\n name: \"canWithdraw\",\n type: \"bool\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"sentTokenAddress\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"otherBridgeToken\",\n type: {\n kind: \"struct\",\n fields: [],\n },\n },\n {\n name: \"pool\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"d\",\n type: \"u64\",\n },\n {\n name: \"tokenBalance\",\n type: \"u64\",\n },\n {\n name: \"vUsdBalance\",\n type: \"u64\",\n },\n {\n name: \"reserves\",\n type: \"u64\",\n },\n {\n name: \"decimals\",\n type: \"u8\",\n },\n {\n name: \"totalLpAmount\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"accRewardPerShareP\",\n type: \"u128\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"unlock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n {\n name: \"vUsdAmount\",\n type: \"u64\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"userDeposit\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"userAddress\",\n type: \"publicKey\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"lpAmount\",\n type: \"u64\",\n },\n {\n name: \"rewardDebt\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"InitializePoolArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UnlockArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: \"publicKey\",\n },\n {\n name: \"sourceChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: \"publicKey\",\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"RewardError\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"FeeTooHigh\",\n },\n ],\n },\n },\n {\n name: \"Messenger\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"None\",\n },\n {\n name: \"Allbridge\",\n },\n {\n name: \"Wormhole\",\n },\n ],\n },\n },\n {\n name: \"ActionType\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"Deposit\",\n },\n {\n name: \"Withdraw\",\n },\n {\n name: \"Swap\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"AccountAlreadyInitialized\",\n msg: \"This account has already been initialized\",\n },\n {\n code: 6001,\n name: \"AdminAuthorityInvalid\",\n msg: \"This instruction requires admin authority\",\n },\n {\n code: 6002,\n name: \"InvalidSignature\",\n msg: \"Provided signature has wrong signer or message\",\n },\n {\n code: 6003,\n name: \"InvalidHash\",\n msg: \"Wrong unlock message hash\",\n },\n {\n code: 6004,\n name: \"PoolOverflow\",\n msg: \"PoolInfo overflow\",\n },\n {\n code: 6005,\n name: \"ReservesExhausted\",\n msg: \"Reserves exhausted\",\n },\n {\n code: 6006,\n name: \"ZeroAmount\",\n msg: \"Zero amount\",\n },\n {\n code: 6007,\n name: \"ZeroChanges\",\n msg: \"Zero changes\",\n },\n {\n code: 6008,\n name: \"HighVusdAmount\",\n msg: \"vUSD amount is too high\",\n },\n {\n code: 6009,\n name: \"BalanceRatioExceeded\",\n msg: \"Balance ratio exceeded\",\n },\n {\n code: 6010,\n name: \"InsufficientReceivedAmount\",\n msg: \"Received insufficient amount\",\n },\n {\n code: 6011,\n name: \"ForbiddenAction\",\n msg: \"ForbiddenAction\",\n },\n {\n code: 6012,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "export interface CctpBridge {\n version: \"0.1.0\";\n name: \"cctp_bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"bridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"messageSentEventData\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenMinter\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"localToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"remoteTokenMessengerKey\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"authorityPda\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"eventAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"setAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setCctpTokenMessengerMinter\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n }\n ];\n accounts: [\n {\n name: \"cctpBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"adminFee\";\n type: \"u64\";\n },\n {\n name: \"relayerFee\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: CctpBridge = {\n version: \"0.1.0\",\n name: \"cctp_bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"bridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"messageSentEventData\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenMinter\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"localToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"remoteTokenMessengerKey\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"authorityPda\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"eventAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"setAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setCctpTokenMessengerMinter\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n ],\n accounts: [\n {\n name: \"cctpBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"adminFee\",\n type: \"u64\",\n },\n {\n name: \"relayerFee\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "import { Program, Provider, Spl } from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/* eslint-disable-next-line import/no-named-as-default */\nimport Big from \"big.js\";\nimport Web3 from \"web3\";\nimport { InvalidTxError, SdkError } from \"../../../exceptions\";\nimport { PoolInfo } from \"../../../tokens-info\";\nimport { swapToVUsd } from \"../../../utils/calculation\";\nimport { TokenAccountData } from \"../../models/sol\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\n\nexport async function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData> {\n return await Spl.token(provider).account.token.fetch(account);\n}\n\nexport async function getVUsdAmount(\n amount: string,\n bridge: Program<BridgeType>,\n poolAccount: PublicKey\n): Promise<string> {\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const decimals = poolAccountInfo.decimals;\n const feeShare = Big(poolAccountInfo.feeShareBp.toString()).div(10000).toFixed();\n const poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\"> = {\n aValue: poolAccountInfo.a.toString(),\n dValue: poolAccountInfo.d.toString(),\n totalLpAmount: poolAccountInfo.totalLpAmount.toString(),\n tokenBalance: poolAccountInfo.tokenBalance.toString(),\n vUsdBalance: poolAccountInfo.vUsdBalance.toString(),\n accRewardPerShareP: poolAccountInfo.accRewardPerShareP.toString(),\n };\n return swapToVUsd(amount, { decimals, feeShare }, poolInfo);\n}\n\nexport function getMessage(args: {\n amount: string;\n recipient: Buffer;\n sourceChainId: number;\n destinationChainId: number;\n receiveToken: Buffer;\n nonce: Buffer;\n chainBridge: Buffer;\n}): Buffer {\n const amount = args.amount;\n const recipient = \"0x\" + args.recipient.toString(\"hex\");\n const sourceChainId = args.sourceChainId;\n const destinationsChainId = args.destinationChainId;\n const receiveToken = \"0x\" + args.receiveToken.toString(\"hex\");\n const nonce = \"0x\" + args.nonce.toString(\"hex\");\n const messenger = 1;\n const chainBridge = \"0x\" + args.chainBridge.toString(\"hex\");\n\n const message = Web3.utils.encodePacked(\n { t: \"uint256\", v: amount },\n { t: \"bytes32\", v: recipient },\n { t: \"uint256\", v: sourceChainId },\n { t: \"bytes32\", v: receiveToken },\n { t: \"uint256\", v: nonce },\n { t: \"uint8\", v: messenger }\n );\n\n if (!message) {\n throw new SdkError(\"message cannot be undefined\");\n }\n const hash = Web3.utils.keccak256(Buffer.from(message.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashBuffer = Buffer.from(hash.replace(\"0x\", \"\"), \"hex\");\n hashBuffer[0] = sourceChainId;\n hashBuffer[1] = destinationsChainId;\n\n const messageWithSigner = Web3.utils.encodePacked(\n { t: \"bytes32\", v: \"0x\" + hashBuffer.toString(\"hex\") },\n { t: \"bytes32\", v: chainBridge }\n );\n\n if (!messageWithSigner) {\n throw new InvalidTxError(\"messageWithSigner cannot be undefined\");\n }\n\n const hashWithSigner = Web3.utils.keccak256(Buffer.from(messageWithSigner.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashWithSignerBuffer = Buffer.from(hashWithSigner.replace(\"0x\", \"\"), \"hex\");\n\n hashWithSignerBuffer[0] = hashBuffer[0];\n hashWithSignerBuffer[1] = hashBuffer[1];\n return hashWithSignerBuffer;\n}\n", "import {\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { TxTooLargeError } from \"../../../exceptions\";\nimport { toPowBase10 } from \"../../../utils/calculation\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\nimport { SolanaAutoTxFee, TxFeeParams } from \"../../models\";\n\nexport async function addUnitLimitAndUnitPriceToTx(\n transaction: Transaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const simUnitsConsumed = (await connection.simulateTransaction(transaction)).value.unitsConsumed!;\n await addUnitLimitAndUnitPriceToInstructions(transaction.instructions, simUnitsConsumed, txFeeParams, connection);\n}\n\nexport async function addUnitLimitAndUnitPriceToVersionedTx(\n transaction: VersionedTransaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n\n if (transaction.serialize().length > 1232) {\n throw new TxTooLargeError();\n }\n\n // const simUnitsConsumed = (await connection.simulateTransaction(transaction, { replaceRecentBlockhash: true })).value\n // .unitsConsumed!;\n const simUnitsConsumed = 769230; // 1000000/1.3\n\n await addUnitLimitAndUnitPriceToInstructions(message.instructions, simUnitsConsumed, txFeeParams, connection);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n}\n\nasync function addUnitLimitAndUnitPriceToInstructions(\n instructions: TransactionInstruction[],\n simUnitsConsumed: number,\n txFeeParams: TxFeeParams | undefined,\n connection: Connection\n) {\n if (simUnitsConsumed > 0) {\n const units = updateUnitLimit(simUnitsConsumed, instructions);\n if (txFeeParams?.solana) {\n const solanaTxFee = txFeeParams.solana;\n if (solanaTxFee === SolanaAutoTxFee) {\n await updateUnitPrice(instructions, connection);\n } else if (\"pricePerUnitInMicroLamports\" in solanaTxFee) {\n await updateUnitPrice(instructions, connection, solanaTxFee.pricePerUnitInMicroLamports);\n } else {\n const pricePerUnitInMicroLamports = Big(solanaTxFee.extraFeeInLamports)\n .div(units)\n .mul(toPowBase10(6))\n .toFixed(0);\n await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);\n }\n }\n }\n}\n\nfunction updateUnitLimit(simUnitsConsumed: number, instructions: TransactionInstruction[]): string {\n const computeUnitLimitIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitLimit\"\n );\n const units = Number((simUnitsConsumed * 1.3).toFixed(0));\n const computeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({\n units: units,\n });\n if (computeUnitLimitIndex >= 0) {\n instructions[computeUnitLimitIndex] = computeUnitLimitInstruction;\n } else {\n instructions.push(computeUnitLimitInstruction);\n }\n return units.toString();\n}\n\nasync function updateUnitPrice(\n instructions: TransactionInstruction[],\n connection: Connection,\n pricePerUnitInMicroLamports?: string\n): Promise<string> {\n const computeUnitPriceIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitPrice\"\n );\n const unitPrice = pricePerUnitInMicroLamports\n ? BigInt(pricePerUnitInMicroLamports)\n : BigInt(await getAveragePrioritizationFee(connection));\n const computeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: unitPrice,\n });\n if (computeUnitPriceIndex >= 0) {\n instructions[computeUnitPriceIndex] = computeUnitPriceInstruction;\n } else {\n instructions.push(computeUnitPriceInstruction);\n }\n return unitPrice.toString();\n}\n\nasync function getAveragePrioritizationFee(connection: Connection) {\n const prioritizationFees = await connection.getRecentPrioritizationFees();\n let sum = 0;\n for (const prioritizationFee of prioritizationFees) {\n sum += prioritizationFee.prioritizationFee;\n }\n return (sum / prioritizationFees.length).toFixed(0);\n}\n", "import { AddressLookupTableAccount, Connection, VersionedTransaction } from \"@solana/web3.js\";\nimport { SdkError } from \"../../exceptions\";\n\nexport async function fetchAddressLookupTableAccountsFromTx(\n transaction: VersionedTransaction,\n connection: Connection\n): Promise<AddressLookupTableAccount[]> {\n return await Promise.all(\n transaction.message.addressTableLookups.map(async (lookup) => {\n return new AddressLookupTableAccount({\n key: lookup.accountKey,\n state: AddressLookupTableAccount.deserialize(\n await connection.getAccountInfo(lookup.accountKey).then((res) => {\n if (!res) {\n throw new SdkError(\"Cannot get AccountInfo\");\n }\n return res.data;\n })\n ),\n });\n })\n );\n}\n", "import { BN, Program, Provider } from \"@project-serum/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Bridge as BridgeType } from \"./types/bridge\";\nimport { CctpBridge as CctpBridgeType } from \"./types/cctp_bridge\";\n\nexport type SolanaTxFee = PricePerUnitInMicroLamports | ExtraFeeInLamports | typeof SolanaAutoTxFee;\n/**\n * Priority Fee will be calculated based on {@link @solana/web3.js:Connection.getRecentPrioritizationFees}\n */\nexport const SolanaAutoTxFee = \"AUTO\" as const;\n\n/**\n * Add Priority Fee as price per unit in micro-lamports\n */\nexport interface PricePerUnitInMicroLamports {\n pricePerUnitInMicroLamports: string;\n}\n\n/**\n * Total Priority Fee impact will be as extraFeeInLamports param\n */\nexport interface ExtraFeeInLamports {\n extraFeeInLamports: string;\n}\n\nexport interface SwapAndBridgeSolData {\n bridge: Program<BridgeType>;\n amount: BN;\n vusdAmount: BN;\n nonce: number[];\n recipient: number[];\n receiveToken: number[];\n poolAccount: PublicKey;\n lockAccount: PublicKey;\n bridgeAuthority: PublicKey;\n userToken: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: string;\n config: PublicKey;\n configAccountInfo: ConfigAccountInfo;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n message: Buffer;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SwapAndBridgeSolDataCctpData {\n cctpBridge: Program<CctpBridgeType>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\ninterface ConfigAccountInfo {\n allbridgeMessengerProgramId: PublicKey;\n wormholeMessengerProgramId: PublicKey;\n gasOracleProgramId: PublicKey;\n}\n\nexport interface TokenAccountData {\n amount: BN;\n authority: PublicKey;\n closeAuthority: unknown;\n delegate: unknown;\n delegatedAmount: BN;\n isNative: unknown;\n mint: PublicKey;\n state: unknown;\n}\n", "import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { Connection, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport axios, { AxiosError } from \"axios\";\nimport { JupiterError, SdkError } from \"../../../exceptions\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\n\nexport class JupiterService {\n connection: Connection;\n jupiterUrl: string;\n\n constructor(solanaRpcUrl: string, jupiterUrl: string) {\n this.connection = new Connection(solanaRpcUrl);\n this.jupiterUrl = jupiterUrl.replace(/\\/$/, \"\"); // trim last \"/\" if exist\n }\n\n async getJupiterSwapTx(\n userAddress: string,\n stableTokenAddress: string,\n amount: string,\n exactOut: boolean\n ): Promise<{ tx: VersionedTransaction; amountIn?: string }> {\n let quoteResponse: any;\n try {\n const swapMode = exactOut ? \"ExactOut\" : \"ExactIn\";\n quoteResponse = await axios.get(`${this.jupiterUrl}/quote?inputMint=${stableTokenAddress}\n&outputMint=${NATIVE_MINT.toString()}\n&amount=${amount}\n&swapMode=${swapMode}\n&slippageBps=100\n&onlyDirectRoutes=true`);\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get route\");\n }\n\n let inAmount;\n if (exactOut && quoteResponse?.data?.inAmount) {\n inAmount = quoteResponse.data.inAmount;\n } else if (exactOut) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n\n let transactionResponse: any;\n try {\n transactionResponse = await axios.post(`${this.jupiterUrl}/swap`, {\n quoteResponse: quoteResponse.data,\n userPublicKey: userAddress,\n wrapAndUnwrapSol: true,\n });\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n let swapTransaction;\n if (transactionResponse?.data?.swapTransaction) {\n swapTransaction = transactionResponse.data.swapTransaction;\n } else {\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n const swapTransactionBuf = Buffer.from(swapTransaction, \"base64\");\n const tx = VersionedTransaction.deserialize(swapTransactionBuf);\n\n return exactOut ? { tx, amountIn: inAmount } : { tx };\n }\n\n async amendJupiterWithSdkTx(\n transaction: VersionedTransaction,\n sdkTx: VersionedTransaction\n ): Promise<VersionedTransaction> {\n try {\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, this.connection);\n const sdkAddressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(sdkTx, this.connection);\n\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const sdkMessage = TransactionMessage.decompile(sdkTx.message, {\n addressLookupTableAccounts: sdkAddressLookupTableAccounts,\n });\n sdkMessage.instructions.shift();\n message.instructions.push(...sdkMessage.instructions);\n\n addressLookupTableAccounts.push(...sdkAddressLookupTableAccounts);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n\n if (sdkTx.message.header.numRequiredSignatures === 2 && transaction.signatures.length === 1) {\n const signature = sdkTx.signatures[0];\n if (!signature) {\n throw new SdkError(\"Signature is undefined\");\n }\n transaction.signatures.push(signature);\n }\n return transaction;\n } catch (e) {\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation final swap and bridge transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation final swap and bridge transaction\");\n }\n }\n}\n", "import { Address, contract } from \"@stellar/stellar-sdk\";\nimport { Big } from \"big.js\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../../index\";\nimport { FeePaymentMethod } from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { BridgeContract } from \"../../models/srb/bridge-contract\";\nimport { ChainBridgeService, SendParams, SwapParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { getNonceBigInt, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbBridgeService extends ChainBridgeService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return await this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n let tx;\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(0),\n fee_token_amount: BigInt(totalFee),\n });\n } else {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(totalFee),\n fee_token_amount: BigInt(0),\n });\n }\n return tx.toXDR();\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n return (\n await contract.swap({\n sender: fromAccountAddress,\n amount: BigInt(amount),\n token: Address.contract(Buffer.from(fromTokenAddress)).toBuffer(),\n receive_token: Buffer.from(toTokenAddress),\n recipient: toAccountAddress as string,\n receive_amount_min: BigInt(minimumReceiveAmount),\n })\n ).toXDR();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string, sender?: string): T {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport u256 = contract.u256;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport Option = contract.Option;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface Swapped {\n receive_amount: u128;\n receive_token: Buffer;\n recipient: string;\n send_amount: u128;\n send_token: Buffer;\n sender: string;\n}\n\nexport interface TokensSent {\n amount: u128;\n destination_chain_id: u32;\n nonce: u256;\n receive_token: Buffer;\n recipient: Buffer;\n}\n\nexport interface TokensReceived {\n amount: u128;\n message: Buffer;\n nonce: u256;\n recipient: Buffer;\n}\n\nexport interface ReceiveFee {\n bridge_transaction_cost: u128;\n extra_gas: u128;\n message_transaction_cost: u128;\n}\n\nexport interface BridgingFeeFromTokens {\n fee_token_amount: u128;\n gas: u128;\n}\n\nexport interface AnotherBridge {\n address: Buffer;\n tokens: Map<Buffer, boolean>;\n}\n\nexport interface Bridge {\n /**\n * precomputed values of the scaling factor required for paying the bridging fee with stable tokens\n */\n bridging_fee_conversion_factor: Map<string, u128>;\n can_swap: boolean;\n /**\n * precomputed values to divide by to change the precision from the Gas Oracle precision to the token precision\n */\n from_gas_oracle_factor: Map<string, u128>;\n messenger: string;\n pools: Map<Buffer, string>;\n rebalancer: string;\n}\n\nexport type DataKey =\n | { tag: \"OtherBridge\"; values: readonly [u32] }\n | { tag: \"SentMessage\"; values: readonly [Buffer] }\n | { tag: \"ReceivedMessage\"; values: readonly [Buffer] };\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface BridgeContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n messenger,\n gas_oracle,\n native_token,\n }: {\n admin: string;\n messenger: string;\n gas_oracle: string;\n native_token: string;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_and_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_and_bridge: (\n {\n sender,\n token,\n amount,\n recipient,\n destination_chain_id,\n receive_token,\n nonce,\n gas_amount,\n fee_token_amount,\n }: {\n sender: string;\n token: string;\n amount: u128;\n recipient: Buffer;\n destination_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n gas_amount: u128;\n fee_token_amount: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a receive_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n receive_tokens: (\n {\n sender,\n amount,\n recipient,\n source_chain_id,\n receive_token,\n nonce,\n receive_amount_min,\n extra_gas,\n }: {\n sender: string;\n amount: u128;\n recipient: string;\n source_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n receive_amount_min: u128;\n extra_gas: Option<u128>;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap: (\n {\n sender,\n amount,\n token,\n receive_token,\n recipient,\n receive_amount_min,\n }: {\n sender: string;\n amount: u128;\n token: Buffer;\n receive_token: Buffer;\n recipient: string;\n receive_amount_min: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_oracle: (\n { new_address }: { new_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_rebalancer transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_rebalancer: (\n { rebalancer }: { rebalancer: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_messenger transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_messenger: (\n { messenger }: { messenger: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_usage: (\n { chain_id, gas_usage }: { chain_id: u32; gas_usage: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a register_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n register_bridge: (\n { chain_id, bridge_address }: { chain_id: u32; bridge_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a remove_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n remove_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_pool transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_pool: (\n { pool, token }: { pool: string; token: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_gas_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_gas_tokens: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_bridging_fee_in_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_bridging_fee_in_tokens: (\n { sender, token_address }: { sender: string; token_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a has_processed_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_processed_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a has_received_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_received_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a get_pool_address transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool_address: (\n { token_address }: { token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_config transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_config: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Bridge>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_transaction_cost transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_transaction_cost: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_usage: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_oracle: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_another_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_another_bridge: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<AnotherBridge>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class BridgeContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=\",\n \"AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==\",\n \"AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD\",\n \"AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n swap_and_bridge: this.txFromJSON<Result<void>>,\n receive_tokens: this.txFromJSON<Result<void>>,\n swap: this.txFromJSON<Result<void>>,\n stop_swap: this.txFromJSON<Result<void>>,\n start_swap: this.txFromJSON<Result<void>>,\n set_gas_oracle: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_rebalancer: this.txFromJSON<Result<void>>,\n set_messenger: this.txFromJSON<Result<void>>,\n set_gas_usage: this.txFromJSON<Result<void>>,\n register_bridge: this.txFromJSON<Result<void>>,\n add_bridge_token: this.txFromJSON<Result<void>>,\n remove_bridge_token: this.txFromJSON<Result<void>>,\n add_pool: this.txFromJSON<Result<void>>,\n withdraw_gas_tokens: this.txFromJSON<Result<void>>,\n withdraw_bridging_fee_in_tokens: this.txFromJSON<Result<void>>,\n has_processed_message: this.txFromJSON<Result<boolean>>,\n has_received_message: this.txFromJSON<Result<boolean>>,\n get_pool_address: this.txFromJSON<Result<string>>,\n get_config: this.txFromJSON<Result<Bridge>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_transaction_cost: this.txFromJSON<Result<u128>>,\n get_gas_usage: this.txFromJSON<Result<u128>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_gas_oracle: this.txFromJSON<Result<string>>,\n get_another_bridge: this.txFromJSON<Result<AnotherBridge>>,\n set_admin: this.txFromJSON<Result<void>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { FeePaymentMethod, Messenger, SwapParams, TransactionResponse } from \"../../../models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class TronBridgeService extends ChainBridgeService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const rawTransaction = await this.buildRawTransactionSendFromParams(txSendParams);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"address\", value: toAccountAddress },\n { type: \"uint256\", value: minimumReceiveAmount },\n ];\n const methodSignature = \"swap(uint256,bytes32,bytes32,address,uint256)\";\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, \"0\", fromAccountAddress);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n\n const nonce = getNonce().toJSON().data;\n let parameters;\n let value: string;\n let methodSignature: string;\n if (messenger == Messenger.CCTP) {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"bridge(uint256,bytes32,uint256,uint256)\";\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)\";\n }\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, value, fromAccountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n", "import BN from \"bn.js\";\n\nexport function amountToHex(amount: string): string {\n return \"0x\" + new BN(amount).toString(\"hex\");\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve(), ms));\n}\n\nexport const promisify =\n // prettier-ignore\n // eslint-disable-next-line @typescript-eslint/ban-types\n (func: Function) =>\n (...args: any[]) =>\n new Promise<any>(\n (resolve, reject) =>\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n func(...args, (err: Error, result: any) => (err ? reject(err) : resolve(result)))\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n );\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { InvalidTxError, VerifyTxError } from \"../../../exceptions\";\nimport { RawTransaction } from \"../../models\";\nimport { sleep } from \"../index\";\n\nexport async function sendRawTransaction(tronWeb: TronWeb, rawTransaction: RawTransaction): Promise<{ txId: string }> {\n const signedTx = await tronWeb.trx.sign(rawTransaction);\n\n if (!signedTx.signature) {\n throw new InvalidTxError(\"Transaction was not signed properly\");\n }\n\n const receipt = await tronWeb.trx.sendRawTransaction(signedTx);\n const transactionHash = receipt.txid;\n await verifyTx(tronWeb, transactionHash);\n return { txId: transactionHash };\n}\n\nexport async function verifyTx(tronWeb: TronWeb, txId: string, timeout = 10000): Promise<any> {\n const start = Date.now();\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition */\n while (true) {\n if (Date.now() - start > timeout) {\n throw new VerifyTxError(\"Transaction not found\");\n }\n const result = await tronWeb.trx.getUnconfirmedTransactionInfo(txId);\n if (!result?.receipt) {\n await sleep(2000);\n continue;\n }\n if (result.receipt.result === \"SUCCESS\") {\n return result;\n } else {\n /* eslint-disable-next-line @typescript-eslint/restrict-template-expressions */\n throw new VerifyTxError(`Transaction status is ${result.receipt.result}`);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport Cache from \"timed-cache\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered } from \"../../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { depositAmountToVUsd, vUsdToWithdrawalAmount } from \"../utils/calculation\";\nimport { EvmPoolService } from \"./evm\";\nimport { ApproveParams, ChainPoolService, CheckAllowanceParams, GetAllowanceParams, UserBalanceInfo } from \"./models\";\nimport { DefaultRawPoolTransactionBuilder, RawPoolTransactionBuilder } from \"./raw-pool-transaction-builder\";\nimport { SolanaPoolService } from \"./sol\";\nimport { SrbPoolService } from \"./srb\";\nimport { TronPoolService } from \"./trx\";\n\nexport interface LiquidityPoolService {\n rawTxBuilder: RawPoolTransactionBuilder;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawPoolTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * Calculates the amount of LP tokens that will be deposited\n * @param amount The float amount of tokens that will be sent\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amount of tokens will be withdrawn\n * @param amount The float amount of tokens that will be sent\n * @param accountAddress\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string>;\n\n /**\n * Get User Balance Info on Liquidity poolInfo\n * @param accountAddress\n * @param token\n * @param provider\n * @returns UserBalanceInfo\n */\n getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo>;\n\n /**\n * Gets information about the poolInfo from chain\n * @param token\n * @param provider - will be used to access the network\n * @returns poolInfo\n */\n getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<Required<PoolInfo>>;\n}\n\nexport class DefaultLiquidityPoolService implements LiquidityPoolService {\n public rawTxBuilder: RawPoolTransactionBuilder;\n private cache: Cache<PoolInfo>;\n\n constructor(\n private api: AllbridgeCoreClientFiltered,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawPoolTransactionBuilder(api, nodeRpcUrlsConfig, this.params, tokenService);\n const ttl = params.cachePoolInfoChainSec > 0 ? params.cachePoolInfoChainSec * 1000 : 20 * 1000;\n this.cache = new Cache<PoolInfo>({ defaultTtl: ttl });\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as GetAllowanceParams;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as CheckAllowanceParams;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n return this.tokenService.approve(provider, { ...approveData, spender: approveData.token.poolAddress });\n }\n\n async getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const { vUsdBalance, tokenBalance, aValue, dValue } = pool;\n const vUsd = depositAmountToVUsd(amount, aValue, dValue, tokenBalance, vUsdBalance);\n return convertIntAmountToFloat(vUsd, SYSTEM_PRECISION).toFixed();\n }\n\n async getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const tokenAmountInSP = vUsdToWithdrawalAmount(amount);\n const tokenAmount = fromSystemPrecision(tokenAmountInSP, token.decimals);\n const userBalanceInfo = await this.getUserBalanceInfo(accountAddress, token, provider);\n const earned = userBalanceInfo.earned(pool) || \"0\";\n const commonAmount = Big(tokenAmount).plus(earned).toFixed();\n return convertIntAmountToFloat(commonAmount, token.decimals).toFixed();\n }\n\n async getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo> {\n return getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getUserBalanceInfo(accountAddress, token);\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<PoolInfo> {\n const poolKey: PoolKeyObject = { chainSymbol: token.chainSymbol, poolAddress: token.poolAddress };\n const fromCache = this.cache.get(poolKey);\n if (fromCache) {\n return fromCache;\n } else {\n const poolInfo = await getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getPoolInfoFromChain(token);\n this.cache.put(poolKey, poolInfo);\n this.api.cachePut({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress }, poolInfo);\n return poolInfo;\n }\n }\n}\n\nexport function getChainPoolService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainPoolService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmPoolService(provider as unknown as Web3, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmPoolService(new Web3(nodeRpcUrl), api);\n }\n }\n case ChainType.TRX: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronJsonRpc = params.tronJsonRpc;\n if (provider) {\n return new TronPoolService(provider, api, tronJsonRpc);\n } else {\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n return new TronPoolService(tronWeb, api, tronJsonRpc);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaPoolService(nodeRpcUrl, api);\n }\n case ChainType.SRB: {\n return new SrbPoolService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport { convertFloatAmountToInt, getD } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport function depositAmountToVUsd(\n amount: string,\n aValue: string,\n dValue: string,\n tokenBalance: string,\n vUsdBalance: string\n): string {\n const amountSP = convertFloatAmountToInt(amount, SYSTEM_PRECISION);\n const amountSPBig = Big(amountSP);\n\n const oldD = Big(dValue);\n const oldBalance = Big(tokenBalance).plus(vUsdBalance);\n\n let newTokenBalance;\n let newVUsdBalance;\n\n if (oldD.eq(0) || oldBalance.eq(0)) {\n const halfAmount = amountSPBig.div(2);\n newTokenBalance = Big(tokenBalance).plus(halfAmount);\n newVUsdBalance = Big(vUsdBalance).plus(halfAmount);\n } else {\n newTokenBalance = Big(tokenBalance).plus(amountSPBig.mul(tokenBalance).div(oldBalance));\n newVUsdBalance = Big(vUsdBalance).plus(amountSPBig.mul(vUsdBalance).div(oldBalance));\n }\n const newD = Big(getD(aValue, newTokenBalance.toFixed(), newVUsdBalance.toFixed()));\n return newD.minus(oldD).toFixed();\n}\n\nexport function vUsdToWithdrawalAmount(lpAmount: string): string {\n const lpAmountSP = convertFloatAmountToInt(lpAmount, SYSTEM_PRECISION);\n return Big(lpAmountSP).round().toFixed();\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_a\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"_token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpSymbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RewardsClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedFromVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedToVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"a\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accRewardPerShareP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adjustTotalLpAmount\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeAmount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"balanceRatioMinBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canDeposit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canWithdraw\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimAdminFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimRewards\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"d\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"feeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPrice\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"x\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"reserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"router\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_adminFeeShareBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setBalanceRatioMinBP\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"setFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRouter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapFromVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapToVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"tokenBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userRewardDebt\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"vUsdBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountLp\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import { Big } from \"big.js\";\nimport { FeePaymentMethod, TxFeeParams } from \"../../../models\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { convertIntAmountToFloat, getEarned } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport interface ApproveParams {\n /**\n * The token info\n */\n token: TokenWithChainDetails;\n\n /**\n * The address of the token owner who is granting permission to use tokens\n */\n owner: string;\n\n /**\n * The integer amount of tokens to approve.\n * Optional.\n * The maximum amount by default.\n */\n amount?: string | number | Big;\n}\n\nexport interface GetAllowanceParams {\n token: TokenWithChainDetails;\n owner: string;\n gasFeePaymentMethod?: FeePaymentMethod;\n}\n\nexport type GetAllowanceParamsDto = GetAllowanceParams;\n\nexport interface CheckAllowanceParams extends GetAllowanceParams {\n /**\n * The float amount of tokens to check the allowance.\n */\n amount: string | number | Big;\n}\n\nexport interface LiquidityPoolsParams {\n /**\n * The account address to operate tokens with.\n */\n accountAddress: string;\n /**\n * {@link TokenWithChainDetails |The token info object} of operation token.\n */\n token: TokenWithChainDetails;\n\n txFeeParams?: TxFeeParams;\n}\n\nexport interface LiquidityPoolsParamsWithAmount extends LiquidityPoolsParams {\n /**\n * The float amount of tokens.\n */\n amount: string;\n}\n\nexport interface UserBalanceInfoDTO {\n lpAmount: string;\n rewardDebt: string;\n}\n\nexport interface UserBalanceInfo extends UserBalanceInfoDTO {\n userLiquidity: string;\n\n earned(poolInfo: PoolInfo, decimals?: number): string;\n}\n\nexport class UserBalance implements UserBalanceInfo {\n lpAmount: string;\n rewardDebt: string;\n\n constructor(userInfo: UserBalanceInfoDTO) {\n this.lpAmount = userInfo.lpAmount;\n this.rewardDebt = userInfo.rewardDebt;\n }\n\n get userLiquidity(): string {\n return convertIntAmountToFloat(this.lpAmount, SYSTEM_PRECISION).toFixed();\n }\n\n earned(poolInfo: PoolInfo, decimals?: number): string {\n const earned = getEarned(this.lpAmount, this.rewardDebt, poolInfo.accRewardPerShareP, poolInfo.p);\n if (decimals) {\n return convertIntAmountToFloat(earned, decimals).toFixed();\n }\n return earned;\n }\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { RawTransaction } from \"../../models\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalanceInfo } from \"./pool.model\";\n\nexport abstract class ChainPoolService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo>;\n\n abstract getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo>;\n\n abstract buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction>;\n}\n", "import Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { promiseWithTimeout, promiseWithTimeoutAndRetries } from \"../../../utils/utils\";\nimport { RawTransaction } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { Pool as PoolContract } from \"../../models/abi/types/Pool\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { promisify } from \"../../utils\";\nimport {\n ChainPoolService,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n UserBalance,\n UserBalanceInfo,\n} from \"../models\";\n\nexport class EvmPoolService extends ChainPoolService {\n chainType: ChainType.EVM = ChainType.EVM;\n private P = 52;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n try {\n userBalanceInfo = await promiseWithTimeout(\n this.getUserBalanceInfoByBatch(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n userBalanceInfo = await promiseWithTimeoutAndRetries(\n () => this.getUserBalanceInfoPerProperty(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](accountAddress).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const rewardDebt = await this.getPoolContract(token.poolAddress).methods.userRewardDebt(accountAddress).call();\n const lpAmount = await this.getPoolContract(token.poolAddress).methods.balanceOf(accountAddress).call();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n try {\n poolInfo = await promiseWithTimeout(\n this.getPoolInfoByBatch(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n poolInfo = await promiseWithTimeoutAndRetries(\n () => this.getPoolInfoPerProperty(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getPoolContract(token.poolAddress);\n\n const aValue = await poolContract.methods.a().call();\n const dValue = await poolContract.methods.d().call();\n const tokenBalance = await poolContract.methods.tokenBalance().call();\n const vUsdBalance = await poolContract.methods.vUsdBalance().call();\n const totalLpAmount = await poolContract.methods.totalSupply().call();\n const accRewardPerShareP = await poolContract.methods.accRewardPerShareP().call();\n\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n\n return {\n aValue,\n dValue,\n tokenBalance,\n vUsdBalance,\n totalLpAmount,\n accRewardPerShareP,\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.deposit(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.withdraw(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.claimRewards().encodeABI(),\n });\n }\n\n buildTxParams(params: LiquidityPoolsParams) {\n return {\n from: params.accountAddress,\n to: params.token.poolAddress,\n value: \"0\",\n };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getPoolContract(contractAddress: string): PoolContract {\n return this.getContract<PoolContract>(PoolAbi as AbiItem[], contractAddress);\n }\n}\n", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { convertFloatAmountToInt } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, LiquidityPoolsParams, LiquidityPoolsParamsWithAmount } from \"./models\";\nimport { getChainPoolService } from \"./index\";\n\nexport interface RawPoolTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for depositing tokens to Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for withdrawing tokens from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for claiming rewards from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawPoolTransactionBuilder implements RawPoolTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n if (b) {\n const provider = a as Provider;\n const approveData: ApproveParams = b;\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender: approveData.token.poolAddress,\n },\n provider\n );\n } else {\n const approveData: ApproveParams = a as ApproveParams;\n return this.tokenService.buildRawTransactionApprove({\n ...approveData,\n spender: approveData.token.poolAddress,\n });\n }\n }\n\n async deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, params.token.decimals).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionDeposit(params);\n }\n\n async withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, SYSTEM_PRECISION).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionWithdraw(params);\n }\n\n async claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction> {\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionClaimRewards(params);\n }\n}\n", "import { AnchorProvider, BN, Program, Provider, Spl, web3 } from \"@project-serum/anchor\";\nimport { Connection, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { RawTransaction } from \"../../models\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getConfigAccount,\n getUserDepositAccount,\n} from \"../../utils/sol/accounts\";\nimport { addUnitLimitAndUnitPriceToTx } from \"../../utils/sol/compute-budget\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\ninterface LPAccounts {\n mint: PublicKey;\n user: PublicKey;\n config: PublicKey;\n pool: PublicKey;\n bridgeAuthority: PublicKey;\n userDeposit: PublicKey;\n userToken: PublicKey;\n bridgeToken: PublicKey;\n}\n\ninterface LPTransactionData {\n accounts: LPAccounts;\n preInstructions: TransactionInstruction[];\n}\n\nexport class SolanaPoolService extends ChainPoolService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n private P = 48;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const provider = this.buildAnchorProvider(accountAddress);\n const bridge = this.getBridge(token.bridgeAddress, provider);\n const poolAccount = new PublicKey(token.poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n try {\n const userDepositAccount = await getUserDepositAccount(\n new PublicKey(accountAddress),\n poolAccountInfo.mint,\n bridge.programId\n );\n const { lpAmount, rewardDebt } = await bridge.account.userDeposit.fetch(userDepositAccount);\n return new UserBalance({\n lpAmount: lpAmount.toString(),\n rewardDebt: rewardDebt.toString(),\n });\n } catch (e) {\n return new UserBalance({ lpAmount: \"0\", rewardDebt: \"0\" });\n }\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const provider = this.buildAnchorProvider(token.bridgeAddress);\n const pool = await this.getBridge(token.bridgeAddress, provider).account.pool.fetch(token.poolAddress);\n const vUsdBalance = pool.vUsdBalance.toString();\n const tokenBalance = pool.tokenBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n return {\n dValue: pool.d.toString(),\n aValue: pool.a.toString(),\n totalLpAmount: pool.totalLpAmount.toString(),\n vUsdBalance,\n tokenBalance,\n accRewardPerShareP: pool.accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .deposit(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .withdraw(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods.claimRewards().accounts(accounts).preInstructions(preInstructions).transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n private async prepareDataForTransaction(params: LiquidityPoolsParams) {\n const provider = this.buildAnchorProvider(params.accountAddress);\n const bridge = this.getBridge(params.token.bridgeAddress, provider);\n\n const { accounts, preInstructions } = await this._getLPTransactionData(\n bridge,\n params.token.poolAddress,\n params.accountAddress,\n provider\n );\n return { bridge, accounts, preInstructions };\n }\n\n private getBridge(bridgeAddress: string, provider: Provider): Program<BridgeType> {\n return new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n private async _getLPTransactionData(\n bridge: Program<BridgeType>,\n poolAddress: string,\n account: string,\n provider: Provider\n ): Promise<LPTransactionData> {\n const user = new PublicKey(account);\n const configAccount = await getConfigAccount(bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const poolAccount = new PublicKey(poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const tokenMintAccount = poolAccountInfo.mint;\n const userToken = await getAssociatedAccount(user, tokenMintAccount);\n const bridgeTokenAccount = await getBridgeTokenAccount(tokenMintAccount, bridge.programId);\n const userDepositAccount = await getUserDepositAccount(user, tokenMintAccount, bridge.programId);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 1000000,\n }),\n ];\n\n try {\n await getTokenAccountData(userToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: tokenMintAccount,\n owner: user,\n associatedAccount: userToken,\n })\n .instruction();\n preInstructions.push(createUserTokenInstruction);\n }\n\n try {\n await bridge.account.userDeposit.fetch(userDepositAccount);\n } catch (error) {\n const instruction: TransactionInstruction = await bridge.methods\n .initDepositAccount()\n .accounts({\n mint: tokenMintAccount,\n user,\n userDeposit: userDepositAccount,\n })\n .instruction();\n preInstructions.push(instruction);\n }\n\n const accounts: LPAccounts = {\n mint: tokenMintAccount,\n user,\n config: configAccount,\n pool: poolAccount,\n bridgeAuthority: bridgeAuthority,\n userDeposit: userDepositAccount,\n userToken,\n bridgeToken: bridgeTokenAccount,\n };\n\n return { accounts, preInstructions };\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../../index\";\nimport {\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n PoolInfo,\n SdkError,\n TokenWithChainDetails,\n UserBalanceInfo,\n} from \"../../../models\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { PoolContract } from \"../../models/srb/pool-contract\";\nimport { ChainPoolService, UserBalance } from \"../models\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbPoolService extends ChainPoolService {\n chainType: ChainType.SRB = ChainType.SRB;\n private P = 48;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_user_deposit({ user: accountAddress })).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const userDeposit = result.unwrap();\n return new UserBalance({\n lpAmount: userDeposit.lp_amount.toString(),\n rewardDebt: userDeposit.reward_debt.toString(),\n });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_pool()).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const pool = result.unwrap();\n return {\n aValue: pool.a.toString(),\n accRewardPerShareP: pool.acc_reward_per_share_p.toString(),\n dValue: pool.d.toString(),\n tokenBalance: pool.token_balance.toString(),\n p: this.P,\n totalLpAmount: pool.total_lp_amount.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n imbalance: calculatePoolInfoImbalance({\n tokenBalance: pool.token_balance.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n }),\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.deposit({\n sender: params.accountAddress,\n amount: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.withdraw({\n sender: params.accountAddress,\n amount_lp: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.claim_rewards({\n sender: params.accountAddress,\n })\n ).toXDR();\n }\n\n private getContract(address: string, sender?: string): PoolContract {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new PoolContract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface SwappedFromVUsd {\n amount: u128;\n fee: u128;\n recipient: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface SwappedToVUsd {\n amount: u128;\n fee: u128;\n sender: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface Deposit {\n amount: u128;\n user: string;\n}\n\nexport interface Withdraw {\n amount: u128;\n user: string;\n}\n\nexport interface RewardsClaimed {\n amount: u128;\n user: string;\n}\n\nexport type Bridge = readonly [string];\nexport interface DataKey {\n tag: \"UserDeposit\";\n values: readonly [string];\n}\n\nexport interface Pool {\n a: u128;\n acc_reward_per_share_p: u128;\n admin_fee_amount: u128;\n admin_fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n can_deposit: boolean;\n can_withdraw: boolean;\n d: u128;\n decimals: u32;\n fee_share_bp: u128;\n reserves: u128;\n token: string;\n token_balance: u128;\n total_lp_amount: u128;\n v_usd_balance: u128;\n}\n\nexport interface UserDeposit {\n lp_amount: u128;\n reward_debt: u128;\n}\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface PoolContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n bridge,\n a,\n token,\n fee_share_bp,\n balance_ratio_min_bp,\n admin_fee_share_bp,\n }: {\n admin: string;\n bridge: string;\n a: u128;\n token: string;\n fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n admin_fee_share_bp: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n deposit: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw: (\n { sender, amount_lp }: { sender: string; amount_lp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_to_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_to_v_usd: (\n { user, amount, zero_fee }: { user: string; amount: u128; zero_fee: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a swap_from_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_from_v_usd: (\n {\n user,\n vusd_amount,\n receive_amount_min,\n zero_fee,\n }: {\n user: string;\n vusd_amount: u128;\n receive_amount_min: u128;\n zero_fee: boolean;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a claim_rewards transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_rewards: (\n { sender }: { sender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `admin`\n */\n set_fee_share: (\n { fee_share_bp }: { fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a adjust_total_lp_amount transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n adjust_total_lp_amount: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_balance_ratio_min_bp transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_balance_ratio_min_bp: (\n { balance_ratio_min_bp }: { balance_ratio_min_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_bridge: (\n { bridge }: { bridge: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin_fee_share: (\n { admin_fee_share_bp }: { admin_fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a claim_admin_fee transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_admin_fee: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a pending_reward transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `view`\n */\n pending_reward: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_pool transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Pool>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_bridge: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_user_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_user_deposit: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<UserDeposit>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class PoolContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n deposit: this.txFromJSON<Result<void>>,\n withdraw: this.txFromJSON<Result<void>>,\n swap_to_v_usd: this.txFromJSON<Result<u128>>,\n swap_from_v_usd: this.txFromJSON<Result<u128>>,\n claim_rewards: this.txFromJSON<Result<void>>,\n set_fee_share: this.txFromJSON<Result<void>>,\n adjust_total_lp_amount: this.txFromJSON<Result<void>>,\n set_balance_ratio_min_bp: this.txFromJSON<Result<void>>,\n stop_deposit: this.txFromJSON<Result<void>>,\n start_deposit: this.txFromJSON<Result<void>>,\n stop_withdraw: this.txFromJSON<Result<void>>,\n start_withdraw: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_bridge: this.txFromJSON<Result<void>>,\n set_admin: this.txFromJSON<Result<void>>,\n set_admin_fee_share: this.txFromJSON<Result<void>>,\n claim_admin_fee: this.txFromJSON<Result<void>>,\n pending_reward: this.txFromJSON<Result<u128>>,\n get_pool: this.txFromJSON<Result<Pool>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_bridge: this.txFromJSON<Result<string>>,\n get_user_deposit: this.txFromJSON<Result<UserDeposit>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { tronAddressToEthAddress } from \"../../bridge/utils\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { promisify } from \"../../utils\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\nexport class TronPoolService extends ChainPoolService {\n chainType: ChainType.TRX = ChainType.TRX;\n private P = 52;\n private web3: Web3 | undefined;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient, tronJsonRpc: string | undefined) {\n super();\n if (tronJsonRpc) {\n this.web3 = new Web3(tronJsonRpc);\n }\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n if (this.web3) {\n try {\n userBalanceInfo = await this.getUserBalanceInfoByBatch(this.web3, accountAddress, token);\n } catch (err) {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n } else {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n web3: Web3,\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const userAccount = tronAddressToEthAddress(accountAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](userAccount).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(accountAddress);\n }\n const contract = await this.getContract(token.poolAddress);\n const rewardDebt = (await contract.methods.userRewardDebt(accountAddress).call()).toString();\n const lpAmount = (await contract.methods.balanceOf(accountAddress).call()).toString();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n if (this.web3) {\n try {\n poolInfo = await this.getPoolInfoByBatch(this.web3, token);\n } catch (err) {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n } else {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(web3: Web3, token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(token.poolAddress);\n }\n const poolContract = await this.getContract(token.poolAddress);\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all([\n poolContract.methods.a().call(),\n poolContract.methods.d().call(),\n poolContract.methods.tokenBalance().call(),\n poolContract.methods.vUsdBalance().call(),\n poolContract.methods.totalSupply().call(),\n poolContract.methods.accRewardPerShareP().call(),\n ]);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"deposit(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"withdraw(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { accountAddress } = params;\n\n const parameter: SmartContractMethodParameter[] = [];\n const methodSignature = \"claimRewards()\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameter: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameter,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(PoolAbi, contractAddress);\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { fromSystemPrecision, getY, toSystemPrecision } from \"./index\";\n\nexport interface SwapPoolInfo {\n decimals: number;\n feeShare: string;\n poolInfo: PoolInfo;\n}\n\nexport interface SwapAndBridgeCalculationData {\n swapToVUsdCalcResult: SwapToVUsdCalcResult;\n swapFromVUsdCalcResult: SwapFromVUsdCalcResult;\n}\n\nexport interface SwapToVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInSystemPrecision: string;\n amountExcludingCommissionInSystemPrecision: string;\n}\nexport interface SwapFromVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInTokenPrecision: string;\n amountExcludingCommissionInTokenPrecision: string;\n}\n\nexport function swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsd(\n amountInTokenPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsd(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n return { swapToVUsdCalcResult, swapFromVUsdCalcResult };\n}\n\nexport function swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsdReverse(\n amountInTokenPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsdReverse(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n return {\n swapToVUsdCalcResult,\n swapFromVUsdCalcResult,\n };\n}\n\nfunction swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): SwapToVUsdCalcResult {\n const amountValue = Big(amount);\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountWithoutFee, decimals), poolInfo),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountValue, decimals), poolInfo),\n };\n}\n\nfunction calcSwapToVUsd(amountInSystemPrecision: Big, poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">): string {\n if (amountInSystemPrecision.eq(0)) {\n return \"0\";\n }\n const tokenBalance = Big(poolInfo.tokenBalance).plus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round().toFixed();\n}\n\nfunction swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): SwapFromVUsdCalcResult {\n if (Big(amount).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const amountValue = Big(amount);\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n const resultWithoutFee = Big(result).minus(fee).round();\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: resultWithoutFee.toFixed(),\n amountExcludingCommissionInTokenPrecision: result.toFixed(),\n };\n}\n\nfunction swapToVUsdReverse(\n amountInTokenPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapToVUsdCalcResult {\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountInTokenPrecision).times(reversedFeeShare);\n const amountWithFee = Big(amountInTokenPrecision).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountWithFee, decimals),\n poolInfo\n ),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountInTokenPrecision, decimals),\n poolInfo\n ),\n };\n}\n\nfunction calcSwapToVUsdReverse(amountInSystemPrecision: Big, poolInfo: PoolInfo): string {\n const tokenBalance = Big(poolInfo.tokenBalance).minus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round().toFixed();\n}\n\nfunction swapFromVUsdReverse(\n amountInSystemPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapFromVUsdCalcResult {\n if (Big(amountInSystemPrecision).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amountInSystemPrecision);\n const tokenBalance = getY(vUsdNewAmount.toFixed(), poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision.toFixed(), decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare);\n const amount = Big(amountWithoutFee).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: amount.round().toFixed(),\n amountExcludingCommissionInTokenPrecision: amountWithoutFee.toFixed(),\n };\n}\n", "import { Big } from \"big.js\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision, swapFromVUsd, swapToVUsd } from \"./index\";\n\nexport interface SendAmountDetails {\n sourceLPSwap: AmountImpact;\n destLPSwap: AmountImpact;\n}\n\nexport interface AmountImpact {\n fee: string;\n swap: string;\n}\n\nexport function getSendAmountDetails(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destToken: TokenWithChainDetails,\n destPool: PoolInfo\n): SendAmountDetails {\n const vUsd = swapToVUsd(amountInTokenPrecision, sourceToken, sourcePool);\n const vUsdInTokenPrecision = fromSystemPrecision(vUsd, sourceToken.decimals);\n const result = swapFromVUsd(vUsd, destToken, destPool);\n\n const swapToFeeInt = Big(amountInTokenPrecision).times(sourceToken.feeShare);\n const swapFromFeeInt = Big(result).div(Big(1).minus(destToken.feeShare)).minus(result);\n return {\n sourceLPSwap: {\n fee: convertIntAmountToFloat(swapToFeeInt, sourceToken.decimals)\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n Big(amountInTokenPrecision).minus(vUsdInTokenPrecision).minus(swapToFeeInt),\n sourceToken.decimals\n )\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n },\n destLPSwap: {\n fee: convertIntAmountToFloat(swapFromFeeInt, destToken.decimals)\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n fromSystemPrecision(vUsd, destToken.decimals).minus(result).minus(swapFromFeeInt),\n destToken.decimals\n )\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n },\n };\n}\n", "import { Connection, PublicKey, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"./utils\";\n\n/**\n * Contains usefully Solana methods\n */\nexport interface SolUtils {\n /**\n * Add memo to solana's transaction\n * @param transaction transaction to add memo\n * @param memo memo to add (28 char max)\n */\n addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void>;\n}\n\nexport class DefaultSolUtils implements SolUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void> {\n if (memo.length > 28) {\n throw new SdkError(\"InvalidArgumentException memo cannot be more than 28 characters\");\n }\n const connection = new Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL), \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const lastInstruction = message.instructions[message.instructions.length - 1];\n if (!lastInstruction?.keys) {\n throw new SdkError(\"Last instruction or its keys are invalid.\");\n }\n\n lastInstruction.keys.push({\n pubkey: new PublicKey(Buffer.from(memo)),\n isSigner: false,\n isWritable: false,\n });\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n }\n}\n", "import {\n Asset as StellarAsset,\n BASE_FEE,\n Horizon,\n Operation,\n Operation as StellarOperation,\n SorobanRpc,\n TimeoutInfinite,\n Transaction,\n TransactionBuilder,\n TransactionBuilder as StellarTransactionBuilder,\n contract,\n} from \"@stellar/stellar-sdk\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { TokenContract } from \"../../services/models/srb/token-contract\";\nimport { withExponentialBackoff } from \"../utils\";\n\nimport ContractClientOptions = contract.ClientOptions;\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\n\n/**\n * Contains usefully Soroban methods\n */\nexport interface SrbUtils {\n /**\n * Build change Trust line Tx\n * @param params see {@link TrustLineParams}\n * @returns xdr Tx\n */\n buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string>;\n\n /**\n * Get Balance Line information if exists\n * @param sender\n * @param tokenAddress\n */\n getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse>;\n\n /**\n * Simulate and check if Restore needed\n * @param xdrTx - restore\n * @param sourceAccount\n * @returns xdrTx restore transaction if it required after check\n */\n simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse>;\n\n /**\n * Confirm tx\n */\n confirmTx(hash: string, secondsToWait?: number): Promise<SorobanRpc.Api.GetTransactionResponse>;\n}\n\nexport interface TrustLineParams {\n /**\n * Float amount of tokens, default is Number.MAX_SAFE_INTEGER\n */\n limit?: string;\n sender: string;\n tokenAddress: string;\n}\n\nconst FEE = 100;\nconst SEND_TRANSACTION_TIMEOUT = 180;\n\nexport class DefaultSrbUtils implements SrbUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.sender);\n const tokenContract = this.getContract(TokenContract, params.tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n if (symbol === undefined || srbTokenAddress === undefined) {\n throw new SdkError(`Invalid token name format. Expected format 'symbol:srbTokenAddress'`);\n }\n const asset = new StellarAsset(symbol, srbTokenAddress);\n const changeTrust = StellarOperation.changeTrust({\n asset: asset,\n limit: params.limit,\n });\n\n return new StellarTransactionBuilder(stellarAccount, {\n fee: FEE.toString(10),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .addOperation(changeTrust)\n .setTimeout(SEND_TRANSACTION_TIMEOUT)\n .build()\n .toXDR();\n }\n\n async getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined> {\n const tokenContract = this.getContract(TokenContract, tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR);\n const stellar = new Horizon.Server(nodeRpcUrl);\n const stellarAccount = await stellar.loadAccount(sender);\n const balanceInfo = stellarAccount.balances;\n\n return balanceInfo.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n }\n\n async submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const transaction = StellarTransactionBuilder.fromXDR(\n xdrTx,\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR)\n );\n return await stellar.submitTransaction(transaction);\n }\n\n async simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const account = await server.getAccount(sourceAccount);\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n const simulation = await server.simulateTransaction(transaction);\n if (SorobanRpc.Api.isSimulationRestore(simulation)) {\n return new TransactionBuilder(account, {\n fee: (+BASE_FEE + +simulation.restorePreamble.minResourceFee).toString(),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .setSorobanData(simulation.restorePreamble.transactionData.build())\n .addOperation(Operation.restoreFootprint({}))\n .setTimeout(TimeoutInfinite)\n .build()\n .toXDR();\n }\n return undefined;\n }\n\n async sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n return server.sendTransaction(transaction);\n }\n\n async confirmTx(hash: string, secondsToWait = 15): Promise<SorobanRpc.Api.GetTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const getTransactionResponseAll = await withExponentialBackoff(\n () => server.getTransaction(hash),\n (resp) => resp.status === SorobanRpc.Api.GetTransactionStatus.NOT_FOUND,\n secondsToWait\n );\n\n if (getTransactionResponseAll.length === 0) {\n throw new SdkError(\"No transaction responses found.\");\n }\n\n const lastResponse = getTransactionResponseAll[getTransactionResponseAll.length - 1];\n if (!lastResponse) {\n throw new SdkError(\"Unexpected error: last response is undefined.\");\n }\n\n return lastResponse;\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string): T {\n const config: ContractClientOptions = {\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u32 = contract.u32;\nimport i128 = contract.i128;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\nexport const Errors = {};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface TokenContract {\n /**\n * Construct and simulate a allowance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the allowance for `spender` to transfer from `from`.\n *\n * The amount returned is the amount that spender is allowed to transfer\n * out of from's balance. When the spender transfers amounts, the allowance\n * will be reduced by the amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address spending the tokens held by `from`.\n */\n allowance: (\n { from, spender }: { from: string; spender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns true if `id` is authorized to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address for which token authorization is being checked.\n */\n authorized: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<boolean>>;\n\n /**\n * Construct and simulate a approve transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Set the allowance by `amount` for `spender` to transfer/burn from\n * `from`.\n *\n * The amount set is the amount that spender is approved to transfer out of\n * from's balance. The spender will be allowed to transfer amounts, and\n * when an amount is transferred the allowance will be reduced by the\n * amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address being authorized to spend the tokens held by\n * `from`.\n * * `amount` - The tokens to be made available to `spender`.\n * * `expiration_ledger` - The ledger number where this allowance expires. Cannot\n * be less than the current ledger number unless the amount is being set to 0.\n * An expired entry (where expiration_ledger < the current ledger number)\n * should be treated as a 0 amount allowance.\n *\n * # Events\n *\n * Emits an event with topics `[\"approve\", from: Address,\n * spender: Address], data = [amount: i128, expiration_ledger: u32]`\n */\n approve: (\n {\n from,\n spender,\n amount,\n expiration_ledger,\n }: {\n from: string;\n spender: string;\n amount: i128;\n expiration_ledger: u32;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a balance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the balance of `id`.\n *\n * # Arguments\n *\n * * `id` - The address for which a balance is being queried. If the\n * address has no existing balance, returns 0.\n */\n balance: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a burn transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a burn_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`, consuming the allowance of `spender`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * The spender will be allowed to burn the amount from from's balance, if\n * the amount is less than or equal to the allowance that the spender has\n * on the from's balance. The spender's allowance on from's balance will be\n * reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the burn, and having its allowance\n * consumed during the burn.\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn_from: (\n { spender, from, amount }: { spender: string; from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a clawback transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Clawback `amount` from `from` account. `amount` is burned in the\n * clawback process.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance from which the clawback will\n * take tokens.\n * * `amount` - The amount of tokens to be clawed back.\n *\n * # Events\n *\n * Emits an event with topics `[\"clawback\", admin: Address, to: Address],\n * data = [amount: i128]`\n */\n clawback: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a decimals transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the number of decimals used to represent amounts of this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n decimals: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<u32>>;\n\n /**\n * Construct and simulate a mint transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Mints `amount` to `to`.\n *\n * # Arguments\n *\n * * `to` - The address which will receive the minted tokens.\n * * `amount` - The amount of tokens to be minted.\n *\n * # Events\n *\n * Emits an event with topics `[\"mint\", admin: Address, to: Address], data\n * = [amount: i128]`\n */\n mint: (\n { to, amount }: { to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a name transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the name for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n name: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets the administrator to the specified address `new_admin`.\n *\n * # Arguments\n *\n * * `new_admin` - The address which will henceforth be the administrator\n * of this token contract.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_admin\", admin: Address], data =\n * [new_admin: Address]`\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the admin of the contract.\n *\n * # Panics\n *\n * If the admin is not set.\n */\n admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets whether the account is authorized to use its balance. If\n * `authorized` is true, `id` should be able to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address being (de-)authorized.\n * * `authorize` - Whether or not `id` can use its balance.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_authorized\", id: Address], data =\n * [authorize: bool]`\n */\n set_authorized: (\n { id, authorize }: { id: string; authorize: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a symbol transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the symbol for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n symbol: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a transfer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer: (\n { from, to, amount }: { from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a transfer_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`, consuming the allowance that\n * `spender` has on `from`'s balance. Authorized by spender\n * (`spender.require_auth()`).\n *\n * The spender will be allowed to transfer the amount from from's balance\n * if the amount is less than or equal to the allowance that the spender\n * has on the from's balance. The spender's allowance on from's balance\n * will be reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the transfer, and having its\n * allowance consumed during the transfer.\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer_from: (\n { spender, from, to, amount }: { spender: string; from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class TokenContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL\",\n \"AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB\",\n \"AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA\",\n \"AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=\",\n \"AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==\",\n \"AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ\",\n \"AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA\",\n \"AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=\",\n \"AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==\",\n \"AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==\",\n \"AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n allowance: this.txFromJSON<i128>,\n authorized: this.txFromJSON<boolean>,\n approve: this.txFromJSON<null>,\n balance: this.txFromJSON<i128>,\n burn: this.txFromJSON<null>,\n burn_from: this.txFromJSON<null>,\n clawback: this.txFromJSON<null>,\n decimals: this.txFromJSON<u32>,\n mint: this.txFromJSON<null>,\n name: this.txFromJSON<string>,\n set_admin: this.txFromJSON<null>,\n admin: this.txFromJSON<string>,\n set_authorized: this.txFromJSON<null>,\n symbol: this.txFromJSON<string>,\n transfer: this.txFromJSON<null>,\n transfer_from: this.txFromJSON<null>,\n };\n}\n", "import { AllbridgeCoreSdkOptions } from \"../index\";\nimport { NodeRpcUrlsConfig } from \"../services\";\nimport { DefaultSolUtils, SolUtils } from \"./sol\";\nimport { DefaultSrbUtils, SrbUtils } from \"./srb\";\n\n/**\n * Contains usefully methods\n */\nexport interface Utils {\n srb: SrbUtils;\n sol: SolUtils;\n}\n\nexport class DefaultUtils implements Utils {\n srb: SrbUtils;\n sol: SolUtils;\n\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions) {\n this.srb = new DefaultSrbUtils(nodeRpcUrlsConfig, params);\n this.sol = new DefaultSolUtils(nodeRpcUrlsConfig, params);\n }\n}\n", "export {\n ApproveParams as BridgeApproveParams,\n BaseSendParams,\n CheckAllowanceParams,\n GetAllowanceParams,\n GetTokenBalanceParams,\n SendParams,\n SwapParams,\n GetNativeTokenBalanceParams,\n} from \"../services/bridge/models/bridge.model\";\nexport { BridgeService } from \"../services/bridge/index\";\nexport { CctpParams, CctpDomains } from \"../services/bridge/sol\";\nexport { LiquidityPoolService } from \"../services/liquidity-pool/index\";\nexport {\n Messenger,\n TransferStatusResponse,\n BridgeTransaction,\n GasBalanceResponse,\n CheckAddressResponse,\n AddressStatus,\n} from \"../client/core-api/core-api.model\";\nexport { RawBridgeTransactionBuilder } from \"../services/bridge/raw-bridge-transaction-builder\";\nexport { RawPoolTransactionBuilder } from \"../services/liquidity-pool/raw-pool-transaction-builder\";\nexport {\n PoolInfo,\n TokenWithChainDetails,\n TransferTime,\n TxCostAmount,\n MessengerTransferTime,\n} from \"../tokens-info/tokens-info.model\";\nexport {\n UserBalanceInfo,\n UserBalanceInfoDTO,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n ApproveParams as LiquidityPoolsApproveParams,\n CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams,\n GetAllowanceParams as LiquidityPoolsGetAllowanceParams,\n} from \"../services/liquidity-pool/models/pool.model\";\nexport * from \"../services/models/index\";\nexport {\n SwapAndBridgeCalculationData,\n SwapFromVUsdCalcResult,\n SwapToVUsdCalcResult,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nexport { SendAmountDetails, AmountImpact } from \"../utils/calculation/swap-and-bridge-details\";\nexport { ChainDetailsMap, ChainDetailsWithTokens } from \"../tokens-info\";\nexport { Utils } from \"../utils\";\nexport { SrbUtils, TrustLineParams } from \"../utils/srb\";\nexport { SolUtils } from \"../utils/sol\";\nexport * from \"../exceptions\";\nexport { ChainSymbol, ChainType } from \"../chains/chain.enums\";\nexport { AdditionalBasicChainProperties, BasicChainProperties } from \"../chains/models\";\n\nexport enum FeePaymentMethod {\n /**\n * The fee is paid in the native currency of the source chain.\n */\n WITH_NATIVE_CURRENCY = \"native\",\n\n /**\n * The fee is paid with the stablecoin token.\n */\n WITH_STABLECOIN = \"stablecoin\",\n}\n\nexport interface AmountsAndGasFeeOptions {\n /**\n * The floating point amount of tokens to be sent (not including gas fee).\n */\n amountToSendFloat: string;\n\n /**\n * The floating point amount of tokens to be received.\n */\n amountToBeReceivedFloat: string;\n\n /**\n * Available ways to pay the transfer gas fee and gas fee amount.\n */\n gasFeeOptions: GasFeeOptions;\n}\n\ntype GasFeeOptionsType = {\n [key in FeePaymentMethod]?: AmountFormatted;\n};\n\n/**\n * Describes available options of paying the gas fee and the amount to pay when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains the amount in the smallest denomination of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains the amount in the smallest denomination of the source token\n */\nexport interface GasFeeOptions extends GasFeeOptionsType {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;\n [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;\n}\n\n/**\n * Define the type of amount data<p/>\n * Example:<p/>\n * \"1500000\" USDC {@link AmountFormat.INT} = \"1.5\" USDC {@link AmountFormat.FLOAT}, if USDC.decimals = 6\n */\nexport enum AmountFormat {\n /**\n * denominated in the smallest unit of the source token\n */\n INT = \"int\",\n /**\n * denominated in the unit of the source token\n */\n FLOAT = \"float\",\n}\n\n/**\n * Describes the same amount in two variation formats.\n *\n * For {@link AmountFormat.INT} value contains the amount in the smallest denomination\n *\n * For {@link AmountFormat.FLOAT} value contains the amount in tokens denomination\n */\nexport type AmountFormatted = {\n [key in AmountFormat]: string;\n};\n\n/**\n * Describes MAX extra gas value can to be passed when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains {@link ExtraGasMaxLimit} the amount of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains {@link ExtraGasMaxLimit} the amount of the source token\n */\nexport type ExtraGasMaxLimits = {\n [key in FeePaymentMethod]?: ExtraGasMaxLimit;\n};\n\n/**\n * Describes the same MAX extra gas amount.\n */\nexport type ExtraGasMaxLimit = AmountFormatted;\n\n/**\n * Provide extra gas information\n */\nexport interface ExtraGasMaxLimitResponse {\n /**\n * See {@link ExtraGasMaxLimits}\n */\n extraGasMax: ExtraGasMaxLimits;\n /**\n * Information due to destination chain\n */\n destinationChain: {\n /**\n * gasAmountMax maximum amount you can receive as extra gas on dest chain\n */\n gasAmountMax: ExtraGasMaxLimit;\n /**\n * cost of swap tx on chain\n */\n swap: AmountFormatted;\n /**\n * cost of send tx on chain\n */\n transfer: AmountFormatted;\n };\n /**\n * Exchange rate\n */\n exchangeRate: string;\n /**\n * Source native token price\n */\n sourceNativeTokenPrice: string;\n}\n\n/**\n * Provide pending status information\n */\nexport interface PendingStatusInfoResponse {\n /**\n * Number of pending transactions\n */\n pendingTxs: number;\n /**\n * Total amount of pending transactions\n */\n pendingAmount: AmountFormatted;\n /**\n * The amount of tokens can be received as a result of transfer considering pending transactions\n */\n estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { AmountFormat, AmountFormatted } from \"../../models\";\nimport { convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { GetNativeTokenBalanceParams } from \"../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../index\";\nimport { Provider, RawTransaction, TransactionResponse } from \"../models\";\nimport { EvmTokenService } from \"./evm\";\nimport {\n ApproveParams,\n ApproveParamsDto,\n CheckAllowanceParams,\n CheckAllowanceParamsDto,\n GetAllowanceParams,\n GetTokenBalanceParams,\n} from \"./models\";\nimport { ChainTokenService } from \"./models/token\";\nimport { SolanaTokenService } from \"./sol\";\nimport { SrbTokenService } from \"./srb\";\nimport { TronTokenService } from \"./trx\";\n\nexport interface TokenService {\n getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string>;\n\n checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean>;\n\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction>;\n\n getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string>;\n\n getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted>;\n}\n\nexport class DefaultTokenService implements TokenService {\n constructor(\n readonly api: AllbridgeCoreClient,\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions\n ) {}\n\n async getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string> {\n const allowanceInt = await this.getChainTokenService(params.token.chainSymbol, params.owner, provider).getAllowance(\n params\n );\n return convertIntAmountToFloat(allowanceInt, params.token.decimals).toFixed();\n }\n\n async checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n return this.getChainTokenService(params.token.chainSymbol, params.owner, provider).checkAllowance(\n this.prepareCheckAllowanceParams(params)\n );\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(approveData.token.chainSymbol, approveData.owner, provider).approve(\n this.prepareApproveParams(approveData)\n );\n }\n\n async buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(\n approveData.token.chainSymbol,\n approveData.owner,\n provider\n ).buildRawTransactionApprove(this.prepareApproveParams(approveData));\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n const tokenBalance = await this.getChainTokenService(\n params.token.chainSymbol,\n params.account,\n provider\n ).getTokenBalance(params);\n if (params.token.decimals) {\n return convertIntAmountToFloat(tokenBalance, params.token.decimals).toFixed();\n }\n return tokenBalance;\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n const tokenBalance = await this.getChainTokenService(\n params.chainSymbol,\n params.account,\n provider\n ).getNativeTokenBalance(params);\n return {\n [AmountFormat.INT]: tokenBalance,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n tokenBalance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed(),\n };\n }\n\n private getChainTokenService(chainSymbol: string, ownerAddress: string, provider?: Provider): ChainTokenService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmTokenService(provider as unknown as Web3, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmTokenService(new Web3(nodeRpcUrl), this.api);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronTokenService(provider, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n tronWeb.setAddress(ownerAddress);\n return new TronTokenService(tronWeb, this.api);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaTokenService(nodeRpcUrl, this.api);\n }\n case ChainType.SRB: {\n return new SrbTokenService(this.nodeRpcUrlsConfig, this.params, this.api);\n }\n }\n }\n\n prepareCheckAllowanceParams(params: CheckAllowanceParams): CheckAllowanceParamsDto {\n return {\n ...params,\n amount: convertFloatAmountToInt(params.amount, params.token.decimals),\n };\n }\n\n private prepareApproveParams(approveData: ApproveParams): ApproveParamsDto {\n return {\n tokenAddress: approveData.token.tokenAddress,\n owner: approveData.owner,\n spender: approveData.spender,\n chainSymbol: approveData.token.chainSymbol,\n amount: approveData.amount == undefined ? undefined : Big(approveData.amount).toFixed(),\n };\n }\n}\n", "import BN from \"bn.js\";\nimport erc20abi from \"erc-20-abi\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainSymbol, ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction } from \"../../models\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { amountToHex } from \"../../utils/index\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nconst USDT_TOKEN_ADDRESS = \"0xdac17f958d2ee523a2206206994597c13d831ec7\";\nconst POLYGON_GAS_LIMIT = 100_000;\n\nexport class EvmTokenService extends ChainTokenService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const tokenAddress = params.token.tokenAddress;\n const owner = params.owner;\n const spender = params.spender;\n return this.getAllowanceByTokenAddress(tokenAddress, owner, spender);\n }\n\n getAllowanceByTokenAddress(tokenAddress: string, owner: string, spender: string): Promise<string> {\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n return tokenContract.methods.allowance(owner, spender).call();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n return await this.getContract(erc20abi as AbiItem[], params.token.tokenAddress)\n .methods.balanceOf(params.account)\n .call();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return await this.web3.eth.getBalance(params.account);\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n if (this.isUsdt(params.tokenAddress)) {\n const allowance = await this.getAllowanceByTokenAddress(params.tokenAddress, params.owner, params.spender);\n if (allowance !== \"0\") {\n const rawTransaction = await this.buildRawTransactionApprove({\n ...params,\n amount: \"0\",\n });\n await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n }\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n\n isUsdt(tokenAddress: string): boolean {\n return tokenAddress.toLowerCase() === USDT_TOKEN_ADDRESS;\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n\n const approveMethod = await tokenContract.methods.approve(\n spender,\n amount == undefined ? MAX_AMOUNT : amountToHex(amount)\n );\n\n return {\n from: owner,\n to: tokenAddress,\n value: \"0\",\n data: approveMethod.encodeABI(),\n };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction, chainSymbol: string) {\n const transactionConfig: TransactionConfig = rawTransaction as TransactionConfig;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n if ((chainSymbol as ChainSymbol) === ChainSymbol.POL) {\n transactionConfig.gas = POLYGON_GAS_LIMIT;\n } else {\n transactionConfig.gas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n }\n const { transactionHash } = await this.web3.eth.sendTransaction({ ...transactionConfig, ...feeOptions });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n}\n", "import { Big } from \"big.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { ApproveParamsDto, CheckAllowanceParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"./token.model\";\n\nexport abstract class ChainTokenService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getTokenBalance(params: GetTokenBalanceParams): Promise<string>;\n\n abstract getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string>;\n\n abstract getAllowance(params: GetAllowanceParamsDto): Promise<string>;\n\n async checkAllowance(params: CheckAllowanceParamsDto): Promise<boolean> {\n const allowance = await this.getAllowance(params);\n return Big(allowance).gte(Big(params.amount));\n }\n\n abstract approve(params: ApproveParamsDto): Promise<TransactionResponse>;\n\n abstract buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction>;\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { ApproveParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport class SolanaTokenService extends ChainTokenService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const { account, token } = params;\n try {\n const associatedAccount = await getAssociatedAccount(new PublicKey(account), new PublicKey(token.tokenAddress));\n const accountData = await getTokenAccountData(associatedAccount, this.buildAnchorProvider(account));\n return accountData.amount.toString();\n } catch (e) {\n if (e instanceof Error) {\n e.message.startsWith(\"Account does not exist\");\n return \"0\";\n }\n throw e;\n }\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (\n await this.buildAnchorProvider(params.account).connection.getBalance(new PublicKey(params.account))\n ).toString();\n }\n}\n", "import { Horizon, NotFoundError } from \"@stellar/stellar-sdk\";\nimport { Chains } from \"../../../chains\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType, SdkError } from \"../../../index\";\nimport { GetTokenBalanceParams, MethodNotSupportedError, TransactionResponse } from \"../../../models\";\nimport { convertFloatAmountToInt } from \"../../../utils/calculation\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { ChainTokenService } from \"../models\";\n\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\nimport BalanceLineNative = Horizon.HorizonApi.BalanceLineNative;\n\nexport class SrbTokenService extends ChainTokenService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n getAllowance(): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n if (!params.token.originTokenAddress) {\n throw new SdkError(\"OriginTokenAddress missing\");\n }\n const [symbol, srbTokenAddress] = params.token.originTokenAddress.split(\":\");\n\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n let stellarAccount;\n try {\n stellarAccount = await stellar.loadAccount(params.account);\n } catch (err) {\n if (err instanceof NotFoundError) {\n return \"0\";\n }\n throw err;\n }\n const balances = stellarAccount.balances;\n\n const balanceInfo = balances.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n if (balanceInfo?.balance) {\n return convertFloatAmountToInt(\n balanceInfo.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.token.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.account);\n const balances = stellarAccount.balances;\n\n const nativeBalance = balances.find((balance): balance is BalanceLineNative => balance.asset_type === \"native\");\n if (nativeBalance?.balance) {\n return convertFloatAmountToInt(\n nativeBalance.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n approve(): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol_\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { ChainType, GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport ERC20Abi from \"../../models/abi/ERC20.json\";\nimport { amountToHex } from \"../../utils\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport class TronTokenService extends ChainTokenService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const {\n token: { tokenAddress },\n owner,\n } = params;\n const tokenContract = await this.getContract(tokenAddress);\n const allowance = await tokenContract.methods.allowance(owner, params.spender).call();\n return allowance.toString();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const contract = await this.getContract(params.token.tokenAddress);\n const balance = await contract.balanceOf(params.account).call();\n return balance.toString();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (await this.tronWeb.trx.getBalance(params.account)).toString();\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const amountHex = amount == undefined ? MAX_AMOUNT : amountToHex(amount);\n\n const parameter = [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountHex },\n ];\n const value = \"0\";\n const methodSignature = \"approve(address,uint256)\";\n return this.buildRawTransaction(tokenAddress, methodSignature, parameter, value, owner);\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(ERC20Abi, contractAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n"],
5
- "mappings": "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,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,oBACX,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,UACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,UACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,eACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,cACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,iCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,gCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,kBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,uBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,CACF,EACA,SAAU,CACR,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,aACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,UACN,KAAM,MACR,EACA,CACE,KAAM,aACN,KAAM,MACR,EACA,CACE,KAAM,cACN,KAAM,MACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,mBACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CAAC,CACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,eACN,KAAM,KACR,EACA,CACE,KAAM,cACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,IACR,EACA,CACE,KAAM,gBACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,qBACN,KAAM,MACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,cACN,KAAM,WACR,EACA,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,CACE,KAAM,0BACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,WACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,MACR,EACA,CACE,KAAM,WACR,EACA,CACE,KAAM,UACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,SACR,EACA,CACE,KAAM,UACR,EACA,CACE,KAAM,MACR,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,CACE,KAAM,IACN,KAAM,4BACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,wBACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,mBACN,IAAK,gDACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,2BACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,EACA,CACE,KAAM,KACN,KAAM,oBACN,IAAK,oBACP,EACA,CACE,KAAM,KACN,KAAM,aACN,IAAK,aACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,cACP,EACA,CACE,KAAM,KACN,KAAM,iBACN,IAAK,yBACP,EACA,CACE,KAAM,KACN,KAAM,uBACN,IAAK,wBACP,EACA,CACE,KAAM,KACN,KAAM,6BACN,IAAK,8BACP,EACA,CACE,KAAM,KACN,KAAM,kBACN,IAAK,iBACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,CACF,CACF,ECviGO,IAAMC,GAAkB,CAC7B,QAAS,QACT,KAAM,cACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,uBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,8BACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,CACF,EACA,SAAU,CACR,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,2BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,OACN,KAAM,KACR,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,CACE,KAAM,0BACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,2BACN,KAAM,WACR,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,CACE,KAAM,IACN,KAAM,eACN,IAAK,mBACP,CACF,CACF,ECpsCA,IAAAC,GAAuC,iCAGvCC,GAAgB,qBAChBC,GAAiB,mBAOjB,eAAsBC,GAAoBC,EAAoBC,EAA+C,CAC3G,OAAO,MAAM,OAAI,MAAMA,CAAQ,EAAE,QAAQ,MAAM,MAAMD,CAAO,CAC9D,CAEA,eAAsBE,GACpBC,EACAC,EACAC,EACiB,CACjB,IAAMC,EAAkB,MAAMF,EAAO,QAAQ,KAAK,MAAMC,CAAW,EAC7DE,EAA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",
4
+ "sourcesContent": ["import { BigSource } from \"big.js\";\nimport { AdditionalBasicChainProperties } from \"./chains/models\";\nimport { mainnet } from \"./configs\";\nimport {\n AmountFormat,\n AmountFormatted,\n AmountsAndGasFeeOptions,\n BridgeService,\n ChainDetailsMap,\n CheckAddressResponse,\n ExtraGasMaxLimitResponse,\n GasBalanceResponse,\n GasFeeOptions,\n GetNativeTokenBalanceParams,\n GetTokenBalanceParams,\n LiquidityPoolService,\n Messenger,\n PendingStatusInfoResponse,\n PoolInfo,\n Provider,\n SendAmountDetails,\n SwapAndBridgeCalculationData,\n TokenWithChainDetails,\n TransferStatusResponse,\n} from \"./models\";\nimport { AllbridgeCoreSdkService, NodeRpcUrlsConfig } from \"./services\";\nimport { CctpParams } from \"./services/bridge/sol\";\nimport { DefaultUtils, Utils } from \"./utils\";\n\nexport * from \"./configs\";\nexport * from \"./models\";\n\nexport interface AllbridgeCoreSdkOptions {\n coreApiUrl: string;\n /**\n * A set of query parameters to be added to all requests to the Core API.\n */\n coreApiQueryParams?: Record<string, string>;\n /**\n * A set of headers to be added to all requests to the Core API.\n */\n coreApiHeaders?: Record<string, string>;\n /**\n * Jupiter v6 Swap Api\n */\n jupiterUrl: string;\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n sorobanNetworkPassphrase: string;\n /**\n * Optional. Will be used in methods</br>\n * {@link LiquidityPoolService.getPoolInfoFromChain} and {@link LiquidityPoolService.getAmountToBeWithdrawn}</br>\n * to fetch information from the blockchain with fewer HTTP requests using JSON-RPC API\n */\n tronJsonRpc?: string;\n cctpParams: CctpParams;\n /**\n * The number of seconds that pool information taken from the chain will be cached.\n *\n * @type {number}\n */\n cachePoolInfoChainSec: number;\n\n /**\n * @Internal\n * Optional additional properties to merge with the default properties.\n */\n additionalChainsProperties?: Record<string, AdditionalBasicChainProperties>;\n}\n\n/**\n * Type representing RPC node URLs for different blockchain chains.</br>\n * Provide node RPC URL for chain connection you intend to communicate with</br>\n * - required for SOL, TRX chains</br>\n * - optional for EVM chains -- you can interact by passing a {@link Provider} that will be used to communicate with the chain</br>\n * @typedef {Record<string, string>} NodeRpcUrls\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {string} rpcUrl - The RPC node URL for the specified chain.\n */\nexport type NodeRpcUrls = Record<string, string>;\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nexport interface NodeUrlsConfig {\n solanaRpcUrl: string;\n tronRpcUrl: string;\n}\n\n/**\n * @Deprecated Use {@link NodeRpcUrls}\n */\nfunction isNodeUrlsConfig(nodeUrls: NodeUrlsConfig | NodeRpcUrls): nodeUrls is NodeUrlsConfig {\n return \"solanaRpcUrl\" in nodeUrls;\n}\n\nexport class AllbridgeCoreSdk {\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n utils: Utils;\n\n private service: AllbridgeCoreSdkService;\n\n /**\n * Initializes the SDK object.\n * @param nodeUrls node rpc urls for full functionality\n * @param params\n * Optional.\n * If not defined, the default {@link mainnet} parameters are used.\n */\n constructor(nodeUrls: NodeUrlsConfig | NodeRpcUrls, params: AllbridgeCoreSdkOptions = mainnet) {\n let nodeRpcUrlsConfig: NodeRpcUrlsConfig;\n if (isNodeUrlsConfig(nodeUrls)) {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig({ SOL: nodeUrls.solanaRpcUrl, TRX: nodeUrls.tronRpcUrl });\n } else {\n nodeRpcUrlsConfig = new NodeRpcUrlsConfig(nodeUrls);\n }\n this.service = new AllbridgeCoreSdkService(nodeRpcUrlsConfig, params);\n this.bridge = this.service.bridge;\n this.pool = this.service.pool;\n this.utils = new DefaultUtils(nodeRpcUrlsConfig, params);\n this.params = params;\n }\n\n /**\n * Returns {@link ChainDetailsMap} containing a list of supported tokens groped by chain.\n *\n * @param type - A string value which specifies ChainDetailsMap to retrieve.\n * Can be either 'swap' for send or 'pool' for liquidity pools setup.\n * Defaults to 'swap'.\n */\n async chainDetailsMap(type: \"swap\" | \"pool\" = \"swap\"): Promise<ChainDetailsMap> {\n return this.service.chainDetailsMap(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens}.\n *\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n * @returns A promise that resolves to an array of {@link TokenWithChainDetails}.\n */\n async tokens(type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokens(type);\n }\n\n /**\n * Returns a list of supported {@link TokenWithChainDetails | tokens} on the selected chain.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param type - A string value which specifies a set of tokens to retrieve.\n * Can be either 'swap' for tokens to send or 'pool' for liquidity pools operations.\n * Defaults to 'swap'.\n */\n async tokensByChain(chainSymbol: string, type: \"swap\" | \"pool\" = \"swap\"): Promise<TokenWithChainDetails[]> {\n return this.service.tokensByChain(chainSymbol, type);\n }\n\n /**\n * Fetches information about tokens transfer by chosen chainSymbol and transaction Id from the Allbridge Core API.\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param txId\n */\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.service.getTransferStatus(chainSymbol, txId);\n }\n\n /**\n * Get gas balance\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param address\n */\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.service.getGasBalance(chainSymbol, address);\n }\n\n /**\n * Check address and show gas balance\n * @Deprecated\n * @param chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @param recipientAddress\n * @param tokenAddress\n */\n async checkAddress(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n chainSymbol: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n recipientAddress: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenAddress?: string\n ): Promise<CheckAddressResponse> {\n return await this.service.checkAddress();\n }\n\n /**\n * Returns information about pending transactions for the same destination chain and the amount of tokens can be received as a result of transfer considering pending transactions.\n * @param amount the amount of tokens that will be sent\n * @param amountFormat amount format\n * @param sourceToken selected token transfer from\n * @param destToken selected token transfer to\n * @returns range of possible amount based on already pending transactions\n */\n async getPendingStatusInfo(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<PendingStatusInfoResponse> {\n return this.service.getPendingStatusInfo(amount, amountFormat, sourceToken, destToken);\n }\n\n /**\n * Get token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n return this.service.getTokenBalance(params, provider);\n }\n\n /**\n * Get native (gas) token balance\n * @param params\n * @param provider\n * @returns Token balance\n */\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n return this.service.getNativeTokenBalance(params, provider);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee from the initial amount that is charged when swapping from the selected source chain.\n * (Does not include fee related to the destination chain. Does not include gas fee)\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @returns fee percent\n */\n async calculateFeePercentOnSourceChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnSourceChain(amountFloat, sourceChainToken);\n }\n\n /**\n * @Deprecated\n * Calculates the percentage of fee that is charged when swapping to the selected destination chain. The destination chain fee percent applies to the amount after the source chain fee.\n * (Does not include fee related to the source chain. Does not include gas fee)\n * @see {@link calculateFeePercentOnSourceChain}\n * @param amountFloat initial amount of tokens to swap\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns fee percent\n */\n async calculateFeePercentOnDestinationChain(\n amountFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<number> {\n return this.service.calculateFeePercentOnDestinationChain(amountFloat, sourceChainToken, destinationChainToken);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToBeReceivedAndGasFeeOptions(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * and fetches {@link GasFeeOptions} which contains available ways to pay the gas fee.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n */\n async getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<AmountsAndGasFeeOptions> {\n return this.service.getAmountToSendAndGasFeeOptions(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToBeReceived(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToBeReceived(amountToSendFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on actual blockchain pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToBeReceivedFromChain(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToBeReceivedFromChain(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to be received as a result of transfer based on passed pool state.\n * @param amountToSendFloat the amount of tokens that will be sent\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToBeReceivedFromPools(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n */\n async getAmountToSend(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger\n ): Promise<string> {\n return this.service.getAmountToSend(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on actual blockchain pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger Optional. selected messenger\n * @param sourceProvider Optional. source chain Provider\n * @param destinationProvider Optional. destination chain Provider\n */\n async getAmountToSendFromChain(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n * Optional.\n * The {@link Messenger.ALLBRIDGE}, {@link Messenger.WORMHOLE} by default.\n */\n messenger?: Messenger,\n sourceProvider?: Provider,\n destinationProvider?: Provider\n ): Promise<string> {\n return this.service.getAmountToSendFromChain(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger,\n sourceProvider,\n destinationProvider\n );\n }\n\n /**\n * Calculates the amount of tokens to send based on requested tokens amount be received as a result of transfer based on passed pool state.\n * @param amountToBeReceivedFloat the amount of tokens that should be received\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param sourcePool source token pool state\n * @param destinationPool destination token pool state\n * @param messenger Optional. selected messenger\n */\n getAmountToSendFromPools(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n return this.service.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool,\n messenger\n );\n }\n\n /**\n * Fetches possible ways to pay the transfer gas fee.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @param messenger\n * @returns {@link GasFeeOptions}\n */\n async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return this.service.getGasFeeOptions(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets the average time in ms to complete a transfer for given tokens and messenger.\n * @param sourceChainToken selected token on the source chain.\n * @param destinationChainToken selected token on the destination chain.\n * @param messenger\n * @returns Average transfer time in milliseconds or null if a given combination of tokens and messenger is not supported.\n */\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return this.service.getAverageTransferTime(sourceChainToken, destinationChainToken, messenger);\n }\n\n /**\n * Gets information about the poolInfo by token\n * @param token\n * @returns poolInfo\n */\n async getPoolInfoByToken(token: TokenWithChainDetails): Promise<PoolInfo> {\n return this.service.getPoolInfoByToken(token);\n }\n\n /**\n * Forces refresh of cached information about the state of liquidity pools.\n * Outdated cache leads to calculated amounts being less accurate.\n * The cache is invalidated at regular intervals, but it can be forced to be refreshed by calling this method.+\n *\n * @param tokens if present, the corresponding liquidity pools will be updated\n */\n async refreshPoolInfo(tokens?: TokenWithChainDetails | TokenWithChainDetails[]): Promise<void> {\n return this.service.refreshPoolInfo(tokens);\n }\n\n /**\n * Convert APR to percentage view\n * @param apr\n * @returns aprPercentageView\n */\n aprInPercents(apr: string): string {\n return this.service.aprInPercents(apr);\n }\n\n /**\n * Get possible limit of extra gas amount.\n * @param sourceChainToken selected token on the source chain\n * @param destinationChainToken selected token on the destination chain\n * @returns {@link ExtraGasMaxLimitResponse}\n */\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails\n ): Promise<ExtraGasMaxLimitResponse> {\n return this.service.getExtraGasMaxLimits(sourceChainToken, destinationChainToken);\n }\n\n /**\n * @param amount - amount\n * @param amountFormat - AmountFormat\n * @param sourceToken - selected token on the source chain\n * @return virtual amount\n */\n async getVUsdFromAmount(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails\n ): Promise<AmountFormatted> {\n return this.service.getVUsdFromAmount(amount, amountFormat, sourceToken);\n }\n\n /**\n * @param vUsdAmount - amount of vUsd, int format\n * @param destToken selected token on the destination chain\n * @return amount of destToken\n */\n async getAmountFromVUsd(vUsdAmount: string, destToken: TokenWithChainDetails): Promise<AmountFormatted> {\n return this.service.getAmountFromVUsd(vUsdAmount, destToken);\n }\n\n /**\n * @Deprecated Use {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculation(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * @Deprecated Use {@link getAmountToBeReceived} and then {@link getSendAmountDetails}\n * @param amountInTokenPrecision\n * @param sourceToken\n * @param destToken\n */\n async swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SwapAndBridgeCalculationData> {\n return this.service.swapAndBridgeFeeCalculationReverse(amountInTokenPrecision, sourceToken, destToken);\n }\n\n /**\n * Show amount changes (fee and amount adjustment) during send through pools on source and destination chains\n */\n async getSendAmountDetails(\n amount: string,\n amountFormat: AmountFormat,\n sourceToken: TokenWithChainDetails,\n destToken: TokenWithChainDetails\n ): Promise<SendAmountDetails> {\n return this.service.getSendAmountDetails(amount, amountFormat, sourceToken, destToken);\n }\n}\n", "import { AllbridgeCoreSdkOptions, NodeRpcUrls, NodeUrlsConfig } from \"../index\";\n\nexport const mainnet: AllbridgeCoreSdkOptions = {\n coreApiUrl: \"https://core.api.allbridgecoreapi.net\",\n coreApiQueryParams: {},\n coreApiHeaders: {},\n jupiterUrl: \"https://quote-api.jup.ag/v6\",\n wormholeMessengerProgramId: \"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth\",\n solanaLookUpTable: \"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj\",\n sorobanNetworkPassphrase: \"Public Global Stellar Network ; September 2015\",\n tronJsonRpc: \"https://api.trongrid.io/jsonrpc\",\n cctpParams: {\n cctpTransmitterProgramId: \"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd\",\n cctpTokenMessengerMinter: \"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3\",\n cctpDomains: { ETH: 0, AVA: 1, OPT: 2, ARB: 3, SOL: 5, BAS: 6, POL: 7 },\n },\n cachePoolInfoChainSec: 20,\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n * @Deprecated use {@link nodeRpcUrlsDefault}\n */\nexport const nodeUrlsDefault: NodeUrlsConfig = {\n solanaRpcUrl: \"https://api.mainnet-beta.solana.com\",\n tronRpcUrl: \"https://api.trongrid.io\",\n};\n\n/**\n * This is default rpc urls for Solana and Tron,<p/> Override and use your own for proper and stable work\n */\nexport const nodeRpcUrlsDefault: NodeRpcUrls = {\n SOL: \"https://api.mainnet-beta.solana.com\",\n TRX: \"https://api.trongrid.io\",\n SRB: \"https://rpc.stellar.org:443\",\n STLR: \"https://horizon.stellar.org\",\n};\n", "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 { AllbridgeCoreSdkOptions, BasicChainProperties, NodeRpcUrls, SdkError } 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\";\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 private readonly api: AllbridgeCoreClientFiltered;\n\n private readonly tokenService: TokenService;\n\n readonly params: AllbridgeCoreSdkOptions;\n\n bridge: BridgeService;\n pool: LiquidityPoolService;\n\n constructor(nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions = mainnet) {\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.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 const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\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 const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToBeReceivedFromPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToBeReceivedFromPools(\n amountToSendFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToSendFloat);\n validateAmountDecimals(\"amountToSendFloat\", amountToSendFloat, sourceChainToken.decimals);\n const amountToSend = convertFloatAmountToInt(amountToSendFloat, sourceChainToken.decimals);\n\n if (messenger && messenger == 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\n const vUsd = swapToVUsd(amountToSend, sourceChainToken, sourcePool);\n return this.getAmountFromVUsdFormatted(vUsd, destinationChainToken, destinationPool).float;\n }\n\n async getAmountToSend(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger?: Messenger\n ): Promise<string> {\n const sourcePool: PoolInfo = await getPoolInfoByToken(this.api, sourceChainToken);\n const destPool: PoolInfo = await getPoolInfoByToken(this.api, destinationChainToken);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\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 const sourcePool: PoolInfo = await this.pool.getPoolInfoFromChain(sourceChainToken, sourceProvider);\n const destPool: PoolInfo = await this.pool.getPoolInfoFromChain(destinationChainToken, destinationProvider);\n return this.getAmountToSendFromPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destPool,\n messenger\n );\n }\n\n getAmountToSendFromPools(\n amountToBeReceivedFloat: number | string | Big,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger?: Messenger\n ): string {\n validateAmountGtZero(amountToBeReceivedFloat);\n validateAmountDecimals(\"amountToBeReceivedFloat\", amountToBeReceivedFloat, destinationChainToken.decimals);\n const amountToBeReceived = convertFloatAmountToInt(amountToBeReceivedFloat, destinationChainToken.decimals);\n\n if (messenger && messenger == 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\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 async getGasFeeOptions(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): Promise<GasFeeOptions> {\n return getGasFeeOptions(\n sourceChainToken.allbridgeChainId,\n sourceChainToken.chainType,\n destinationChainToken.allbridgeChainId,\n sourceChainToken.decimals,\n messenger,\n this.api\n );\n }\n\n getAverageTransferTime(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger\n ): number | null {\n return (\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n sourceChainToken.transferTime?.[destinationChainToken.chainSymbol]?.[messenger] ?? null\n );\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 ): Promise<ExtraGasMaxLimitResponse> {\n return await getExtraGasMaxLimits(sourceChainToken, destinationChainToken, 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", "export abstract class SdkRootError extends Error {\n public errorCode: ErrorCode;\n\n protected constructor(code: ErrorCode, message?: string) {\n super(message);\n this.errorCode = code;\n }\n}\n\nexport class SdkError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.SDK_ERROR, message);\n }\n}\n\nexport class InvalidAmountError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_AMOUNT_ERROR, message);\n }\n}\n\nexport class AmountNotEnoughError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.AMOUNT_NOT_ENOUGH_ERROR, message);\n }\n}\n\nexport class InsufficientPoolLiquidityError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INSUFFICIENT_POOL_LIQUIDITY_ERROR, message);\n }\n}\n\nexport class JupiterError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.JUPITER_ERROR, message);\n }\n}\n\nexport class InvalidGasFeePaymentOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR, message);\n }\n}\n\nexport class InvalidMessengerOptionError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_MESSENGER_OPTION_ERROR, message);\n }\n}\n\nexport class MethodNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.METHOD_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class VerifyTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.VERIFY_TX_ERROR, message);\n }\n}\n\nexport class InvalidTxError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.INVALID_TX_ERROR, message);\n }\n}\n\nexport class ExtraGasMaxLimitExceededError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR, message);\n }\n}\n\nexport class ArgumentInvalidDecimalsError extends SdkRootError {\n constructor(argName: string, decimalsIs: number, decimalsRequired: number) {\n super(\n ErrorCode.ARGUMENT_INVALID_DECIMALS_ERROR,\n `Argument '${argName}' decimals '${decimalsIs}' cannot be greater than '${decimalsRequired}'`\n );\n }\n}\n\nexport class TimeoutError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.TIMEOUT_ERROR, message);\n }\n}\n\nexport class NodeRpcUrlNotInitializedError extends SdkRootError {\n constructor(chainSymbol: string) {\n super(ErrorCode.NODE_RPC_URL_NOT_INITIALIZED_ERROR, `For chain '${chainSymbol}' Node RPC URL not initialized`);\n }\n}\n\nexport class CCTPDoesNotSupportedError extends SdkRootError {\n constructor(message?: string) {\n super(ErrorCode.CCTP_DOES_NOT_SUPPORTED_ERROR, message);\n }\n}\n\nexport class TxTooLargeError extends SdkRootError {\n constructor() {\n super(\n ErrorCode.TX_TOO_LARGE,\n \"Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency\"\n );\n }\n}\n\nexport enum ErrorCode {\n SDK_ERROR = \"SdkError\",\n INVALID_AMOUNT_ERROR = \"InvalidAmountError\",\n AMOUNT_NOT_ENOUGH_ERROR = \"AmountNotEnoughError\",\n INSUFFICIENT_POOL_LIQUIDITY_ERROR = \"InsufficientPoolLiquidityError\",\n JUPITER_ERROR = \"JupiterError\",\n INVALID_GAS_FEE_PAYMENT_OPTION_ERROR = \"InvalidGasFeePaymentOptionError\",\n INVALID_MESSENGER_OPTION_ERROR = \"InvalidMessengerOptionError\",\n METHOD_NOT_SUPPORTED_ERROR = \"MethodNotSupportedError\",\n VERIFY_TX_ERROR = \"VerifyTxError\",\n INVALID_TX_ERROR = \"InvalidTxError\",\n EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR = \"ExtraGasMaxLimitExceededError\",\n ARGUMENT_INVALID_DECIMALS_ERROR = \"ArgumentInvalidDecimalsError\",\n TIMEOUT_ERROR = \"TimeoutError\",\n NODE_RPC_URL_NOT_INITIALIZED_ERROR = \"NodeRpcUrlNotInitializedError\",\n CCTP_DOES_NOT_SUPPORTED_ERROR = \"CCTPDoesNotSupportedError\",\n TX_TOO_LARGE = \"TxTooLargeError\",\n}\n", "export enum ChainSymbol {\n /**\n * The BNB Smart Chain main network.\n */\n BSC = \"BSC\",\n\n /**\n * The Ethereum main network.\n */\n ETH = \"ETH\",\n\n /**\n * The Base main network.\n */\n BAS = \"BAS\",\n\n /**\n * The Solana network.\n */\n SOL = \"SOL\",\n\n /**\n * The TRON network.\n */\n TRX = \"TRX\",\n\n /**\n * The Polygon network.\n */\n POL = \"POL\",\n\n /**\n * The Arbitrum network.\n */\n ARB = \"ARB\",\n\n /**\n * The Celo network.\n */\n CEL = \"CEL\",\n\n /**\n * The Avalanche main network.\n */\n AVA = \"AVA\",\n\n /**\n * The Soroban network.\n */\n SRB = \"SRB\",\n\n /**\n * The Stellar network.\n */\n STLR = \"STLR\",\n\n /**\n * The OP Mainnet network.\n */\n OPT = \"OPT\",\n}\n\nexport enum ChainType {\n EVM = \"EVM\",\n SOLANA = \"SOLANA\",\n TRX = \"TRX\",\n SRB = \"SRB\",\n}\n", "import { SdkError } from \"../exceptions\";\nimport { ChainSymbol, ChainType } from \"./chain.enums\";\nimport { BasicChainProperties } from \"./models\";\n\n/**\n * Native gas tokens decimals by ChainType\n */\nconst chainDecimalsByType: Record<ChainType, number> = {\n EVM: 18,\n SOLANA: 9,\n TRX: 6,\n SRB: 7,\n};\n\nconst defaultProperties: Record<string, BasicChainProperties> = {\n [ChainSymbol.BSC]: {\n chainSymbol: ChainSymbol.BSC,\n chainId: \"0x38\",\n name: \"BNB Chain\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ETH]: {\n chainSymbol: ChainSymbol.ETH,\n chainId: \"0x1\",\n name: \"Ethereum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.BAS]: {\n chainSymbol: ChainSymbol.BAS,\n chainId: \"0x2105\",\n name: \"Base\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.ARB]: {\n chainSymbol: ChainSymbol.ARB,\n chainId: \"0xa4b1\",\n name: \"Arbitrum\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.AVA]: {\n chainSymbol: ChainSymbol.AVA,\n chainId: \"0xa86a\",\n name: \"Avalanche\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.CEL]: {\n chainSymbol: ChainSymbol.CEL,\n chainId: \"0xa4ec\",\n name: \"Celo\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.POL]: {\n chainSymbol: ChainSymbol.POL,\n chainId: \"0x89\",\n name: \"Polygon\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.OPT]: {\n chainSymbol: ChainSymbol.OPT,\n chainId: \"0xa\",\n name: \"OP Mainnet\",\n chainType: ChainType.EVM,\n },\n [ChainSymbol.SOL]: {\n chainSymbol: ChainSymbol.SOL,\n name: \"Solana\",\n chainType: ChainType.SOLANA,\n },\n [ChainSymbol.TRX]: {\n chainSymbol: ChainSymbol.TRX,\n name: \"Tron\",\n chainType: ChainType.TRX,\n },\n [ChainSymbol.SRB]: {\n chainSymbol: ChainSymbol.SRB,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n [ChainSymbol.STLR]: {\n chainSymbol: ChainSymbol.STLR,\n name: \"Stellar\",\n chainType: ChainType.SRB,\n },\n};\n\nexport const Chains = (() => {\n let chainProperties: Record<string, BasicChainProperties> = { ...defaultProperties };\n\n return {\n addChainsProperties(additionalProperties?: Record<string, BasicChainProperties>) {\n chainProperties = { ...chainProperties, ...additionalProperties };\n },\n\n getChainProperty(chainSymbol: string): BasicChainProperties {\n const property = chainProperties[chainSymbol];\n if (!property) {\n throw new SdkError(`Cannot find chain properties for ${chainSymbol}`);\n }\n return property;\n },\n\n getChainsProperties(): Record<string, BasicChainProperties> {\n return chainProperties;\n },\n\n getChainDecimalsByType(chainType: ChainType): number {\n return chainDecimalsByType[chainType];\n },\n };\n})();\n", "import axios, { Axios } from \"axios\";\nimport { ChainDetailsMapWithFlags, PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { VERSION } from \"../../version\";\nimport {\n mapChainDetailsResponseToChainDetailsMap,\n mapChainDetailsResponseToPoolInfoMap,\n mapPoolInfoResponseToPoolInfoMap,\n} from \"./core-api-mapper\";\nimport {\n ChainDetailsResponse,\n GasBalanceResponse,\n PendingInfoResponse,\n PoolInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientParams } from \"./core-client-base\";\n\nexport interface TokenInfo {\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n}\n\nexport interface ApiClient {\n getTokenInfo(): Promise<TokenInfo>;\n\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class ApiClientImpl implements ApiClient {\n private api: Axios;\n\n constructor(params: AllbridgeCoreClientParams) {\n this.api = axios.create({\n baseURL: params.coreApiUrl,\n headers: {\n Accept: \"application/json\",\n ...params.coreApiHeaders,\n \"x-Sdk-Agent\": \"AllbridgeCoreSDK/\" + VERSION,\n },\n params: params.coreApiQueryParams,\n });\n }\n\n async getTokenInfo(): Promise<TokenInfo> {\n const { data } = await this.api.get<ChainDetailsResponse>(\"/token-info\", { params: { filter: \"all\" } });\n return {\n chainDetailsMap: mapChainDetailsResponseToChainDetailsMap(data),\n poolInfoMap: mapChainDetailsResponseToPoolInfoMap(data),\n };\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const { data } = await this.api.get<PendingInfoResponse>(\"/pending-info\");\n return data;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const { data } = await this.api.get<GasBalanceResponse>(`/check/${chainSymbol}/${address}`);\n return data;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n const { data } = await this.api.get<TransferStatusResponse>(`/chain/${chainSymbol}/${txId}`);\n return data;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const { data } = await this.api.post<ReceiveTransactionCostResponse>(\"/receive-fee\", args, {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n return {\n exchangeRate: data.exchangeRate,\n fee: data.fee,\n sourceNativeTokenPrice: data.sourceNativeTokenPrice,\n };\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n const poolKeys = pools instanceof Array ? pools : [pools];\n const { data } = await this.api.post<PoolInfoResponse>(\n \"/pool-info\",\n { pools: poolKeys },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return mapPoolInfoResponseToPoolInfoMap(data);\n }\n}\n", "export const VERSION = \"3.19.1-alpha.1\";\n", "import { Big, BigSource } from \"big.js\";\nimport BN from \"bn.js\";\nimport { InsufficientPoolLiquidityError } from \"../../exceptions\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { SYSTEM_PRECISION } from \"./constants\";\n\nexport function getFeePercent(input: BigSource, output: BigSource): number {\n return Big(100).minus(Big(100).times(output).div(input)).toNumber();\n}\n\nexport function toSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, decimals, SYSTEM_PRECISION).round(0, Big.roundDown);\n}\n\nexport function fromSystemPrecision(amount: BigSource, decimals: number): Big {\n return convertAmountPrecision(amount, SYSTEM_PRECISION, decimals);\n}\n\nexport function convertAmountPrecision(amount: BigSource, decimalsFrom: number, decimalsTo: number): Big {\n const dif = Big(decimalsTo).minus(decimalsFrom).toNumber();\n return Big(amount).times(toPowBase10(dif));\n}\n\nexport function toPowBase10(decimals: number): Big {\n return Big(10).pow(decimals);\n}\n\nexport function convertFloatAmountToInt(amountFloat: BigSource, decimals: number): Big {\n return Big(amountFloat).times(toPowBase10(decimals));\n}\n\nexport function convertIntAmountToFloat(amountInt: BigSource, decimals: number): Big {\n const amountValue = Big(amountInt);\n if (amountValue.eq(0)) {\n return Big(0);\n }\n return Big(amountValue).div(toPowBase10(decimals));\n}\n\nexport function calculatePoolInfoImbalance(poolInfo: Pick<PoolInfo, \"tokenBalance\" | \"vUsdBalance\">): string {\n return convertIntAmountToFloat(Big(poolInfo.tokenBalance).minus(poolInfo.vUsdBalance).toFixed(), SYSTEM_PRECISION)\n .div(2)\n .toFixed();\n}\n\nexport function swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return \"0\";\n }\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithoutFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).plus(inSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round(0, Big.roundDown).toFixed();\n}\n\nexport function swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\">\n): string {\n const amountValue = Big(amount);\n if (amountValue.lte(0)) {\n return Big(0).toFixed();\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n return Big(result).minus(fee).round(0, Big.roundDown).toFixed();\n}\n\nexport function getSwapFromVUsdPoolInfo(\n vUsdAmount: BigSource,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Pick<PoolInfo, \"vUsdBalance\" | \"aValue\" | \"dValue\" | \"tokenBalance\"> {\n const amountValue = Big(vUsdAmount);\n if (amountValue.lte(0)) {\n return poolInfo;\n }\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n return {\n aValue: poolInfo.aValue,\n dValue: poolInfo.dValue,\n tokenBalance: newAmount.toFixed(0),\n vUsdBalance: vUsdBalance.toFixed(0),\n };\n}\n\n/**\n * @param amount - vUsd amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapToVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amount);\n if (vUsdNewAmount.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const tokenBalance = getY(vUsdNewAmount, poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision, decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare).round(0, Big.roundUp);\n return Big(amountWithoutFee).plus(fee).round(0, Big.roundDown);\n}\n\n/**\n * @param amount - amount should be received\n * @param feeShare\n * @param decimals\n * @param poolInfo\n */\nexport function swapFromVUsdReverse(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): Big {\n if (Big(amount).lte(0)) {\n return Big(0);\n }\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amount).times(reversedFeeShare).round(0, Big.roundUp);\n const amountWithFee = Big(amount).plus(fee);\n const inSystemPrecision = toSystemPrecision(amountWithFee, decimals);\n const tokenBalance = Big(poolInfo.tokenBalance).minus(inSystemPrecision);\n if (tokenBalance.lte(0)) {\n throw new InsufficientPoolLiquidityError();\n }\n const vUsdNewAmount = getY(tokenBalance, poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round(0, Big.roundDown);\n}\n\n// y = (sqrt(x(4ad\u00B3 + x (4a(d - x) - d )\u00B2)) + x (4a(d - x) - d ))/8ax\n// commonPart = 4a(d - x) - d\n// sqrt = sqrt(x * (4ad\u00B3 + x * commonPart\u00B2)\n// y = (sqrt + x * commonPart) / divider\nexport function getY(x: BigSource, a: BigSource, d: BigSource): Big {\n const commonPartBig = Big(4).times(a).times(Big(d).minus(x)).minus(d);\n const dCubed = Big(d).pow(3);\n const commonPartSquared = commonPartBig.pow(2);\n const sqrtBig = Big(x)\n .times(Big(x).times(commonPartSquared).plus(Big(4).times(a).times(dCubed)))\n .sqrt()\n .round(0, Big.roundDown);\n const dividerBig = Big(8).times(a).times(x);\n const result = commonPartBig.times(x).plus(sqrtBig).div(dividerBig).round(0, Big.roundDown);\n if (result.eq(0)) {\n return Big(0);\n }\n return result.plus(1); // +1 to offset rounding errors\n}\n\nexport function getEarned(userLpAmount: string, userRewardDebt: string, accRewardPerShareP: string, p: number): string {\n const userLpAmountBN = new BN(userLpAmount);\n const accRewardPerSharePBN = new BN(accRewardPerShareP);\n const userRewardDebtBN = new BN(userRewardDebt);\n const rewards = userLpAmountBN.mul(accRewardPerSharePBN).shrn(p);\n return rewards.sub(userRewardDebtBN).toString();\n}\n\nexport function aprInPercents(apr: string): string {\n return Big(apr).gt(0) ? `${Number(Big(apr).times(100).toFixed(2)).toLocaleString()}%` : \"N/A\";\n}\n\n// a = 8Axy(x+y)\n// b = xy(16A - 4) / 3\n// c = sqrt(a\u00B2 + b\u00B3)\n// D = cbrt(a + c) + cbrt(a - c)\nexport function getD(aValue: string, x: string, y: string): string {\n const xy = Big(x).times(y);\n const xPlusY = Big(x).plus(y);\n const a = Big(8).times(aValue).times(xy).times(xPlusY);\n const b = xy.times(Big(16).times(aValue).minus(4)).div(3);\n const aSquared = a.times(a);\n const bCubed = b.times(b).times(b);\n const a2b3 = aSquared.plus(bCubed);\n const c = Big(a2b3).sqrt();\n const cbrtAPlusC = Big(Math.cbrt(+a.plus(c).toFixed()));\n const cbrtAMinusC = Big(Math.cbrt(+a.minus(c).toFixed()));\n return cbrtAPlusC.plus(cbrtAMinusC).toFixed();\n}\n", "import { ChainSymbol } from \"../../chains/chain.enums\";\nimport { PoolInfo } from \"../../tokens-info\";\n\nexport type ChainDetailsResponse = Record<string, ChainDetailsDTO>;\n\nexport interface ChainDetailsDTO {\n tokens: TokenDTO[];\n chainId: number;\n bridgeAddress: string;\n transferTime: TransferTimeDTO;\n txCostAmount: TxCostAmountDTO;\n confirmations: number;\n}\n\nexport enum AddressStatus {\n OK = \"OK\",\n INVALID = \"INVALID\",\n FORBIDDEN = \"FORBIDDEN\",\n UNINITIALIZED = \"UNINITIALIZED\",\n CONTRACT_ADDRESS = \"CONTRACT_ADDRESS\",\n WRONG_ASSOCIATED_ACCOUNT_OWNER = \"WRONG_ASSOCIATED_ACCOUNT_OWNER\",\n}\n\nexport interface TokenDTO {\n symbol: string;\n name: string;\n decimals: number;\n poolAddress: string;\n tokenAddress: string;\n poolInfo: PoolInfoDTO;\n feeShare: string;\n apr: string;\n apr7d: string;\n apr30d: string;\n lpRate: string;\n flags: {\n swap: boolean;\n pool: boolean;\n };\n}\n\nexport interface PoolInfoDTO {\n aValue: string;\n dValue: string;\n tokenBalance: string;\n vUsdBalance: string;\n totalLpAmount: string;\n accRewardPerShareP: string;\n p: number;\n}\n\nexport enum MessengerKeyDTO {\n ALLBRIDGE = \"allbridge\",\n WORMHOLE = \"wormhole\",\n CCTP = \"cctp\",\n}\n\nexport type TransferTimeDTO = Record<string, MessengerTransferTimeDTO>;\n\nexport interface TxCostAmountDTO {\n maxAmount: string;\n swap: string;\n transfer: string;\n}\n\nexport type MessengerTransferTimeDTO = {\n [messenger in MessengerKeyDTO]: number;\n};\n\nexport enum Messenger {\n ALLBRIDGE = 1,\n WORMHOLE = 2,\n CCTP = 3,\n}\n\nexport interface ReceiveTransactionCostRequest {\n sourceChainId: number;\n destinationChainId: number;\n messenger: Messenger;\n}\n\nexport interface ReceiveTransactionCostResponse {\n exchangeRate: string;\n fee: string;\n sourceNativeTokenPrice: string;\n}\n\nexport interface GasBalanceResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface CheckAddressResponse {\n gasBalance: string | null;\n status: AddressStatus;\n}\n\nexport interface TransferStatusResponse {\n txId: string;\n\n sourceChainSymbol: ChainSymbol;\n destinationChainSymbol: ChainSymbol;\n\n sendAmount: string;\n sendAmountFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n senderAddress: string;\n recipientAddress: string;\n\n signaturesCount: number;\n signaturesNeeded: number;\n\n send: BridgeTransaction;\n receive?: BridgeTransaction;\n\n responseTime?: number;\n}\n\nexport interface BridgeTransaction {\n txId: string;\n\n sourceChainId: number;\n destinationChainId: number;\n\n fee: string;\n feeFormatted: number;\n\n stableFee: string;\n stableFeeFormatted: number;\n\n amount: string;\n amountFormatted: number;\n virtualAmount: string;\n\n bridgeContract: string;\n sender: string;\n recipient: string;\n\n sourceTokenAddress: string;\n destinationTokenAddress: string;\n\n hash: string;\n\n messenger: Messenger;\n\n blockTime: number;\n blockId: string;\n\n confirmations: number;\n confirmationsNeeded: number;\n\n isClaimable?: boolean;\n}\n\nexport type PoolInfoResponse = Record<ChainSymbol, PoolInfo>;\nexport type PendingInfoResponse = Partial<Record<ChainSymbol, TokenPendingInfoDTO>>;\nexport type TokenPendingInfoDTO = Record<string, PendingInfoDTO>;\n\nexport interface PendingInfoDTO {\n pendingTxs: number;\n totalSentAmount: string;\n}\n", "import { Chains } from \"../../chains\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport {\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 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 default:\n return null;\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) {\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 /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (!basicChainProperties) {\n return null;\n }\n const chainDetails: ChainDetails = {\n ...basicChainProperties,\n allbridgeChainId: dto.chainId,\n bridgeAddress: dto.bridgeAddress,\n transferTime: mapTransferTimeFromDto(dto.transferTime),\n txCostAmount: dto.txCostAmount,\n confirmations: dto.confirmations,\n };\n return {\n ...chainDetails,\n tokens: dto.tokens.map((tokenDto) => mapTokenWithChainDetailsFromDto(chainDetails, tokenDto)),\n };\n}\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", "/**\n * ///////////////////////////////////////\n * //////////// Cache module /////////////\n * ///////////////////////////////////////\n *\n * This module offers object caching mechanisms for\n * third-party modules. It allows to manage the lifecycle\n * of cached objects by associating them with a time-to-live.\n */\n\n/**\n * Shortcut function for checking if an object has\n * a given property directly on itself.\n */\nconst has = (obj, key) => obj !== null && Object.prototype.hasOwnProperty.call(obj, key);\n\n/**\n * A prefix used to forbid access to internal properties\n * of the object storage.\n */\nconst prefix = '__cache__';\n\n/**\n * If the key is an object, we serialize it, so it\n * can be cached transparently.\n */\nconst serialize = function (key) {\n if (typeof key !== 'string') {\n return (prefix + JSON.stringify(key));\n }\n return (prefix + key);\n};\n\n/**\n * The `timed-cache` implementation.\n */\nclass Cache {\n\n /**\n * Cache constructor.\n * @param {*} options the `options` object\n * holder used by the cache implementation. \n */\n constructor(options = { defaultTtl: 60 * 1000 }) {\n // The cache storage.\n this.cache = {};\n // The default cached objects expiration\n // delay is expressed in milliseconds and\n // is defined by an internal default value\n // or a user value if it is passed to the\n // constructor.\n this.defaultTtl = options.defaultTtl || 60 * 1000;\n }\n\n /**\n * Puts a key/value pair into the cache storage.\n */\n put(key, value, options) {\n const ttl = (options ? options.ttl : undefined) || this.defaultTtl;\n const callback = (options ? options.callback : undefined) || function () {};\n const key_ = serialize(key);\n \n // Checking whether the given key already\n // has a value.\n const v = this.cache[key_];\n \n if (v) {\n // We clear the timeout associated with\n // the existing value.\n clearTimeout(v.handle);\n }\n \n // We then create a new timeout function for\n // the new value.\n const handle = setTimeout(() => this.remove(key), ttl);\n \n // And we save the value into the cache storage\n // with the handle.\n this.cache[key_] = { handle, data: value, callback };\n }\n\n /**\n * Returns a cached value associated with the\n * given key if it exists, returns an undefined\n * value otherwise.\n */\n get(key) {\n const value = this.cache[serialize(key)];\n return (value && value.data);\n }\n\n /**\n * Clears the cache entry associated\n * with the given `key`.\n */\n remove(key) {\n const key_ = serialize(key);\n const value = this.cache[key_];\n \n if (value) {\n clearTimeout(value.handle);\n delete this.cache[key_];\n value.callback(key, value.data);\n }\n }\n\n /**\n * Clears the internal cache.\n */\n clear() {\n for (const entry in this.cache) {\n if (has(this.cache, entry)) {\n clearTimeout(this.cache[entry].handle);\n }\n }\n this.cache = {};\n }\n\n /**\n * Returns the size of the cache object in\n * terms of referenced elements.\n */\n size() {\n return (Object.keys(this.cache).length);\n }\n}\n\nexport default Cache;\n", "import Cache from \"timed-cache\";\nimport { PoolInfoMap, PoolKeyObject } from \"../../tokens-info\";\nimport { ApiClient, TokenInfo } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nconst _20_SECONDS_TTL = 20 * 1000;\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport class ApiClientCaching implements ApiClient {\n private tokenInfoCache: Cache<Promise<TokenInfo>>;\n private pendingInfoCache: Cache<Promise<PendingInfoResponse>>;\n private gasBalanceCache: Cache<Promise<GasBalanceResponse>>;\n private receivedTransactionCache: Cache<ReceiveTransactionCostResponse>;\n\n constructor(private apiClient: ApiClient) {\n this.tokenInfoCache = new Cache({ defaultTtl: _55_SECONDS_TTL });\n this.receivedTransactionCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.pendingInfoCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n this.gasBalanceCache = new Cache({ defaultTtl: _20_SECONDS_TTL });\n }\n\n getTokenInfo(): Promise<TokenInfo> {\n const TOKEN_INFO_CACHE_KEY = \"TOKEN_INFO_CACHE_KEY\";\n const tokenInfo = this.tokenInfoCache.get(TOKEN_INFO_CACHE_KEY);\n if (tokenInfo) {\n return tokenInfo;\n }\n const tokenInfoPromise = this.apiClient.getTokenInfo();\n this.tokenInfoCache.put(TOKEN_INFO_CACHE_KEY, tokenInfoPromise);\n return tokenInfoPromise;\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n const GAS_BALANCE_CACHE_KEY = `GAS_BALANCE_${chainSymbol}_${address}`;\n const gasBalance = this.gasBalanceCache.get(GAS_BALANCE_CACHE_KEY);\n if (gasBalance) {\n return gasBalance;\n }\n const gasBalancePromise = this.apiClient.getGasBalance(chainSymbol, address);\n this.gasBalanceCache.put(GAS_BALANCE_CACHE_KEY, gasBalancePromise);\n return gasBalancePromise;\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n const PENDING_INFO_CACHE_KEY = \"PENDING_INFO_CACHE_KEY\";\n const pendingInfo = this.pendingInfoCache.get(PENDING_INFO_CACHE_KEY);\n if (pendingInfo) {\n return pendingInfo;\n }\n const pendingInfoPromise = this.apiClient.getPendingInfo();\n this.pendingInfoCache.put(PENDING_INFO_CACHE_KEY, pendingInfoPromise);\n return pendingInfoPromise;\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n const RECEIVE_TX_COST_KEY = `RECEIVE_TX_COST_${args.sourceChainId}_${args.destinationChainId}_${args.messenger}`;\n const transactionCost = this.receivedTransactionCache.get(RECEIVE_TX_COST_KEY);\n if (transactionCost) {\n return transactionCost;\n }\n const fetchedTransactionCost = await this.apiClient.getReceiveTransactionCost(args);\n this.receivedTransactionCache.put(RECEIVE_TX_COST_KEY, fetchedTransactionCost);\n return fetchedTransactionCost;\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import {\n ChainDetailsMapWithFlags,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { ApiClient } from \"./api-client\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\n\nexport interface AllbridgeCoreClientParams {\n coreApiUrl: string;\n coreApiHeaders?: Record<string, string>;\n coreApiQueryParams?: Record<string, string>;\n}\n\nexport interface AllbridgeCoreClient {\n getPendingInfo(): Promise<PendingInfoResponse>;\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse>;\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse>;\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse>;\n}\n\nexport interface AllbridgeCoreClientWithTokens extends AllbridgeCoreClient {\n getChainDetailsMap(): Promise<ChainDetailsMapWithFlags>;\n\n tokens(): Promise<TokenWithChainDetailsWithFlags[]>;\n}\n\nexport interface AllbridgeCoreClientWithPoolInfo extends AllbridgeCoreClientWithTokens {\n getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }>;\n\n getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap>;\n}\n\nexport class AllbridgeCoreClientImpl implements AllbridgeCoreClientWithPoolInfo {\n constructor(private apiClient: ApiClient) {}\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n return (await this.apiClient.getTokenInfo()).chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n const map = await this.getChainDetailsMap();\n return Object.values(map).flatMap((chainDetails) => chainDetails.tokens);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.apiClient.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.apiClient.getGasBalance(chainSymbol, address);\n }\n\n async getChainDetailsMapAndPoolInfoMap(): Promise<{\n chainDetailsMap: ChainDetailsMapWithFlags;\n poolInfoMap: PoolInfoMap;\n }> {\n return await this.apiClient.getTokenInfo();\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.apiClient.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.apiClient.getReceiveTransactionCost(args);\n }\n\n async getPoolInfoMap(pools: PoolKeyObject[] | PoolKeyObject): Promise<PoolInfoMap> {\n return await this.apiClient.getPoolInfoMap(pools);\n }\n}\n", "import { AllbridgeCoreSdkOptions } from \"../../index\";\nimport {\n ChainDetailsMap,\n PoolInfo,\n PoolKeyObject,\n TokenWithChainDetails,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClient, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\nimport { AllbridgeCoreClientPoolsExt } from \"./core-client-pool-info-caching\";\n\nexport interface AllbridgeCoreClientFiltered extends AllbridgeCoreClient, AllbridgeCoreClientPoolsExt {\n getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap>;\n\n tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]>;\n}\n\nexport class AllbridgeCoreClientFilteredImpl implements AllbridgeCoreClientFiltered {\n private readonly isStaging: boolean;\n\n constructor(\n private client: AllbridgeCoreClientWithTokens & AllbridgeCoreClientPoolsExt,\n params: AllbridgeCoreSdkOptions\n ) {\n this.isStaging = params.coreApiQueryParams?.staging === \"true\";\n }\n\n async getChainDetailsMap(type: \"swap\" | \"pool\"): Promise<ChainDetailsMap> {\n const chainDetailsMapWithFlags = await this.client.getChainDetailsMap();\n const result: ChainDetailsMap = {};\n\n for (const key in chainDetailsMapWithFlags) {\n const chainDetailsWithTokensWithFlag = chainDetailsMapWithFlags[key];\n if (chainDetailsWithTokensWithFlag) {\n result[key] = {\n ...chainDetailsWithTokensWithFlag,\n tokens: filterAndConvertToTokenWithChainDetails(chainDetailsWithTokensWithFlag.tokens, type, this.isStaging),\n };\n }\n }\n return result;\n }\n\n async tokens(type: \"swap\" | \"pool\"): Promise<TokenWithChainDetails[]> {\n return filterAndConvertToTokenWithChainDetails(await this.client.tokens(), type, this.isStaging);\n }\n\n async getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n async getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return await this.client.getTransferStatus(chainSymbol, txId);\n }\n\n async getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return await this.client.getReceiveTransactionCost(args);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n return this.client.cachePut(poolKeyObject, poolInfo);\n }\n\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n return this.client.getPoolInfoByKey(poolKeyObject);\n }\n\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n return this.client.refreshPoolInfo(poolKeyObjects);\n }\n}\n\nfunction filterAndConvertToTokenWithChainDetails(\n tokens: TokenWithChainDetailsWithFlags[],\n type: \"swap\" | \"pool\",\n isStaging: boolean\n): TokenWithChainDetails[] {\n return tokens.filter((token) => (isStaging ? true : token.flags[type])).map(convertToTokenWithChainDetails);\n}\n\nfunction convertToTokenWithChainDetails(token: TokenWithChainDetailsWithFlags): TokenWithChainDetails {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { flags, ...rest } = token;\n return rest;\n}\n", "import Cache from \"timed-cache\";\nimport { SdkError } from \"../../exceptions\";\nimport {\n ChainDetailsMapWithFlags,\n PoolInfo,\n PoolInfoMap,\n PoolKeyObject,\n TokenWithChainDetailsWithFlags,\n} from \"../../tokens-info\";\nimport { mapChainDetailsMapToPoolKeyObjects, mapPoolKeyObjectToPoolKey } from \"./core-api-mapper\";\nimport {\n GasBalanceResponse,\n PendingInfoResponse,\n ReceiveTransactionCostRequest,\n ReceiveTransactionCostResponse,\n TransferStatusResponse,\n} from \"./core-api.model\";\nimport { AllbridgeCoreClientWithPoolInfo, AllbridgeCoreClientWithTokens } from \"./core-client-base\";\n\nconst _55_SECONDS_TTL = 55 * 1000;\n\nexport interface AllbridgeCoreClientPoolsExt {\n getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo>;\n refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void>;\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void;\n}\n\nexport class AllbridgeCoreClientPoolInfoCaching implements AllbridgeCoreClientWithTokens, AllbridgeCoreClientPoolsExt {\n private readonly poolInfoCache;\n\n constructor(private readonly client: AllbridgeCoreClientWithPoolInfo) {\n this.poolInfoCache = new PoolInfoCache();\n }\n\n async getChainDetailsMap(): Promise<ChainDetailsMapWithFlags> {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n return result.chainDetailsMap;\n }\n\n async tokens(): Promise<TokenWithChainDetailsWithFlags[]> {\n return await this.client.tokens();\n }\n\n getTransferStatus(chainSymbol: string, txId: string): Promise<TransferStatusResponse> {\n return this.client.getTransferStatus(chainSymbol, txId);\n }\n\n getReceiveTransactionCost(args: ReceiveTransactionCostRequest): Promise<ReceiveTransactionCostResponse> {\n return this.client.getReceiveTransactionCost(args);\n }\n\n getPendingInfo(): Promise<PendingInfoResponse> {\n return this.client.getPendingInfo();\n }\n\n getGasBalance(chainSymbol: string, address: string): Promise<GasBalanceResponse> {\n return this.client.getGasBalance(chainSymbol, address);\n }\n\n async getPoolInfoByKey(poolKeyObject: PoolKeyObject): Promise<PoolInfo> {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n const poolInfo = this.poolInfoCache.get(poolKeyObject);\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition */\n if (poolInfo) {\n return poolInfo;\n } else {\n const poolInfoMap = await this.client.getPoolInfoMap(poolKeyObject);\n this.poolInfoCache.putAll(poolInfoMap);\n const result = poolInfoMap[mapPoolKeyObjectToPoolKey(poolKeyObject)];\n if (result) {\n return result;\n }\n throw new SdkError(\n \"Cannot find pool info for \" + poolKeyObject.poolAddress + \" on chain \" + poolKeyObject.chainSymbol\n );\n }\n }\n\n async refreshPoolInfo(poolKeyObjects?: PoolKeyObject | PoolKeyObject[]): Promise<void> {\n let poolInfoMap;\n if (poolKeyObjects) {\n this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);\n poolInfoMap = await this.client.getPoolInfoMap(poolKeyObjects);\n } else {\n const result = await this.client.getChainDetailsMapAndPoolInfoMap();\n poolInfoMap = await this.client.getPoolInfoMap(mapChainDetailsMapToPoolKeyObjects(result.chainDetailsMap));\n }\n this.poolInfoCache.putAll(poolInfoMap);\n }\n\n cachePut(poolKeyObject: PoolKeyObject, poolInfo: PoolInfo): void {\n this.poolInfoCache.put(mapPoolKeyObjectToPoolKey(poolKeyObject), poolInfo);\n }\n}\n\nclass PoolInfoCache {\n private cache;\n\n constructor() {\n this.cache = new Cache<PoolInfo>({ defaultTtl: _55_SECONDS_TTL });\n }\n\n putAll(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n this.cache.put(key, value);\n }\n }\n\n putAllIfNotExists(poolInfoMap: PoolInfoMap) {\n for (const [key, value] of Object.entries(poolInfoMap)) {\n if (!this.cache.get(key)) {\n this.cache.put(key, value);\n }\n }\n }\n\n put(key: string, poolInfo: PoolInfo) {\n this.cache.put(key, poolInfo);\n }\n\n get(poolKeyObject: PoolKeyObject): PoolInfo | undefined {\n const key = mapPoolKeyObjectToPoolKey(poolKeyObject);\n return this.cache.get(key);\n }\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { Messenger } from \"../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { CCTPDoesNotSupportedError } from \"../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../index\";\nimport { TokenWithChainDetails } from \"../../tokens-info\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { EvmBridgeService } from \"./evm\";\nimport { ApproveParams, CheckAllowanceParams, GetAllowanceParams, SendParams } from \"./models\";\nimport { ChainBridgeService } from \"./models/bridge\";\nimport { DefaultRawBridgeTransactionBuilder, RawBridgeTransactionBuilder } from \"./raw-bridge-transaction-builder\";\nimport { SolanaBridgeService } from \"./sol\";\nimport { SrbBridgeService } from \"./srb\";\nimport { TronBridgeService } from \"./trx\";\n\nexport interface BridgeService {\n rawTxBuilder: RawBridgeTransactionBuilder;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved to be sent by the bridge\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough to make a transfer\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawBridgeTransactionBuilder.send}<p>\n * Send tokens through the ChainBridgeService\n * @param provider - will be used to access the network\n * @param params\n */\n send(provider: Provider, params: SendParams): Promise<TransactionResponse>;\n}\n\nexport class DefaultBridgeService implements BridgeService {\n public rawTxBuilder: RawBridgeTransactionBuilder;\n\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawBridgeTransactionBuilder(api, nodeRpcUrlsConfig, params, tokenService);\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n let provider: Provider | undefined;\n let params: GetAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as GetAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return await this.tokenService.getAllowance({ ...params, spender }, provider);\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n let provider: Provider | undefined;\n let params: CheckAllowanceParams;\n if (b) {\n provider = a as Provider;\n params = b;\n } else {\n params = a as CheckAllowanceParams;\n }\n const spender = getSpender(params.token, params.messenger);\n return this.tokenService.checkAllowance({ ...params, spender }, provider);\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.approve(provider, { ...approveData, spender });\n }\n\n async send(provider: Provider, params: SendParams): Promise<TransactionResponse> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).send(params);\n }\n}\n\nexport function getSpender(token: TokenWithChainDetails, messenger?: Messenger): string {\n if (messenger && messenger == Messenger.CCTP) {\n if (token.cctpAddress) {\n return token.cctpAddress;\n } else {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n } else {\n return token.bridgeAddress;\n }\n}\n\nexport function getChainBridgeService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainBridgeService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmBridgeService(provider as unknown as Web3, api, nodeRpcUrlsConfig);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmBridgeService(new Web3(nodeRpcUrl), api, nodeRpcUrlsConfig);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronBridgeService(provider, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new TronBridgeService(new TronWeb({ fullHost: nodeRpcUrl }), api);\n }\n }\n case ChainType.SOLANA: {\n return new SolanaBridgeService(\n nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n {\n wormholeMessengerProgramId: params.wormholeMessengerProgramId,\n solanaLookUpTable: params.solanaLookUpTable,\n cctpParams: params.cctpParams,\n jupiterUrl: params.jupiterUrl,\n },\n api\n );\n }\n case ChainType.SRB: {\n return new SrbBridgeService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { AllbridgeCoreClientPoolsExt } from \"../client/core-api/core-client-pool-info-caching\";\nimport { ArgumentInvalidDecimalsError, InvalidAmountError, TimeoutError } from \"../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../tokens-info\";\n\nexport async function getPoolInfoByToken(\n api: AllbridgeCoreClientPoolsExt,\n sourceChainToken: TokenWithChainDetails\n): Promise<PoolInfo> {\n return await api.getPoolInfoByKey({\n chainSymbol: sourceChainToken.chainSymbol,\n poolAddress: sourceChainToken.poolAddress,\n });\n}\n\nexport function validateAmountGtZero(amount: BigSource) {\n if (Big(amount).lte(0)) {\n throw new InvalidAmountError(\"Amount must be greater than zero\");\n }\n}\n\nexport function validateAmountDecimals(argName: string, amountFloat: number | string | Big, decimalRequired: number) {\n const amount = Big(amountFloat).toFixed();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [integerPart, fractionalPart] = amount.split(\".\");\n\n if (fractionalPart && fractionalPart.length > decimalRequired) {\n throw new ArgumentInvalidDecimalsError(argName, fractionalPart.length, decimalRequired);\n }\n}\n\nexport async function promiseWithTimeout<T>(promise: Promise<T>, msg: string, timeoutMs: number): Promise<T> {\n return (await Promise.race([\n promise,\n new Promise((resolve, reject) => {\n setTimeout(() => reject(new TimeoutError(msg)), timeoutMs);\n }),\n ])) as any as T;\n}\n\nexport async function promiseWithTimeoutAndRetries<T>(\n toTry: () => Promise<T>,\n msg: string,\n maxRetries: number,\n timeoutMs: number\n): Promise<T> {\n if (maxRetries < 1)\n throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${maxRetries} was received.`);\n let attemptCount = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition,no-constant-condition\n while (true) {\n try {\n return await promiseWithTimeout(toTry(), msg, timeoutMs);\n } catch (error) {\n if (++attemptCount >= maxRetries) throw new TimeoutError(msg);\n }\n }\n}\n\n/**\n * Keep calling a `fn` for `secondsToWait` seconds, if `keepWaitingIf` is true.\n * Returns an array of all attempts to call the function.\n */\nexport async function withExponentialBackoff<T>(\n fn: (previousFailure?: T) => Promise<T>,\n keepWaitingIf: (result: T) => boolean,\n secondsToWait: number,\n exponentialFactor = 1.5,\n verbose = false\n): Promise<T[]> {\n const attempts: T[] = [];\n\n let count = 0;\n const initialAttempt = await fn();\n attempts.push(initialAttempt);\n if (!keepWaitingIf(initialAttempt)) return attempts;\n\n const waitUntil = new Date(Date.now() + secondsToWait * 1000).valueOf();\n let waitTime = 1000;\n let totalWaitTime = waitTime;\n\n while (Date.now() < waitUntil) {\n const lastAttempt = attempts[attempts.length - 1];\n if (lastAttempt === undefined || !keepWaitingIf(lastAttempt)) break;\n\n count++;\n // Wait a beat\n if (verbose) {\n console.info(\n `Waiting ${waitTime}ms before trying again (bringing the total wait time to ${totalWaitTime}ms so far, of total ${\n secondsToWait * 1000\n }ms)`\n );\n }\n await new Promise((res) => setTimeout(res, waitTime));\n // Exponential backoff\n waitTime = waitTime * exponentialFactor;\n if (new Date(Date.now() + waitTime).valueOf() > waitUntil) {\n waitTime = waitUntil - Date.now();\n if (verbose) {\n console.info(`was gonna wait too long; new waitTime: ${waitTime}ms`);\n }\n }\n totalWaitTime = waitTime + totalWaitTime;\n // Try again\n const nextAttempt = await fn(lastAttempt);\n attempts.push(nextAttempt);\n if (verbose && keepWaitingIf(nextAttempt)) {\n console.info(\n `${count}. Called ${fn.name}; ${attempts.length} prev attempts. Most recent: ${JSON.stringify(\n attempts[attempts.length - 1],\n null,\n 2\n )}`\n );\n }\n }\n\n return attempts;\n}\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport BN from \"bn.js\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n ChainSymbol,\n ChainType,\n FeePaymentMethod,\n Messenger,\n SdkError,\n SwapParams,\n TransactionResponse,\n} from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport bridgeAbi from \"../../models/abi/Bridge.json\";\nimport cctpBridgeAbi from \"../../models/abi/CctpBridge.json\";\nimport { Bridge as BridgeContract } from \"../../models/abi/types/Bridge\";\nimport { CctpBridge as CctpBridgeContract } from \"../../models/abi/types/CctpBridge\";\nimport { BaseContract, PayableTransactionObject } from \"../../models/abi/types/types\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { formatAddress, getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class EvmBridgeService extends ChainBridgeService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient, private nodeRpcUrlsConfig: NodeRpcUrlsConfig) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionSend(params);\n return this.sendRawTransaction(rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const bridgeContract = this.getBridgeContract(contractAddress);\n\n const swapMethod = bridgeContract.methods.swap(\n amount,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount\n );\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n data: swapMethod.encodeABI(),\n });\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = txSendParams;\n\n const nonce = \"0x\" + getNonce().toString(\"hex\");\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n if (messenger === Messenger.CCTP) {\n const cctp = await this.buildRawTransactionCctpSend(params, txSendParams, totalFee);\n sendMethod = cctp.sendMethod;\n value = cctp.value;\n } else {\n const bridgeContract = this.getBridgeContract(contractAddress);\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = bridgeContract.methods.swapAndBridge(\n fromTokenAddress,\n amount,\n toAccountAddress,\n toChainId,\n toTokenAddress,\n nonce,\n messenger,\n 0\n );\n value = totalFee;\n }\n }\n\n return Promise.resolve({\n from: fromAccountAddress,\n to: contractAddress,\n value: value,\n data: sendMethod.encodeABI(),\n });\n }\n\n private async buildRawTransactionCctpSend(\n params: SendParams,\n txSendParams: TxSendParams,\n totalFee: string\n ): Promise<{\n sendMethod: PayableTransactionObject<void>;\n value: string;\n }> {\n const { amount, contractAddress, toChainId, toAccountAddress, gasFeePaymentMethod } = txSendParams;\n\n const cctpBridgeContract: CctpBridgeContract = this.getContract(cctpBridgeAbi as AbiItem[], contractAddress);\n let sendMethod: PayableTransactionObject<void>;\n let value: string;\n\n if (params.destinationToken.chainType === ChainType.SOLANA) {\n let recipientWalletAddress: string | number[];\n const receiverAccount = new PublicKey(params.toAccountAddress);\n const receiveMint = new PublicKey(params.destinationToken.tokenAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n const provider = buildAnchorProvider(\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL),\n params.toAccountAddress\n );\n anchor.setProvider(provider);\n const accountData = await anchor.Spl.token(provider).account.token.fetchNullable(receiveUserToken);\n if (accountData?.authority.equals(receiverAccount)) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n const tokenAccounts = await provider.connection.getTokenAccountsByOwner(receiverAccount, {\n mint: receiveMint,\n });\n if (tokenAccounts.value.length === 0 && !accountData) {\n recipientWalletAddress = formatAddress(receiveUserToken.toBase58(), ChainType.SOLANA, this.chainType);\n } else if (tokenAccounts.value.length > 0) {\n const firstTokenAccount = tokenAccounts.value[0];\n\n if (!firstTokenAccount?.pubkey) {\n throw new SdkError(\"First token account or its public key is undefined\");\n }\n recipientWalletAddress = formatAddress(firstTokenAccount.pubkey.toBase58(), ChainType.SOLANA, this.chainType);\n } else {\n throw new SdkError(\"Associated account has wrong owner\");\n }\n }\n\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n totalFee\n );\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridgeWithWalletAddress(\n amount,\n recipientWalletAddress,\n toAccountAddress,\n toChainId,\n 0\n );\n value = totalFee;\n }\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, totalFee);\n value = \"0\";\n } else {\n sendMethod = cctpBridgeContract.methods.bridge(amount, toAccountAddress, toChainId, 0);\n value = totalFee;\n }\n }\n return { sendMethod, value };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction) {\n const estimateGas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n const { transactionHash } = await this.web3.eth.sendTransaction({\n ...(rawTransaction as Object),\n gas: estimateGas,\n ...feeOptions,\n });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getBridgeContract(contractAddress: string): BridgeContract {\n return this.getContract<BridgeContract>(bridgeAbi as AbiItem[], contractAddress);\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainPrecision\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"gas\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"BridgingFeeFromTokens\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"bridgeTransactionCost\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"messageTransactionCost\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceiveFee\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Received\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"sendToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sendAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Swapped\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensReceived\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"pool\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addPool\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canSwap\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"getMessageGasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"protocol\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hasReceivedMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"message\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"hasSentMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"hashMessage\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"otherBridgeTokens\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isSupported\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"otherBridges\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"pools\",\n \"outputs\": [\n {\n \"internalType\": \"contract Pool\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"processedMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isProcessed\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"bridgeAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"registerBridge\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"tokenAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"removeBridgeToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"messageHash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"sentMessages\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"isSent\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Messenger\",\n \"name\": \"_allbridgeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setAllbridgeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"_gasOracle\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_rebalancer\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRebalancer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract WormholeMessenger\",\n \"name\": \"_wormholeMessenger\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setWormholeMessenger\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopSwap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swap\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"token\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"receiveToken\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"enum MessengerProtocol\",\n \"name\": \"messenger\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"feeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"swapAndBridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IERC20\",\n \"name\": \"token\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdrawBridgingFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGasTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainPrecision_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpMessenger_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"cctpTransmitter_\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedExtraGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ReceivedGas\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RecipientReplaced\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"TokensSentExtras\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromGas\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeFromTokens\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"relayerFee\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"receivedRelayerFeeTokenAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"TokensSent\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridge\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"recipientWalletAddress\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"relayerFeeTokenAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"bridgeWithWalletAddress\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"chainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalMessage\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"originalAttestation\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"newRecipient\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"changeRecipient\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"gasUsage\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"destinationChainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBridgingCostInTokens\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getDomainByChainId\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getTransactionCost\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"sourceChainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"nonce\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"isMessageProcessed\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"receiveTokens\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"domain\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"registerBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"adminFeeShareBP_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IGasOracle\",\n \"name\": \"gasOracle_\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setGasOracle\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"gasAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setGasUsage\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"chainId_\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"unregisterBridgeDestination\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"withdrawFeeInTokens\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdrawGas\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import * as anchor from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n\nexport async function getAssociatedAccount(publicKey: PublicKey, mintAccount: PublicKey): Promise<PublicKey> {\n return anchor.utils.token.associatedAddress({\n mint: mintAccount,\n owner: publicKey,\n });\n}\n\nexport async function getConfigAccount(programId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress([anchor.utils.bytes.utf8.encode(\"config\")], programId);\n return configPda;\n}\n\nexport async function getLockAccount(nonce: number[], bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [lockPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"lock\"), Uint8Array.from(nonce)],\n bridgeProgramId\n );\n return lockPda;\n}\n\nexport async function getPriceAccount(chainId: number, gasOracleProgramId: PublicKey): Promise<PublicKey> {\n const [pricePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"price_v2\"), Uint8Array.from([chainId])],\n gasOracleProgramId\n );\n return pricePda;\n}\n\nexport async function getAuthorityAccount(bridgeProgramId: PublicKey): Promise<PublicKey> {\n const configAccount = await getConfigAccount(bridgeProgramId);\n const [poolAuthority] = await PublicKey.findProgramAddress([configAccount.toBuffer()], bridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getCctpAuthorityAccount(\n cctpBridgeAccount: PublicKey,\n cctpBridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [poolAuthority] = await PublicKey.findProgramAddress([cctpBridgeAccount.toBuffer()], cctpBridgeProgramId);\n return poolAuthority;\n}\n\nexport async function getBridgeTokenAccount(mintAccount: PublicKey, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), mintAccount.toBytes()],\n bridgeProgramId\n );\n return poolPda;\n}\n\nexport async function getOtherChainTokenAccount(\n chainId: number,\n token: Buffer,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [otherChainTokenPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"other_bridge_token\"), Buffer.from([chainId]), token],\n bridgeProgramId\n );\n return otherChainTokenPda;\n}\n\nexport async function getChainBridgeAccount(chainId: number, bridgeProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"chain_bridge\"), Uint8Array.from([chainId])],\n bridgeProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getGasUsageAccount(chainId: number, messengerProgramId: PublicKey): Promise<PublicKey> {\n const [chainBridgePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"gas_usage\"), Uint8Array.from([chainId])],\n messengerProgramId\n );\n return chainBridgePda;\n}\n\nexport async function getSendMessageAccount(\n messageWithSigner: Uint8Array,\n messengerProgramId: PublicKey\n): Promise<PublicKey> {\n const [sentMessagePda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"sent_message\"), messageWithSigner],\n messengerProgramId\n );\n return sentMessagePda;\n}\n\nexport async function getUserDepositAccount(\n userPublicKey: PublicKey,\n tokenMintAccount: PublicKey,\n bridgeProgramId: PublicKey\n): Promise<PublicKey> {\n const [userDepositPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"user_deposit\"), tokenMintAccount.toBytes(), userPublicKey.toBytes()],\n bridgeProgramId\n );\n return userDepositPda;\n}\n\nexport async function getCctpBridgeAccount(mintAccount: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [configPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"cctp_bridge\"), mintAccount.toBytes()],\n cctpBridgeProgramId\n );\n return configPda;\n}\n\nexport async function getCctpBridgeTokenAccount(token: PublicKey, cctpBridgeProgramId: PublicKey): Promise<PublicKey> {\n const [poolPda] = await PublicKey.findProgramAddress(\n [anchor.utils.bytes.utf8.encode(\"token\"), token.toBytes()],\n cctpBridgeProgramId\n );\n return poolPda;\n}\n\nexport function getCctpLockAccount(cctpBridgeProgramId: PublicKey, messageSentEventDataAccount: PublicKey): PublicKey {\n const [tokenMessengerEventAuthority] = PublicKey.findProgramAddressSync(\n [anchor.utils.bytes.utf8.encode(\"lock\"), messageSentEventDataAccount.toBuffer()],\n cctpBridgeProgramId\n );\n return tokenMessengerEventAuthority;\n}\n\nexport function getCctpAccounts(\n domain: number,\n mintAccount: PublicKey,\n cctpTransmitterProgramId: PublicKey,\n cctpTokenMessengerMinter: PublicKey\n) {\n const messageTransmitterAccount = findProgramAddress(\"message_transmitter\", cctpTransmitterProgramId);\n const tokenMessenger = findProgramAddress(\"token_messenger\", cctpTokenMessengerMinter);\n const tokenMessengerEventAuthority = findProgramAddress(\"__event_authority\", cctpTokenMessengerMinter);\n const tokenMinter = findProgramAddress(\"token_minter\", cctpTokenMessengerMinter);\n const localToken = findProgramAddress(\"local_token\", cctpTokenMessengerMinter, [mintAccount]);\n const remoteTokenMessengerKey = findProgramAddress(\"remote_token_messenger\", cctpTokenMessengerMinter, [\n domain.toString(),\n ]);\n const authorityPda = findProgramAddress(\"sender_authority\", cctpTokenMessengerMinter);\n return {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n };\n}\n\nfunction findProgramAddress(\n label: string,\n programId: PublicKey,\n extraSeeds: (string | number[] | Buffer | PublicKey)[] = []\n): PublicKey {\n const seeds = [Buffer.from(anchor.utils.bytes.utf8.encode(label))];\n for (const extraSeed of extraSeeds) {\n if (typeof extraSeed === \"string\") {\n seeds.push(Buffer.from(anchor.utils.bytes.utf8.encode(extraSeed)));\n } else if (Array.isArray(extraSeed)) {\n seeds.push(Buffer.from(extraSeed));\n } else if (Buffer.isBuffer(extraSeed)) {\n seeds.push(extraSeed);\n } else {\n seeds.push(extraSeed.toBuffer());\n }\n }\n const res = PublicKey.findProgramAddressSync(seeds, programId);\n return res[0];\n}\n", "import { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\n\nexport function buildAnchorProvider(solanaRpcUrl: string, accountAddress: string): Provider {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SendParams, SwapParams } from \"./bridge.model\";\n\nexport abstract class ChainBridgeService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n /**\n * @Deprecated Use {@link buildRawTransactionSend} or {@link buildRawTransactionSwap} instead<p>\n * Send tokens through the ChainBridgeService\n * @param params\n */\n abstract send(params: SendParams): Promise<TransactionResponse>;\n abstract buildRawTransactionSend(params: SendParams): Promise<RawTransaction>;\n abstract buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction>;\n}\n", "import { PublicKey } from \"@solana/web3.js\";\nimport { Address } from \"@stellar/stellar-sdk\";\nimport { Big, BigSource } from \"big.js\";\nimport randomBytes from \"randombytes\";\n/* @ts-expect-error Could not find a declaration file for module \"tronweb\"*/\nimport * as TronWebLib from \"tronweb\";\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 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 { SendParams, TxSendParams, TxSwapParams } from \"./models\";\n\nexport function formatAddress(address: string, from: ChainType, to: ChainType): string | number[] {\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 }\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.toJSON().data;\n }\n case ChainType.SRB: {\n return buffer.toJSON().data;\n }\n }\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\nfunction 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 return Buffer.from(TronWebLib.utils.crypto.decodeBase58Address(address)).toString(\"hex\").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\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 txSwapParams.fromTokenAddress = formatAddress(sourceToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.toAccountAddress = params.toAccountAddress;\n txSwapParams.toTokenAddress = formatAddress(params.destinationToken.tokenAddress, bridgeChainType, bridgeChainType);\n txSwapParams.minimumReceiveAmount = params.minimumReceiveAmount\n ? convertFloatAmountToInt(params.minimumReceiveAmount, params.destinationToken.decimals).toFixed()\n : \"0\";\n return txSwapParams;\n}\n\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 txSendParams.fromTokenAddress = params.sourceToken.tokenAddress;\n\n txSendParams.toChainId = params.destinationToken.allbridgeChainId;\n txSendParams.toTokenAddress = params.destinationToken.tokenAddress;\n\n if (params.gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_STABLECOIN;\n } else {\n // default FeePaymentMethod.WITH_NATIVE_CURRENCY\n txSendParams.gasFeePaymentMethod = FeePaymentMethod.WITH_NATIVE_CURRENCY;\n }\n const sourceToken = params.sourceToken;\n if (params.messenger === 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 } else {\n txSendParams.contractAddress = sourceToken.bridgeAddress;\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 txSendParams.fromChainId,\n params.sourceToken.chainType,\n txSendParams.toChainId,\n sourceToken.decimals,\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 }\n } else {\n txSendParams.fee = fee;\n }\n\n //ExtraGas\n const { extraGas, extraGasFormat } = params;\n if (extraGas && +extraGas > 0) {\n if (extraGasFormat == AmountFormat.FLOAT) {\n switch (txSendParams.gasFeePaymentMethod) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY:\n txSendParams.extraGas = convertFloatAmountToInt(\n extraGas,\n Chains.getChainDecimalsByType(sourceToken.chainType)\n ).toFixed(0);\n break;\n case FeePaymentMethod.WITH_STABLECOIN:\n txSendParams.extraGas = convertFloatAmountToInt(extraGas, sourceToken.decimals).toFixed(0);\n break;\n }\n } else {\n txSendParams.extraGas = extraGas;\n }\n await validateExtraGasNotExceeded(\n txSendParams.extraGas,\n txSendParams.gasFeePaymentMethod,\n sourceToken,\n params.destinationToken,\n api\n );\n }\n\n txSendParams.fromTokenAddress = formatAddress(txSendParams.fromTokenAddress, bridgeChainType, bridgeChainType);\n txSendParams.toAccountAddress = formatAddress(params.toAccountAddress, toChainType, bridgeChainType);\n txSendParams.toTokenAddress = formatAddress(txSendParams.toTokenAddress, toChainType, bridgeChainType);\n if (txSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n validateAmountEnough(txSendParams.amount, sourceToken.decimals, txSendParams.fee, txSendParams.extraGas);\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 sourceAllbridgeChainId: number,\n sourceChainType: ChainType,\n destinationAllbridgeChainId: number,\n sourceChainTokenDecimals: number,\n messenger: Messenger,\n api: AllbridgeCoreClient\n): Promise<GasFeeOptions> {\n const transactionCostResponse = await api.getReceiveTransactionCost({\n sourceChainId: sourceAllbridgeChainId,\n destinationChainId: destinationAllbridgeChainId,\n messenger,\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(sourceChainType)\n ).toFixed(),\n },\n };\n if (transactionCostResponse.sourceNativeTokenPrice) {\n const gasFeeIntWithStables = convertAmountPrecision(\n new Big(transactionCostResponse.fee).mul(transactionCostResponse.sourceNativeTokenPrice),\n Chains.getChainDecimalsByType(sourceChainType),\n sourceChainTokenDecimals\n ).toFixed(0, Big.roundUp);\n gasFeeOptions[FeePaymentMethod.WITH_STABLECOIN] = {\n [AmountFormat.INT]: gasFeeIntWithStables,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(gasFeeIntWithStables, sourceChainTokenDecimals).toFixed(),\n };\n }\n\n return gasFeeOptions;\n}\n\nasync function validateExtraGasNotExceeded(\n extraGasInt: string,\n gasFeePaymentMethod: FeePaymentMethod,\n sourceToken: TokenWithChainDetails,\n destinationToken: TokenWithChainDetails,\n api: AllbridgeCoreClient\n) {\n const extraGasLimits = await getExtraGasMaxLimits(sourceToken, destinationToken, api);\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 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: Messenger.ALLBRIDGE,\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 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 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", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, SendParams, SwapParams } from \"./models\";\nimport { isSendParams } from \"./utils\";\nimport { getChainBridgeService, getSpender } from \"./index\";\n\nexport interface RawBridgeTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for initiating the transfer of tokens\n * @param params\n * @param provider - will be used to access the network\n */\n send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawBridgeTransactionBuilder implements RawBridgeTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n let provider: Provider | undefined;\n let approveData: ApproveParams;\n if (b) {\n provider = a as Provider;\n approveData = b;\n } else {\n approveData = a as ApproveParams;\n }\n const spender = getSpender(approveData.token, approveData.messenger);\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender,\n },\n provider\n );\n }\n\n async send(params: SwapParams | SendParams, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.sourceToken.decimals);\n if (isSendParams(params)) {\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSend(params);\n }\n return getChainBridgeService(\n params.sourceToken.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionSwap(params);\n }\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { BN, Program, Spl, web3 } from \"@project-serum/anchor\";\nimport {\n Connection,\n Keypair,\n PublicKey,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n TransactionMessageArgs,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\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 JupiterError,\n MethodNotSupportedError,\n SdkError,\n SdkRootError,\n} from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams, TxFeeParams } from \"../../../models\";\nimport { convertIntAmountToFloat } from \"../../../utils/calculation\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { SwapAndBridgeSolData, SwapAndBridgeSolDataCctpData } from \"../../models/sol\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { CctpBridge as CctpBridgeType, IDL as cctpBridgeIdl } from \"../../models/sol/types/cctp_bridge\";\nimport { getMessage, getTokenAccountData, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpBridgeTokenAccount,\n getCctpLockAccount,\n getChainBridgeAccount,\n getConfigAccount,\n getGasUsageAccount,\n getLockAccount,\n getOtherChainTokenAccount,\n getPriceAccount,\n getSendMessageAccount,\n} from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { addUnitLimitAndUnitPriceToTx, addUnitLimitAndUnitPriceToVersionedTx } from \"../../utils/sol/compute-budget\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport { JupiterService } from \"./jupiter\";\n\nexport interface SolanaBridgeParams {\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n jupiterUrl: string;\n}\n\nexport interface CctpParams {\n cctpTransmitterProgramId: string;\n cctpTokenMessengerMinter: string;\n cctpDomains: CctpDomains;\n}\n\n/**\n * Type representing a map of CCTP domains to their corresponding numeric values.\n *\n * @typedef {Record<string, number>} CctpDomains\n * @property {string} chainSymbol - The symbol of the chain representing one of the supported blockchain networks (e.g., \"ETH\" for Ethereum). For more details, see: {@link ChainSymbol}.\n * @property {number} value - The numeric value associated with the specified chain.\n */\nexport type CctpDomains = Record<string, number>;\n\nconst COMPUTE_UNIT_LIMIT = 1000000;\n\nconst JUP_ADD_INDEX = 1.1;\n\nexport class SolanaBridgeService extends ChainBridgeService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n jupiterService: JupiterService;\n\n constructor(public solanaRpcUrl: string, public params: SolanaBridgeParams, public api: AllbridgeCoreClient) {\n super();\n this.jupiterService = new JupiterService(solanaRpcUrl, params.jupiterUrl);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildSwapTransaction(\n txSwapParams,\n params.sourceToken.poolAddress,\n params.destinationToken.poolAddress,\n params.txFeeParams\n );\n }\n\n private async buildSwapTransaction(\n params: TxSwapParams,\n poolAddress: string,\n toPoolAddress: string,\n txFeeParams?: TxFeeParams\n ): Promise<VersionedTransaction> {\n const {\n fromAccountAddress,\n amount,\n contractAddress,\n fromTokenAddress,\n toTokenAddress,\n toAccountAddress,\n minimumReceiveAmount,\n } = params;\n const account = fromAccountAddress;\n const bridgeAddress = contractAddress;\n const tokenAddress = fromTokenAddress;\n const receiveTokenAddress = toTokenAddress;\n const receivePoolAddress = toPoolAddress;\n const receiverOriginal = toAccountAddress;\n\n const userAccount = new PublicKey(account);\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const configAccount = await getConfigAccount(bridge.programId);\n\n const sendMint = new PublicKey(tokenAddress);\n const sendBridgeToken = await getBridgeTokenAccount(sendMint, bridge.programId);\n const sendPool = new PublicKey(poolAddress);\n const sendUserToken = await getAssociatedAccount(userAccount, sendMint);\n\n const receiverAccount = new PublicKey(receiverOriginal);\n const receiveMint = new PublicKey(receiveTokenAddress);\n const receiveBridgeToken = await getBridgeTokenAccount(receiveMint, bridge.programId);\n const receivePool = new PublicKey(receivePoolAddress);\n const receiveUserToken = await getAssociatedAccount(receiverAccount, receiveMint);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ];\n\n try {\n await getTokenAccountData(receiveUserToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createReceiveUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: receiveMint,\n owner: receiverAccount,\n associatedAccount: receiveUserToken,\n })\n .instruction();\n preInstructions.push(createReceiveUserTokenInstruction);\n }\n const transaction = await bridge.methods\n .swap(new BN(amount), new BN(minimumReceiveAmount || 0))\n .accounts({\n payer: userAccount,\n config: configAccount,\n bridgeAuthority,\n user: userAccount,\n sendBridgeToken,\n sendMint,\n sendPool,\n sendUserToken,\n receiveBridgeToken,\n receiveMint,\n receivePool,\n receiveUserToken,\n })\n .preInstructions(preInstructions)\n .transaction();\n\n const connection = provider.connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n await addUnitLimitAndUnitPriceToTx(transaction, txFeeParams, this.solanaRpcUrl);\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n let solTxSendParams = this.addPoolAddress(params, txSendParams);\n\n const isJupiterForStableCoin = solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN;\n\n let jupTx;\n if (isJupiterForStableCoin) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, true);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n try {\n const { tx, solTxSendUpdatedParams } = await this.processJup(solTxSendParams, params, false);\n jupTx = tx;\n solTxSendParams = { ...solTxSendParams, ...solTxSendUpdatedParams };\n } catch (e) {\n if (e instanceof SdkRootError) {\n throw e;\n }\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation Jupiter swap transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation Jupiter swap transaction\");\n }\n }\n }\n\n let swapAndBridgeTx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined = undefined;\n switch (txSendParams.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n }\n\n if (isJupiterForStableCoin) {\n if (!jupTx) {\n throw new JupiterError(\"Swap tx is absent\");\n }\n swapAndBridgeTx = await this.jupiterService.amendJupiterWithSdkTx(jupTx, swapAndBridgeTx);\n }\n\n await addUnitLimitAndUnitPriceToVersionedTx(swapAndBridgeTx, params.txFeeParams, this.solanaRpcUrl);\n\n if (requiredMessageSigner) {\n swapAndBridgeTx.sign([requiredMessageSigner]);\n }\n return swapAndBridgeTx;\n }\n\n private async processJup(\n solTxSendParams: SolTxSendParams,\n params: SendParams,\n exactOut: boolean\n ): Promise<{\n tx: VersionedTransaction;\n solTxSendUpdatedParams: {\n amount: string;\n fee: string;\n extraGas?: string;\n gasFeePaymentMethod: FeePaymentMethod;\n };\n }> {\n const { fee, extraGas, gasFeePaymentMethod } = await this.convertStableCoinFeeAndExtraGasToNativeCurrency(\n params.sourceToken.decimals,\n solTxSendParams\n );\n\n let amountToProcess = exactOut ? Big(fee) : Big(solTxSendParams.fee);\n if (extraGas) {\n amountToProcess = amountToProcess.plus(extraGas);\n }\n if (!exactOut) {\n amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);\n }\n\n const { tx, amountIn } = await this.jupiterService.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut\n );\n\n let newAmount: string;\n if (exactOut) {\n if (!amountIn) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n newAmount = Big(solTxSendParams.amount).minus(Big(amountIn).mul(JUP_ADD_INDEX)).toFixed(0);\n } else {\n newAmount = Big(solTxSendParams.amount).minus(amountToProcess).toFixed(0);\n }\n if (Big(newAmount).lte(0)) {\n throw new AmountNotEnoughError(\n `Amount not enough to pay fee, ${convertIntAmountToFloat(\n Big(newAmount).minus(1).neg(),\n params.sourceToken.decimals\n ).toFixed()} stables is missing`\n );\n }\n return {\n tx: tx,\n solTxSendUpdatedParams: {\n amount: newAmount,\n fee: fee,\n extraGas: extraGas,\n gasFeePaymentMethod: gasFeePaymentMethod,\n },\n };\n }\n\n private addPoolAddress(params: SendParams, txSendParams: TxSendParams): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n\n async convertStableCoinFeeAndExtraGasToNativeCurrency(\n tokenDecimals: number,\n solTxSendParams: SolTxSendParams\n ): Promise<{ fee: string; extraGas?: string; gasFeePaymentMethod: FeePaymentMethod }> {\n if (solTxSendParams.gasFeePaymentMethod == FeePaymentMethod.WITH_STABLECOIN) {\n const sourceNativeTokenPrice = (\n await this.api.getReceiveTransactionCost({\n sourceChainId: solTxSendParams.fromChainId,\n destinationChainId: solTxSendParams.toChainId,\n messenger: solTxSendParams.messenger,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n let extraGas;\n if (solTxSendParams.extraGas) {\n extraGas = Big(solTxSendParams.extraGas)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - tokenDecimals))\n .toFixed(0);\n }\n return { fee, extraGas, gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY };\n }\n return {\n fee: solTxSendParams.fee,\n extraGas: solTxSendParams.extraGas,\n gasFeePaymentMethod: FeePaymentMethod.WITH_NATIVE_CURRENCY,\n };\n }\n\n private getExtraGasInstruction(\n extraGas: string,\n userAccount: PublicKey,\n configAccount: PublicKey\n ): TransactionInstruction | undefined {\n return web3.SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: configAccount,\n lamports: +extraGas,\n });\n }\n\n private async prepareSwapAndBridgeData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolData> {\n const {\n amount,\n contractAddress,\n fromChainId,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n poolAddress,\n extraGas,\n } = txSendParams;\n const tokenAddress = fromTokenAddress;\n const account = fromAccountAddress;\n const destinationChainId = toChainId;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n const bridgeAddress = contractAddress;\n const sourceChainId = fromChainId;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const bridge = new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n const nonce = Array.from(getNonce());\n const poolAccount = new PublicKey(poolAddress);\n const vUsdAmount = await getVUsdAmount(amount, bridge, poolAccount);\n\n const lockAccount = await getLockAccount(nonce, bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const userToken = await getAssociatedAccount(new PublicKey(account), new PublicKey(tokenAddress));\n const bridgeTokenAccount = await getBridgeTokenAccount(new PublicKey(tokenAddress), bridge.programId);\n const chainBridgeAccount = await getChainBridgeAccount(destinationChainId, bridge.programId);\n const otherBridgeTokenAccount = await getOtherChainTokenAccount(\n destinationChainId,\n Buffer.from(receiveTokenAddress),\n bridge.programId\n );\n\n const configAccount = await getConfigAccount(bridge.programId);\n const configAccountInfo = await bridge.account.config.fetch(configAccount);\n const priceAccount = await getPriceAccount(destinationChainId, configAccountInfo.gasOracleProgramId);\n const thisGasPriceAccount = await getPriceAccount(sourceChainId, configAccountInfo.gasOracleProgramId);\n\n const message = getMessage({\n amount: vUsdAmount,\n recipient: Buffer.from(receiverInBuffer32),\n nonce: Buffer.from(nonce),\n receiveToken: Buffer.from(receiveTokenAddress),\n destinationChainId,\n sourceChainId,\n chainBridge: (await getAuthorityAccount(bridge.programId)).toBuffer(),\n });\n\n const swapAndBridgeData = {} as SwapAndBridgeSolData;\n\n swapAndBridgeData.bridge = bridge;\n swapAndBridgeData.amount = new BN(amount);\n swapAndBridgeData.vusdAmount = new BN(vUsdAmount);\n swapAndBridgeData.nonce = nonce;\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.poolAccount = poolAccount;\n swapAndBridgeData.lockAccount = lockAccount;\n swapAndBridgeData.bridgeAuthority = bridgeAuthority;\n swapAndBridgeData.userToken = userToken;\n swapAndBridgeData.bridgeTokenAccount = bridgeTokenAccount;\n swapAndBridgeData.chainBridgeAccount = chainBridgeAccount;\n swapAndBridgeData.otherBridgeTokenAccount = otherBridgeTokenAccount;\n swapAndBridgeData.userAccount = new PublicKey(account);\n swapAndBridgeData.destinationChainId = destinationChainId;\n // @ts-expect-error\n swapAndBridgeData.mint = new PublicKey(tokenAddress);\n swapAndBridgeData.config = configAccount;\n swapAndBridgeData.configAccountInfo = configAccountInfo;\n swapAndBridgeData.gasPrice = priceAccount;\n swapAndBridgeData.thisGasPrice = thisGasPriceAccount;\n swapAndBridgeData.message = message;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n configAccount\n );\n }\n return swapAndBridgeData;\n }\n\n private async buildSwapAndBridgeAllbridgeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<VersionedTransaction> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const allbridgeMessengerProgramId = configAccountInfo.allbridgeMessengerProgramId;\n const messengerGasUsageAccount = await getGasUsageAccount(destinationChainId, allbridgeMessengerProgramId);\n const messengerConfig = await getConfigAccount(allbridgeMessengerProgramId);\n\n const sentMessageAccount = await getSendMessageAccount(message, allbridgeMessengerProgramId);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const transaction = await bridge.methods\n .swapAndBridge({\n vusdAmount,\n nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n messenger: allbridgeMessengerProgramId,\n messengerGasUsage: messengerGasUsageAccount,\n messengerConfig,\n sentMessageAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString()).connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return await this.convertToVersionedTransaction(transaction, connection);\n }\n\n private async convertToVersionedTransaction(tx: Transaction, connection: Connection): Promise<VersionedTransaction> {\n const allbridgeTableAccount = await connection\n .getAddressLookupTable(new PublicKey(this.params.solanaLookUpTable))\n .then((res) => res.value);\n if (!allbridgeTableAccount) {\n throw new SdkError(\"Cannot find allbridgeLookupTableAccount\");\n }\n const messageV0 = new web3.TransactionMessage({\n payerKey: tx.feePayer,\n recentBlockhash: tx.recentBlockhash,\n instructions: tx.instructions,\n } as TransactionMessageArgs).compileToV0Message([allbridgeTableAccount]);\n return new web3.VersionedTransaction(messageV0);\n }\n\n private async buildSwapAndBridgeWormholeTransaction(\n swapAndBridgeData: SwapAndBridgeSolData\n ): Promise<{ transaction: VersionedTransaction; messageAccount: Keypair }> {\n const {\n bridge,\n vusdAmount,\n nonce,\n recipient,\n receiveToken,\n poolAccount,\n lockAccount,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n otherBridgeTokenAccount,\n userAccount,\n destinationChainId,\n mint,\n config,\n configAccountInfo,\n gasPrice,\n thisGasPrice,\n message,\n extraGasInstruction,\n } = swapAndBridgeData;\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n\n const [whBridgeAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Bridge\")],\n new PublicKey(wormholeProgramId)\n );\n const [whFeeCollectorAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"fee_collector\")],\n new PublicKey(wormholeProgramId)\n );\n const [whSequenceAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Sequence\"), bridgeAuthority.toBuffer()],\n new PublicKey(wormholeProgramId)\n );\n\n const messengerGasUsageAccount = await getGasUsageAccount(\n destinationChainId,\n configAccountInfo.wormholeMessengerProgramId\n );\n const wormholeMessengerConfigAccount = await getConfigAccount(configAccountInfo.wormholeMessengerProgramId);\n const messageAccount = Keypair.generate();\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, userAccount.toString());\n\n const bridgeAccountInfo = await provider.connection.getAccountInfo(whBridgeAccount);\n if (bridgeAccountInfo == null) {\n throw new SdkError(\"Cannot fetch wormhole bridge account info\");\n }\n const feeLamports = new BN(bridgeAccountInfo.data.slice(16, 24), \"le\").toString();\n\n const feeInstruction = SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: whFeeCollectorAccount,\n lamports: +feeLamports,\n });\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const accounts = {\n mint,\n user: userAccount,\n config,\n lock: lockAccount,\n pool: poolAccount,\n gasPrice,\n thisGasPrice,\n bridgeAuthority,\n userToken,\n bridgeToken: bridgeTokenAccount,\n chainBridge: chainBridgeAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n messengerGasUsage: messengerGasUsageAccount,\n wormholeProgram: wormholeProgramId,\n bridge: whBridgeAccount,\n message: messageAccount.publicKey,\n wormholeMessenger: configAccountInfo.wormholeMessengerProgramId,\n sequence: whSequenceAccount,\n feeCollector: whFeeCollectorAccount,\n wormholeMessengerConfig: wormholeMessengerConfigAccount,\n clock: web3.SYSVAR_CLOCK_PUBKEY,\n };\n\n const transaction = await bridge.methods\n .swapAndBridgeWormhole({\n vusdAmount,\n nonce: nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts(accounts)\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: COMPUTE_UNIT_LIMIT,\n }),\n feeInstruction,\n ])\n .postInstructions(instructions)\n .signers([messageAccount])\n .transaction();\n transaction.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(transaction, provider.connection), messageAccount };\n }\n\n private async prepareSwapAndBridgeCctpData(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolDataCctpData> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpAddress = contractAddress;\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const CHAIN_ID = 4;\n\n const account = fromAccountAddress;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const cctpBridge: Program<CctpBridgeType> = new Program<CctpBridgeType>(cctpBridgeIdl, cctpAddress, provider);\n const mint = new PublicKey(fromTokenAddress);\n const cctpBridgeAccount = await getCctpBridgeAccount(mint, cctpBridge.programId);\n const userAccount = new PublicKey(account);\n\n const configAccountInfo = await cctpBridge.account.cctpBridge.fetch(cctpBridgeAccount);\n\n const swapAndBridgeData = {} as SwapAndBridgeSolDataCctpData;\n\n swapAndBridgeData.cctpBridge = cctpBridge;\n swapAndBridgeData.cctpBridgeAccount = cctpBridgeAccount;\n swapAndBridgeData.cctpAddressAccount = new PublicKey(cctpAddress);\n swapAndBridgeData.amount = new BN(amount);\n // @ts-expect-error\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n // @ts-expect-error\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.userToken = await getAssociatedAccount(userAccount, mint);\n swapAndBridgeData.bridgeAuthority = await getCctpAuthorityAccount(cctpBridgeAccount, cctpBridge.programId);\n swapAndBridgeData.bridgeTokenAccount = await getCctpBridgeTokenAccount(mint, cctpBridge.programId);\n swapAndBridgeData.chainBridgeAccount = await getChainBridgeAccount(toChainId, cctpBridge.programId);\n swapAndBridgeData.userAccount = userAccount;\n swapAndBridgeData.destinationChainId = toChainId;\n swapAndBridgeData.mint = mint;\n swapAndBridgeData.gasPrice = await getPriceAccount(toChainId, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.thisGasPrice = await getPriceAccount(CHAIN_ID, configAccountInfo.gasOracleProgramId);\n swapAndBridgeData.provider = provider;\n\n if (extraGas) {\n swapAndBridgeData.extraGasInstruction = this.getExtraGasInstruction(\n extraGas,\n swapAndBridgeData.userAccount,\n cctpBridgeAccount\n );\n }\n return swapAndBridgeData;\n }\n\n async buildSwapAndBridgeCctpTransaction(\n destinationChainSymbol: string,\n swapAndBridgeData: SwapAndBridgeSolDataCctpData\n ): Promise<{ transaction: VersionedTransaction; messageSentEventDataKeypair: Keypair }> {\n const {\n cctpBridge,\n cctpBridgeAccount,\n amount,\n recipient,\n receiveToken,\n bridgeAuthority,\n userToken,\n bridgeTokenAccount,\n chainBridgeAccount,\n userAccount,\n destinationChainId,\n mint,\n gasPrice,\n thisGasPrice,\n extraGasInstruction,\n provider,\n } = swapAndBridgeData;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;\n const cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(\"CCTP is not configured\");\n }\n const cctpTransmitterProgramId = new PublicKey(cctpTransmitterProgramIdAddress);\n const cctpTokenMessengerMinter = new PublicKey(cctpTokenMessengerMinterAddress);\n const {\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n } = getCctpAccounts(domain, mint, cctpTransmitterProgramId, cctpTokenMessengerMinter);\n\n const instructions: TransactionInstruction[] = [];\n if (extraGasInstruction) {\n instructions.push(extraGasInstruction);\n }\n\n const messageSentEventDataKeypair = Keypair.generate();\n const lockAccount = getCctpLockAccount(cctpBridge.programId, messageSentEventDataKeypair.publicKey);\n\n const tx = await cctpBridge.methods\n .bridge({\n amount,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint: mint,\n user: userAccount,\n cctpBridge: cctpBridgeAccount,\n\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n lock: lockAccount,\n\n cctpMessenger: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger: tokenMessenger,\n tokenMinter: tokenMinter,\n localToken: localToken,\n remoteTokenMessengerKey: remoteTokenMessengerKey,\n authorityPda: authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n\n bridgeToken: bridgeTokenAccount,\n gasPrice: gasPrice,\n thisGasPrice: thisGasPrice,\n chainBridge: chainBridgeAccount,\n userToken,\n bridgeAuthority: bridgeAuthority,\n })\n .preInstructions([\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 2000000,\n }),\n ])\n .postInstructions(instructions)\n .transaction();\n const connection = provider.connection;\n tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n tx.feePayer = userAccount;\n return { transaction: await this.convertToVersionedTransaction(tx, connection), messageSentEventDataKeypair };\n }\n\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n}\n\ninterface SolTxSendParams extends TxSendParams {\n poolAddress: string;\n}\n", "export interface Bridge {\n version: \"0.1.0\";\n name: \"bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"initializePool\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"token\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializePoolArgs\";\n };\n }\n ];\n },\n {\n name: \"initDepositAccount\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"deposit\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdraw\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amountLp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"swapAndBridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sentMessageAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swapAndBridgeWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"wormholeMessengerConfig\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"wormholeProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"message\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sequence\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"feeCollector\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"messengerGasUsage\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"clock\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"swap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"sendMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"receiveMint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendPool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivePool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"sendUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receiveUserToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwap\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"receiveAndSwapWormhole\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"receivedMessageAccount\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"unlock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messengerProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UnlockArgs\";\n };\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"claimRewards\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAdmin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAdmin\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"startBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"stopBridge\";\n accounts: [\n {\n name: \"stopAuthority\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"actionType\";\n type: {\n defined: \"ActionType\";\n };\n }\n ];\n },\n {\n name: \"setRebalancer\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"rebalancer\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setStopAuthority\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"newAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setAllbridgeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setWormholeMessengerProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"setPoolFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setBalanceRatioMin\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n },\n {\n name: \"setPoolAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"addOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"removeOtherBridgeToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"config\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"otherBridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"tokenAddress\";\n type: {\n array: [\"u8\", 32];\n };\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"adjustTotalLpAmount\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"config\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"pool\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"userDeposit\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n }\n ];\n accounts: [\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"address\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"config\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"rebalancer\";\n type: \"publicKey\";\n },\n {\n name: \"stopAuthority\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"canSwap\";\n type: \"bool\";\n },\n {\n name: \"canDeposit\";\n type: \"bool\";\n },\n {\n name: \"canWithdraw\";\n type: \"bool\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"sentTokenAddress\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"slot\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"otherBridgeToken\";\n type: {\n kind: \"struct\";\n fields: [];\n };\n },\n {\n name: \"pool\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"d\";\n type: \"u64\";\n },\n {\n name: \"tokenBalance\";\n type: \"u64\";\n },\n {\n name: \"vUsdBalance\";\n type: \"u64\";\n },\n {\n name: \"reserves\";\n type: \"u64\";\n },\n {\n name: \"decimals\";\n type: \"u8\";\n },\n {\n name: \"totalLpAmount\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"accRewardPerShareP\";\n type: \"u128\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"unlock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"fee\";\n type: \"u64\";\n },\n {\n name: \"vUsdAmount\";\n type: \"u64\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"userDeposit\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"userAddress\";\n type: \"publicKey\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"lpAmount\";\n type: \"u64\";\n },\n {\n name: \"rewardDebt\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainBridgeAddress\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"allbridgeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"wormholeMessengerProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"InitializePoolArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"a\";\n type: \"u64\";\n },\n {\n name: \"feeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"balanceRatioMinBp\";\n type: \"u16\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"vusdAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"UnlockArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"nonce\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: \"publicKey\";\n },\n {\n name: \"sourceChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: \"publicKey\";\n },\n {\n name: \"messenger\";\n type: {\n defined: \"Messenger\";\n };\n },\n {\n name: \"hash\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"receiveAmountMin\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"RewardError\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"FeeTooHigh\";\n }\n ];\n };\n },\n {\n name: \"Messenger\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"None\";\n },\n {\n name: \"Allbridge\";\n },\n {\n name: \"Wormhole\";\n }\n ];\n };\n },\n {\n name: \"ActionType\";\n type: {\n kind: \"enum\";\n variants: [\n {\n name: \"Deposit\";\n },\n {\n name: \"Withdraw\";\n },\n {\n name: \"Swap\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"AccountAlreadyInitialized\";\n msg: \"This account has already been initialized\";\n },\n {\n code: 6001;\n name: \"AdminAuthorityInvalid\";\n msg: \"This instruction requires admin authority\";\n },\n {\n code: 6002;\n name: \"InvalidSignature\";\n msg: \"Provided signature has wrong signer or message\";\n },\n {\n code: 6003;\n name: \"InvalidHash\";\n msg: \"Wrong unlock message hash\";\n },\n {\n code: 6004;\n name: \"PoolOverflow\";\n msg: \"PoolInfo overflow\";\n },\n {\n code: 6005;\n name: \"ReservesExhausted\";\n msg: \"Reserves exhausted\";\n },\n {\n code: 6006;\n name: \"ZeroAmount\";\n msg: \"Zero amount\";\n },\n {\n code: 6007;\n name: \"ZeroChanges\";\n msg: \"Zero changes\";\n },\n {\n code: 6008;\n name: \"HighVusdAmount\";\n msg: \"vUSD amount is too high\";\n },\n {\n code: 6009;\n name: \"BalanceRatioExceeded\";\n msg: \"Balance ratio exceeded\";\n },\n {\n code: 6010;\n name: \"InsufficientReceivedAmount\";\n msg: \"Received insufficient amount\";\n },\n {\n code: 6011;\n name: \"ForbiddenAction\";\n msg: \"ForbiddenAction\";\n },\n {\n code: 6012;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: Bridge = {\n version: \"0.1.0\",\n name: \"bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"initializePool\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"token\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializePoolArgs\",\n },\n },\n ],\n },\n {\n name: \"initDepositAccount\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"deposit\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdraw\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amountLp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"swapAndBridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sentMessageAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swapAndBridgeWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"wormholeMessengerConfig\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"wormholeProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"message\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sequence\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"feeCollector\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"messengerGasUsage\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"clock\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"swap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"sendMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"receiveMint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendPool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivePool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"sendUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receiveUserToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwap\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"receiveAndSwapWormhole\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"receivedMessageAccount\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"unlock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messengerProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UnlockArgs\",\n },\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"claimRewards\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAdmin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAdmin\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"startBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"stopBridge\",\n accounts: [\n {\n name: \"stopAuthority\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"actionType\",\n type: {\n defined: \"ActionType\",\n },\n },\n ],\n },\n {\n name: \"setRebalancer\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"rebalancer\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setStopAuthority\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"newAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setAllbridgeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setWormholeMessengerProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"setPoolFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setBalanceRatioMin\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n {\n name: \"setPoolAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"addOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"removeOtherBridgeToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"config\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"otherBridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"tokenAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"adjustTotalLpAmount\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"config\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"pool\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"userDeposit\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n ],\n accounts: [\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"address\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"config\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"rebalancer\",\n type: \"publicKey\",\n },\n {\n name: \"stopAuthority\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"canSwap\",\n type: \"bool\",\n },\n {\n name: \"canDeposit\",\n type: \"bool\",\n },\n {\n name: \"canWithdraw\",\n type: \"bool\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"sentTokenAddress\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"otherBridgeToken\",\n type: {\n kind: \"struct\",\n fields: [],\n },\n },\n {\n name: \"pool\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"d\",\n type: \"u64\",\n },\n {\n name: \"tokenBalance\",\n type: \"u64\",\n },\n {\n name: \"vUsdBalance\",\n type: \"u64\",\n },\n {\n name: \"reserves\",\n type: \"u64\",\n },\n {\n name: \"decimals\",\n type: \"u8\",\n },\n {\n name: \"totalLpAmount\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"accRewardPerShareP\",\n type: \"u128\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"unlock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"fee\",\n type: \"u64\",\n },\n {\n name: \"vUsdAmount\",\n type: \"u64\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"userDeposit\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"userAddress\",\n type: \"publicKey\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"lpAmount\",\n type: \"u64\",\n },\n {\n name: \"rewardDebt\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainBridgeAddress\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"allbridgeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"wormholeMessengerProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"InitializePoolArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"a\",\n type: \"u64\",\n },\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"balanceRatioMinBp\",\n type: \"u16\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"vusdAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"UnlockArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"nonce\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: \"publicKey\",\n },\n {\n name: \"sourceChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: \"publicKey\",\n },\n {\n name: \"messenger\",\n type: {\n defined: \"Messenger\",\n },\n },\n {\n name: \"hash\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"receiveAmountMin\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"RewardError\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"FeeTooHigh\",\n },\n ],\n },\n },\n {\n name: \"Messenger\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"None\",\n },\n {\n name: \"Allbridge\",\n },\n {\n name: \"Wormhole\",\n },\n ],\n },\n },\n {\n name: \"ActionType\",\n type: {\n kind: \"enum\",\n variants: [\n {\n name: \"Deposit\",\n },\n {\n name: \"Withdraw\",\n },\n {\n name: \"Swap\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"AccountAlreadyInitialized\",\n msg: \"This account has already been initialized\",\n },\n {\n code: 6001,\n name: \"AdminAuthorityInvalid\",\n msg: \"This instruction requires admin authority\",\n },\n {\n code: 6002,\n name: \"InvalidSignature\",\n msg: \"Provided signature has wrong signer or message\",\n },\n {\n code: 6003,\n name: \"InvalidHash\",\n msg: \"Wrong unlock message hash\",\n },\n {\n code: 6004,\n name: \"PoolOverflow\",\n msg: \"PoolInfo overflow\",\n },\n {\n code: 6005,\n name: \"ReservesExhausted\",\n msg: \"Reserves exhausted\",\n },\n {\n code: 6006,\n name: \"ZeroAmount\",\n msg: \"Zero amount\",\n },\n {\n code: 6007,\n name: \"ZeroChanges\",\n msg: \"Zero changes\",\n },\n {\n code: 6008,\n name: \"HighVusdAmount\",\n msg: \"vUSD amount is too high\",\n },\n {\n code: 6009,\n name: \"BalanceRatioExceeded\",\n msg: \"Balance ratio exceeded\",\n },\n {\n code: 6010,\n name: \"InsufficientReceivedAmount\",\n msg: \"Received insufficient amount\",\n },\n {\n code: 6011,\n name: \"ForbiddenAction\",\n msg: \"ForbiddenAction\",\n },\n {\n code: 6012,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "export interface CctpBridge {\n version: \"0.1.0\";\n name: \"cctp_bridge\";\n instructions: [\n {\n name: \"initialize\";\n accounts: [\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"admin\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"rent\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"InitializeArgs\";\n };\n }\n ];\n },\n {\n name: \"bridge\";\n accounts: [\n {\n name: \"user\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"messageSentEventData\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"lock\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"cctpMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"messageTransmitterAccount\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"tokenMessenger\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenMinter\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"localToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"remoteTokenMessengerKey\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"authorityPda\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"eventAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"gasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"thisGasPrice\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"userToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"BridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"registerChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"payer\";\n isMut: true;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"RegisterChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"updateChainBridge\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"chainBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"args\";\n type: {\n defined: \"UpdateChainBridgeArgs\";\n };\n }\n ];\n },\n {\n name: \"setAdminFeeShare\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"feeShareBp\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"setGasOracleProgramId\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n },\n {\n name: \"withdrawGasToken\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"recipient\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n },\n {\n name: \"withdrawAdminFee\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"bridgeToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"adminToken\";\n isMut: true;\n isSigner: false;\n },\n {\n name: \"bridgeAuthority\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"tokenProgram\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"systemProgram\";\n isMut: false;\n isSigner: false;\n }\n ];\n args: [];\n },\n {\n name: \"setCctpTokenMessengerMinter\";\n accounts: [\n {\n name: \"admin\";\n isMut: false;\n isSigner: true;\n },\n {\n name: \"mint\";\n isMut: false;\n isSigner: false;\n },\n {\n name: \"cctpBridge\";\n isMut: true;\n isSigner: false;\n }\n ];\n args: [\n {\n name: \"newProgramId\";\n type: \"publicKey\";\n }\n ];\n }\n ];\n accounts: [\n {\n name: \"cctpBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"mint\";\n type: \"publicKey\";\n },\n {\n name: \"admin\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n },\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"authorityBumpSeed\";\n type: \"u8\";\n },\n {\n name: \"adminFeeShareBp\";\n type: \"u64\";\n },\n {\n name: \"adminFeeAmount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"chainBridge\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n }\n ];\n };\n },\n {\n name: \"lock\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"sender\";\n type: \"publicKey\";\n },\n {\n name: \"amount\";\n type: \"u64\";\n },\n {\n name: \"adminFee\";\n type: \"u64\";\n },\n {\n name: \"relayerFee\";\n type: \"u64\";\n },\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"slot\";\n type: \"u64\";\n }\n ];\n };\n }\n ];\n types: [\n {\n name: \"RegisterChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"UpdateChainBridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"chainId\";\n type: \"u8\";\n },\n {\n name: \"gasUsage\";\n type: \"u64\";\n },\n {\n name: \"domain\";\n type: \"u32\";\n },\n {\n name: \"mint\";\n type: \"publicKey\";\n }\n ];\n };\n },\n {\n name: \"BridgeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"recipient\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"destinationChainId\";\n type: \"u8\";\n },\n {\n name: \"receiveToken\";\n type: {\n array: [\"u8\", 32];\n };\n },\n {\n name: \"amount\";\n type: \"u64\";\n }\n ];\n };\n },\n {\n name: \"InitializeArgs\";\n type: {\n kind: \"struct\";\n fields: [\n {\n name: \"gasOracleProgramId\";\n type: \"publicKey\";\n },\n {\n name: \"cctpTokenMessengerMinter\";\n type: \"publicKey\";\n }\n ];\n };\n }\n ];\n errors: [\n {\n code: 6000;\n name: \"ValueTooHigh\";\n msg: \"Value is too high\";\n }\n ];\n}\n\nexport const IDL: CctpBridge = {\n version: \"0.1.0\",\n name: \"cctp_bridge\",\n instructions: [\n {\n name: \"initialize\",\n accounts: [\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"admin\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"rent\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"InitializeArgs\",\n },\n },\n ],\n },\n {\n name: \"bridge\",\n accounts: [\n {\n name: \"user\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"messageSentEventData\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"lock\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"cctpMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"messageTransmitterAccount\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"tokenMessenger\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenMinter\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"localToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"remoteTokenMessengerKey\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"authorityPda\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"eventAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"gasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"thisGasPrice\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"userToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"BridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"registerChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"payer\",\n isMut: true,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"RegisterChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"updateChainBridge\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"chainBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"args\",\n type: {\n defined: \"UpdateChainBridgeArgs\",\n },\n },\n ],\n },\n {\n name: \"setAdminFeeShare\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"feeShareBp\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"setGasOracleProgramId\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n {\n name: \"withdrawGasToken\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"recipient\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n {\n name: \"withdrawAdminFee\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"bridgeToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"adminToken\",\n isMut: true,\n isSigner: false,\n },\n {\n name: \"bridgeAuthority\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"tokenProgram\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"systemProgram\",\n isMut: false,\n isSigner: false,\n },\n ],\n args: [],\n },\n {\n name: \"setCctpTokenMessengerMinter\",\n accounts: [\n {\n name: \"admin\",\n isMut: false,\n isSigner: true,\n },\n {\n name: \"mint\",\n isMut: false,\n isSigner: false,\n },\n {\n name: \"cctpBridge\",\n isMut: true,\n isSigner: false,\n },\n ],\n args: [\n {\n name: \"newProgramId\",\n type: \"publicKey\",\n },\n ],\n },\n ],\n accounts: [\n {\n name: \"cctpBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n {\n name: \"admin\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"authorityBumpSeed\",\n type: \"u8\",\n },\n {\n name: \"adminFeeShareBp\",\n type: \"u64\",\n },\n {\n name: \"adminFeeAmount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"chainBridge\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n ],\n },\n },\n {\n name: \"lock\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"sender\",\n type: \"publicKey\",\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n {\n name: \"adminFee\",\n type: \"u64\",\n },\n {\n name: \"relayerFee\",\n type: \"u64\",\n },\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"slot\",\n type: \"u64\",\n },\n ],\n },\n },\n ],\n types: [\n {\n name: \"RegisterChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"UpdateChainBridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"chainId\",\n type: \"u8\",\n },\n {\n name: \"gasUsage\",\n type: \"u64\",\n },\n {\n name: \"domain\",\n type: \"u32\",\n },\n {\n name: \"mint\",\n type: \"publicKey\",\n },\n ],\n },\n },\n {\n name: \"BridgeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"recipient\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"destinationChainId\",\n type: \"u8\",\n },\n {\n name: \"receiveToken\",\n type: {\n array: [\"u8\", 32],\n },\n },\n {\n name: \"amount\",\n type: \"u64\",\n },\n ],\n },\n },\n {\n name: \"InitializeArgs\",\n type: {\n kind: \"struct\",\n fields: [\n {\n name: \"gasOracleProgramId\",\n type: \"publicKey\",\n },\n {\n name: \"cctpTokenMessengerMinter\",\n type: \"publicKey\",\n },\n ],\n },\n },\n ],\n errors: [\n {\n code: 6000,\n name: \"ValueTooHigh\",\n msg: \"Value is too high\",\n },\n ],\n};\n", "import { Program, Provider, Spl } from \"@project-serum/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\n/* eslint-disable-next-line import/no-named-as-default */\nimport Big from \"big.js\";\nimport Web3 from \"web3\";\nimport { InvalidTxError, SdkError } from \"../../../exceptions\";\nimport { PoolInfo } from \"../../../tokens-info\";\nimport { swapToVUsd } from \"../../../utils/calculation\";\nimport { TokenAccountData } from \"../../models/sol\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\n\nexport async function getTokenAccountData(account: PublicKey, provider: Provider): Promise<TokenAccountData> {\n return await Spl.token(provider).account.token.fetch(account);\n}\n\nexport async function getVUsdAmount(\n amount: string,\n bridge: Program<BridgeType>,\n poolAccount: PublicKey\n): Promise<string> {\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const decimals = poolAccountInfo.decimals;\n const feeShare = Big(poolAccountInfo.feeShareBp.toString()).div(10000).toFixed();\n const poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\"> = {\n aValue: poolAccountInfo.a.toString(),\n dValue: poolAccountInfo.d.toString(),\n totalLpAmount: poolAccountInfo.totalLpAmount.toString(),\n tokenBalance: poolAccountInfo.tokenBalance.toString(),\n vUsdBalance: poolAccountInfo.vUsdBalance.toString(),\n accRewardPerShareP: poolAccountInfo.accRewardPerShareP.toString(),\n };\n return swapToVUsd(amount, { decimals, feeShare }, poolInfo);\n}\n\nexport function getMessage(args: {\n amount: string;\n recipient: Buffer;\n sourceChainId: number;\n destinationChainId: number;\n receiveToken: Buffer;\n nonce: Buffer;\n chainBridge: Buffer;\n}): Buffer {\n const amount = args.amount;\n const recipient = \"0x\" + args.recipient.toString(\"hex\");\n const sourceChainId = args.sourceChainId;\n const destinationsChainId = args.destinationChainId;\n const receiveToken = \"0x\" + args.receiveToken.toString(\"hex\");\n const nonce = \"0x\" + args.nonce.toString(\"hex\");\n const messenger = 1;\n const chainBridge = \"0x\" + args.chainBridge.toString(\"hex\");\n\n const message = Web3.utils.encodePacked(\n { t: \"uint256\", v: amount },\n { t: \"bytes32\", v: recipient },\n { t: \"uint256\", v: sourceChainId },\n { t: \"bytes32\", v: receiveToken },\n { t: \"uint256\", v: nonce },\n { t: \"uint8\", v: messenger }\n );\n\n if (!message) {\n throw new SdkError(\"message cannot be undefined\");\n }\n const hash = Web3.utils.keccak256(Buffer.from(message.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashBuffer = Buffer.from(hash.replace(\"0x\", \"\"), \"hex\");\n hashBuffer[0] = sourceChainId;\n hashBuffer[1] = destinationsChainId;\n\n const messageWithSigner = Web3.utils.encodePacked(\n { t: \"bytes32\", v: \"0x\" + hashBuffer.toString(\"hex\") },\n { t: \"bytes32\", v: chainBridge }\n );\n\n if (!messageWithSigner) {\n throw new InvalidTxError(\"messageWithSigner cannot be undefined\");\n }\n\n const hashWithSigner = Web3.utils.keccak256(Buffer.from(messageWithSigner.replace(\"0x\", \"\"), \"hex\") as any);\n\n const hashWithSignerBuffer = Buffer.from(hashWithSigner.replace(\"0x\", \"\"), \"hex\");\n\n hashWithSignerBuffer[0] = hashBuffer[0];\n hashWithSignerBuffer[1] = hashBuffer[1];\n return hashWithSignerBuffer;\n}\n", "import {\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Big } from \"big.js\";\nimport { TxTooLargeError } from \"../../../exceptions\";\nimport { toPowBase10 } from \"../../../utils/calculation\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\nimport { SolanaAutoTxFee, TxFeeParams } from \"../../models\";\n\nexport async function addUnitLimitAndUnitPriceToTx(\n transaction: Transaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */\n const simUnitsConsumed = (await connection.simulateTransaction(transaction)).value.unitsConsumed!;\n await addUnitLimitAndUnitPriceToInstructions(transaction.instructions, simUnitsConsumed, txFeeParams, connection);\n}\n\nexport async function addUnitLimitAndUnitPriceToVersionedTx(\n transaction: VersionedTransaction,\n txFeeParams: TxFeeParams | undefined,\n solanaRpcUrl: string\n) {\n const connection = new Connection(solanaRpcUrl, \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n\n if (transaction.serialize().length > 1232) {\n throw new TxTooLargeError();\n }\n\n // const simUnitsConsumed = (await connection.simulateTransaction(transaction, { replaceRecentBlockhash: true })).value\n // .unitsConsumed!;\n const simUnitsConsumed = 769230; // 1000000/1.3\n\n await addUnitLimitAndUnitPriceToInstructions(message.instructions, simUnitsConsumed, txFeeParams, connection);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n}\n\nasync function addUnitLimitAndUnitPriceToInstructions(\n instructions: TransactionInstruction[],\n simUnitsConsumed: number,\n txFeeParams: TxFeeParams | undefined,\n connection: Connection\n) {\n if (simUnitsConsumed > 0) {\n const units = updateUnitLimit(simUnitsConsumed, instructions);\n if (txFeeParams?.solana) {\n const solanaTxFee = txFeeParams.solana;\n if (solanaTxFee === SolanaAutoTxFee) {\n await updateUnitPrice(instructions, connection);\n } else if (\"pricePerUnitInMicroLamports\" in solanaTxFee) {\n await updateUnitPrice(instructions, connection, solanaTxFee.pricePerUnitInMicroLamports);\n } else {\n const pricePerUnitInMicroLamports = Big(solanaTxFee.extraFeeInLamports)\n .div(units)\n .mul(toPowBase10(6))\n .toFixed(0);\n await updateUnitPrice(instructions, connection, pricePerUnitInMicroLamports);\n }\n }\n }\n}\n\nfunction updateUnitLimit(simUnitsConsumed: number, instructions: TransactionInstruction[]): string {\n const computeUnitLimitIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitLimit\"\n );\n const units = Number((simUnitsConsumed * 1.3).toFixed(0));\n const computeUnitLimitInstruction = ComputeBudgetProgram.setComputeUnitLimit({\n units: units,\n });\n if (computeUnitLimitIndex >= 0) {\n instructions[computeUnitLimitIndex] = computeUnitLimitInstruction;\n } else {\n instructions.push(computeUnitLimitInstruction);\n }\n return units.toString();\n}\n\nasync function updateUnitPrice(\n instructions: TransactionInstruction[],\n connection: Connection,\n pricePerUnitInMicroLamports?: string\n): Promise<string> {\n const computeUnitPriceIndex = instructions.findIndex(\n (instruction) =>\n instruction.programId.equals(ComputeBudgetProgram.programId) &&\n ComputeBudgetInstruction.decodeInstructionType(instruction) === \"SetComputeUnitPrice\"\n );\n const unitPrice = pricePerUnitInMicroLamports\n ? BigInt(pricePerUnitInMicroLamports)\n : BigInt(await getAveragePrioritizationFee(connection));\n const computeUnitPriceInstruction = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: unitPrice,\n });\n if (computeUnitPriceIndex >= 0) {\n instructions[computeUnitPriceIndex] = computeUnitPriceInstruction;\n } else {\n instructions.push(computeUnitPriceInstruction);\n }\n return unitPrice.toString();\n}\n\nasync function getAveragePrioritizationFee(connection: Connection) {\n const prioritizationFees = await connection.getRecentPrioritizationFees();\n let sum = 0;\n for (const prioritizationFee of prioritizationFees) {\n sum += prioritizationFee.prioritizationFee;\n }\n return (sum / prioritizationFees.length).toFixed(0);\n}\n", "import { AddressLookupTableAccount, Connection, VersionedTransaction } from \"@solana/web3.js\";\nimport { SdkError } from \"../../exceptions\";\n\nexport async function fetchAddressLookupTableAccountsFromTx(\n transaction: VersionedTransaction,\n connection: Connection\n): Promise<AddressLookupTableAccount[]> {\n return await Promise.all(\n transaction.message.addressTableLookups.map(async (lookup) => {\n return new AddressLookupTableAccount({\n key: lookup.accountKey,\n state: AddressLookupTableAccount.deserialize(\n await connection.getAccountInfo(lookup.accountKey).then((res) => {\n if (!res) {\n throw new SdkError(\"Cannot get AccountInfo\");\n }\n return res.data;\n })\n ),\n });\n })\n );\n}\n", "import { BN, Program, Provider } from \"@project-serum/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { Bridge as BridgeType } from \"./types/bridge\";\nimport { CctpBridge as CctpBridgeType } from \"./types/cctp_bridge\";\n\nexport type SolanaTxFee = PricePerUnitInMicroLamports | ExtraFeeInLamports | typeof SolanaAutoTxFee;\n/**\n * Priority Fee will be calculated based on {@link @solana/web3.js:Connection.getRecentPrioritizationFees}\n */\nexport const SolanaAutoTxFee = \"AUTO\" as const;\n\n/**\n * Add Priority Fee as price per unit in micro-lamports\n */\nexport interface PricePerUnitInMicroLamports {\n pricePerUnitInMicroLamports: string;\n}\n\n/**\n * Total Priority Fee impact will be as extraFeeInLamports param\n */\nexport interface ExtraFeeInLamports {\n extraFeeInLamports: string;\n}\n\nexport interface SwapAndBridgeSolData {\n bridge: Program<BridgeType>;\n amount: BN;\n vusdAmount: BN;\n nonce: number[];\n recipient: number[];\n receiveToken: number[];\n poolAccount: PublicKey;\n lockAccount: PublicKey;\n bridgeAuthority: PublicKey;\n userToken: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: string;\n config: PublicKey;\n configAccountInfo: ConfigAccountInfo;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n message: Buffer;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SwapAndBridgeSolDataCctpData {\n cctpBridge: Program<CctpBridgeType>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\ninterface ConfigAccountInfo {\n allbridgeMessengerProgramId: PublicKey;\n wormholeMessengerProgramId: PublicKey;\n gasOracleProgramId: PublicKey;\n}\n\nexport interface TokenAccountData {\n amount: BN;\n authority: PublicKey;\n closeAuthority: unknown;\n delegate: unknown;\n delegatedAmount: BN;\n isNative: unknown;\n mint: PublicKey;\n state: unknown;\n}\n", "import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { Connection, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport axios, { AxiosError } from \"axios\";\nimport { JupiterError, SdkError } from \"../../../exceptions\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"../../../utils/sol/utils\";\n\nexport class JupiterService {\n connection: Connection;\n jupiterUrl: string;\n\n constructor(solanaRpcUrl: string, jupiterUrl: string) {\n this.connection = new Connection(solanaRpcUrl);\n this.jupiterUrl = jupiterUrl.replace(/\\/$/, \"\"); // trim last \"/\" if exist\n }\n\n async getJupiterSwapTx(\n userAddress: string,\n stableTokenAddress: string,\n amount: string,\n exactOut: boolean\n ): Promise<{ tx: VersionedTransaction; amountIn?: string }> {\n let quoteResponse: any;\n try {\n const swapMode = exactOut ? \"ExactOut\" : \"ExactIn\";\n quoteResponse = await axios.get(`${this.jupiterUrl}/quote?inputMint=${stableTokenAddress}\n&outputMint=${NATIVE_MINT.toString()}\n&amount=${amount}\n&swapMode=${swapMode}\n&slippageBps=100\n&onlyDirectRoutes=true`);\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get route\");\n }\n\n let inAmount;\n if (exactOut && quoteResponse?.data?.inAmount) {\n inAmount = quoteResponse.data.inAmount;\n } else if (exactOut) {\n throw new JupiterError(\"Cannot get inAmount\");\n }\n\n let transactionResponse: any;\n try {\n transactionResponse = await axios.post(`${this.jupiterUrl}/swap`, {\n quoteResponse: quoteResponse.data,\n userPublicKey: userAddress,\n wrapAndUnwrapSol: true,\n });\n } catch (err) {\n if (err instanceof AxiosError && err.response && err.response.data && err.response.data.error) {\n throw new JupiterError(err.response.data.error);\n }\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n let swapTransaction;\n if (transactionResponse?.data?.swapTransaction) {\n swapTransaction = transactionResponse.data.swapTransaction;\n } else {\n throw new JupiterError(\"Cannot get swap transaction\");\n }\n\n const swapTransactionBuf = Buffer.from(swapTransaction, \"base64\");\n const tx = VersionedTransaction.deserialize(swapTransactionBuf);\n\n return exactOut ? { tx, amountIn: inAmount } : { tx };\n }\n\n async amendJupiterWithSdkTx(\n transaction: VersionedTransaction,\n sdkTx: VersionedTransaction\n ): Promise<VersionedTransaction> {\n try {\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, this.connection);\n const sdkAddressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(sdkTx, this.connection);\n\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const sdkMessage = TransactionMessage.decompile(sdkTx.message, {\n addressLookupTableAccounts: sdkAddressLookupTableAccounts,\n });\n sdkMessage.instructions.shift();\n message.instructions.push(...sdkMessage.instructions);\n\n addressLookupTableAccounts.push(...sdkAddressLookupTableAccounts);\n\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n\n if (sdkTx.message.header.numRequiredSignatures === 2 && transaction.signatures.length === 1) {\n const signature = sdkTx.signatures[0];\n if (!signature) {\n throw new SdkError(\"Signature is undefined\");\n }\n transaction.signatures.push(signature);\n }\n return transaction;\n } catch (e) {\n if (e instanceof Error && e.message) {\n throw new JupiterError(`Some error occurred during creation final swap and bridge transaction. ${e.message}`);\n }\n throw new JupiterError(\"Some error occurred during creation final swap and bridge transaction\");\n }\n }\n}\n", "import { Address, contract } from \"@stellar/stellar-sdk\";\nimport { Big } from \"big.js\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../../index\";\nimport { FeePaymentMethod } from \"../../../models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { BridgeContract } from \"../../models/srb/bridge-contract\";\nimport { ChainBridgeService, SendParams, SwapParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { getNonceBigInt, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbBridgeService extends ChainBridgeService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return await this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n let tx;\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(0),\n fee_token_amount: BigInt(totalFee),\n });\n } else {\n tx = await contract.swap_and_bridge({\n sender: fromAccountAddress,\n token: Address.contract(Buffer.from(fromTokenAddress)).toString(),\n amount: BigInt(amount),\n recipient: Buffer.from(toAccountAddress),\n destination_chain_id: +toChainId,\n receive_token: Buffer.from(toTokenAddress),\n nonce: getNonceBigInt(),\n gas_amount: BigInt(totalFee),\n fee_token_amount: BigInt(0),\n });\n }\n return tx.toXDR();\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n const contract = this.getContract(BridgeContract, contractAddress, fromAccountAddress);\n return (\n await contract.swap({\n sender: fromAccountAddress,\n amount: BigInt(amount),\n token: Address.contract(Buffer.from(fromTokenAddress)).toBuffer(),\n receive_token: Buffer.from(toTokenAddress),\n recipient: toAccountAddress as string,\n receive_amount_min: BigInt(minimumReceiveAmount),\n })\n ).toXDR();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n send(params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string, sender?: string): T {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport u256 = contract.u256;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport Option = contract.Option;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface Swapped {\n receive_amount: u128;\n receive_token: Buffer;\n recipient: string;\n send_amount: u128;\n send_token: Buffer;\n sender: string;\n}\n\nexport interface TokensSent {\n amount: u128;\n destination_chain_id: u32;\n nonce: u256;\n receive_token: Buffer;\n recipient: Buffer;\n}\n\nexport interface TokensReceived {\n amount: u128;\n message: Buffer;\n nonce: u256;\n recipient: Buffer;\n}\n\nexport interface ReceiveFee {\n bridge_transaction_cost: u128;\n extra_gas: u128;\n message_transaction_cost: u128;\n}\n\nexport interface BridgingFeeFromTokens {\n fee_token_amount: u128;\n gas: u128;\n}\n\nexport interface AnotherBridge {\n address: Buffer;\n tokens: Map<Buffer, boolean>;\n}\n\nexport interface Bridge {\n /**\n * precomputed values of the scaling factor required for paying the bridging fee with stable tokens\n */\n bridging_fee_conversion_factor: Map<string, u128>;\n can_swap: boolean;\n /**\n * precomputed values to divide by to change the precision from the Gas Oracle precision to the token precision\n */\n from_gas_oracle_factor: Map<string, u128>;\n messenger: string;\n pools: Map<Buffer, string>;\n rebalancer: string;\n}\n\nexport type DataKey =\n | { tag: \"OtherBridge\"; values: readonly [u32] }\n | { tag: \"SentMessage\"; values: readonly [Buffer] }\n | { tag: \"ReceivedMessage\"; values: readonly [Buffer] };\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface BridgeContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n messenger,\n gas_oracle,\n native_token,\n }: {\n admin: string;\n messenger: string;\n gas_oracle: string;\n native_token: string;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_and_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_and_bridge: (\n {\n sender,\n token,\n amount,\n recipient,\n destination_chain_id,\n receive_token,\n nonce,\n gas_amount,\n fee_token_amount,\n }: {\n sender: string;\n token: string;\n amount: u128;\n recipient: Buffer;\n destination_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n gas_amount: u128;\n fee_token_amount: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a receive_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n receive_tokens: (\n {\n sender,\n amount,\n recipient,\n source_chain_id,\n receive_token,\n nonce,\n receive_amount_min,\n extra_gas,\n }: {\n sender: string;\n amount: u128;\n recipient: string;\n source_chain_id: u32;\n receive_token: Buffer;\n nonce: u256;\n receive_amount_min: u128;\n extra_gas: Option<u128>;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap: (\n {\n sender,\n amount,\n token,\n receive_token,\n recipient,\n receive_amount_min,\n }: {\n sender: string;\n amount: u128;\n token: Buffer;\n receive_token: Buffer;\n recipient: string;\n receive_amount_min: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_swap transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_swap: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_oracle: (\n { new_address }: { new_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_rebalancer transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_rebalancer: (\n { rebalancer }: { rebalancer: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_messenger transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_messenger: (\n { messenger }: { messenger: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_gas_usage: (\n { chain_id, gas_usage }: { chain_id: u32; gas_usage: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a register_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n register_bridge: (\n { chain_id, bridge_address }: { chain_id: u32; bridge_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a remove_bridge_token transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n remove_bridge_token: (\n { chain_id, token_address }: { chain_id: u32; token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a add_pool transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n add_pool: (\n { pool, token }: { pool: string; token: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_gas_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_gas_tokens: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw_bridging_fee_in_tokens transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw_bridging_fee_in_tokens: (\n { sender, token_address }: { sender: string; token_address: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a has_processed_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_processed_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a has_received_message transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n has_received_message: (\n { message }: { message: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<boolean>>>;\n\n /**\n * Construct and simulate a get_pool_address transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool_address: (\n { token_address }: { token_address: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_config transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_config: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Bridge>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_transaction_cost transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_transaction_cost: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_gas_usage transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_usage: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_gas_oracle transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_gas_oracle: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_another_bridge transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_another_bridge: (\n { chain_id }: { chain_id: u32 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<AnotherBridge>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `Result` field containing the Result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class BridgeContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=\",\n \"AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==\",\n \"AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD\",\n \"AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=\",\n \"AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n swap_and_bridge: this.txFromJSON<Result<void>>,\n receive_tokens: this.txFromJSON<Result<void>>,\n swap: this.txFromJSON<Result<void>>,\n stop_swap: this.txFromJSON<Result<void>>,\n start_swap: this.txFromJSON<Result<void>>,\n set_gas_oracle: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_rebalancer: this.txFromJSON<Result<void>>,\n set_messenger: this.txFromJSON<Result<void>>,\n set_gas_usage: this.txFromJSON<Result<void>>,\n register_bridge: this.txFromJSON<Result<void>>,\n add_bridge_token: this.txFromJSON<Result<void>>,\n remove_bridge_token: this.txFromJSON<Result<void>>,\n add_pool: this.txFromJSON<Result<void>>,\n withdraw_gas_tokens: this.txFromJSON<Result<void>>,\n withdraw_bridging_fee_in_tokens: this.txFromJSON<Result<void>>,\n has_processed_message: this.txFromJSON<Result<boolean>>,\n has_received_message: this.txFromJSON<Result<boolean>>,\n get_pool_address: this.txFromJSON<Result<string>>,\n get_config: this.txFromJSON<Result<Bridge>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_transaction_cost: this.txFromJSON<Result<u128>>,\n get_gas_usage: this.txFromJSON<Result<u128>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_gas_oracle: this.txFromJSON<Result<string>>,\n get_another_bridge: this.txFromJSON<Result<AnotherBridge>>,\n set_admin: this.txFromJSON<Result<void>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { FeePaymentMethod, Messenger, SwapParams, TransactionResponse } from \"../../../models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { SendParams, TxSendParams, TxSwapParams } from \"../models\";\nimport { ChainBridgeService } from \"../models/bridge\";\nimport { getNonce, prepareTxSendParams, prepareTxSwapParams } from \"../utils\";\n\nexport class TronBridgeService extends ChainBridgeService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async send(params: SendParams): Promise<TransactionResponse> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const rawTransaction = await this.buildRawTransactionSendFromParams(txSendParams);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n const txSwapParams = prepareTxSwapParams(this.chainType, params);\n return await this.buildRawTransactionSwapFromParams(txSwapParams);\n }\n\n async buildRawTransactionSwapFromParams(params: TxSwapParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toAccountAddress,\n toTokenAddress,\n minimumReceiveAmount,\n } = params;\n\n const parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"address\", value: toAccountAddress },\n { type: \"uint256\", value: minimumReceiveAmount },\n ];\n const methodSignature = \"swap(uint256,bytes32,bytes32,address,uint256)\";\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, \"0\", fromAccountAddress);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n return this.buildRawTransactionSendFromParams(txSendParams);\n }\n\n async buildRawTransactionSendFromParams(params: TxSendParams): Promise<RawTransaction> {\n const {\n amount,\n contractAddress,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n messenger,\n fee,\n gasFeePaymentMethod,\n extraGas,\n } = params;\n\n let totalFee = fee;\n if (extraGas) {\n totalFee = Big(totalFee).plus(extraGas).toFixed();\n }\n\n const nonce = getNonce().toJSON().data;\n let parameters;\n let value: string;\n let methodSignature: string;\n if (messenger == Messenger.CCTP) {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"bridge(uint256,bytes32,uint256,uint256)\";\n } else {\n if (gasFeePaymentMethod === FeePaymentMethod.WITH_STABLECOIN) {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: totalFee },\n ];\n value = \"0\";\n } else {\n parameters = [\n { type: \"bytes32\", value: fromTokenAddress },\n { type: \"uint256\", value: amount },\n { type: \"bytes32\", value: toAccountAddress },\n { type: \"uint256\", value: toChainId },\n { type: \"bytes32\", value: toTokenAddress },\n { type: \"uint256\", value: nonce },\n { type: \"uint8\", value: messenger },\n { type: \"uint256\", value: 0 },\n ];\n value = totalFee;\n }\n methodSignature = \"swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)\";\n }\n return this.buildRawTransaction(contractAddress, methodSignature, parameters, value, fromAccountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n", "import BN from \"bn.js\";\n\nexport function amountToHex(amount: string): string {\n return \"0x\" + new BN(amount).toString(\"hex\");\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(() => resolve(), ms));\n}\n\nexport const promisify =\n // prettier-ignore\n // eslint-disable-next-line @typescript-eslint/ban-types\n (func: Function) =>\n (...args: any[]) =>\n new Promise<any>(\n (resolve, reject) =>\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n func(...args, (err: Error, result: any) => (err ? reject(err) : resolve(result)))\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n );\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { InvalidTxError, VerifyTxError } from \"../../../exceptions\";\nimport { RawTransaction } from \"../../models\";\nimport { sleep } from \"../index\";\n\nexport async function sendRawTransaction(tronWeb: TronWeb, rawTransaction: RawTransaction): Promise<{ txId: string }> {\n const signedTx = await tronWeb.trx.sign(rawTransaction);\n\n if (!signedTx.signature) {\n throw new InvalidTxError(\"Transaction was not signed properly\");\n }\n\n const receipt = await tronWeb.trx.sendRawTransaction(signedTx);\n const transactionHash = receipt.txid;\n await verifyTx(tronWeb, transactionHash);\n return { txId: transactionHash };\n}\n\nexport async function verifyTx(tronWeb: TronWeb, txId: string, timeout = 10000): Promise<any> {\n const start = Date.now();\n /* eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition */\n while (true) {\n if (Date.now() - start > timeout) {\n throw new VerifyTxError(\"Transaction not found\");\n }\n const result = await tronWeb.trx.getUnconfirmedTransactionInfo(txId);\n if (!result?.receipt) {\n await sleep(2000);\n continue;\n }\n if (result.receipt.result === \"SUCCESS\") {\n return result;\n } else {\n /* eslint-disable-next-line @typescript-eslint/restrict-template-expressions */\n throw new VerifyTxError(`Transaction status is ${result.receipt.result}`);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport Cache from \"timed-cache\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { NodeRpcUrlsConfig } from \"..\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreClientFiltered } from \"../../client/core-api/core-client-filtered\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { PoolInfo, PoolKeyObject, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, TransactionResponse } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { depositAmountToVUsd, vUsdToWithdrawalAmount } from \"../utils/calculation\";\nimport { EvmPoolService } from \"./evm\";\nimport { ApproveParams, ChainPoolService, CheckAllowanceParams, GetAllowanceParams, UserBalanceInfo } from \"./models\";\nimport { DefaultRawPoolTransactionBuilder, RawPoolTransactionBuilder } from \"./raw-pool-transaction-builder\";\nimport { SolanaPoolService } from \"./sol\";\nimport { SrbPoolService } from \"./srb\";\nimport { TronPoolService } from \"./trx\";\n\nexport interface LiquidityPoolService {\n rawTxBuilder: RawPoolTransactionBuilder;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param provider - will be used to access the network\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(provider: Provider, params: GetAllowanceParams): Promise<string>;\n\n /**\n * Get amount of tokens approved for poolInfo\n * @param params See {@link GetAllowanceParams}\n * @returns the amount of approved tokens\n */\n getAllowance(params: GetAllowanceParams): Promise<string>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param provider - will be used to access the network\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(provider: Provider, params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * Check if the amount of approved tokens is enough\n * @param params See {@link CheckAllowanceParams}\n * @returns true if the amount of approved tokens is enough to make a transfer\n */\n checkAllowance(params: CheckAllowanceParams): Promise<boolean>;\n\n /**\n * @Deprecated Use {@link rawTxBuilder}.{@link RawPoolTransactionBuilder.approve}<p>\n * Approve tokens usage by another address on chains\n * <p>\n * For ETH/USDT: due to specificity of the USDT contract:<br/>\n * If the current allowance is not 0, this function will perform an additional transaction to set allowance to 0 before setting the new allowance value.\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n /**\n * Calculates the amount of LP tokens that will be deposited\n * @param amount The float amount of tokens that will be sent\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string>;\n\n /**\n * Calculates the amount of tokens will be withdrawn\n * @param amount The float amount of tokens that will be sent\n * @param accountAddress\n * @param token\n * @param provider - will be used to access the network\n * @returns amount\n */\n getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string>;\n\n /**\n * Get User Balance Info on Liquidity poolInfo\n * @param accountAddress\n * @param token\n * @param provider\n * @returns UserBalanceInfo\n */\n getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo>;\n\n /**\n * Gets information about the poolInfo from chain\n * @param token\n * @param provider - will be used to access the network\n * @returns poolInfo\n */\n getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<Required<PoolInfo>>;\n}\n\nexport class DefaultLiquidityPoolService implements LiquidityPoolService {\n public rawTxBuilder: RawPoolTransactionBuilder;\n private cache: Cache<PoolInfo>;\n\n constructor(\n private api: AllbridgeCoreClientFiltered,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {\n this.rawTxBuilder = new DefaultRawPoolTransactionBuilder(api, nodeRpcUrlsConfig, this.params, tokenService);\n const ttl = params.cachePoolInfoChainSec > 0 ? params.cachePoolInfoChainSec * 1000 : 20 * 1000;\n this.cache = new Cache<PoolInfo>({ defaultTtl: ttl });\n }\n\n async getAllowance(a: Provider | GetAllowanceParams, b?: GetAllowanceParams): Promise<string> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as GetAllowanceParams;\n return await this.tokenService.getAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async checkAllowance(a: Provider | CheckAllowanceParams, b?: CheckAllowanceParams): Promise<boolean> {\n if (b) {\n const provider = a as Provider;\n const params = b;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress }, provider);\n } else {\n const params = a as CheckAllowanceParams;\n return this.tokenService.checkAllowance({ ...params, spender: params.token.poolAddress });\n }\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n return this.tokenService.approve(provider, { ...approveData, spender: approveData.token.poolAddress });\n }\n\n async getAmountToBeDeposited(amount: string, token: TokenWithChainDetails, provider?: Provider): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const { vUsdBalance, tokenBalance, aValue, dValue } = pool;\n const vUsd = depositAmountToVUsd(amount, aValue, dValue, tokenBalance, vUsdBalance);\n return convertIntAmountToFloat(vUsd, SYSTEM_PRECISION).toFixed();\n }\n\n async getAmountToBeWithdrawn(\n amount: string,\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<string> {\n validateAmountGtZero(amount);\n validateAmountDecimals(\"amount\", amount, token.decimals);\n const pool = await this.getPoolInfoFromChain(token, provider);\n const tokenAmountInSP = vUsdToWithdrawalAmount(amount);\n const tokenAmount = fromSystemPrecision(tokenAmountInSP, token.decimals);\n const userBalanceInfo = await this.getUserBalanceInfo(accountAddress, token, provider);\n const earned = userBalanceInfo.earned(pool) || \"0\";\n const commonAmount = Big(tokenAmount).plus(earned).toFixed();\n return convertIntAmountToFloat(commonAmount, token.decimals).toFixed();\n }\n\n async getUserBalanceInfo(\n accountAddress: string,\n token: TokenWithChainDetails,\n provider?: Provider\n ): Promise<UserBalanceInfo> {\n return getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getUserBalanceInfo(accountAddress, token);\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails, provider?: Provider): Promise<PoolInfo> {\n const poolKey: PoolKeyObject = { chainSymbol: token.chainSymbol, poolAddress: token.poolAddress };\n const fromCache = this.cache.get(poolKey);\n if (fromCache) {\n return fromCache;\n } else {\n const poolInfo = await getChainPoolService(\n token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).getPoolInfoFromChain(token);\n this.cache.put(poolKey, poolInfo);\n this.api.cachePut({ chainSymbol: token.chainSymbol, poolAddress: token.poolAddress }, poolInfo);\n return poolInfo;\n }\n }\n}\n\nexport function getChainPoolService(\n chainSymbol: string,\n api: AllbridgeCoreClient,\n nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n params: AllbridgeCoreSdkOptions,\n provider?: Provider\n): ChainPoolService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmPoolService(provider as unknown as Web3, api);\n } else {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmPoolService(new Web3(nodeRpcUrl), api);\n }\n }\n case ChainType.TRX: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronJsonRpc = params.tronJsonRpc;\n if (provider) {\n return new TronPoolService(provider, api, tronJsonRpc);\n } else {\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n return new TronPoolService(tronWeb, api, tronJsonRpc);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaPoolService(nodeRpcUrl, api);\n }\n case ChainType.SRB: {\n return new SrbPoolService(nodeRpcUrlsConfig, params, api);\n }\n }\n}\n", "import { Big } from \"big.js\";\nimport { convertFloatAmountToInt, getD } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport function depositAmountToVUsd(\n amount: string,\n aValue: string,\n dValue: string,\n tokenBalance: string,\n vUsdBalance: string\n): string {\n const amountSP = convertFloatAmountToInt(amount, SYSTEM_PRECISION);\n const amountSPBig = Big(amountSP);\n\n const oldD = Big(dValue);\n const oldBalance = Big(tokenBalance).plus(vUsdBalance);\n\n let newTokenBalance;\n let newVUsdBalance;\n\n if (oldD.eq(0) || oldBalance.eq(0)) {\n const halfAmount = amountSPBig.div(2);\n newTokenBalance = Big(tokenBalance).plus(halfAmount);\n newVUsdBalance = Big(vUsdBalance).plus(halfAmount);\n } else {\n newTokenBalance = Big(tokenBalance).plus(amountSPBig.mul(tokenBalance).div(oldBalance));\n newVUsdBalance = Big(vUsdBalance).plus(amountSPBig.mul(vUsdBalance).div(oldBalance));\n }\n const newD = Big(getD(aValue, newTokenBalance.toFixed(), newVUsdBalance.toFixed()));\n return newD.minus(oldD).toFixed();\n}\n\nexport function vUsdToWithdrawalAmount(lpAmount: string): string {\n const lpAmountSP = convertFloatAmountToInt(lpAmount, SYSTEM_PRECISION);\n return Big(lpAmountSP).round().toFixed();\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_a\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"_token\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpName\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"lpSymbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Deposit\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RewardsClaimed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedFromVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"vUsdAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"fee\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SwappedToVUsd\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Withdraw\",\n \"type\": \"event\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"inputs\": [],\n \"name\": \"a\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"accRewardPerShareP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adjustTotalLpAmount\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeAmount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"adminFeeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"balanceRatioMinBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canDeposit\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"canWithdraw\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimAdminFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"claimRewards\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"d\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"feeShareBP\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPrice\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"x\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getY\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"pendingReward\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"reserves\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"router\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_adminFeeShareBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setAdminFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_balanceRatioMinBP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setBalanceRatioMinBP\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"_feeShareBP\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"setFeeShare\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_router\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setRouter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_stopAuthority\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setStopAuthority\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"startWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopDeposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"stopWithdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"receiveAmountMin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapFromVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"zeroFee\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"swapToVUsd\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"token\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"tokenBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userRewardDebt\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"vUsdBalance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountLp\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n]\n", "import { Big } from \"big.js\";\nimport { FeePaymentMethod, TxFeeParams } from \"../../../models\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { convertIntAmountToFloat, getEarned } from \"../../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../../utils/calculation/constants\";\n\nexport interface ApproveParams {\n /**\n * The token info\n */\n token: TokenWithChainDetails;\n\n /**\n * The address of the token owner who is granting permission to use tokens\n */\n owner: string;\n\n /**\n * The integer amount of tokens to approve.\n * Optional.\n * The maximum amount by default.\n */\n amount?: string | number | Big;\n}\n\nexport interface GetAllowanceParams {\n token: TokenWithChainDetails;\n owner: string;\n gasFeePaymentMethod?: FeePaymentMethod;\n}\n\nexport type GetAllowanceParamsDto = GetAllowanceParams;\n\nexport interface CheckAllowanceParams extends GetAllowanceParams {\n /**\n * The float amount of tokens to check the allowance.\n */\n amount: string | number | Big;\n}\n\nexport interface LiquidityPoolsParams {\n /**\n * The account address to operate tokens with.\n */\n accountAddress: string;\n /**\n * {@link TokenWithChainDetails |The token info object} of operation token.\n */\n token: TokenWithChainDetails;\n\n txFeeParams?: TxFeeParams;\n}\n\nexport interface LiquidityPoolsParamsWithAmount extends LiquidityPoolsParams {\n /**\n * The float amount of tokens.\n */\n amount: string;\n}\n\nexport interface UserBalanceInfoDTO {\n lpAmount: string;\n rewardDebt: string;\n}\n\nexport interface UserBalanceInfo extends UserBalanceInfoDTO {\n userLiquidity: string;\n\n earned(poolInfo: PoolInfo, decimals?: number): string;\n}\n\nexport class UserBalance implements UserBalanceInfo {\n lpAmount: string;\n rewardDebt: string;\n\n constructor(userInfo: UserBalanceInfoDTO) {\n this.lpAmount = userInfo.lpAmount;\n this.rewardDebt = userInfo.rewardDebt;\n }\n\n get userLiquidity(): string {\n return convertIntAmountToFloat(this.lpAmount, SYSTEM_PRECISION).toFixed();\n }\n\n earned(poolInfo: PoolInfo, decimals?: number): string {\n const earned = getEarned(this.lpAmount, this.rewardDebt, poolInfo.accRewardPerShareP, poolInfo.p);\n if (decimals) {\n return convertIntAmountToFloat(earned, decimals).toFixed();\n }\n return earned;\n }\n}\n", "import { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { RawTransaction } from \"../../models\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalanceInfo } from \"./pool.model\";\n\nexport abstract class ChainPoolService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo>;\n\n abstract getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo>;\n\n abstract buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction>;\n\n abstract buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction>;\n}\n", "import Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { promiseWithTimeout, promiseWithTimeoutAndRetries } from \"../../../utils/utils\";\nimport { RawTransaction } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { Pool as PoolContract } from \"../../models/abi/types/Pool\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { promisify } from \"../../utils\";\nimport {\n ChainPoolService,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n UserBalance,\n UserBalanceInfo,\n} from \"../models\";\n\nexport class EvmPoolService extends ChainPoolService {\n chainType: ChainType.EVM = ChainType.EVM;\n private P = 52;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n try {\n userBalanceInfo = await promiseWithTimeout(\n this.getUserBalanceInfoByBatch(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n userBalanceInfo = await promiseWithTimeoutAndRetries(\n () => this.getUserBalanceInfoPerProperty(accountAddress, token),\n `Cannot get UserBalanceInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](accountAddress).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const rewardDebt = await this.getPoolContract(token.poolAddress).methods.userRewardDebt(accountAddress).call();\n const lpAmount = await this.getPoolContract(token.poolAddress).methods.balanceOf(accountAddress).call();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n try {\n poolInfo = await promiseWithTimeout(\n this.getPoolInfoByBatch(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5000\n );\n } catch (err) {\n poolInfo = await promiseWithTimeoutAndRetries(\n () => this.getPoolInfoPerProperty(token),\n `Cannot get PoolInfo for ${token.name} on ${token.chainSymbol}`,\n 5,\n 2000\n );\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new this.web3.BatchRequest();\n const contract = new this.web3.eth.Contract(PoolAbi as AbiItem[], token.poolAddress);\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getPoolContract(token.poolAddress);\n\n const aValue = await poolContract.methods.a().call();\n const dValue = await poolContract.methods.d().call();\n const tokenBalance = await poolContract.methods.tokenBalance().call();\n const vUsdBalance = await poolContract.methods.vUsdBalance().call();\n const totalLpAmount = await poolContract.methods.totalSupply().call();\n const accRewardPerShareP = await poolContract.methods.accRewardPerShareP().call();\n\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n\n return {\n aValue,\n dValue,\n tokenBalance,\n vUsdBalance,\n totalLpAmount,\n accRewardPerShareP,\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.deposit(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.withdraw(params.amount).encodeABI(),\n });\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n return Promise.resolve({\n ...this.buildTxParams(params),\n data: this.getPoolContract(params.token.poolAddress).methods.claimRewards().encodeABI(),\n });\n }\n\n buildTxParams(params: LiquidityPoolsParams) {\n return {\n from: params.accountAddress,\n to: params.token.poolAddress,\n value: \"0\",\n };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n\n private getPoolContract(contractAddress: string): PoolContract {\n return this.getContract<PoolContract>(PoolAbi as AbiItem[], contractAddress);\n }\n}\n", "import { NodeRpcUrlsConfig } from \"..\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions } from \"../../index\";\nimport { convertFloatAmountToInt } from \"../../utils/calculation\";\nimport { SYSTEM_PRECISION } from \"../../utils/calculation/constants\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { Provider, RawTransaction } from \"../models\";\nimport { TokenService } from \"../token\";\nimport { ApproveParams, LiquidityPoolsParams, LiquidityPoolsParamsWithAmount } from \"./models\";\nimport { getChainPoolService } from \"./index\";\n\nexport interface RawPoolTransactionBuilder {\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param provider - will be used to access the network\n * @param approveData\n */\n approve(provider: Provider, approveData: ApproveParams): Promise<RawTransaction>;\n /**\n * Creates a Raw Transaction for approving tokens usage by the bridge\n * @param approveData\n */\n approve(approveData: ApproveParams): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for depositing tokens to Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for withdrawing tokens from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction>;\n\n /**\n * Creates a Raw Transaction for claiming rewards from Liquidity pools\n * @param params\n * @param provider - will be used to access the network\n */\n claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction>;\n}\n\nexport class DefaultRawPoolTransactionBuilder implements RawPoolTransactionBuilder {\n constructor(\n private api: AllbridgeCoreClient,\n private nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n private params: AllbridgeCoreSdkOptions,\n private tokenService: TokenService\n ) {}\n\n async approve(a: Provider | ApproveParams, b?: ApproveParams): Promise<RawTransaction> {\n if (b) {\n const provider = a as Provider;\n const approveData: ApproveParams = b;\n return this.tokenService.buildRawTransactionApprove(\n {\n ...approveData,\n spender: approveData.token.poolAddress,\n },\n provider\n );\n } else {\n const approveData: ApproveParams = a as ApproveParams;\n return this.tokenService.buildRawTransactionApprove({\n ...approveData,\n spender: approveData.token.poolAddress,\n });\n }\n }\n\n async deposit(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, params.token.decimals).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionDeposit(params);\n }\n\n async withdraw(params: LiquidityPoolsParamsWithAmount, provider?: Provider): Promise<RawTransaction> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n params.amount = convertFloatAmountToInt(params.amount, SYSTEM_PRECISION).toFixed();\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionWithdraw(params);\n }\n\n async claimRewards(params: LiquidityPoolsParams, provider?: Provider): Promise<RawTransaction> {\n return getChainPoolService(\n params.token.chainSymbol,\n this.api,\n this.nodeRpcUrlsConfig,\n this.params,\n provider\n ).buildRawTransactionClaimRewards(params);\n }\n}\n", "import { AnchorProvider, BN, Program, Provider, Spl, web3 } from \"@project-serum/anchor\";\nimport { Connection, PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { RawTransaction } from \"../../models\";\nimport { Bridge as BridgeType, IDL as bridgeIdl } from \"../../models/sol/types/bridge\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getConfigAccount,\n getUserDepositAccount,\n} from \"../../utils/sol/accounts\";\nimport { addUnitLimitAndUnitPriceToTx } from \"../../utils/sol/compute-budget\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\ninterface LPAccounts {\n mint: PublicKey;\n user: PublicKey;\n config: PublicKey;\n pool: PublicKey;\n bridgeAuthority: PublicKey;\n userDeposit: PublicKey;\n userToken: PublicKey;\n bridgeToken: PublicKey;\n}\n\ninterface LPTransactionData {\n accounts: LPAccounts;\n preInstructions: TransactionInstruction[];\n}\n\nexport class SolanaPoolService extends ChainPoolService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n private P = 48;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const provider = this.buildAnchorProvider(accountAddress);\n const bridge = this.getBridge(token.bridgeAddress, provider);\n const poolAccount = new PublicKey(token.poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n try {\n const userDepositAccount = await getUserDepositAccount(\n new PublicKey(accountAddress),\n poolAccountInfo.mint,\n bridge.programId\n );\n const { lpAmount, rewardDebt } = await bridge.account.userDeposit.fetch(userDepositAccount);\n return new UserBalance({\n lpAmount: lpAmount.toString(),\n rewardDebt: rewardDebt.toString(),\n });\n } catch (e) {\n return new UserBalance({ lpAmount: \"0\", rewardDebt: \"0\" });\n }\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const provider = this.buildAnchorProvider(token.bridgeAddress);\n const pool = await this.getBridge(token.bridgeAddress, provider).account.pool.fetch(token.poolAddress);\n const vUsdBalance = pool.vUsdBalance.toString();\n const tokenBalance = pool.tokenBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance, vUsdBalance });\n return {\n dValue: pool.d.toString(),\n aValue: pool.a.toString(),\n totalLpAmount: pool.totalLpAmount.toString(),\n vUsdBalance,\n tokenBalance,\n accRewardPerShareP: pool.accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .deposit(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods\n .withdraw(new BN(params.amount))\n .accounts(accounts)\n .preInstructions(preInstructions)\n .transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { bridge, accounts, preInstructions } = await this.prepareDataForTransaction(params);\n\n const tx = await bridge.methods.claimRewards().accounts(accounts).preInstructions(preInstructions).transaction();\n tx.recentBlockhash = (\n await this.buildAnchorProvider(params.accountAddress).connection.getLatestBlockhash()\n ).blockhash;\n tx.feePayer = new PublicKey(params.accountAddress);\n await addUnitLimitAndUnitPriceToTx(tx, params.txFeeParams, this.solanaRpcUrl);\n return tx;\n }\n\n private async prepareDataForTransaction(params: LiquidityPoolsParams) {\n const provider = this.buildAnchorProvider(params.accountAddress);\n const bridge = this.getBridge(params.token.bridgeAddress, provider);\n\n const { accounts, preInstructions } = await this._getLPTransactionData(\n bridge,\n params.token.poolAddress,\n params.accountAddress,\n provider\n );\n return { bridge, accounts, preInstructions };\n }\n\n private getBridge(bridgeAddress: string, provider: Provider): Program<BridgeType> {\n return new Program<BridgeType>(bridgeIdl, bridgeAddress, provider);\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n private async _getLPTransactionData(\n bridge: Program<BridgeType>,\n poolAddress: string,\n account: string,\n provider: Provider\n ): Promise<LPTransactionData> {\n const user = new PublicKey(account);\n const configAccount = await getConfigAccount(bridge.programId);\n const bridgeAuthority = await getAuthorityAccount(bridge.programId);\n const poolAccount = new PublicKey(poolAddress);\n const poolAccountInfo = await bridge.account.pool.fetch(poolAccount);\n const tokenMintAccount = poolAccountInfo.mint;\n const userToken = await getAssociatedAccount(user, tokenMintAccount);\n const bridgeTokenAccount = await getBridgeTokenAccount(tokenMintAccount, bridge.programId);\n const userDepositAccount = await getUserDepositAccount(user, tokenMintAccount, bridge.programId);\n\n const preInstructions: TransactionInstruction[] = [\n web3.ComputeBudgetProgram.setComputeUnitLimit({\n units: 1000000,\n }),\n ];\n\n try {\n await getTokenAccountData(userToken, provider);\n } catch (e) {\n const associatedProgram = Spl.associatedToken(provider);\n const createUserTokenInstruction: TransactionInstruction = await associatedProgram.methods\n .create()\n .accounts({\n mint: tokenMintAccount,\n owner: user,\n associatedAccount: userToken,\n })\n .instruction();\n preInstructions.push(createUserTokenInstruction);\n }\n\n try {\n await bridge.account.userDeposit.fetch(userDepositAccount);\n } catch (error) {\n const instruction: TransactionInstruction = await bridge.methods\n .initDepositAccount()\n .accounts({\n mint: tokenMintAccount,\n user,\n userDeposit: userDepositAccount,\n })\n .instruction();\n preInstructions.push(instruction);\n }\n\n const accounts: LPAccounts = {\n mint: tokenMintAccount,\n user,\n config: configAccount,\n pool: poolAccount,\n bridgeAuthority: bridgeAuthority,\n userDeposit: userDepositAccount,\n userToken,\n bridgeToken: bridgeTokenAccount,\n };\n\n return { accounts, preInstructions };\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainSymbol, ChainType } from \"../../../index\";\nimport {\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n PoolInfo,\n SdkError,\n TokenWithChainDetails,\n UserBalanceInfo,\n} from \"../../../models\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { PoolContract } from \"../../models/srb/pool-contract\";\nimport { ChainPoolService, UserBalance } from \"../models\";\nimport ContractClientOptions = contract.ClientOptions;\n\nexport class SrbPoolService extends ChainPoolService {\n chainType: ChainType.SRB = ChainType.SRB;\n private P = 48;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_user_deposit({ user: accountAddress })).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const userDeposit = result.unwrap();\n return new UserBalance({\n lpAmount: userDeposit.lp_amount.toString(),\n rewardDebt: userDeposit.reward_debt.toString(),\n });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n const poolContract = this.getContract(token.poolAddress);\n const result = (await poolContract.get_pool()).result;\n if (result.isErr()) {\n throw new SdkError();\n }\n const pool = result.unwrap();\n return {\n aValue: pool.a.toString(),\n accRewardPerShareP: pool.acc_reward_per_share_p.toString(),\n dValue: pool.d.toString(),\n tokenBalance: pool.token_balance.toString(),\n p: this.P,\n totalLpAmount: pool.total_lp_amount.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n imbalance: calculatePoolInfoImbalance({\n tokenBalance: pool.token_balance.toString(),\n vUsdBalance: pool.v_usd_balance.toString(),\n }),\n };\n }\n\n async buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.deposit({\n sender: params.accountAddress,\n amount: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.withdraw({\n sender: params.accountAddress,\n amount_lp: BigInt(params.amount),\n })\n ).toXDR();\n }\n\n async buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const poolContract = this.getContract(params.token.poolAddress, params.accountAddress);\n return (\n await poolContract.claim_rewards({\n sender: params.accountAddress,\n })\n ).toXDR();\n }\n\n private getContract(address: string, sender?: string): PoolContract {\n const config: ContractClientOptions = {\n publicKey: sender,\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new PoolContract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u128 = contract.u128;\nimport u32 = contract.u32;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport Result = contract.Result;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\n\nexport interface SwappedFromVUsd {\n amount: u128;\n fee: u128;\n recipient: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface SwappedToVUsd {\n amount: u128;\n fee: u128;\n sender: string;\n token: string;\n vusd_amount: u128;\n}\n\nexport interface Deposit {\n amount: u128;\n user: string;\n}\n\nexport interface Withdraw {\n amount: u128;\n user: string;\n}\n\nexport interface RewardsClaimed {\n amount: u128;\n user: string;\n}\n\nexport type Bridge = readonly [string];\nexport interface DataKey {\n tag: \"UserDeposit\";\n values: readonly [string];\n}\n\nexport interface Pool {\n a: u128;\n acc_reward_per_share_p: u128;\n admin_fee_amount: u128;\n admin_fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n can_deposit: boolean;\n can_withdraw: boolean;\n d: u128;\n decimals: u32;\n fee_share_bp: u128;\n reserves: u128;\n token: string;\n token_balance: u128;\n total_lp_amount: u128;\n v_usd_balance: u128;\n}\n\nexport interface UserDeposit {\n lp_amount: u128;\n reward_debt: u128;\n}\n\nexport type Admin = readonly [string];\nexport type GasOracleAddress = readonly [string];\nexport type GasUsage = readonly [Map<u32, u128>];\nexport type NativeToken = readonly [string];\nexport type StopAuthority = readonly [string];\nexport const Errors = {\n 0: { message: \"\" },\n 1: { message: \"\" },\n 2: { message: \"\" },\n 3: { message: \"\" },\n 4: { message: \"\" },\n 5: { message: \"\" },\n 6: { message: \"\" },\n 7: { message: \"\" },\n 8: { message: \"\" },\n 9: { message: \"\" },\n 10: { message: \"\" },\n 11: { message: \"\" },\n 12: { message: \"\" },\n 103: { message: \"\" },\n 104: { message: \"\" },\n 105: { message: \"\" },\n 106: { message: \"\" },\n 107: { message: \"\" },\n 108: { message: \"\" },\n 109: { message: \"\" },\n 203: { message: \"\" },\n 204: { message: \"\" },\n 205: { message: \"\" },\n 206: { message: \"\" },\n 207: { message: \"\" },\n 208: { message: \"\" },\n 209: { message: \"\" },\n 210: { message: \"\" },\n 211: { message: \"\" },\n 212: { message: \"\" },\n 214: { message: \"\" },\n 215: { message: \"\" },\n 216: { message: \"\" },\n 217: { message: \"\" },\n 218: { message: \"\" },\n 300: { message: \"\" },\n 301: { message: \"\" },\n 302: { message: \"\" },\n 303: { message: \"\" },\n 400: { message: \"\" },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface PoolContract {\n /**\n * Construct and simulate a initialize transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n initialize: (\n {\n admin,\n bridge,\n a,\n token,\n fee_share_bp,\n balance_ratio_min_bp,\n admin_fee_share_bp,\n }: {\n admin: string;\n bridge: string;\n a: u128;\n token: string;\n fee_share_bp: u128;\n balance_ratio_min_bp: u128;\n admin_fee_share_bp: u128;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n deposit: (\n { sender, amount }: { sender: string; amount: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n withdraw: (\n { sender, amount_lp }: { sender: string; amount_lp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a swap_to_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_to_v_usd: (\n { user, amount, zero_fee }: { user: string; amount: u128; zero_fee: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a swap_from_v_usd transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n swap_from_v_usd: (\n {\n user,\n vusd_amount,\n receive_amount_min,\n zero_fee,\n }: {\n user: string;\n vusd_amount: u128;\n receive_amount_min: u128;\n zero_fee: boolean;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a claim_rewards transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_rewards: (\n { sender }: { sender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `admin`\n */\n set_fee_share: (\n { fee_share_bp }: { fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a adjust_total_lp_amount transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n adjust_total_lp_amount: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_balance_ratio_min_bp transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_balance_ratio_min_bp: (\n { balance_ratio_min_bp }: { balance_ratio_min_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_deposit: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a stop_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n stop_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a start_withdraw transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n start_withdraw: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_stop_authority: (\n { stop_authority }: { stop_authority: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_bridge: (\n { bridge }: { bridge: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a set_admin_fee_share transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n set_admin_fee_share: (\n { admin_fee_share_bp }: { admin_fee_share_bp: u128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a claim_admin_fee transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n claim_admin_fee: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<void>>>;\n\n /**\n * Construct and simulate a pending_reward transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * `view`\n */\n pending_reward: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<u128>>>;\n\n /**\n * Construct and simulate a get_pool transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_pool: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<Pool>>>;\n\n /**\n * Construct and simulate a get_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_stop_authority transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_stop_authority: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_bridge transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_bridge: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<Result<string>>>;\n\n /**\n * Construct and simulate a get_user_deposit transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n get_user_deposit: (\n { user }: { user: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<UserDeposit>>>;\n\n /**\n * Construct and simulate a upgrade transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object.\n */\n upgrade: (\n { new_wasm_hash }: { new_wasm_hash: Buffer },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<Result<void>>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class PoolContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=\",\n \"AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=\",\n \"AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD\",\n \"AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD\",\n \"AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD\",\n \"AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==\",\n \"AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=\",\n \"AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=\",\n \"AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==\",\n \"AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=\",\n \"AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=\",\n \"AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==\",\n \"AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT\",\n \"AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==\",\n \"AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n initialize: this.txFromJSON<Result<void>>,\n deposit: this.txFromJSON<Result<void>>,\n withdraw: this.txFromJSON<Result<void>>,\n swap_to_v_usd: this.txFromJSON<Result<u128>>,\n swap_from_v_usd: this.txFromJSON<Result<u128>>,\n claim_rewards: this.txFromJSON<Result<void>>,\n set_fee_share: this.txFromJSON<Result<void>>,\n adjust_total_lp_amount: this.txFromJSON<Result<void>>,\n set_balance_ratio_min_bp: this.txFromJSON<Result<void>>,\n stop_deposit: this.txFromJSON<Result<void>>,\n start_deposit: this.txFromJSON<Result<void>>,\n stop_withdraw: this.txFromJSON<Result<void>>,\n start_withdraw: this.txFromJSON<Result<void>>,\n set_stop_authority: this.txFromJSON<Result<void>>,\n set_bridge: this.txFromJSON<Result<void>>,\n set_admin: this.txFromJSON<Result<void>>,\n set_admin_fee_share: this.txFromJSON<Result<void>>,\n claim_admin_fee: this.txFromJSON<Result<void>>,\n pending_reward: this.txFromJSON<Result<u128>>,\n get_pool: this.txFromJSON<Result<Pool>>,\n get_admin: this.txFromJSON<Result<string>>,\n get_stop_authority: this.txFromJSON<Result<string>>,\n get_bridge: this.txFromJSON<Result<string>>,\n get_user_deposit: this.txFromJSON<Result<UserDeposit>>,\n upgrade: this.txFromJSON<Result<void>>,\n };\n}\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../../tokens-info\";\nimport { calculatePoolInfoImbalance } from \"../../../utils/calculation\";\nimport { tronAddressToEthAddress } from \"../../bridge/utils\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport PoolAbi from \"../../models/abi/Pool.json\";\nimport { promisify } from \"../../utils\";\nimport { LiquidityPoolsParams, LiquidityPoolsParamsWithAmount, UserBalance, UserBalanceInfo } from \"../models\";\nimport { ChainPoolService } from \"../models/pool\";\n\nexport class TronPoolService extends ChainPoolService {\n chainType: ChainType.TRX = ChainType.TRX;\n private P = 52;\n private web3: Web3 | undefined;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient, tronJsonRpc: string | undefined) {\n super();\n if (tronJsonRpc) {\n this.web3 = new Web3(tronJsonRpc);\n }\n }\n\n async getUserBalanceInfo(accountAddress: string, token: TokenWithChainDetails): Promise<UserBalanceInfo> {\n let userBalanceInfo;\n if (this.web3) {\n try {\n userBalanceInfo = await this.getUserBalanceInfoByBatch(this.web3, accountAddress, token);\n } catch (err) {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n } else {\n userBalanceInfo = await this.getUserBalanceInfoPerProperty(accountAddress, token);\n }\n return userBalanceInfo;\n }\n\n private async getUserBalanceInfoByBatch(\n web3: Web3,\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const userAccount = tronAddressToEthAddress(accountAddress);\n const arr = [\"userRewardDebt\", \"balanceOf\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName](userAccount).call.request({}, cb)))()\n );\n batch.execute();\n const [rewardDebt, lpAmount] = await Promise.all(arr);\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n private async getUserBalanceInfoPerProperty(\n accountAddress: string,\n token: TokenWithChainDetails\n ): Promise<UserBalanceInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(accountAddress);\n }\n const contract = await this.getContract(token.poolAddress);\n const rewardDebt = (await contract.methods.userRewardDebt(accountAddress).call()).toString();\n const lpAmount = (await contract.methods.balanceOf(accountAddress).call()).toString();\n return new UserBalance({ lpAmount, rewardDebt });\n }\n\n async getPoolInfoFromChain(token: TokenWithChainDetails): Promise<PoolInfo> {\n let poolInfo;\n if (this.web3) {\n try {\n poolInfo = await this.getPoolInfoByBatch(this.web3, token);\n } catch (err) {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n } else {\n poolInfo = await this.getPoolInfoPerProperty(token);\n }\n return poolInfo;\n }\n\n private async getPoolInfoByBatch(web3: Web3, token: TokenWithChainDetails): Promise<PoolInfo> {\n const batch = new web3.BatchRequest();\n const contract = new web3.eth.Contract(PoolAbi as AbiItem[], tronAddressToEthAddress(token.poolAddress));\n const arr = [\"a\", \"d\", \"tokenBalance\", \"vUsdBalance\", \"totalSupply\", \"accRewardPerShareP\"].map((methodName) =>\n promisify((cb: any) => batch.add(contract.methods[methodName]().call.request({}, cb)))()\n );\n batch.execute();\n\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all(arr);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n private async getPoolInfoPerProperty(token: TokenWithChainDetails): Promise<PoolInfo> {\n if (!this.tronWeb.defaultAddress.base58) {\n this.tronWeb.setAddress(token.poolAddress);\n }\n const poolContract = await this.getContract(token.poolAddress);\n const [aValue, dValue, tokenBalance, vUsdBalance, totalLpAmount, accRewardPerShareP] = await Promise.all([\n poolContract.methods.a().call(),\n poolContract.methods.d().call(),\n poolContract.methods.tokenBalance().call(),\n poolContract.methods.vUsdBalance().call(),\n poolContract.methods.totalSupply().call(),\n poolContract.methods.accRewardPerShareP().call(),\n ]);\n const tokenBalanceStr = tokenBalance.toString();\n const vUsdBalanceStr = vUsdBalance.toString();\n const imbalance = calculatePoolInfoImbalance({ tokenBalance: tokenBalanceStr, vUsdBalance: vUsdBalanceStr });\n return {\n aValue: aValue.toString(),\n dValue: dValue.toString(),\n tokenBalance: tokenBalanceStr,\n vUsdBalance: vUsdBalanceStr,\n totalLpAmount: totalLpAmount.toString(),\n accRewardPerShareP: accRewardPerShareP.toString(),\n p: this.P,\n imbalance,\n };\n }\n\n buildRawTransactionDeposit(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"deposit(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionWithdraw(params: LiquidityPoolsParamsWithAmount): Promise<RawTransaction> {\n const { amount, accountAddress } = params;\n\n const parameter = [{ type: \"uint256\", value: amount }];\n const methodSignature = \"withdraw(uint256)\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n buildRawTransactionClaimRewards(params: LiquidityPoolsParams): Promise<RawTransaction> {\n const { accountAddress } = params;\n\n const parameter: SmartContractMethodParameter[] = [];\n const methodSignature = \"claimRewards()\";\n\n return this.buildRawTransaction(params.token.poolAddress, methodSignature, parameter, \"0\", accountAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameter: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameter,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(PoolAbi, contractAddress);\n }\n}\n", "import { Big, BigSource } from \"big.js\";\nimport { PoolInfo, Token } from \"../../tokens-info\";\nimport { fromSystemPrecision, getY, toSystemPrecision } from \"./index\";\n\nexport interface SwapPoolInfo {\n decimals: number;\n feeShare: string;\n poolInfo: PoolInfo;\n}\n\nexport interface SwapAndBridgeCalculationData {\n swapToVUsdCalcResult: SwapToVUsdCalcResult;\n swapFromVUsdCalcResult: SwapFromVUsdCalcResult;\n}\n\nexport interface SwapToVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInSystemPrecision: string;\n amountExcludingCommissionInSystemPrecision: string;\n}\nexport interface SwapFromVUsdCalcResult {\n bridgeFeeInTokenPrecision: string;\n amountIncludingCommissionInTokenPrecision: string;\n amountExcludingCommissionInTokenPrecision: string;\n}\n\nexport function swapAndBridgeFeeCalculation(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsd(\n amountInTokenPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsd(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n return { swapToVUsdCalcResult, swapFromVUsdCalcResult };\n}\n\nexport function swapAndBridgeFeeCalculationReverse(\n amountInTokenPrecision: string,\n sourcePoolInfo: SwapPoolInfo,\n destinationPoolInfo: SwapPoolInfo\n): SwapAndBridgeCalculationData {\n const swapToVUsdCalcResult = swapToVUsdReverse(\n amountInTokenPrecision,\n { decimals: destinationPoolInfo.decimals, feeShare: destinationPoolInfo.feeShare },\n destinationPoolInfo.poolInfo\n );\n const swapFromVUsdCalcResult = swapFromVUsdReverse(\n swapToVUsdCalcResult.amountIncludingCommissionInSystemPrecision,\n { decimals: sourcePoolInfo.decimals, feeShare: sourcePoolInfo.feeShare },\n sourcePoolInfo.poolInfo\n );\n return {\n swapToVUsdCalcResult,\n swapFromVUsdCalcResult,\n };\n}\n\nfunction swapToVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">\n): SwapToVUsdCalcResult {\n const amountValue = Big(amount);\n const fee = amountValue.times(feeShare);\n const amountWithoutFee = amountValue.minus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountWithoutFee, decimals), poolInfo),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsd(toSystemPrecision(amountValue, decimals), poolInfo),\n };\n}\n\nfunction calcSwapToVUsd(amountInSystemPrecision: Big, poolInfo: Omit<PoolInfo, \"p\" | \"imbalance\">): string {\n if (amountInSystemPrecision.eq(0)) {\n return \"0\";\n }\n const tokenBalance = Big(poolInfo.tokenBalance).plus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(poolInfo.vUsdBalance).minus(vUsdNewAmount).round().toFixed();\n}\n\nfunction swapFromVUsd(\n amount: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: Omit<PoolInfo, \"imbalance\">\n): SwapFromVUsdCalcResult {\n if (Big(amount).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const amountValue = Big(amount);\n const vUsdBalance = amountValue.plus(poolInfo.vUsdBalance);\n const newAmount = getY(vUsdBalance, poolInfo.aValue, poolInfo.dValue);\n const result = fromSystemPrecision(Big(poolInfo.tokenBalance).minus(newAmount), decimals);\n const fee = Big(result).times(feeShare);\n const resultWithoutFee = Big(result).minus(fee).round();\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: resultWithoutFee.toFixed(),\n amountExcludingCommissionInTokenPrecision: result.toFixed(),\n };\n}\n\nfunction swapToVUsdReverse(\n amountInTokenPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapToVUsdCalcResult {\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountInTokenPrecision).times(reversedFeeShare);\n const amountWithFee = Big(amountInTokenPrecision).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountWithFee, decimals),\n poolInfo\n ),\n amountExcludingCommissionInSystemPrecision: calcSwapToVUsdReverse(\n toSystemPrecision(amountInTokenPrecision, decimals),\n poolInfo\n ),\n };\n}\n\nfunction calcSwapToVUsdReverse(amountInSystemPrecision: Big, poolInfo: PoolInfo): string {\n const tokenBalance = Big(poolInfo.tokenBalance).minus(amountInSystemPrecision);\n const vUsdNewAmount = getY(tokenBalance.toFixed(), poolInfo.aValue, poolInfo.dValue);\n return Big(vUsdNewAmount).minus(poolInfo.vUsdBalance).round().toFixed();\n}\n\nfunction swapFromVUsdReverse(\n amountInSystemPrecision: BigSource,\n { feeShare, decimals }: Pick<Token, \"feeShare\" | \"decimals\">,\n poolInfo: PoolInfo\n): SwapFromVUsdCalcResult {\n if (Big(amountInSystemPrecision).eq(0)) {\n return {\n bridgeFeeInTokenPrecision: \"0\",\n amountIncludingCommissionInTokenPrecision: \"0\",\n amountExcludingCommissionInTokenPrecision: \"0\",\n };\n }\n const vUsdNewAmount = Big(poolInfo.vUsdBalance).minus(amountInSystemPrecision);\n const tokenBalance = getY(vUsdNewAmount.toFixed(), poolInfo.aValue, poolInfo.dValue);\n const inSystemPrecision = Big(tokenBalance).minus(poolInfo.tokenBalance);\n const amountWithoutFee = fromSystemPrecision(inSystemPrecision.toFixed(), decimals);\n const reversedFeeShare = Big(feeShare).div(Big(1).minus(feeShare));\n const fee = Big(amountWithoutFee).times(reversedFeeShare);\n const amount = Big(amountWithoutFee).plus(fee);\n return {\n bridgeFeeInTokenPrecision: fee.round().toFixed(),\n amountIncludingCommissionInTokenPrecision: amount.round().toFixed(),\n amountExcludingCommissionInTokenPrecision: amountWithoutFee.toFixed(),\n };\n}\n", "import { Big } from \"big.js\";\nimport { PoolInfo, TokenWithChainDetails } from \"../../tokens-info\";\nimport { convertIntAmountToFloat, fromSystemPrecision, swapFromVUsd, swapToVUsd } from \"./index\";\n\nexport interface SendAmountDetails {\n sourceLPSwap: AmountImpact;\n destLPSwap: AmountImpact;\n}\n\nexport interface AmountImpact {\n fee: string;\n swap: string;\n}\n\nexport function getSendAmountDetails(\n amountInTokenPrecision: string,\n sourceToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destToken: TokenWithChainDetails,\n destPool: PoolInfo\n): SendAmountDetails {\n const vUsd = swapToVUsd(amountInTokenPrecision, sourceToken, sourcePool);\n const vUsdInTokenPrecision = fromSystemPrecision(vUsd, sourceToken.decimals);\n const result = swapFromVUsd(vUsd, destToken, destPool);\n\n const swapToFeeInt = Big(amountInTokenPrecision).times(sourceToken.feeShare);\n const swapFromFeeInt = Big(result).div(Big(1).minus(destToken.feeShare)).minus(result);\n return {\n sourceLPSwap: {\n fee: convertIntAmountToFloat(swapToFeeInt, sourceToken.decimals)\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n Big(amountInTokenPrecision).minus(vUsdInTokenPrecision).minus(swapToFeeInt),\n sourceToken.decimals\n )\n .neg()\n .round(sourceToken.decimals, Big.roundUp)\n .toFixed(),\n },\n destLPSwap: {\n fee: convertIntAmountToFloat(swapFromFeeInt, destToken.decimals)\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n swap: convertIntAmountToFloat(\n fromSystemPrecision(vUsd, destToken.decimals).minus(result).minus(swapFromFeeInt),\n destToken.decimals\n )\n .neg()\n .round(destToken.decimals, Big.roundUp)\n .toFixed(),\n },\n };\n}\n", "import { Connection, PublicKey, TransactionMessage, VersionedTransaction } from \"@solana/web3.js\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { fetchAddressLookupTableAccountsFromTx } from \"./utils\";\n\n/**\n * Contains usefully Solana methods\n */\nexport interface SolUtils {\n /**\n * Add memo to solana's transaction\n * @param transaction transaction to add memo\n * @param memo memo to add (28 char max)\n */\n addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void>;\n}\n\nexport class DefaultSolUtils implements SolUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async addMemoToTx(transaction: VersionedTransaction, memo: string): Promise<void> {\n if (memo.length > 28) {\n throw new SdkError(\"InvalidArgumentException memo cannot be more than 28 characters\");\n }\n const connection = new Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SOL), \"confirmed\");\n const addressLookupTableAccounts = await fetchAddressLookupTableAccountsFromTx(transaction, connection);\n const message = TransactionMessage.decompile(transaction.message, {\n addressLookupTableAccounts: addressLookupTableAccounts,\n });\n const lastInstruction = message.instructions[message.instructions.length - 1];\n if (!lastInstruction?.keys) {\n throw new SdkError(\"Last instruction or its keys are invalid.\");\n }\n\n lastInstruction.keys.push({\n pubkey: new PublicKey(Buffer.from(memo)),\n isSigner: false,\n isWritable: false,\n });\n transaction.message = message.compileToV0Message(addressLookupTableAccounts);\n }\n}\n", "import {\n Asset as StellarAsset,\n BASE_FEE,\n Horizon,\n Operation,\n Operation as StellarOperation,\n SorobanRpc,\n TimeoutInfinite,\n Transaction,\n TransactionBuilder,\n TransactionBuilder as StellarTransactionBuilder,\n contract,\n} from \"@stellar/stellar-sdk\";\nimport { ChainSymbol } from \"../../chains/chain.enums\";\nimport { AllbridgeCoreSdkOptions, SdkError } from \"../../index\";\nimport { NodeRpcUrlsConfig } from \"../../services\";\nimport { TokenContract } from \"../../services/models/srb/token-contract\";\nimport { withExponentialBackoff } from \"../utils\";\n\nimport ContractClientOptions = contract.ClientOptions;\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\n\n/**\n * Contains usefully Soroban methods\n */\nexport interface SrbUtils {\n /**\n * Build change Trust line Tx\n * @param params see {@link TrustLineParams}\n * @returns xdr Tx\n */\n buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string>;\n\n /**\n * Get Balance Line information if exists\n * @param sender\n * @param tokenAddress\n */\n getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse>;\n\n /**\n * Simulate and check if Restore needed\n * @param xdrTx - restore\n * @param sourceAccount\n * @returns xdrTx restore transaction if it required after check\n */\n simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined>;\n\n /**\n * Submit tx\n * @param xdrTx\n */\n sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse>;\n\n /**\n * Confirm tx\n */\n confirmTx(hash: string, secondsToWait?: number): Promise<SorobanRpc.Api.GetTransactionResponse>;\n}\n\nexport interface TrustLineParams {\n /**\n * Float amount of tokens, default is Number.MAX_SAFE_INTEGER\n */\n limit?: string;\n sender: string;\n tokenAddress: string;\n}\n\nconst FEE = 100;\nconst SEND_TRANSACTION_TIMEOUT = 180;\n\nexport class DefaultSrbUtils implements SrbUtils {\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, readonly params: AllbridgeCoreSdkOptions) {}\n\n async buildChangeTrustLineXdrTx(params: TrustLineParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.sender);\n const tokenContract = this.getContract(TokenContract, params.tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n if (symbol === undefined || srbTokenAddress === undefined) {\n throw new SdkError(`Invalid token name format. Expected format 'symbol:srbTokenAddress'`);\n }\n const asset = new StellarAsset(symbol, srbTokenAddress);\n const changeTrust = StellarOperation.changeTrust({\n asset: asset,\n limit: params.limit,\n });\n\n return new StellarTransactionBuilder(stellarAccount, {\n fee: FEE.toString(10),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .addOperation(changeTrust)\n .setTimeout(SEND_TRANSACTION_TIMEOUT)\n .build()\n .toXDR();\n }\n\n async getBalanceLine(sender: string, tokenAddress: string): Promise<Horizon.HorizonApi.BalanceLineAsset | undefined> {\n const tokenContract = this.getContract(TokenContract, tokenAddress);\n const tokenName = (await tokenContract.name()).result;\n const [symbol, srbTokenAddress] = tokenName.split(\":\");\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR);\n const stellar = new Horizon.Server(nodeRpcUrl);\n const stellarAccount = await stellar.loadAccount(sender);\n const balanceInfo = stellarAccount.balances;\n\n return balanceInfo.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n }\n\n async submitTransactionStellar(xdrTx: string): Promise<Horizon.HorizonApi.SubmitTransactionResponse> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const transaction = StellarTransactionBuilder.fromXDR(\n xdrTx,\n this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR)\n );\n return await stellar.submitTransaction(transaction);\n }\n\n async simulateAndCheckRestoreTxRequiredSoroban(xdrTx: string, sourceAccount: string): Promise<string | undefined> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const account = await server.getAccount(sourceAccount);\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n const simulation = await server.simulateTransaction(transaction);\n if (SorobanRpc.Api.isSimulationRestore(simulation)) {\n return new TransactionBuilder(account, {\n fee: (+BASE_FEE + +simulation.restorePreamble.minResourceFee).toString(),\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n })\n .setSorobanData(simulation.restorePreamble.transactionData.build())\n .addOperation(Operation.restoreFootprint({}))\n .setTimeout(TimeoutInfinite)\n .build()\n .toXDR();\n }\n return undefined;\n }\n\n async sendTransactionSoroban(xdrTx: string): Promise<SorobanRpc.Api.SendTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const transaction = TransactionBuilder.fromXDR(xdrTx, this.params.sorobanNetworkPassphrase) as Transaction;\n return server.sendTransaction(transaction);\n }\n\n async confirmTx(hash: string, secondsToWait = 15): Promise<SorobanRpc.Api.GetTransactionResponse> {\n const server = new SorobanRpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB));\n const getTransactionResponseAll = await withExponentialBackoff(\n () => server.getTransaction(hash),\n (resp) => resp.status === SorobanRpc.Api.GetTransactionStatus.NOT_FOUND,\n secondsToWait\n );\n\n if (getTransactionResponseAll.length === 0) {\n throw new SdkError(\"No transaction responses found.\");\n }\n\n const lastResponse = getTransactionResponseAll[getTransactionResponseAll.length - 1];\n if (!lastResponse) {\n throw new SdkError(\"Unexpected error: last response is undefined.\");\n }\n\n return lastResponse;\n }\n\n private getContract<T>(contract: new (args: ContractClientOptions) => T, address: string): T {\n const config: ContractClientOptions = {\n contractId: address,\n networkPassphrase: this.params.sorobanNetworkPassphrase,\n rpcUrl: this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.SRB),\n };\n return new contract(config);\n }\n}\n", "import { contract } from \"@stellar/stellar-sdk\";\nimport u32 = contract.u32;\nimport i128 = contract.i128;\nimport AssembledTransaction = contract.AssembledTransaction;\nimport ContractSpec = contract.Spec;\nimport ContractClient = contract.Client;\nimport ContractClientOptions = contract.ClientOptions;\nexport const Errors = {};\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport interface TokenContract {\n /**\n * Construct and simulate a allowance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the allowance for `spender` to transfer from `from`.\n *\n * The amount returned is the amount that spender is allowed to transfer\n * out of from's balance. When the spender transfers amounts, the allowance\n * will be reduced by the amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address spending the tokens held by `from`.\n */\n allowance: (\n { from, spender }: { from: string; spender: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns true if `id` is authorized to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address for which token authorization is being checked.\n */\n authorized: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<boolean>>;\n\n /**\n * Construct and simulate a approve transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Set the allowance by `amount` for `spender` to transfer/burn from\n * `from`.\n *\n * The amount set is the amount that spender is approved to transfer out of\n * from's balance. The spender will be allowed to transfer amounts, and\n * when an amount is transferred the allowance will be reduced by the\n * amount transfered.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens to be drawn from.\n * * `spender` - The address being authorized to spend the tokens held by\n * `from`.\n * * `amount` - The tokens to be made available to `spender`.\n * * `expiration_ledger` - The ledger number where this allowance expires. Cannot\n * be less than the current ledger number unless the amount is being set to 0.\n * An expired entry (where expiration_ledger < the current ledger number)\n * should be treated as a 0 amount allowance.\n *\n * # Events\n *\n * Emits an event with topics `[\"approve\", from: Address,\n * spender: Address], data = [amount: i128, expiration_ledger: u32]`\n */\n approve: (\n {\n from,\n spender,\n amount,\n expiration_ledger,\n }: {\n from: string;\n spender: string;\n amount: i128;\n expiration_ledger: u32;\n },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a balance transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the balance of `id`.\n *\n * # Arguments\n *\n * * `id` - The address for which a balance is being queried. If the\n * address has no existing balance, returns 0.\n */\n balance: (\n { id }: { id: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<i128>>;\n\n /**\n * Construct and simulate a burn transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a burn_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Burn `amount` from `from`, consuming the allowance of `spender`.\n *\n * Reduces from's balance by the amount, without transferring the balance\n * to another holder's balance.\n *\n * The spender will be allowed to burn the amount from from's balance, if\n * the amount is less than or equal to the allowance that the spender has\n * on the from's balance. The spender's allowance on from's balance will be\n * reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the burn, and having its allowance\n * consumed during the burn.\n * * `from` - The address holding the balance of tokens which will be\n * burned from.\n * * `amount` - The amount of tokens to be burned.\n *\n * # Events\n *\n * Emits an event with topics `[\"burn\", from: Address], data = [amount:\n * i128]`\n */\n burn_from: (\n { spender, from, amount }: { spender: string; from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a clawback transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Clawback `amount` from `from` account. `amount` is burned in the\n * clawback process.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance from which the clawback will\n * take tokens.\n * * `amount` - The amount of tokens to be clawed back.\n *\n * # Events\n *\n * Emits an event with topics `[\"clawback\", admin: Address, to: Address],\n * data = [amount: i128]`\n */\n clawback: (\n { from, amount }: { from: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a decimals transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the number of decimals used to represent amounts of this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n decimals: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<u32>>;\n\n /**\n * Construct and simulate a mint transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Mints `amount` to `to`.\n *\n * # Arguments\n *\n * * `to` - The address which will receive the minted tokens.\n * * `amount` - The amount of tokens to be minted.\n *\n * # Events\n *\n * Emits an event with topics `[\"mint\", admin: Address, to: Address], data\n * = [amount: i128]`\n */\n mint: (\n { to, amount }: { to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a name transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the name for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n name: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets the administrator to the specified address `new_admin`.\n *\n * # Arguments\n *\n * * `new_admin` - The address which will henceforth be the administrator\n * of this token contract.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_admin\", admin: Address], data =\n * [new_admin: Address]`\n */\n set_admin: (\n { new_admin }: { new_admin: string },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a admin transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the admin of the contract.\n *\n * # Panics\n *\n * If the admin is not set.\n */\n admin: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a set_authorized transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Sets whether the account is authorized to use its balance. If\n * `authorized` is true, `id` should be able to use its balance.\n *\n * # Arguments\n *\n * * `id` - The address being (de-)authorized.\n * * `authorize` - Whether or not `id` can use its balance.\n *\n * # Events\n *\n * Emits an event with topics `[\"set_authorized\", id: Address], data =\n * [authorize: bool]`\n */\n set_authorized: (\n { id, authorize }: { id: string; authorize: boolean },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a symbol transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Returns the symbol for this token.\n *\n * # Panics\n *\n * If the contract has not yet been initialized.\n */\n symbol: (options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }) => Promise<AssembledTransaction<string>>;\n\n /**\n * Construct and simulate a transfer transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`.\n *\n * # Arguments\n *\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer: (\n { from, to, amount }: { from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n\n /**\n * Construct and simulate a transfer_from transaction. Returns an `AssembledTransaction` object which will have a `result` field containing the result of the simulation. If this transaction changes contract state, you will need to call `signAndSend()` on the returned object. *\n * Transfer `amount` from `from` to `to`, consuming the allowance that\n * `spender` has on `from`'s balance. Authorized by spender\n * (`spender.require_auth()`).\n *\n * The spender will be allowed to transfer the amount from from's balance\n * if the amount is less than or equal to the allowance that the spender\n * has on the from's balance. The spender's allowance on from's balance\n * will be reduced by the amount.\n *\n * # Arguments\n *\n * * `spender` - The address authorizing the transfer, and having its\n * allowance consumed during the transfer.\n * * `from` - The address holding the balance of tokens which will be\n * withdrawn from.\n * * `to` - The address which will receive the transferred tokens.\n * * `amount` - The amount of tokens to be transferred.\n *\n * # Events\n *\n * Emits an event with topics `[\"transfer\", from: Address, to: Address],\n * data = [amount: i128]`\n */\n transfer_from: (\n { spender, from, to, amount }: { spender: string; from: string; to: string; amount: i128 },\n options?: {\n /**\n * The fee to pay for the transaction. Default: BASE_FEE\n */\n fee?: number;\n\n /**\n * The maximum amount of time to wait for the transaction to complete. Default: DEFAULT_TIMEOUT\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the AssembledTransaction. Default: true\n */\n simulate?: boolean;\n }\n ) => Promise<AssembledTransaction<null>>;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport class TokenContract extends ContractClient {\n constructor(public readonly options: ContractClientOptions) {\n super(\n new ContractSpec([\n \"AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL\",\n \"AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB\",\n \"AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA\",\n \"AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=\",\n \"AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==\",\n \"AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=\",\n \"AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ\",\n \"AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA\",\n \"AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=\",\n \"AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==\",\n \"AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==\",\n \"AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n \"AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==\",\n ]),\n options\n );\n }\n public readonly fromJSON = {\n allowance: this.txFromJSON<i128>,\n authorized: this.txFromJSON<boolean>,\n approve: this.txFromJSON<null>,\n balance: this.txFromJSON<i128>,\n burn: this.txFromJSON<null>,\n burn_from: this.txFromJSON<null>,\n clawback: this.txFromJSON<null>,\n decimals: this.txFromJSON<u32>,\n mint: this.txFromJSON<null>,\n name: this.txFromJSON<string>,\n set_admin: this.txFromJSON<null>,\n admin: this.txFromJSON<string>,\n set_authorized: this.txFromJSON<null>,\n symbol: this.txFromJSON<string>,\n transfer: this.txFromJSON<null>,\n transfer_from: this.txFromJSON<null>,\n };\n}\n", "import { AllbridgeCoreSdkOptions } from \"../index\";\nimport { NodeRpcUrlsConfig } from \"../services\";\nimport { DefaultSolUtils, SolUtils } from \"./sol\";\nimport { DefaultSrbUtils, SrbUtils } from \"./srb\";\n\n/**\n * Contains usefully methods\n */\nexport interface Utils {\n srb: SrbUtils;\n sol: SolUtils;\n}\n\nexport class DefaultUtils implements Utils {\n srb: SrbUtils;\n sol: SolUtils;\n\n constructor(readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig, params: AllbridgeCoreSdkOptions) {\n this.srb = new DefaultSrbUtils(nodeRpcUrlsConfig, params);\n this.sol = new DefaultSolUtils(nodeRpcUrlsConfig, params);\n }\n}\n", "export {\n ApproveParams as BridgeApproveParams,\n BaseSendParams,\n CheckAllowanceParams,\n GetAllowanceParams,\n GetTokenBalanceParams,\n SendParams,\n SwapParams,\n GetNativeTokenBalanceParams,\n} from \"../services/bridge/models/bridge.model\";\nexport { BridgeService } from \"../services/bridge/index\";\nexport { CctpParams, CctpDomains } from \"../services/bridge/sol\";\nexport { LiquidityPoolService } from \"../services/liquidity-pool/index\";\nexport {\n Messenger,\n TransferStatusResponse,\n BridgeTransaction,\n GasBalanceResponse,\n CheckAddressResponse,\n AddressStatus,\n} from \"../client/core-api/core-api.model\";\nexport { RawBridgeTransactionBuilder } from \"../services/bridge/raw-bridge-transaction-builder\";\nexport { RawPoolTransactionBuilder } from \"../services/liquidity-pool/raw-pool-transaction-builder\";\nexport {\n PoolInfo,\n TokenWithChainDetails,\n TransferTime,\n TxCostAmount,\n MessengerTransferTime,\n} from \"../tokens-info/tokens-info.model\";\nexport {\n UserBalanceInfo,\n UserBalanceInfoDTO,\n LiquidityPoolsParams,\n LiquidityPoolsParamsWithAmount,\n ApproveParams as LiquidityPoolsApproveParams,\n CheckAllowanceParams as LiquidityPoolsCheckAllowanceParams,\n GetAllowanceParams as LiquidityPoolsGetAllowanceParams,\n} from \"../services/liquidity-pool/models/pool.model\";\nexport * from \"../services/models/index\";\nexport {\n SwapAndBridgeCalculationData,\n SwapFromVUsdCalcResult,\n SwapToVUsdCalcResult,\n} from \"../utils/calculation/swap-and-bridge-fee-calc\";\nexport { SendAmountDetails, AmountImpact } from \"../utils/calculation/swap-and-bridge-details\";\nexport { ChainDetailsMap, ChainDetailsWithTokens } from \"../tokens-info\";\nexport { Utils } from \"../utils\";\nexport { SrbUtils, TrustLineParams } from \"../utils/srb\";\nexport { SolUtils } from \"../utils/sol\";\nexport * from \"../exceptions\";\nexport { ChainSymbol, ChainType } from \"../chains/chain.enums\";\nexport { AdditionalBasicChainProperties, BasicChainProperties } from \"../chains/models\";\n\nexport enum FeePaymentMethod {\n /**\n * The fee is paid in the native currency of the source chain.\n */\n WITH_NATIVE_CURRENCY = \"native\",\n\n /**\n * The fee is paid with the stablecoin token.\n */\n WITH_STABLECOIN = \"stablecoin\",\n}\n\nexport interface AmountsAndGasFeeOptions {\n /**\n * The floating point amount of tokens to be sent (not including gas fee).\n */\n amountToSendFloat: string;\n\n /**\n * The floating point amount of tokens to be received.\n */\n amountToBeReceivedFloat: string;\n\n /**\n * Available ways to pay the transfer gas fee and gas fee amount.\n */\n gasFeeOptions: GasFeeOptions;\n}\n\ntype GasFeeOptionsType = {\n [key in FeePaymentMethod]?: AmountFormatted;\n};\n\n/**\n * Describes available options of paying the gas fee and the amount to pay when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains the amount in the smallest denomination of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains the amount in the smallest denomination of the source token\n */\nexport interface GasFeeOptions extends GasFeeOptionsType {\n [FeePaymentMethod.WITH_NATIVE_CURRENCY]: AmountFormatted;\n [FeePaymentMethod.WITH_STABLECOIN]?: AmountFormatted;\n}\n\n/**\n * Define the type of amount data<p/>\n * Example:<p/>\n * \"1500000\" USDC {@link AmountFormat.INT} = \"1.5\" USDC {@link AmountFormat.FLOAT}, if USDC.decimals = 6\n */\nexport enum AmountFormat {\n /**\n * denominated in the smallest unit of the source token\n */\n INT = \"int\",\n /**\n * denominated in the unit of the source token\n */\n FLOAT = \"float\",\n}\n\n/**\n * Describes the same amount in two variation formats.\n *\n * For {@link AmountFormat.INT} value contains the amount in the smallest denomination\n *\n * For {@link AmountFormat.FLOAT} value contains the amount in tokens denomination\n */\nexport type AmountFormatted = {\n [key in AmountFormat]: string;\n};\n\n/**\n * Describes MAX extra gas value can to be passed when using the corresponding method.\n *\n * For {@link FeePaymentMethod.WITH_NATIVE_CURRENCY} value contains {@link ExtraGasMaxLimit} the amount of the source chain currency\n *\n * For {@link FeePaymentMethod.WITH_STABLECOIN} value contains {@link ExtraGasMaxLimit} the amount of the source token\n */\nexport type ExtraGasMaxLimits = {\n [key in FeePaymentMethod]?: ExtraGasMaxLimit;\n};\n\n/**\n * Describes the same MAX extra gas amount.\n */\nexport type ExtraGasMaxLimit = AmountFormatted;\n\n/**\n * Provide extra gas information\n */\nexport interface ExtraGasMaxLimitResponse {\n /**\n * See {@link ExtraGasMaxLimits}\n */\n extraGasMax: ExtraGasMaxLimits;\n /**\n * Information due to destination chain\n */\n destinationChain: {\n /**\n * gasAmountMax maximum amount you can receive as extra gas on dest chain\n */\n gasAmountMax: ExtraGasMaxLimit;\n /**\n * cost of swap tx on chain\n */\n swap: AmountFormatted;\n /**\n * cost of send tx on chain\n */\n transfer: AmountFormatted;\n };\n /**\n * Exchange rate\n */\n exchangeRate: string;\n /**\n * Source native token price\n */\n sourceNativeTokenPrice: string;\n}\n\n/**\n * Provide pending status information\n */\nexport interface PendingStatusInfoResponse {\n /**\n * Number of pending transactions\n */\n pendingTxs: number;\n /**\n * Total amount of pending transactions\n */\n pendingAmount: AmountFormatted;\n /**\n * The amount of tokens can be received as a result of transfer considering pending transactions\n */\n estimatedAmount: { min: AmountFormatted; max: AmountFormatted };\n}\n", "import { Big } from \"big.js\";\n// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport Web3 from \"web3\";\nimport { Chains } from \"../../chains\";\nimport { AllbridgeCoreClient } from \"../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType } from \"../../index\";\nimport { AmountFormat, AmountFormatted } from \"../../models\";\nimport { convertFloatAmountToInt, convertIntAmountToFloat } from \"../../utils/calculation\";\nimport { validateAmountDecimals, validateAmountGtZero } from \"../../utils/utils\";\nimport { GetNativeTokenBalanceParams } from \"../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../index\";\nimport { Provider, RawTransaction, TransactionResponse } from \"../models\";\nimport { EvmTokenService } from \"./evm\";\nimport {\n ApproveParams,\n ApproveParamsDto,\n CheckAllowanceParams,\n CheckAllowanceParamsDto,\n GetAllowanceParams,\n GetTokenBalanceParams,\n} from \"./models\";\nimport { ChainTokenService } from \"./models/token\";\nimport { SolanaTokenService } from \"./sol\";\nimport { SrbTokenService } from \"./srb\";\nimport { TronTokenService } from \"./trx\";\n\nexport interface TokenService {\n getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string>;\n\n checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean>;\n\n approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse>;\n\n buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction>;\n\n getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string>;\n\n getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted>;\n}\n\nexport class DefaultTokenService implements TokenService {\n constructor(\n readonly api: AllbridgeCoreClient,\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions\n ) {}\n\n async getAllowance(params: GetAllowanceParams, provider?: Provider): Promise<string> {\n const allowanceInt = await this.getChainTokenService(params.token.chainSymbol, params.owner, provider).getAllowance(\n params\n );\n return convertIntAmountToFloat(allowanceInt, params.token.decimals).toFixed();\n }\n\n async checkAllowance(params: CheckAllowanceParams, provider?: Provider): Promise<boolean> {\n validateAmountGtZero(params.amount);\n validateAmountDecimals(\"amount\", params.amount, params.token.decimals);\n return this.getChainTokenService(params.token.chainSymbol, params.owner, provider).checkAllowance(\n this.prepareCheckAllowanceParams(params)\n );\n }\n\n async approve(provider: Provider, approveData: ApproveParams): Promise<TransactionResponse> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(approveData.token.chainSymbol, approveData.owner, provider).approve(\n this.prepareApproveParams(approveData)\n );\n }\n\n async buildRawTransactionApprove(approveData: ApproveParams, provider?: Provider): Promise<RawTransaction> {\n if (approveData.amount) {\n validateAmountGtZero(approveData.amount);\n validateAmountDecimals(\"amount\", approveData.amount, approveData.token.decimals);\n }\n return this.getChainTokenService(\n approveData.token.chainSymbol,\n approveData.owner,\n provider\n ).buildRawTransactionApprove(this.prepareApproveParams(approveData));\n }\n\n async getTokenBalance(params: GetTokenBalanceParams, provider?: Provider): Promise<string> {\n const tokenBalance = await this.getChainTokenService(\n params.token.chainSymbol,\n params.account,\n provider\n ).getTokenBalance(params);\n if (params.token.decimals) {\n return convertIntAmountToFloat(tokenBalance, params.token.decimals).toFixed();\n }\n return tokenBalance;\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams, provider?: Provider): Promise<AmountFormatted> {\n const tokenBalance = await this.getChainTokenService(\n params.chainSymbol,\n params.account,\n provider\n ).getNativeTokenBalance(params);\n return {\n [AmountFormat.INT]: tokenBalance,\n [AmountFormat.FLOAT]: convertIntAmountToFloat(\n tokenBalance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed(),\n };\n }\n\n private getChainTokenService(chainSymbol: string, ownerAddress: string, provider?: Provider): ChainTokenService {\n switch (Chains.getChainProperty(chainSymbol).chainType) {\n case ChainType.EVM: {\n if (provider) {\n return new EvmTokenService(provider as unknown as Web3, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new EvmTokenService(new Web3(nodeRpcUrl), this.api);\n }\n }\n case ChainType.TRX: {\n if (provider) {\n return new TronTokenService(provider, this.api);\n } else {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n const tronWeb = new TronWeb({ fullHost: nodeRpcUrl });\n tronWeb.setAddress(ownerAddress);\n return new TronTokenService(tronWeb, this.api);\n }\n }\n case ChainType.SOLANA: {\n const nodeRpcUrl = this.nodeRpcUrlsConfig.getNodeRpcUrl(chainSymbol);\n return new SolanaTokenService(nodeRpcUrl, this.api);\n }\n case ChainType.SRB: {\n return new SrbTokenService(this.nodeRpcUrlsConfig, this.params, this.api);\n }\n }\n }\n\n prepareCheckAllowanceParams(params: CheckAllowanceParams): CheckAllowanceParamsDto {\n return {\n ...params,\n amount: convertFloatAmountToInt(params.amount, params.token.decimals),\n };\n }\n\n private prepareApproveParams(approveData: ApproveParams): ApproveParamsDto {\n return {\n tokenAddress: approveData.token.tokenAddress,\n owner: approveData.owner,\n spender: approveData.spender,\n chainSymbol: approveData.token.chainSymbol,\n amount: approveData.amount == undefined ? undefined : Big(approveData.amount).toFixed(),\n };\n }\n}\n", "import BN from \"bn.js\";\nimport erc20abi from \"erc-20-abi\";\nimport Web3 from \"web3\";\nimport { TransactionConfig } from \"web3-core\";\nimport { AbiItem } from \"web3-utils\";\nimport { ChainSymbol, ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction } from \"../../models\";\nimport { BaseContract } from \"../../models/abi/types/types\";\nimport { amountToHex } from \"../../utils/index\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nconst USDT_TOKEN_ADDRESS = \"0xdac17f958d2ee523a2206206994597c13d831ec7\";\nconst POLYGON_GAS_LIMIT = 100_000;\n\nexport class EvmTokenService extends ChainTokenService {\n chainType: ChainType.EVM = ChainType.EVM;\n\n constructor(public web3: Web3, public api: AllbridgeCoreClient) {\n super();\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const tokenAddress = params.token.tokenAddress;\n const owner = params.owner;\n const spender = params.spender;\n return this.getAllowanceByTokenAddress(tokenAddress, owner, spender);\n }\n\n getAllowanceByTokenAddress(tokenAddress: string, owner: string, spender: string): Promise<string> {\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n return tokenContract.methods.allowance(owner, spender).call();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n return await this.getContract(erc20abi as AbiItem[], params.token.tokenAddress)\n .methods.balanceOf(params.account)\n .call();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return await this.web3.eth.getBalance(params.account);\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n if (this.isUsdt(params.tokenAddress)) {\n const allowance = await this.getAllowanceByTokenAddress(params.tokenAddress, params.owner, params.spender);\n if (allowance !== \"0\") {\n const rawTransaction = await this.buildRawTransactionApprove({\n ...params,\n amount: \"0\",\n });\n await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n }\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await this.sendRawTransaction(rawTransaction, params.chainSymbol);\n }\n\n isUsdt(tokenAddress: string): boolean {\n return tokenAddress.toLowerCase() === USDT_TOKEN_ADDRESS;\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const tokenContract = this.getContract(erc20abi as AbiItem[], tokenAddress);\n\n const approveMethod = await tokenContract.methods.approve(\n spender,\n amount == undefined ? MAX_AMOUNT : amountToHex(amount)\n );\n\n return {\n from: owner,\n to: tokenAddress,\n value: \"0\",\n data: approveMethod.encodeABI(),\n };\n }\n\n private async sendRawTransaction(rawTransaction: RawTransaction, chainSymbol: string) {\n const transactionConfig: TransactionConfig = rawTransaction as TransactionConfig;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error DISABLE SITE SUGGESTED GAS FEE IN METAMASK\n // prettier-ignore\n const feeOptions: { maxPriorityFeePerGas?: number | string | BN; maxFeePerGas?: number | string | BN } = { maxPriorityFeePerGas: null, maxFeePerGas: null };\n if ((chainSymbol as ChainSymbol) === ChainSymbol.POL) {\n transactionConfig.gas = POLYGON_GAS_LIMIT;\n } else {\n transactionConfig.gas = await this.web3.eth.estimateGas(rawTransaction as TransactionConfig);\n }\n const { transactionHash } = await this.web3.eth.sendTransaction({ ...transactionConfig, ...feeOptions });\n return { txId: transactionHash };\n }\n\n private getContract<T extends BaseContract>(abiItem: AbiItem[], contractAddress: string): T {\n return new this.web3.eth.Contract(abiItem, contractAddress) as any;\n }\n}\n", "import { Big } from \"big.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { ApproveParamsDto, CheckAllowanceParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"./token.model\";\n\nexport abstract class ChainTokenService {\n abstract chainType: ChainType;\n abstract api: AllbridgeCoreClient;\n\n abstract getTokenBalance(params: GetTokenBalanceParams): Promise<string>;\n\n abstract getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string>;\n\n abstract getAllowance(params: GetAllowanceParamsDto): Promise<string>;\n\n async checkAllowance(params: CheckAllowanceParamsDto): Promise<boolean> {\n const allowance = await this.getAllowance(params);\n return Big(allowance).gte(Big(params.amount));\n }\n\n abstract approve(params: ApproveParamsDto): Promise<TransactionResponse>;\n\n abstract buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction>;\n}\n", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { AnchorProvider, Provider } from \"@project-serum/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { MethodNotSupportedError } from \"../../../exceptions\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { getTokenAccountData } from \"../../utils/sol\";\nimport { getAssociatedAccount } from \"../../utils/sol/accounts\";\nimport { ApproveParamsDto, GetAllowanceParamsDto, GetTokenBalanceParams } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport class SolanaTokenService extends ChainTokenService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(public solanaRpcUrl: string, public api: AllbridgeCoreClient) {\n super();\n }\n\n approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n\n private buildAnchorProvider(accountAddress: string): Provider {\n const connection = new Connection(this.solanaRpcUrl, \"confirmed\");\n\n const publicKey = new PublicKey(accountAddress);\n\n return new AnchorProvider(\n connection,\n // @ts-expect-error enough wallet for fetch actions\n { publicKey: publicKey },\n {\n preflightCommitment: \"confirmed\",\n commitment: \"confirmed\",\n }\n );\n }\n\n getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const { account, token } = params;\n try {\n const associatedAccount = await getAssociatedAccount(new PublicKey(account), new PublicKey(token.tokenAddress));\n const accountData = await getTokenAccountData(associatedAccount, this.buildAnchorProvider(account));\n return accountData.amount.toString();\n } catch (e) {\n if (e instanceof Error) {\n e.message.startsWith(\"Account does not exist\");\n return \"0\";\n }\n throw e;\n }\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (\n await this.buildAnchorProvider(params.account).connection.getBalance(new PublicKey(params.account))\n ).toString();\n }\n}\n", "import { Horizon, NotFoundError } from \"@stellar/stellar-sdk\";\nimport { Chains } from \"../../../chains\";\nimport { ChainSymbol } from \"../../../chains/chain.enums\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { AllbridgeCoreSdkOptions, ChainType, SdkError } from \"../../../index\";\nimport { GetTokenBalanceParams, MethodNotSupportedError, TransactionResponse } from \"../../../models\";\nimport { convertFloatAmountToInt } from \"../../../utils/calculation\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { NodeRpcUrlsConfig } from \"../../index\";\nimport { RawTransaction } from \"../../models\";\nimport { ChainTokenService } from \"../models\";\n\nimport BalanceLineAsset = Horizon.HorizonApi.BalanceLineAsset;\nimport BalanceLineNative = Horizon.HorizonApi.BalanceLineNative;\n\nexport class SrbTokenService extends ChainTokenService {\n chainType: ChainType.SRB = ChainType.SRB;\n\n constructor(\n readonly nodeRpcUrlsConfig: NodeRpcUrlsConfig,\n readonly params: AllbridgeCoreSdkOptions,\n readonly api: AllbridgeCoreClient\n ) {\n super();\n }\n\n getAllowance(): Promise<string> {\n throw new MethodNotSupportedError();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n if (!params.token.originTokenAddress) {\n throw new SdkError(\"OriginTokenAddress missing\");\n }\n const [symbol, srbTokenAddress] = params.token.originTokenAddress.split(\":\");\n\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n let stellarAccount;\n try {\n stellarAccount = await stellar.loadAccount(params.account);\n } catch (err) {\n if (err instanceof NotFoundError) {\n return \"0\";\n }\n throw err;\n }\n const balances = stellarAccount.balances;\n\n const balanceInfo = balances.find(\n (balance): balance is BalanceLineAsset =>\n (balance.asset_type === \"credit_alphanum4\" || balance.asset_type === \"credit_alphanum12\") &&\n balance.asset_code == symbol &&\n balance.asset_issuer == srbTokenAddress\n );\n if (balanceInfo?.balance) {\n return convertFloatAmountToInt(\n balanceInfo.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.token.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n const stellar = new Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl(ChainSymbol.STLR));\n const stellarAccount = await stellar.loadAccount(params.account);\n const balances = stellarAccount.balances;\n\n const nativeBalance = balances.find((balance): balance is BalanceLineNative => balance.asset_type === \"native\");\n if (nativeBalance?.balance) {\n return convertFloatAmountToInt(\n nativeBalance.balance,\n Chains.getChainDecimalsByType(Chains.getChainProperty(params.chainSymbol).chainType)\n ).toFixed();\n }\n return \"0\";\n }\n\n approve(): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n buildRawTransactionApprove(): Promise<RawTransaction> {\n throw new MethodNotSupportedError();\n }\n}\n", "[\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name_\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol_\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"subtractedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"decreaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"addedValue\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"increaseAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n", "// @ts-expect-error import tron\nimport TronWeb from \"tronweb\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { SdkError } from \"../../../exceptions\";\nimport { ChainType, GetTokenBalanceParams, TransactionResponse } from \"../../../models\";\nimport { GetNativeTokenBalanceParams } from \"../../bridge/models\";\nimport { RawTransaction, SmartContractMethodParameter } from \"../../models\";\nimport ERC20Abi from \"../../models/abi/ERC20.json\";\nimport { amountToHex } from \"../../utils\";\nimport { sendRawTransaction } from \"../../utils/trx\";\nimport { ApproveParamsDto, GetAllowanceParamsDto } from \"../models\";\nimport { ChainTokenService } from \"../models/token\";\n\nexport const MAX_AMOUNT = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport class TronTokenService extends ChainTokenService {\n chainType: ChainType.TRX = ChainType.TRX;\n\n constructor(public tronWeb: typeof TronWeb, public api: AllbridgeCoreClient) {\n super();\n }\n\n async getAllowance(params: GetAllowanceParamsDto): Promise<string> {\n const {\n token: { tokenAddress },\n owner,\n } = params;\n const tokenContract = await this.getContract(tokenAddress);\n const allowance = await tokenContract.methods.allowance(owner, params.spender).call();\n return allowance.toString();\n }\n\n async getTokenBalance(params: GetTokenBalanceParams): Promise<string> {\n const contract = await this.getContract(params.token.tokenAddress);\n const balance = await contract.balanceOf(params.account).call();\n return balance.toString();\n }\n\n async getNativeTokenBalance(params: GetNativeTokenBalanceParams): Promise<string> {\n return (await this.tronWeb.trx.getBalance(params.account)).toString();\n }\n\n async approve(params: ApproveParamsDto): Promise<TransactionResponse> {\n const rawTransaction = await this.buildRawTransactionApprove(params);\n return await sendRawTransaction(this.tronWeb, rawTransaction);\n }\n\n async buildRawTransactionApprove(params: ApproveParamsDto): Promise<RawTransaction> {\n const { tokenAddress, spender, owner, amount } = params;\n const amountHex = amount == undefined ? MAX_AMOUNT : amountToHex(amount);\n\n const parameter = [\n { type: \"address\", value: spender },\n { type: \"uint256\", value: amountHex },\n ];\n const value = \"0\";\n const methodSignature = \"approve(address,uint256)\";\n return this.buildRawTransaction(tokenAddress, methodSignature, parameter, value, owner);\n }\n\n private async getContract(contractAddress: string): Promise<any> {\n return await this.tronWeb.contract(ERC20Abi, contractAddress);\n }\n\n private async buildRawTransaction(\n contractAddress: string,\n methodSignature: string,\n parameters: SmartContractMethodParameter[],\n value: string,\n fromAddress: string\n ): Promise<RawTransaction> {\n const transactionObject = await this.tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n methodSignature,\n {\n callValue: value,\n },\n parameters,\n fromAddress\n );\n if (!transactionObject?.result?.result) {\n throw new SdkError(\"Unknown error: \" + JSON.stringify(transactionObject, null, 2));\n }\n return transactionObject.transaction;\n }\n}\n"],
5
+ "mappings": "8kBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,GAAA,qBAAAC,GAAA,iBAAAC,GAAA,yBAAAC,GAAA,iCAAAC,GAAA,8BAAAC,GAAA,gBAAAC,GAAA,cAAAC,EAAA,cAAAC,GAAA,kCAAAC,GAAA,qBAAAC,GAAA,mCAAAC,GAAA,uBAAAC,GAAA,oCAAAC,GAAA,gCAAAC,GAAA,mBAAAC,GAAA,iBAAAC,EAAA,cAAAC,GAAA,4BAAAC,EAAA,kCAAAC,GAAA,aAAAC,EAAA,iBAAAC,EAAA,oBAAAC,GAAA,iBAAAC,GAAA,oBAAAC,GAAA,kBAAAC,GAAA,YAAAC,GAAA,uBAAAC,GAAA,oBAAAC,KAAA,eAAAC,GAAA/B,ICEO,IAAMgC,GAAmC,CAC9C,WAAY,wCACZ,mBAAoB,CAAC,EACrB,eAAgB,CAAC,EACjB,WAAY,8BACZ,2BAA4B,8CAC5B,kBAAmB,+CACnB,yBAA0B,iDAC1B,YAAa,kCACb,WAAY,CACV,yBAA0B,+CAC1B,yBAA0B,+CAC1B,YAAa,CAAE,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,CAAE,CACxE,EACA,sBAAuB,EACzB,EAMaC,GAAkC,CAC7C,aAAc,sCACd,WAAY,yBACd,EAKaC,GAAkC,CAC7C,IAAK,sCACL,IAAK,0BACL,IAAK,8BACL,KAAM,6BACR,ECpCA,IAAAC,GAAoB,kBCAb,IAAeC,EAAf,cAAoC,KAAM,CAGrC,YAAYC,EAAiBC,EAAkB,CACvD,MAAMA,CAAO,EACb,KAAK,UAAYD,CACnB,CACF,EAEaE,EAAN,cAAuBH,CAAa,CACzC,YAAYE,EAAkB,CAC5B,MAAM,WAAqBA,CAAO,CACpC,CACF,EAEaE,GAAN,cAAiCJ,CAAa,CACnD,YAAYE,EAAkB,CAC5B,MAAM,qBAAgCA,CAAO,CAC/C,CACF,EAEaG,GAAN,cAAmCL,CAAa,CACrD,YAAYE,EAAkB,CAC5B,MAAM,uBAAmCA,CAAO,CAClD,CACF,EAEaI,GAAN,cAA6CN,CAAa,CAC/D,YAAYE,EAAkB,CAC5B,MAAM,iCAA6CA,CAAO,CAC5D,CACF,EAEaK,EAAN,cAA2BP,CAAa,CAC7C,YAAYE,EAAkB,CAC5B,MAAM,eAAyBA,CAAO,CACxC,CACF,EAEaM,GAAN,cAA8CR,CAAa,CAChE,YAAYE,EAAkB,CAC5B,MAAM,kCAAgDA,CAAO,CAC/D,CACF,EAEaO,GAAN,cAA0CT,CAAa,CAC5D,YAAYE,EAAkB,CAC5B,MAAM,8BAA0CA,CAAO,CACzD,CACF,EAEaQ,EAAN,cAAsCV,CAAa,CACxD,YAAYE,EAAkB,CAC5B,MAAM,0BAAsCA,CAAO,CACrD,CACF,EAEaS,GAAN,cAA4BX,CAAa,CAC9C,YAAYE,EAAkB,CAC5B,MAAM,gBAA2BA,CAAO,CAC1C,CACF,EAEaU,GAAN,cAA6BZ,CAAa,CAC/C,YAAYE,EAAkB,CAC5B,MAAM,iBAA4BA,CAAO,CAC3C,CACF,EAEaW,GAAN,cAA4Cb,CAAa,CAC9D,YAAYE,EAAkB,CAC5B,MAAM,gCAA8CA,CAAO,CAC7D,CACF,EAEaY,GAAN,cAA2Cd,CAAa,CAC7D,YAAYe,EAAiBC,EAAoBC,EAA0B,CACzE,MACE,+BACA,aAAaF,CAAO,eAAeC,CAAU,6BAA6BC,CAAgB,GAC5F,CACF,CACF,EAEaC,GAAN,cAA2BlB,CAAa,CAC7C,YAAYE,EAAkB,CAC5B,MAAM,eAAyBA,CAAO,CACxC,CACF,EAEaiB,GAAN,cAA4CnB,CAAa,CAC9D,YAAYoB,EAAqB,CAC/B,MAAM,gCAA8C,cAAcA,CAAW,gCAAgC,CAC/G,CACF,EAEaC,GAAN,cAAwCrB,CAAa,CAC1D,YAAYE,EAAkB,CAC5B,MAAM,4BAAyCA,CAAO,CACxD,CACF,EAEaoB,GAAN,cAA8BtB,CAAa,CAChD,aAAc,CACZ,MACE,kBACA,iHACF,CACF,CACF,EAEYuB,QACVA,EAAA,UAAY,WACZA,EAAA,qBAAuB,qBACvBA,EAAA,wBAA0B,uBAC1BA,EAAA,kCAAoC,iCACpCA,EAAA,cAAgB,eAChBA,EAAA,qCAAuC,kCACvCA,EAAA,+BAAiC,8BACjCA,EAAA,2BAA6B,0BAC7BA,EAAA,gBAAkB,gBAClBA,EAAA,iBAAmB,iBACnBA,EAAA,mCAAqC,gCACrCA,EAAA,gCAAkC,+BAClCA,EAAA,cAAgB,eAChBA,EAAA,mCAAqC,gCACrCA,EAAA,8BAAgC,4BAChCA,EAAA,aAAe,kBAhBLA,QAAA,IC/GL,IAAKC,QAIVA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,IAAM,MAKNA,EAAA,KAAO,OAKPA,EAAA,IAAM,MA3DIA,QAAA,IA8DAC,OACVA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,IAAM,MACNA,EAAA,IAAM,MAJIA,OAAA,ICvDZ,IAAMC,GAAiD,CACrD,IAAK,GACL,OAAQ,EACR,IAAK,EACL,IAAK,CACP,EAEMC,GAA0D,CAC7D,IAAkB,CACjB,kBACA,QAAS,OACT,KAAM,YACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,MACT,KAAM,WACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,WACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,YACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,SACT,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,OACT,KAAM,UACN,eACF,EACC,IAAkB,CACjB,kBACA,QAAS,MACT,KAAM,aACN,eACF,EACC,IAAkB,CACjB,kBACA,KAAM,SACN,kBACF,EACC,IAAkB,CACjB,kBACA,KAAM,OACN,eACF,EACC,IAAkB,CACjB,kBACA,KAAM,UACN,eACF,EACC,KAAmB,CAClB,mBACA,KAAM,UACN,eACF,CACF,EAEaC,GAAU,IAAM,CAC3B,IAAIC,EAAwD,CAAE,GAAGF,EAAkB,EAEnF,MAAO,CACL,oBAAoBG,EAA6D,CAC/ED,EAAkB,CAAE,GAAGA,EAAiB,GAAGC,CAAqB,CAClE,EAEA,iBAAiBC,EAA2C,CAC1D,IAAMC,EAAWH,EAAgBE,CAAW,EAC5C,GAAI,CAACC,EACH,MAAM,IAAIC,EAAS,oCAAoCF,CAAW,EAAE,EAEtE,OAAOC,CACT,EAEA,qBAA4D,CAC1D,OAAOH,CACT,EAEA,uBAAuBK,EAA8B,CACnD,OAAOR,GAAoBQ,CAAS,CACtC,CACF,CACF,GAAG,EC7GH,IAAAC,GAA6B,oBCAtB,IAAMC,GAAU,iBCAvB,IAAAC,EAA+B,kBAC/BC,GAAe,oBAKR,SAASC,GAAcC,EAAkBC,EAA2B,CACzE,SAAO,OAAI,GAAG,EAAE,SAAM,OAAI,GAAG,EAAE,MAAMA,CAAM,EAAE,IAAID,CAAK,CAAC,EAAE,SAAS,CACpE,CAEO,SAASE,GAAkBC,EAAmBC,EAAuB,CAC1E,OAAOC,GAAuBF,EAAQC,EAAU,CAAgB,EAAE,MAAM,EAAG,MAAI,SAAS,CAC1F,CAEO,SAASE,EAAoBH,EAAmBC,EAAuB,CAC5E,OAAOC,GAAuBF,EAAQ,EAAkBC,CAAQ,CAClE,CAEO,SAASC,GAAuBF,EAAmBI,EAAsBC,EAAyB,CACvG,IAAMC,KAAM,OAAID,CAAU,EAAE,MAAMD,CAAY,EAAE,SAAS,EACzD,SAAO,OAAIJ,CAAM,EAAE,MAAMO,GAAYD,CAAG,CAAC,CAC3C,CAEO,SAASC,GAAYN,EAAuB,CACjD,SAAO,OAAI,EAAE,EAAE,IAAIA,CAAQ,CAC7B,CAEO,SAASO,EAAwBC,EAAwBR,EAAuB,CACrF,SAAO,OAAIQ,CAAW,EAAE,MAAMF,GAAYN,CAAQ,CAAC,CACrD,CAEO,SAASS,EAAwBC,EAAsBV,EAAuB,CACnF,IAAMW,KAAc,OAAID,CAAS,EACjC,OAAIC,EAAY,GAAG,CAAC,KACX,OAAI,CAAC,KAEP,OAAIA,CAAW,EAAE,IAAIL,GAAYN,CAAQ,CAAC,CACnD,CAEO,SAASY,EAA2BC,EAAkE,CAC3G,OAAOJ,KAAwB,OAAII,EAAS,YAAY,EAAE,MAAMA,EAAS,WAAW,EAAE,QAAQ,EAAG,CAAgB,EAC9G,IAAI,CAAC,EACL,QAAQ,CACb,CAEO,SAASC,GACdf,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACQ,CACR,IAAMF,KAAc,OAAIZ,CAAM,EAC9B,GAAIY,EAAY,IAAI,CAAC,EACnB,MAAO,IAET,IAAMK,EAAML,EAAY,MAAMI,CAAQ,EAChCE,EAAmBN,EAAY,MAAMK,CAAG,EACxCE,EAAoBpB,GAAkBmB,EAAkBjB,CAAQ,EAChEmB,KAAe,OAAIN,EAAS,YAAY,EAAE,KAAKK,CAAiB,EAChEE,EAAgBC,GAAKF,EAAcN,EAAS,OAAQA,EAAS,MAAM,EACzE,SAAO,OAAIA,EAAS,WAAW,EAAE,MAAMO,CAAa,EAAE,MAAM,EAAG,MAAI,SAAS,EAAE,QAAQ,CACxF,CAEO,SAASE,GACdvB,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACQ,CACR,IAAMF,KAAc,OAAIZ,CAAM,EAC9B,GAAIY,EAAY,IAAI,CAAC,EACnB,SAAO,OAAI,CAAC,EAAE,QAAQ,EAExB,IAAMY,EAAcZ,EAAY,KAAKE,EAAS,WAAW,EACnDW,EAAYH,GAAKE,EAAaV,EAAS,OAAQA,EAAS,MAAM,EAC9DY,EAASvB,KAAoB,OAAIW,EAAS,YAAY,EAAE,MAAMW,CAAS,EAAGxB,CAAQ,EAClFgB,KAAM,OAAIS,CAAM,EAAE,MAAMV,CAAQ,EACtC,SAAO,OAAIU,CAAM,EAAE,MAAMT,CAAG,EAAE,MAAM,EAAG,MAAI,SAAS,EAAE,QAAQ,CAChE,CAEO,SAASU,GACdC,EACAd,EACsE,CACtE,IAAMF,KAAc,OAAIgB,CAAU,EAClC,GAAIhB,EAAY,IAAI,CAAC,EACnB,OAAOE,EAET,IAAMU,EAAcZ,EAAY,KAAKE,EAAS,WAAW,EACnDW,EAAYH,GAAKE,EAAaV,EAAS,OAAQA,EAAS,MAAM,EACpE,MAAO,CACL,OAAQA,EAAS,OACjB,OAAQA,EAAS,OACjB,aAAcW,EAAU,QAAQ,CAAC,EACjC,YAAaD,EAAY,QAAQ,CAAC,CACpC,CACF,CAQO,SAASK,GACd7B,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACK,CACL,MAAI,OAAId,CAAM,EAAE,IAAI,CAAC,EACnB,SAAO,OAAI,CAAC,EAEd,IAAMqB,KAAgB,OAAIP,EAAS,WAAW,EAAE,MAAMd,CAAM,EAC5D,GAAIqB,EAAc,IAAI,CAAC,EACrB,MAAM,IAAIS,GAEZ,IAAMV,EAAeE,GAAKD,EAAeP,EAAS,OAAQA,EAAS,MAAM,EACnEK,KAAoB,OAAIC,CAAY,EAAE,MAAMN,EAAS,YAAY,EACjEI,EAAmBf,EAAoBgB,EAAmBlB,CAAQ,EAClE8B,KAAmB,OAAIf,CAAQ,EAAE,OAAI,OAAI,CAAC,EAAE,MAAMA,CAAQ,CAAC,EAC3DC,KAAM,OAAIC,CAAgB,EAAE,MAAMa,CAAgB,EAAE,MAAM,EAAG,MAAI,OAAO,EAC9E,SAAO,OAAIb,CAAgB,EAAE,KAAKD,CAAG,EAAE,MAAM,EAAG,MAAI,SAAS,CAC/D,CAQO,SAASe,GACdhC,EACA,CAAE,SAAAgB,EAAU,SAAAf,CAAS,EACrBa,EACK,CACL,MAAI,OAAId,CAAM,EAAE,IAAI,CAAC,EACnB,SAAO,OAAI,CAAC,EAEd,IAAM+B,KAAmB,OAAIf,CAAQ,EAAE,OAAI,OAAI,CAAC,EAAE,MAAMA,CAAQ,CAAC,EAC3DC,KAAM,OAAIjB,CAAM,EAAE,MAAM+B,CAAgB,EAAE,MAAM,EAAG,MAAI,OAAO,EAC9DE,KAAgB,OAAIjC,CAAM,EAAE,KAAKiB,CAAG,EACpCE,EAAoBpB,GAAkBkC,EAAehC,CAAQ,EAC7DmB,KAAe,OAAIN,EAAS,YAAY,EAAE,MAAMK,CAAiB,EACvE,GAAIC,EAAa,IAAI,CAAC,EACpB,MAAM,IAAIU,GAEZ,IAAMT,EAAgBC,GAAKF,EAAcN,EAAS,OAAQA,EAAS,MAAM,EACzE,SAAO,OAAIO,CAAa,EAAE,MAAMP,EAAS,WAAW,EAAE,MAAM,EAAG,MAAI,SAAS,CAC9E,CAMO,SAASQ,GAAKY,EAAc,EAAcC,EAAmB,CAClE,IAAMC,KAAgB,OAAI,CAAC,EAAE,MAAM,CAAC,EAAE,SAAM,OAAID,CAAC,EAAE,MAAMD,CAAC,CAAC,EAAE,MAAMC,CAAC,EAC9DE,KAAS,OAAIF,CAAC,EAAE,IAAI,CAAC,EACrBG,EAAoBF,EAAc,IAAI,CAAC,EACvCG,KAAU,OAAIL,CAAC,EAClB,SAAM,OAAIA,CAAC,EAAE,MAAMI,CAAiB,EAAE,QAAK,OAAI,CAAC,EAAE,MAAM,CAAC,EAAE,MAAMD,CAAM,CAAC,CAAC,EACzE,KAAK,EACL,MAAM,EAAG,MAAI,SAAS,EACnBG,KAAa,OAAI,CAAC,EAAE,MAAM,CAAC,EAAE,MAAMN,CAAC,EACpCR,EAASU,EAAc,MAAMF,CAAC,EAAE,KAAKK,CAAO,EAAE,IAAIC,CAAU,EAAE,MAAM,EAAG,MAAI,SAAS,EAC1F,OAAId,EAAO,GAAG,CAAC,KACN,OAAI,CAAC,EAEPA,EAAO,KAAK,CAAC,CACtB,CAEO,SAASe,GAAUC,EAAsBC,EAAwBC,EAA4BC,EAAmB,CACrH,IAAMC,EAAiB,IAAI,GAAAC,QAAGL,CAAY,EACpCM,EAAuB,IAAI,GAAAD,QAAGH,CAAkB,EAChDK,EAAmB,IAAI,GAAAF,QAAGJ,CAAc,EAE9C,OADgBG,EAAe,IAAIE,CAAoB,EAAE,KAAKH,CAAC,EAChD,IAAII,CAAgB,EAAE,SAAS,CAChD,CAEO,SAASC,GAAcC,EAAqB,CACjD,SAAO,OAAIA,CAAG,EAAE,GAAG,CAAC,EAAI,GAAG,UAAO,OAAIA,CAAG,EAAE,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,eAAe,CAAC,IAAM,KAC1F,CAMO,SAASC,GAAKC,EAAgBnB,EAAWoB,EAAmB,CACjE,IAAMC,KAAK,OAAIrB,CAAC,EAAE,MAAMoB,CAAC,EACnBE,KAAS,OAAItB,CAAC,EAAE,KAAKoB,CAAC,EACtBG,KAAI,OAAI,CAAC,EAAE,MAAMJ,CAAM,EAAE,MAAME,CAAE,EAAE,MAAMC,CAAM,EAC/CE,EAAIH,EAAG,SAAM,OAAI,EAAE,EAAE,MAAMF,CAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAClDM,EAAWF,EAAE,MAAMA,CAAC,EACpBG,EAASF,EAAE,MAAMA,CAAC,EAAE,MAAMA,CAAC,EAC3BG,EAAOF,EAAS,KAAKC,CAAM,EAC3BE,KAAI,OAAID,CAAI,EAAE,KAAK,EACnBE,KAAa,OAAI,KAAK,KAAK,CAACN,EAAE,KAAKK,CAAC,EAAE,QAAQ,CAAC,CAAC,EAChDE,KAAc,OAAI,KAAK,KAAK,CAACP,EAAE,MAAMK,CAAC,EAAE,QAAQ,CAAC,CAAC,EACxD,OAAOC,EAAW,KAAKC,CAAW,EAAE,QAAQ,CAC9C,CCtLO,IAAKC,QACVA,EAAA,GAAK,KACLA,EAAA,QAAU,UACVA,EAAA,UAAY,YACZA,EAAA,cAAgB,gBAChBA,EAAA,iBAAmB,mBACnBA,EAAA,+BAAiC,iCANvBA,QAAA,IAuDL,IAAKC,QACVA,IAAA,UAAY,GAAZ,YACAA,IAAA,SAAW,GAAX,WACAA,IAAA,KAAO,GAAP,OAHUA,QAAA,IC5CL,SAASC,GAAyCC,EAA0D,CACjH,OAAO,OAAO,QAAQA,CAAQ,EAAE,OAAiC,CAACC,EAAKC,IAAU,CAC/E,IAAMC,EAAcD,EAAM,CAAC,EACrBE,EAAkBF,EAAM,CAAC,EACzBG,EAAeC,GAAuBH,EAAaC,CAAe,EACxE,OAAIC,IACFJ,EAAIE,CAAW,EAAIE,GAEdJ,CACT,EAAG,CAAC,CAAC,CACP,CAEO,SAASM,GAAqCP,EAA6C,CAChG,IAAMQ,EAA2B,CAAC,EAClC,OAAW,CAACC,EAAkBL,CAAe,IAAK,OAAO,QAAQJ,CAAQ,EAAG,CAC1E,IAAMG,EAAcM,EACpB,QAAWC,KAASN,EAAgB,OAAQ,CAC1C,IAAMO,EAAUC,GAA0B,CACxC,YAAAT,EACA,YAAaO,EAAM,WACrB,CAAC,EACKG,EAAYC,EAA2BJ,EAAM,QAAQ,EAC3DF,EAAYG,CAAO,EAAI,CAAE,GAAGD,EAAM,SAAU,UAAAG,CAAU,CACxD,CACF,CACA,OAAOL,CACT,CAEA,SAASO,GAAgCV,EAA4BW,EAA+C,CAClH,GAAM,CAAE,KAAMC,EAAW,GAAGC,CAAwB,EAAIb,EAClD,CAAE,SAAUc,EAAW,GAAGC,CAAmB,EAAIJ,EACvD,MAAO,CACL,GAAGI,EACH,GAAGF,EACH,UAAAD,CACF,CACF,CAEA,SAASI,GAA8BL,EAAwC,CAC7E,OAAQA,EAAK,CACX,gBACE,SACF,eACE,SACF,WACE,SACF,QACE,OAAO,IACX,CACF,CAEA,SAASM,GAAuBN,EAAoC,CAClE,OAAO,OAAO,QAAQA,CAAG,EAAE,OAAqB,CAACO,EAAQ,CAACC,EAAKC,CAAK,KAClEF,EAAOC,CAAkB,EAAIE,GAAgCD,CAAK,EAC3DF,GACN,CAAC,CAAC,CACP,CAEA,SAASG,GAAgCV,EAAsD,CAC7F,OAAO,OAAO,QAAQA,CAAG,EAAE,OAA8B,CAACW,EAAuB,CAACH,EAAKC,CAAK,IAAM,CAChG,IAAMG,EAAYP,GAA8BG,CAAsB,EACtE,OAAII,IACFD,EAAsBC,CAAS,EAAIH,GAE9BE,CACT,EAAG,CAAC,CAAC,CACP,CAEA,SAASrB,GAAuBH,EAAqBa,EAA8D,CACjH,IAAMa,EAAuBC,EAAO,oBAAoB,EAAE3B,CAAW,EAErE,GAAI,CAAC0B,EACH,OAAO,KAET,IAAMxB,EAA6B,CACjC,GAAGwB,EACH,iBAAkBb,EAAI,QACtB,cAAeA,EAAI,cACnB,aAAcM,GAAuBN,EAAI,YAAY,EACrD,aAAcA,EAAI,aAClB,cAAeA,EAAI,aACrB,EACA,MAAO,CACL,GAAGX,EACH,OAAQW,EAAI,OAAO,IAAKe,GAAahB,GAAgCV,EAAc0B,CAAQ,CAAC,CAC9F,CACF,CAUO,SAASC,GAA0BC,EAAsC,CAC9E,OAAOA,EAAc,YAAc,IAAMA,EAAc,WACzD,CAEO,SAASC,GAAmCC,EAAmD,CACpG,IAAMC,EAAS,CAAC,EAChB,OAAW,CAACC,EAAkBC,CAAY,IAAK,OAAO,QAAQH,CAAe,EAAG,CAC9E,IAAMI,EAAcF,EACpB,QAAWG,KAASF,EAAa,OAC/BF,EAAO,KAAK,CACV,YAAAG,EACA,YAAaC,EAAM,WACrB,CAAC,CAEL,CACA,OAAOJ,CACT,CAEO,SAASK,GAAiCC,EAA6C,CAC5F,IAAMC,EAA2B,CAAC,EAClC,OAAW,CAACN,EAAkBO,CAAiB,IAAK,OAAO,QAAQF,CAAY,EAAG,CAChF,IAAMH,EAAcF,EACpB,OAAW,CAACQ,EAAaC,CAAQ,IAAK,OAAO,QAAQF,CAAiB,EACpEE,EAAS,UAAYC,EAA2BD,CAAQ,EACxDH,EAAYX,GAA0B,CAAE,YAAAO,EAAa,YAAAM,CAAY,CAAC,CAAC,EAAIC,CAE3E,CACA,OAAOH,CACT,CJ/GO,IAAMK,GAAN,KAAyC,CAG9C,YAAYC,EAAmC,CAC7C,KAAK,IAAM,GAAAC,QAAM,OAAO,CACtB,QAASD,EAAO,WAChB,QAAS,CACP,OAAQ,mBACR,GAAGA,EAAO,eACV,cAAe,oBAAsBE,EACvC,EACA,OAAQF,EAAO,kBACjB,CAAC,CACH,CAEA,MAAM,cAAmC,CACvC,GAAM,CAAE,KAAAG,CAAK,EAAI,MAAM,KAAK,IAAI,IAA0B,cAAe,CAAE,OAAQ,CAAE,OAAQ,KAAM,CAAE,CAAC,EACtG,MAAO,CACL,gBAAiBC,GAAyCD,CAAI,EAC9D,YAAaE,GAAqCF,CAAI,CACxD,CACF,CAEA,MAAM,gBAA+C,CACnD,GAAM,CAAE,KAAAA,CAAK,EAAI,MAAM,KAAK,IAAI,IAAyB,eAAe,EACxE,OAAOA,CACT,CAEA,MAAM,cAAcG,EAAqBC,EAA8C,CACrF,GAAM,CAAE,KAAAJ,CAAK,EAAI,MAAM,KAAK,IAAI,IAAwB,UAAUG,CAAW,IAAIC,CAAO,EAAE,EAC1F,OAAOJ,CACT,CAEA,MAAM,kBAAkBG,EAAqBE,EAA+C,CAC1F,GAAM,CAAE,KAAAL,CAAK,EAAI,MAAM,KAAK,IAAI,IAA4B,UAAUG,CAAW,IAAIE,CAAI,EAAE,EAC3F,OAAOL,CACT,CAEA,MAAM,0BAA0BM,EAA8E,CAC5G,GAAM,CAAE,KAAAN,CAAK,EAAI,MAAM,KAAK,IAAI,KAAqC,eAAgBM,EAAM,CACzF,QAAS,CACP,eAAgB,kBAClB,CACF,CAAC,EACD,MAAO,CACL,aAAcN,EAAK,aACnB,IAAKA,EAAK,IACV,uBAAwBA,EAAK,sBAC/B,CACF,CAEA,MAAM,eAAeO,EAA8D,CACjF,IAAMC,EAAWD,aAAiB,MAAQA,EAAQ,CAACA,CAAK,EAClD,CAAE,KAAAP,CAAK,EAAI,MAAM,KAAK,IAAI,KAC9B,aACA,CAAE,MAAOQ,CAAS,EAClB,CACE,QAAS,CACP,eAAgB,kBAClB,CACF,CACF,EACA,OAAOC,GAAiCT,CAAI,CAC9C,CACF,EKxFA,IAAMU,GAAM,CAACC,EAAKC,IAAQD,IAAQ,MAAQ,OAAO,UAAU,eAAe,KAAKA,EAAKC,CAAG,EAMjFC,GAAS,YAMTC,GAAY,SAAUF,EAAK,CAC/B,OAAI,OAAOA,GAAQ,SACTC,GAAS,KAAK,UAAUD,CAAG,EAE7BC,GAASD,CACnB,EAKMG,GAAN,KAAY,CAOV,YAAYC,EAAU,CAAE,WAAY,GAAK,GAAK,EAAG,CAE/C,KAAK,MAAQ,CAAC,EAMd,KAAK,WAAaA,EAAQ,YAAc,GAAK,GAC/C,CAKA,IAAIJ,EAAKK,EAAOD,EAAS,CACvB,IAAME,GAAQF,EAAUA,EAAQ,IAAM,SAAc,KAAK,WACnDG,GAAYH,EAAUA,EAAQ,SAAW,SAAc,UAAY,CAAC,EACpEI,EAAON,GAAUF,CAAG,EAIpBS,EAAI,KAAK,MAAMD,CAAI,EAErBC,GAGF,aAAaA,EAAE,MAAM,EAKvB,IAAMC,EAAS,WAAW,IAAM,KAAK,OAAOV,CAAG,EAAGM,CAAG,EAIrD,KAAK,MAAME,CAAI,EAAI,CAAE,OAAAE,EAAQ,KAAML,EAAO,SAAAE,CAAS,CACrD,CAOA,IAAIP,EAAK,CACP,IAAMK,EAAQ,KAAK,MAAMH,GAAUF,CAAG,CAAC,EACvC,OAAQK,GAASA,EAAM,IACzB,CAMA,OAAOL,EAAK,CACV,IAAMQ,EAAQN,GAAUF,CAAG,EACrBK,EAAQ,KAAK,MAAMG,CAAI,EAEzBH,IACF,aAAaA,EAAM,MAAM,EACzB,OAAO,KAAK,MAAMG,CAAI,EACtBH,EAAM,SAASL,EAAKK,EAAM,IAAI,EAElC,CAKA,OAAQ,CACN,QAAWM,KAAS,KAAK,MACnBb,GAAI,KAAK,MAAOa,CAAK,GACvB,aAAa,KAAK,MAAMA,CAAK,EAAE,MAAM,EAGzC,KAAK,MAAQ,CAAC,CAChB,CAMA,MAAO,CACL,OAAQ,OAAO,KAAK,KAAK,KAAK,EAAE,MAClC,CACF,EAEOC,GAAQT,GCpHf,IAAMU,GAAkB,GAAK,IACvBC,GAAkB,GAAK,IAEhBC,GAAN,KAA4C,CAMjD,YAAoBC,EAAsB,CAAtB,eAAAA,EAClB,KAAK,eAAiB,IAAIC,GAAM,CAAE,WAAYH,EAAgB,CAAC,EAC/D,KAAK,yBAA2B,IAAIG,GAAM,CAAE,WAAYJ,EAAgB,CAAC,EACzE,KAAK,iBAAmB,IAAII,GAAM,CAAE,WAAYJ,EAAgB,CAAC,EACjE,KAAK,gBAAkB,IAAII,GAAM,CAAE,WAAYJ,EAAgB,CAAC,CAClE,CAEA,cAAmC,CACjC,IAAMK,EAAuB,uBACvBC,EAAY,KAAK,eAAe,IAAID,CAAoB,EAC9D,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAmB,KAAK,UAAU,aAAa,EACrD,YAAK,eAAe,IAAIF,EAAsBE,CAAgB,EACvDA,CACT,CAEA,MAAM,cAAcC,EAAqBC,EAA8C,CACrF,IAAMC,EAAwB,eAAeF,CAAW,IAAIC,CAAO,GAC7DE,EAAa,KAAK,gBAAgB,IAAID,CAAqB,EACjE,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAoB,KAAK,UAAU,cAAcJ,EAAaC,CAAO,EAC3E,YAAK,gBAAgB,IAAIC,EAAuBE,CAAiB,EAC1DA,CACT,CAEA,MAAM,gBAA+C,CACnD,IAAMC,EAAyB,yBACzBC,EAAc,KAAK,iBAAiB,IAAID,CAAsB,EACpE,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAqB,KAAK,UAAU,eAAe,EACzD,YAAK,iBAAiB,IAAIF,EAAwBE,CAAkB,EAC7DA,CACT,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,IAAMC,EAAsB,mBAAmBD,EAAK,aAAa,IAAIA,EAAK,kBAAkB,IAAIA,EAAK,SAAS,GACxGE,EAAkB,KAAK,yBAAyB,IAAID,CAAmB,EAC7E,GAAIC,EACF,OAAOA,EAET,IAAMC,EAAyB,MAAM,KAAK,UAAU,0BAA0BH,CAAI,EAClF,YAAK,yBAAyB,IAAIC,EAAqBE,CAAsB,EACtEA,CACT,CAEA,MAAM,kBAAkBX,EAAqBY,EAA+C,CAC1F,OAAO,KAAK,UAAU,kBAAkBZ,EAAaY,CAAI,CAC3D,CAEA,MAAM,eAAeC,EAA8D,CACjF,OAAO,KAAK,UAAU,eAAeA,CAAK,CAC5C,CACF,EChCO,IAAMC,GAAN,KAAyE,CAC9E,YAAoBC,EAAsB,CAAtB,eAAAA,CAAuB,CAE3C,MAAM,oBAAwD,CAC5D,OAAQ,MAAM,KAAK,UAAU,aAAa,GAAG,eAC/C,CAEA,MAAM,QAAoD,CACxD,IAAMC,EAAM,MAAM,KAAK,mBAAmB,EAC1C,OAAO,OAAO,OAAOA,CAAG,EAAE,QAASC,GAAiBA,EAAa,MAAM,CACzE,CAEA,MAAM,gBAA+C,CACnD,OAAO,KAAK,UAAU,eAAe,CACvC,CAEA,MAAM,cAAcC,EAAqBC,EAA8C,CACrF,OAAO,KAAK,UAAU,cAAcD,EAAaC,CAAO,CAC1D,CAEA,MAAM,kCAGH,CACD,OAAO,MAAM,KAAK,UAAU,aAAa,CAC3C,CAEA,MAAM,kBAAkBD,EAAqBE,EAA+C,CAC1F,OAAO,MAAM,KAAK,UAAU,kBAAkBF,EAAaE,CAAI,CACjE,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,OAAO,MAAM,KAAK,UAAU,0BAA0BA,CAAI,CAC5D,CAEA,MAAM,eAAeC,EAA8D,CACjF,OAAO,MAAM,KAAK,UAAU,eAAeA,CAAK,CAClD,CACF,EC5DO,IAAMC,GAAN,KAA6E,CAGlF,YACUC,EACRC,EACA,CAFQ,YAAAD,EAGR,KAAK,UAAYC,EAAO,oBAAoB,UAAY,MAC1D,CAEA,MAAM,mBAAmBC,EAAiD,CACxE,IAAMC,EAA2B,MAAM,KAAK,OAAO,mBAAmB,EAChEC,EAA0B,CAAC,EAEjC,QAAWC,KAAOF,EAA0B,CAC1C,IAAMG,EAAiCH,EAAyBE,CAAG,EAC/DC,IACFF,EAAOC,CAAG,EAAI,CACZ,GAAGC,EACH,OAAQC,GAAwCD,EAA+B,OAAQJ,EAAM,KAAK,SAAS,CAC7G,EAEJ,CACA,OAAOE,CACT,CAEA,MAAM,OAAOF,EAAyD,CACpE,OAAOK,GAAwC,MAAM,KAAK,OAAO,OAAO,EAAGL,EAAM,KAAK,SAAS,CACjG,CAEA,MAAM,gBAA+C,CACnD,OAAO,KAAK,OAAO,eAAe,CACpC,CAEA,MAAM,cAAcM,EAAqBC,EAA8C,CACrF,OAAO,KAAK,OAAO,cAAcD,EAAaC,CAAO,CACvD,CAEA,MAAM,kBAAkBD,EAAqBE,EAA+C,CAC1F,OAAO,MAAM,KAAK,OAAO,kBAAkBF,EAAaE,CAAI,CAC9D,CAEA,MAAM,0BAA0BC,EAA8E,CAC5G,OAAO,MAAM,KAAK,OAAO,0BAA0BA,CAAI,CACzD,CAEA,SAASC,EAA8BC,EAA0B,CAC/D,OAAO,KAAK,OAAO,SAASD,EAAeC,CAAQ,CACrD,CAEA,iBAAiBD,EAAiD,CAChE,OAAO,KAAK,OAAO,iBAAiBA,CAAa,CACnD,CAEA,gBAAgBE,EAAiE,CAC/E,OAAO,KAAK,OAAO,gBAAgBA,CAAc,CACnD,CACF,EAEA,SAASP,GACPQ,EACAb,EACAc,EACyB,CACzB,OAAOD,EAAO,OAAQE,GAAWD,EAAY,GAAOC,EAAM,MAAMf,CAAI,CAAE,EAAE,IAAIgB,EAA8B,CAC5G,CAEA,SAASA,GAA+BD,EAA8D,CAEpG,GAAM,CAAE,MAAAE,EAAO,GAAGC,CAAK,EAAIH,EAC3B,OAAOG,CACT,CC5EA,IAAMC,GAAkB,GAAK,IAQhBC,GAAN,KAA+G,CAGpH,YAA6BC,EAAyC,CAAzC,YAAAA,EAC3B,KAAK,cAAgB,IAAIC,EAC3B,CAEA,MAAM,oBAAwD,CAE5D,OADe,MAAM,KAAK,OAAO,iCAAiC,GACpD,eAChB,CAEA,MAAM,QAAoD,CACxD,OAAO,MAAM,KAAK,OAAO,OAAO,CAClC,CAEA,kBAAkBC,EAAqBC,EAA+C,CACpF,OAAO,KAAK,OAAO,kBAAkBD,EAAaC,CAAI,CACxD,CAEA,0BAA0BC,EAA8E,CACtG,OAAO,KAAK,OAAO,0BAA0BA,CAAI,CACnD,CAEA,gBAA+C,CAC7C,OAAO,KAAK,OAAO,eAAe,CACpC,CAEA,cAAcF,EAAqBG,EAA8C,CAC/E,OAAO,KAAK,OAAO,cAAcH,EAAaG,CAAO,CACvD,CAEA,MAAM,iBAAiBC,EAAiD,CACtE,KAAK,cAAc,mBAAmB,MAAM,KAAK,OAAO,iCAAiC,GAAG,WAAW,EACvG,IAAMC,EAAW,KAAK,cAAc,IAAID,CAAa,EAErD,GAAIC,EACF,OAAOA,EACF,CACL,IAAMC,EAAc,MAAM,KAAK,OAAO,eAAeF,CAAa,EAClE,KAAK,cAAc,OAAOE,CAAW,EACrC,IAAMC,EAASD,EAAYE,GAA0BJ,CAAa,CAAC,EACnE,GAAIG,EACF,OAAOA,EAET,MAAM,IAAIE,EACR,6BAA+BL,EAAc,YAAc,aAAeA,EAAc,WAC1F,CACF,CACF,CAEA,MAAM,gBAAgBM,EAAiE,CACrF,IAAIJ,EACJ,GAAII,EACF,KAAK,cAAc,mBAAmB,MAAM,KAAK,OAAO,iCAAiC,GAAG,WAAW,EACvGJ,EAAc,MAAM,KAAK,OAAO,eAAeI,CAAc,MACxD,CACL,IAAMH,EAAS,MAAM,KAAK,OAAO,iCAAiC,EAClED,EAAc,MAAM,KAAK,OAAO,eAAeK,GAAmCJ,EAAO,eAAe,CAAC,CAC3G,CACA,KAAK,cAAc,OAAOD,CAAW,CACvC,CAEA,SAASF,EAA8BC,EAA0B,CAC/D,KAAK,cAAc,IAAIG,GAA0BJ,CAAa,EAAGC,CAAQ,CAC3E,CACF,EAEMN,GAAN,KAAoB,CAGlB,aAAc,CACZ,KAAK,MAAQ,IAAIa,GAAgB,CAAE,WAAYhB,EAAgB,CAAC,CAClE,CAEA,OAAOU,EAA0B,CAC/B,OAAW,CAACO,EAAKC,CAAK,IAAK,OAAO,QAAQR,CAAW,EACnD,KAAK,MAAM,IAAIO,EAAKC,CAAK,CAE7B,CAEA,kBAAkBR,EAA0B,CAC1C,OAAW,CAACO,EAAKC,CAAK,IAAK,OAAO,QAAQR,CAAW,EAC9C,KAAK,MAAM,IAAIO,CAAG,GACrB,KAAK,MAAM,IAAIA,EAAKC,CAAK,CAG/B,CAEA,IAAID,EAAaR,EAAoB,CACnC,KAAK,MAAM,IAAIQ,EAAKR,CAAQ,CAC9B,CAEA,IAAID,EAAoD,CACtD,IAAMS,EAAML,GAA0BJ,CAAa,EACnD,OAAO,KAAK,MAAM,IAAIS,CAAG,CAC3B,CACF,EC3HA,IAAAE,GAAoB,sBACpBC,GAAiB,mBCFjB,IAAAC,GAA+B,kBAK/B,eAAsBC,EACpBC,EACAC,EACmB,CACnB,OAAO,MAAMD,EAAI,iBAAiB,CAChC,YAAaC,EAAiB,YAC9B,YAAaA,EAAiB,WAChC,CAAC,CACH,CAEO,SAASC,EAAqBC,EAAmB,CACtD,MAAI,QAAIA,CAAM,EAAE,IAAI,CAAC,EACnB,MAAM,IAAIC,GAAmB,kCAAkC,CAEnE,CAEO,SAASC,EAAuBC,EAAiBC,EAAoCC,EAAyB,CACnH,IAAML,KAAS,QAAII,CAAW,EAAE,QAAQ,EAElC,CAACE,EAAaC,CAAc,EAAIP,EAAO,MAAM,GAAG,EAEtD,GAAIO,GAAkBA,EAAe,OAASF,EAC5C,MAAM,IAAIG,GAA6BL,EAASI,EAAe,OAAQF,CAAe,CAE1F,CAEA,eAAsBI,GAAsBC,EAAqBC,EAAaC,EAA+B,CAC3G,OAAQ,MAAM,QAAQ,KAAK,CACzBF,EACA,IAAI,QAAQ,CAACG,EAASC,IAAW,CAC/B,WAAW,IAAMA,EAAO,IAAIC,GAAaJ,CAAG,CAAC,EAAGC,CAAS,CAC3D,CAAC,CACH,CAAC,CACH,CAEA,eAAsBI,GACpBC,EACAN,EACAO,EACAN,EACY,CACZ,GAAIM,EAAa,EACf,MAAM,IAAI,MAAM,0DAA0DA,CAAU,gBAAgB,EACtG,IAAIC,EAAe,EAEnB,OACE,GAAI,CACF,OAAO,MAAMV,GAAmBQ,EAAM,EAAGN,EAAKC,CAAS,CACzD,MAAgB,CACd,GAAI,EAAEO,GAAgBD,EAAY,MAAM,IAAIH,GAAaJ,CAAG,CAC9D,CAEJ,CAMA,eAAsBS,GACpBC,EACAC,EACAC,EACAC,EAAoB,IACpBC,EAAU,GACI,CACd,IAAMC,EAAgB,CAAC,EAEnBC,EAAQ,EACNC,EAAiB,MAAMP,EAAG,EAEhC,GADAK,EAAS,KAAKE,CAAc,EACxB,CAACN,EAAcM,CAAc,EAAG,OAAOF,EAE3C,IAAMG,EAAY,IAAI,KAAK,KAAK,IAAI,EAAIN,EAAgB,GAAI,EAAE,QAAQ,EAClEO,EAAW,IACXC,EAAgBD,EAEpB,KAAO,KAAK,IAAI,EAAID,GAAW,CAC7B,IAAMG,EAAcN,EAASA,EAAS,OAAS,CAAC,EAChD,GAAIM,IAAgB,QAAa,CAACV,EAAcU,CAAW,EAAG,MAE9DL,IAEIF,GACF,QAAQ,KACN,WAAWK,CAAQ,2DAA2DC,CAAa,uBACzFR,EAAgB,GAClB,KACF,EAEF,MAAM,IAAI,QAASU,GAAQ,WAAWA,EAAKH,CAAQ,CAAC,EAEpDA,EAAWA,EAAWN,EAClB,IAAI,KAAK,KAAK,IAAI,EAAIM,CAAQ,EAAE,QAAQ,EAAID,IAC9CC,EAAWD,EAAY,KAAK,IAAI,EAC5BJ,GACF,QAAQ,KAAK,0CAA0CK,CAAQ,IAAI,GAGvEC,EAAgBD,EAAWC,EAE3B,IAAMG,EAAc,MAAMb,EAAGW,CAAW,EACxCN,EAAS,KAAKQ,CAAW,EACrBT,GAAWH,EAAcY,CAAW,GACtC,QAAQ,KACN,GAAGP,CAAK,YAAYN,EAAG,IAAI,KAAKK,EAAS,MAAM,gCAAgC,KAAK,UAClFA,EAASA,EAAS,OAAS,CAAC,EAC5B,KACA,CACF,CAAC,EACH,CAEJ,CAEA,OAAOA,CACT,CCvHA,IAAAS,GAAwB,oCACxBC,GAA0B,2BAC1BC,GAAoB,kBCFpB,IAAAC,GAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,qBAChB,KAAQ,sBACR,KAAQ,SACV,EACA,CACE,aAAgB,6BAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,gBAAmB,aACnB,KAAQ,aACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,MACR,KAAQ,SACV,CACF,EACA,KAAQ,wBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,gBAChB,KAAQ,OACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,QAChB,KAAQ,GACR,KAAQ,OACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,iBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,WACR,KAAQ,OACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,cACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,cACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,gBAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,CACF,EACA,KAAQ,iBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,qBAChB,KAAQ,sBACR,KAAQ,SACV,CACF,EACA,KAAQ,wBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,cACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,6BAChB,KAAQ,qBACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,YACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,OACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,aAAgB,yBAChB,KAAQ,YACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,kBAChB,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,8BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,gBAAmB,UACnB,KAAQ,SACV,CACF,ECt5BA,IAAAC,GAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,iBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,EACA,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,gBAAmB,aACnB,KAAQ,aACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,uBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,4BACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,+BACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,gCACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,aAAgB,UAChB,KAAQ,sBACR,KAAQ,SACV,CACF,EACA,KAAQ,aACR,KAAQ,OACV,EACA,CACE,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,kBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,CACF,EACA,KAAQ,SACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,yBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,wBACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,UACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,QAChB,KAAQ,kBACR,KAAQ,OACV,EACA,CACE,aAAgB,QAChB,KAAQ,sBACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,eACR,KAAQ,SACV,CACF,EACA,KAAQ,kBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,qBACR,KAAQ,SACV,CACF,EACA,KAAQ,0BACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,SAChB,KAAQ,GACR,KAAQ,QACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,gBACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,QACR,KAAQ,QACV,CACF,EACA,KAAQ,qBACR,QAAW,CACT,CACE,aAAgB,OAChB,KAAQ,GACR,KAAQ,MACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,QACR,QAAW,CACT,CACE,aAAgB,UAChB,KAAQ,GACR,KAAQ,SACV,CACF,EACA,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,EACA,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,QAChB,KAAQ,YACR,KAAQ,OACV,CACF,EACA,KAAQ,gBACR,QAAW,CAAC,EACZ,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,4BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,mBACR,KAAQ,SACV,CACF,EACA,KAAQ,mBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,sBAChB,KAAQ,aACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,UACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,YACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,oBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,8BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CAAC,EACX,KAAQ,sBACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,cACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,gBAAmB,UACnB,KAAQ,SACV,CACF,ECxjBA,IAAAC,EAAwB,oCACxBC,EAA0B,2BAE1B,eAAsBC,GAAqBC,EAAsBC,EAA4C,CAC3G,OAAc,QAAM,MAAM,kBAAkB,CAC1C,KAAMA,EACN,MAAOD,CACT,CAAC,CACH,CAEA,eAAsBE,GAAiBC,EAA0C,CAC/E,GAAM,CAACC,CAAS,EAAI,MAAM,YAAU,mBAAmB,CAAQ,QAAM,MAAM,KAAK,OAAO,QAAQ,CAAC,EAAGD,CAAS,EAC5G,OAAOC,CACT,CAEA,eAAsBC,GAAeC,EAAiBC,EAAgD,CACpG,GAAM,CAACC,CAAO,EAAI,MAAM,YAAU,mBAChC,CAAQ,QAAM,MAAM,KAAK,OAAO,MAAM,EAAG,WAAW,KAAKF,CAAK,CAAC,EAC/DC,CACF,EACA,OAAOC,CACT,CAEA,eAAsBC,GAAgBC,EAAiBC,EAAmD,CACxG,GAAM,CAACC,CAAQ,EAAI,MAAM,YAAU,mBACjC,CAAQ,QAAM,MAAM,KAAK,OAAO,UAAU,EAAG,WAAW,KAAK,CAACF,CAAO,CAAC,CAAC,EACvEC,CACF,EACA,OAAOC,CACT,CAEA,eAAsBC,GAAoBN,EAAgD,CACxF,IAAMO,EAAgB,MAAMZ,GAAiBK,CAAe,EACtD,CAACQ,CAAa,EAAI,MAAM,YAAU,mBAAmB,CAACD,EAAc,SAAS,CAAC,EAAGP,CAAe,EACtG,OAAOQ,CACT,CAEA,eAAsBC,GACpBC,EACAC,EACoB,CACpB,GAAM,CAACH,CAAa,EAAI,MAAM,YAAU,mBAAmB,CAACE,EAAkB,SAAS,CAAC,EAAGC,CAAmB,EAC9G,OAAOH,CACT,CAEA,eAAsBI,GAAsBlB,EAAwBM,EAAgD,CAClH,GAAM,CAACa,CAAO,EAAI,MAAM,YAAU,mBAChC,CAAQ,QAAM,MAAM,KAAK,OAAO,OAAO,EAAGnB,EAAY,QAAQ,CAAC,EAC/DM,CACF,EACA,OAAOa,CACT,CAEA,eAAsBC,GACpBX,EACAY,EACAf,EACoB,CACpB,GAAM,CAACgB,CAAkB,EAAI,MAAM,YAAU,mBAC3C,CAAQ,QAAM,MAAM,KAAK,OAAO,oBAAoB,EAAG,OAAO,KAAK,CAACb,CAAO,CAAC,EAAGY,CAAK,EACpFf,CACF,EACA,OAAOgB,CACT,CAEA,eAAsBC,GAAsBd,EAAiBH,EAAgD,CAC3G,GAAM,CAACkB,CAAc,EAAI,MAAM,YAAU,mBACvC,CAAQ,QAAM,MAAM,KAAK,OAAO,cAAc,EAAG,WAAW,KAAK,CAACf,CAAO,CAAC,CAAC,EAC3EH,CACF,EACA,OAAOkB,CACT,CAEA,eAAsBC,GAAmBhB,EAAiBiB,EAAmD,CAC3G,GAAM,CAACF,CAAc,EAAI,MAAM,YAAU,mBACvC,CAAQ,QAAM,MAAM,KAAK,OAAO,WAAW,EAAG,WAAW,KAAK,CAACf,CAAO,CAAC,CAAC,EACxEiB,CACF,EACA,OAAOF,CACT,CAEA,eAAsBG,GACpBC,EACAF,EACoB,CACpB,GAAM,CAACG,CAAc,EAAI,MAAM,YAAU,mBACvC,CAAQ,QAAM,MAAM,KAAK,OAAO,cAAc,EAAGD,CAAiB,EAClEF,CACF,EACA,OAAOG,CACT,CAEA,eAAsBC,GACpBC,EACAC,EACA1B,EACoB,CACpB,GAAM,CAAC2B,CAAc,EAAI,MAAM,YAAU,mBACvC,CAAQ,QAAM,MAAM,KAAK,OAAO,cAAc,EAAGD,EAAiB,QAAQ,EAAGD,EAAc,QAAQ,CAAC,EACpGzB,CACF,EACA,OAAO2B,CACT,CAEA,eAAsBC,GAAqBlC,EAAwBiB,EAAoD,CACrH,GAAM,CAACd,CAAS,EAAI,MAAM,YAAU,mBAClC,CAAQ,QAAM,MAAM,KAAK,OAAO,aAAa,EAAGH,EAAY,QAAQ,CAAC,EACrEiB,CACF,EACA,OAAOd,CACT,CAEA,eAAsBgC,GAA0Bd,EAAkBJ,EAAoD,CACpH,GAAM,CAACE,CAAO,EAAI,MAAM,YAAU,mBAChC,CAAQ,QAAM,MAAM,KAAK,OAAO,OAAO,EAAGE,EAAM,QAAQ,CAAC,EACzDJ,CACF,EACA,OAAOE,CACT,CAEO,SAASiB,GAAmBnB,EAAgCoB,EAAmD,CACpH,GAAM,CAACC,CAA4B,EAAI,YAAU,uBAC/C,CAAQ,QAAM,MAAM,KAAK,OAAO,MAAM,EAAGD,EAA4B,SAAS,CAAC,EAC/EpB,CACF,EACA,OAAOqB,CACT,CAEO,SAASC,GACdC,EACAxC,EACAyC,EACAC,EACA,CACA,IAAMC,EAA4BC,GAAmB,sBAAuBH,CAAwB,EAC9FI,EAAiBD,GAAmB,kBAAmBF,CAAwB,EAC/EJ,EAA+BM,GAAmB,oBAAqBF,CAAwB,EAC/FI,EAAcF,GAAmB,eAAgBF,CAAwB,EACzEK,EAAaH,GAAmB,cAAeF,EAA0B,CAAC1C,CAAW,CAAC,EACtFgD,EAA0BJ,GAAmB,yBAA0BF,EAA0B,CACrGF,EAAO,SAAS,CAClB,CAAC,EACKS,EAAeL,GAAmB,mBAAoBF,CAAwB,EACpF,MAAO,CACL,0BAAAC,EACA,eAAAE,EACA,6BAAAP,EACA,YAAAQ,EACA,WAAAC,EACA,wBAAAC,EACA,aAAAC,CACF,CACF,CAEA,SAASL,GACPM,EACAhD,EACAiD,EAAyD,CAAC,EAC/C,CACX,IAAMC,EAAQ,CAAC,OAAO,KAAY,QAAM,MAAM,KAAK,OAAOF,CAAK,CAAC,CAAC,EACjE,QAAWG,KAAaF,EAClB,OAAOE,GAAc,SACvBD,EAAM,KAAK,OAAO,KAAY,QAAM,MAAM,KAAK,OAAOC,CAAS,CAAC,CAAC,EACxD,MAAM,QAAQA,CAAS,EAChCD,EAAM,KAAK,OAAO,KAAKC,CAAS,CAAC,EACxB,OAAO,SAASA,CAAS,EAClCD,EAAM,KAAKC,CAAS,EAEpBD,EAAM,KAAKC,EAAU,SAAS,CAAC,EAInC,OADY,YAAU,uBAAuBD,EAAOlD,CAAS,EAClD,CAAC,CACd,CC7KA,IAAAoD,GAAyC,iCACzCC,GAAsC,2BAE/B,SAASC,GAAoBC,EAAsBC,EAAkC,CAC1F,IAAMC,EAAa,IAAI,cAAWF,EAAc,WAAW,EAErDG,EAAY,IAAI,aAAUF,CAAc,EAE9C,OAAO,IAAI,kBACTC,EAEA,CAAE,UAAWC,CAAU,EACvB,CACE,oBAAqB,YACrB,WAAY,WACd,CACF,CACF,CCZO,IAAeC,GAAf,KAAkC,CAYzC,ECjBA,IAAAC,GAA0B,2BAC1BC,GAAwB,gCACxBC,GAA+B,kBAC/BC,GAAwB,0BAExBC,GAA4B,sBAwBrB,SAASC,GAAcC,EAAiBC,EAAiBC,EAAkC,CAChG,IAAIC,EACJ,OAAQF,EAAM,CACZ,UAAoB,CAClBE,EAASC,GAAqBJ,CAAO,EACrC,KACF,CACA,aAAuB,CACrBG,EAAS,IAAI,aAAUH,CAAO,EAAE,SAAS,EACzC,KACF,CACA,UAAoB,CAClBG,EAASE,GAAsBL,CAAO,EACtC,KACF,CACA,UAAoB,CAClBG,EAAS,IAAI,WAAQH,CAAO,EAAE,SAAS,EACvC,KACF,CACF,CAEA,OAAQE,EAAI,CACV,UACE,MAAO,KAAOC,EAAO,SAAS,KAAK,EAErC,aACE,OAAO,MAAM,KAAKA,CAAM,EAE1B,UACE,OAAOA,EAAO,OAAO,EAAE,KAEzB,UACE,OAAOA,EAAO,OAAO,EAAE,IAE3B,CACF,CAEO,SAASG,GAAYC,EAAqB,CAC/C,OAAO,OAAO,KAAKA,EAAI,QAAQ,OAAQ,EAAE,EAAG,KAAK,CACnD,CAEO,SAASH,GAAqBJ,EAAyB,CAE5D,IAAMQ,EAAOF,GAAYN,CAAO,EAChC,OAAO,OAAO,OAAO,CAAC,OAAO,MAAM,GAASQ,EAAK,OAAQ,CAAC,EAAGA,CAAI,EAAG,EAAM,CAC5E,CAEA,SAASH,GAAsBL,EAAyB,CACtD,IAAMS,EAAaC,GAAwBV,CAAO,EAC5CG,EAASG,GAAYG,CAAU,EACrC,OAAOE,GAAaR,EAAQ,EAAE,CAChC,CAEO,SAASO,GAAwBV,EAAyB,CAC/D,OAAO,OAAO,KAAgB,SAAM,OAAO,oBAAoBA,CAAO,CAAC,EAAE,SAAS,KAAK,EAAE,QAAQ,MAAO,IAAI,CAC9G,CAEA,SAASW,GAAaR,EAAgBS,EAAsB,CAC1D,GAAIT,EAAO,QAAUS,EACnB,OAAOT,EAET,IAAMU,EAAS,OAAO,MAAMD,EAAM,CAAC,EACnC,OAAAT,EAAO,KAAKU,EAAQD,EAAOT,EAAO,MAAM,EACjCU,CACT,CAkBO,SAASC,IAAmB,CACjC,SAAO,GAAAC,SAAY,EAAE,CACvB,CAEO,SAASC,IAAyB,CACvC,IAAMC,KAAS,GAAAF,SAAY,EAAE,EAAE,eAAe,EAC9C,OAAIE,EAAS,EACJA,EAAS,CAAC,GAEZA,CACT,CAEO,SAASC,GAAoBC,EAA4BC,EAAkC,CAChG,IAAMC,EAAe,CAAC,EAChBC,EAAcF,EAAO,YAC3B,OAAAC,EAAa,OAASE,EAAwBH,EAAO,OAAQE,EAAY,QAAQ,EAAE,QAAQ,EAC3FD,EAAa,gBAAkBC,EAAY,cAC3CD,EAAa,mBAAqBD,EAAO,mBACzCC,EAAa,iBAAmBG,GAAcF,EAAY,aAAcH,EAAiBA,CAAe,EACxGE,EAAa,iBAAmBD,EAAO,iBACvCC,EAAa,eAAiBG,GAAcJ,EAAO,iBAAiB,aAAcD,EAAiBA,CAAe,EAClHE,EAAa,qBAAuBD,EAAO,qBACvCG,EAAwBH,EAAO,qBAAsBA,EAAO,iBAAiB,QAAQ,EAAE,QAAQ,EAC/F,IACGC,CACT,CAEA,eAAsBI,GACpBN,EACAC,EACAM,EACuB,CACvB,IAAMC,EAAe,CAAC,EAEtBA,EAAa,YAAcP,EAAO,YAAY,iBAC9CO,EAAa,gBAAkBP,EAAO,YAAY,YAClD,IAAMQ,EAAcC,EAAO,iBAAiBT,EAAO,iBAAiB,WAAW,EAAE,UACjFO,EAAa,iBAAmBP,EAAO,YAAY,aAEnDO,EAAa,UAAYP,EAAO,iBAAiB,iBACjDO,EAAa,eAAiBP,EAAO,iBAAiB,aAElDA,EAAO,sBAAwB,aACjCO,EAAa,oBAAsB,aAGnCA,EAAa,oBAAsB,SAErC,IAAML,EAAcF,EAAO,YAC3B,GAAIA,EAAO,YAAc,EAAgB,CACvC,GAAI,CAACE,EAAY,aAAe,CAACF,EAAO,iBAAiB,YACvD,MAAM,IAAIU,GAA0B,2CAA2C,EAEjFH,EAAa,gBAAkBL,EAAY,WAC7C,MACEK,EAAa,gBAAkBL,EAAY,cAE7CK,EAAa,UAAYP,EAAO,UAChCO,EAAa,mBAAqBP,EAAO,mBACzCO,EAAa,OAASJ,EAAwBH,EAAO,OAAQE,EAAY,QAAQ,EAAE,QAAQ,EAG3F,GAAI,CAAE,IAAAS,EAAK,UAAAC,CAAU,EAAIZ,EACzB,GAAI,CAACW,EAAK,CAUR,IAAME,GATgB,MAAMC,GAC1BP,EAAa,YACbP,EAAO,YAAY,UACnBO,EAAa,UACbL,EAAY,SACZK,EAAa,UACbD,CACF,GAEmCC,EAAa,mBAAmB,EACnE,GAAI,CAACM,EACH,MAAM,IAAIE,GAEZJ,EAAME,EAAa,IACnBD,EAAY,KACd,CACA,GAAIA,GAAa,QACf,OAAQL,EAAa,oBAAqB,CACxC,aACEA,EAAa,IAAMJ,EAAwBQ,EAAKF,EAAO,uBAAuBP,EAAY,SAAS,CAAC,EAAE,QACpG,CACF,EACA,MACF,iBACEK,EAAa,IAAMJ,EAAwBQ,EAAKT,EAAY,QAAQ,EAAE,QAAQ,CAAC,EAC/E,KACJ,MAEAK,EAAa,IAAMI,EAIrB,GAAM,CAAE,SAAAK,EAAU,eAAAC,CAAe,EAAIjB,EACrC,GAAIgB,GAAY,CAACA,EAAW,EAAG,CAC7B,GAAIC,GAAkB,QACpB,OAAQV,EAAa,oBAAqB,CACxC,aACEA,EAAa,SAAWJ,EACtBa,EACAP,EAAO,uBAAuBP,EAAY,SAAS,CACrD,EAAE,QAAQ,CAAC,EACX,MACF,iBACEK,EAAa,SAAWJ,EAAwBa,EAAUd,EAAY,QAAQ,EAAE,QAAQ,CAAC,EACzF,KACJ,MAEAK,EAAa,SAAWS,EAE1B,MAAME,GACJX,EAAa,SACbA,EAAa,oBACbL,EACAF,EAAO,iBACPM,CACF,CACF,CAEA,OAAAC,EAAa,iBAAmBH,GAAcG,EAAa,iBAAkBR,EAAiBA,CAAe,EAC7GQ,EAAa,iBAAmBH,GAAcJ,EAAO,iBAAkBQ,EAAaT,CAAe,EACnGQ,EAAa,eAAiBH,GAAcG,EAAa,eAAgBC,EAAaT,CAAe,EACjGQ,EAAa,qBAAuB,cACtCY,GAAqBZ,EAAa,OAAQL,EAAY,SAAUK,EAAa,IAAKA,EAAa,QAAQ,EAElGA,CACT,CAEA,SAASY,GACPC,EACAC,EACAC,EACAC,EACA,CACA,IAAMC,KAAc,QAAIJ,CAAS,EAC9B,MAAME,CAAM,EACZ,MAAMC,GAAe,CAAC,EACzB,GAAIC,EAAY,IAAI,CAAC,EACnB,MAAM,IAAIC,GACR,iCAAiCC,KAC/B,QAAIF,CAAW,EAAE,MAAM,CAAC,EAAE,IAAI,EAC9BH,CACF,EAAE,QAAQ,CAAC,qBACb,CAEJ,CAEA,eAAsBP,GACpBa,EACAC,EACAC,EACAC,EACAC,EACAzB,EACwB,CACxB,IAAM0B,EAA0B,MAAM1B,EAAI,0BAA0B,CAClE,cAAeqB,EACf,mBAAoBE,EACpB,UAAAE,CACF,CAAC,EAEKE,EAA+B,CAClC,OAAwC,CACtC,IAAmBD,EAAwB,IAC3C,MAAqBN,EACpBM,EAAwB,IACxBvB,EAAO,uBAAuBmB,CAAe,CAC/C,EAAE,QAAQ,CACZ,CACF,EACA,GAAII,EAAwB,uBAAwB,CAClD,IAAME,EAAuBC,GAC3B,IAAI,OAAIH,EAAwB,GAAG,EAAE,IAAIA,EAAwB,sBAAsB,EACvFvB,EAAO,uBAAuBmB,CAAe,EAC7CE,CACF,EAAE,QAAQ,EAAG,OAAI,OAAO,EACxBG,EAAc,WAAoC,CAC/C,IAAmBC,EACnB,MAAqBR,EAAwBQ,EAAsBJ,CAAwB,EAAE,QAAQ,CACxG,CACF,CAEA,OAAOG,CACT,CAEA,eAAef,GACbK,EACAa,EACAlC,EACAmC,EACA/B,EACA,CAEA,IAAMgC,GADiB,MAAMC,GAAqBrC,EAAamC,EAAkB/B,CAAG,GAC5C,YAAY8B,CAAmB,EACvE,GAAI,CAACE,EACH,MAAM,IAAIvB,GAAgC,mCAAmCqB,CAAmB,kBAAkB,EAEpH,IAAMI,EAAsBF,EAAiB,IAC7C,MAAI,QAAIf,CAAW,EAAE,GAAGiB,CAAmB,EACzC,MAAM,IAAIC,GACR,aAAalB,CAAW,kCAAkCiB,CAAmB,SAASJ,CAAmB,kBAC3G,CAEJ,CAEA,eAAsBG,GACpBG,EACAC,EACArC,EACmC,CACnC,IAAMsC,EAAuC,CAAC,EACxCZ,EAA0B,MAAM1B,EAAI,0BAA0B,CAClE,cAAeoC,EAAiB,iBAChC,mBAAoBC,EAAsB,iBAC1C,WACF,CAAC,EACKE,EAAYF,EAAsB,aAAa,UAC/CG,EAAiBpB,EACrBmB,EACApC,EAAO,uBAAuBkC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,EACJI,KAA+B,QAAID,CAAc,EACpD,IAAId,EAAwB,YAAY,EACxC,QAAQvB,EAAO,uBAAuBiC,EAAiB,SAAS,EAAG,OAAI,SAAS,EAC7EM,EAA0B7C,EAC9B4C,EACAtC,EAAO,uBAAuBiC,EAAiB,SAAS,CAC1D,EAAE,QAAQ,CAAC,EAKX,GAJAE,EAAkB,OAAyC,CACxD,IAAmBI,EACnB,MAAqBD,CACxB,EACIf,EAAwB,uBAAwB,CAClD,IAAMiB,KAAyB,QAAIF,CAA4B,EAC5D,IAAIf,EAAwB,sBAAsB,EAClD,QAAQU,EAAiB,SAAU,OAAI,SAAS,EACnDE,EAAkB,WAAoC,CACnD,IAAmBzC,EAAwB8C,EAAwBP,EAAiB,QAAQ,EAAE,QAAQ,CAAC,EACvG,MAAqBO,CACxB,CACF,CACA,MAAO,CACL,YAAaL,EACb,iBAAkB,CAChB,aAAc,CACX,IAAmBC,EACnB,MAAqBC,CACxB,EACA,KAAM,CACH,IAAmBH,EAAsB,aAAa,KACtD,MAAqBjB,EACpBiB,EAAsB,aAAa,KACnClC,EAAO,uBAAuBkC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,CACZ,EACA,SAAU,CACP,IAAmBA,EAAsB,aAAa,SACtD,MAAqBjB,EACpBiB,EAAsB,aAAa,SACnClC,EAAO,uBAAuBkC,EAAsB,SAAS,CAC/D,EAAE,QAAQ,CACZ,CACF,EACA,aAAcX,EAAwB,aACtC,uBAAwBA,EAAwB,sBAClD,CACF,CAEO,SAASkB,GAAalD,EAAuD,CAClF,OAAOA,EAAO,YAAY,cAAgBA,EAAO,iBAAiB,WACpE,CNlWO,IAAMmD,GAAN,cAA+BC,EAAmB,CAGvD,YAAmBC,EAAmBC,EAAkCC,EAAsC,CAC5G,MAAM,EADW,UAAAF,EAAmB,SAAAC,EAAkC,uBAAAC,EAFxE,eAA2B,KAI3B,CAEA,MAAM,KAAKC,EAAkD,CAC3D,IAAMC,EAAiB,MAAM,KAAK,wBAAwBD,CAAM,EAChE,OAAO,KAAK,mBAAmBC,CAAc,CAC/C,CAEA,MAAM,wBAAwBD,EAA6C,CACzE,IAAME,EAAeC,GAAoB,KAAK,UAAWH,CAAM,EAC/D,OAAO,MAAM,KAAK,kCAAkCE,CAAY,CAClE,CAEA,MAAM,kCAAkCF,EAA+C,CACrF,GAAM,CACJ,OAAAI,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,qBAAAC,CACF,EAAIV,EAIEW,EAFiB,KAAK,kBAAkBN,CAAe,EAE3B,QAAQ,KACxCD,EACAG,EACAE,EACAD,EACAE,CACF,EAEA,OAAO,QAAQ,QAAQ,CACrB,KAAMJ,EACN,GAAID,EACJ,KAAMM,EAAW,UAAU,CAC7B,CAAC,CACH,CAEA,MAAM,wBAAwBX,EAA6C,CACzE,IAAMY,EAAe,MAAMC,GAAoB,KAAK,UAAWb,EAAQ,KAAK,GAAG,EACzE,CACJ,OAAAI,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,UAAAO,EACA,iBAAAN,EACA,eAAAC,EACA,UAAAM,EACA,IAAAC,EACA,oBAAAC,EACA,SAAAC,CACF,EAAIN,EAEEO,EAAQ,KAAOC,GAAS,EAAE,SAAS,KAAK,EAC1CC,EACAC,EAEAC,EAAWP,EAIf,GAHIE,IACFK,KAAW,QAAIA,CAAQ,EAAE,KAAKL,CAAQ,EAAE,QAAQ,GAE9CH,IAAc,EAAgB,CAChC,IAAMS,EAAO,MAAM,KAAK,4BAA4BxB,EAAQY,EAAcW,CAAQ,EAClFF,EAAaG,EAAK,WAClBF,EAAQE,EAAK,KACf,KAAO,CACL,IAAMC,EAAiB,KAAK,kBAAkBpB,CAAe,EACzDY,IAAwB,cAC1BI,EAAaI,EAAe,QAAQ,cAClClB,EACAH,EACAI,EACAM,EACAL,EACAU,EACAJ,EACAQ,CACF,EACAD,EAAQ,MAERD,EAAaI,EAAe,QAAQ,cAClClB,EACAH,EACAI,EACAM,EACAL,EACAU,EACAJ,EACA,CACF,EACAO,EAAQC,EAEZ,CAEA,OAAO,QAAQ,QAAQ,CACrB,KAAMjB,EACN,GAAID,EACJ,MAAOiB,EACP,KAAMD,EAAW,UAAU,CAC7B,CAAC,CACH,CAEA,MAAc,4BACZrB,EACAY,EACAW,EAIC,CACD,GAAM,CAAE,OAAAnB,EAAQ,gBAAAC,EAAiB,UAAAS,EAAW,iBAAAN,EAAkB,oBAAAS,CAAoB,EAAIL,EAEhFc,EAAyC,KAAK,YAAYC,GAA4BtB,CAAe,EACvGgB,EACAC,EAEJ,GAAItB,EAAO,iBAAiB,YAAc,SAAkB,CAC1D,IAAI4B,EACEC,EAAkB,IAAI,aAAU7B,EAAO,gBAAgB,EACvD8B,EAAc,IAAI,aAAU9B,EAAO,iBAAiB,YAAY,EAChE+B,EAAmB,MAAMC,GAAqBH,EAAiBC,CAAW,EAC1EG,EAAWC,GACf,KAAK,kBAAkB,mBAA6B,EACpDlC,EAAO,gBACT,EACO,eAAYiC,CAAQ,EAC3B,IAAME,EAAc,MAAa,OAAI,MAAMF,CAAQ,EAAE,QAAQ,MAAM,cAAcF,CAAgB,EACjG,GAAII,GAAa,UAAU,OAAON,CAAe,EAC/CD,EAAyBQ,GAAcL,EAAiB,SAAS,WAAqB,KAAK,SAAS,MAC/F,CACL,IAAMM,EAAgB,MAAMJ,EAAS,WAAW,wBAAwBJ,EAAiB,CACvF,KAAMC,CACR,CAAC,EACD,GAAIO,EAAc,MAAM,SAAW,GAAK,CAACF,EACvCP,EAAyBQ,GAAcL,EAAiB,SAAS,WAAqB,KAAK,SAAS,UAC3FM,EAAc,MAAM,OAAS,EAAG,CACzC,IAAMC,EAAoBD,EAAc,MAAM,CAAC,EAE/C,GAAI,CAACC,GAAmB,OACtB,MAAM,IAAIC,EAAS,oDAAoD,EAEzEX,EAAyBQ,GAAcE,EAAkB,OAAO,SAAS,WAAqB,KAAK,SAAS,CAC9G,KACE,OAAM,IAAIC,EAAS,oCAAoC,CAE3D,CAEItB,IAAwB,cAC1BI,EAAaK,EAAmB,QAAQ,wBACtCtB,EACAwB,EACApB,EACAM,EACAS,CACF,EACAD,EAAQ,MAERD,EAAaK,EAAmB,QAAQ,wBACtCtB,EACAwB,EACApB,EACAM,EACA,CACF,EACAQ,EAAQC,EAEZ,MACMN,IAAwB,cAC1BI,EAAaK,EAAmB,QAAQ,OAAOtB,EAAQI,EAAkBM,EAAWS,CAAQ,EAC5FD,EAAQ,MAERD,EAAaK,EAAmB,QAAQ,OAAOtB,EAAQI,EAAkBM,EAAW,CAAC,EACrFQ,EAAQC,GAGZ,MAAO,CAAE,WAAAF,EAAY,MAAAC,CAAM,CAC7B,CAEA,MAAc,mBAAmBrB,EAAgC,CAC/D,IAAMuC,EAAc,MAAM,KAAK,KAAK,IAAI,YAAYvC,CAAmC,EAIjFwC,EAAmG,CAAE,qBAAsB,KAAM,aAAc,IAAK,EACpJ,CAAE,gBAAAC,CAAgB,EAAI,MAAM,KAAK,KAAK,IAAI,gBAAgB,CAC9D,GAAIzC,EACJ,IAAKuC,EACL,GAAGC,CACL,CAAC,EACD,MAAO,CAAE,KAAMC,CAAgB,CACjC,CAEQ,YAAoCC,EAAoBtC,EAA4B,CAC1F,OAAO,IAAI,KAAK,KAAK,IAAI,SAASsC,EAAStC,CAAe,CAC5D,CAEQ,kBAAkBA,EAAyC,CACjE,OAAO,KAAK,YAA4BuC,GAAwBvC,CAAe,CACjF,CACF,EO/MO,IAAMwC,GAAN,KAAgF,CACrF,YACUC,EACAC,EACAC,EACAC,EACR,CAJQ,SAAAH,EACA,uBAAAC,EACA,YAAAC,EACA,kBAAAC,CACP,CAEH,MAAM,QAAQ,EAA6BC,EAA4C,CACrF,IAAIC,EACAC,EACAF,GACFC,EAAW,EACXC,EAAcF,GAEdE,EAAc,EAEhB,IAAMC,EAAUC,GAAWF,EAAY,MAAOA,EAAY,SAAS,EACnE,OAAO,KAAK,aAAa,2BACvB,CACE,GAAGA,EACH,QAAAC,CACF,EACAF,CACF,CACF,CAEA,MAAM,KAAKH,EAAiCG,EAA8C,CAGxF,OAFAI,EAAqBP,EAAO,MAAM,EAClCQ,EAAuB,SAAUR,EAAO,OAAQA,EAAO,YAAY,QAAQ,EACvES,GAAaT,CAAM,EACdU,GACLV,EAAO,YAAY,YACnB,KAAK,IACL,KAAK,kBACL,KAAK,OACLG,CACF,EAAE,wBAAwBH,CAAM,EAE3BU,GACLV,EAAO,YAAY,YACnB,KAAK,IACL,KAAK,kBACL,KAAK,OACLG,CACF,EAAE,wBAAwBH,CAAM,CAClC,CACF,EC3EA,IAAAW,EAAuC,iCACvCC,EASO,2BACPC,GAAoB,kBCyzDb,IAAMC,GAAc,CACzB,QAAS,QACT,KAAM,SACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,oBACX,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,UACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,UACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,oBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,qBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,yBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,eACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,WACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,cACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,gBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,iCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,gCACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,kBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,qBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,uBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,yBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,mBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,SACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,CACF,EACA,SAAU,CACR,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,aACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,UACN,KAAM,MACR,EACA,CACE,KAAM,aACN,KAAM,MACR,EACA,CACE,KAAM,cACN,KAAM,MACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,mBACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CAAC,CACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,eACN,KAAM,KACR,EACA,CACE,KAAM,cACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,IACR,EACA,CACE,KAAM,gBACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,qBACN,KAAM,MACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,MACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,cACN,KAAM,WACR,EACA,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,CACE,KAAM,0BACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,8BACN,KAAM,WACR,EACA,CACE,KAAM,6BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,qBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,IACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,oBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,QACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,WACR,EACA,CACE,KAAM,gBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,WACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,QAAS,WACX,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,mBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,MACR,EACA,CACE,KAAM,WACR,EACA,CACE,KAAM,UACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,OACN,SAAU,CACR,CACE,KAAM,SACR,EACA,CACE,KAAM,UACR,EACA,CACE,KAAM,MACR,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,CACE,KAAM,IACN,KAAM,4BACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,wBACN,IAAK,2CACP,EACA,CACE,KAAM,KACN,KAAM,mBACN,IAAK,gDACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,2BACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,EACA,CACE,KAAM,KACN,KAAM,oBACN,IAAK,oBACP,EACA,CACE,KAAM,KACN,KAAM,aACN,IAAK,aACP,EACA,CACE,KAAM,KACN,KAAM,cACN,IAAK,cACP,EACA,CACE,KAAM,KACN,KAAM,iBACN,IAAK,yBACP,EACA,CACE,KAAM,KACN,KAAM,uBACN,IAAK,wBACP,EACA,CACE,KAAM,KACN,KAAM,6BACN,IAAK,8BACP,EACA,CACE,KAAM,KACN,KAAM,kBACN,IAAK,iBACP,EACA,CACE,KAAM,KACN,KAAM,eACN,IAAK,mBACP,CACF,CACF,ECviGO,IAAMC,GAAkB,CAC7B,QAAS,QACT,KAAM,cACN,aAAc,CACZ,CACE,KAAM,aACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,gBACX,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,SAAU,CACR,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,uBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,4BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,0BACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,iBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,WACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,YACX,CACF,CACF,CACF,EACA,CACE,KAAM,sBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,yBACX,CACF,CACF,CACF,EACA,CACE,KAAM,oBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,OACN,KAAM,CACJ,QAAS,uBACX,CACF,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,aACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,wBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,YACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,EACA,CACE,KAAM,mBACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,cACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,kBACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,eACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,gBACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CAAC,CACT,EACA,CACE,KAAM,8BACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,OACN,MAAO,GACP,SAAU,EACZ,EACA,CACE,KAAM,aACN,MAAO,GACP,SAAU,EACZ,CACF,EACA,KAAM,CACJ,CACE,KAAM,eACN,KAAM,WACR,CACF,CACF,CACF,EACA,SAAU,CACR,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,OACN,KAAM,WACR,EACA,CACE,KAAM,QACN,KAAM,WACR,EACA,CACE,KAAM,2BACN,KAAM,WACR,EACA,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,oBACN,KAAM,IACR,EACA,CACE,KAAM,kBACN,KAAM,KACR,EACA,CACE,KAAM,iBACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,SACN,KAAM,WACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,aACN,KAAM,KACR,EACA,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,OACN,KAAM,KACR,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,CACE,KAAM,0BACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,wBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,UACN,KAAM,IACR,EACA,CACE,KAAM,WACN,KAAM,KACR,EACA,CACE,KAAM,SACN,KAAM,KACR,EACA,CACE,KAAM,OACN,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,YACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,qBACN,KAAM,IACR,EACA,CACE,KAAM,eACN,KAAM,CACJ,MAAO,CAAC,KAAM,EAAE,CAClB,CACF,EACA,CACE,KAAM,SACN,KAAM,KACR,CACF,CACF,CACF,EACA,CACE,KAAM,iBACN,KAAM,CACJ,KAAM,SACN,OAAQ,CACN,CACE,KAAM,qBACN,KAAM,WACR,EACA,CACE,KAAM,2BACN,KAAM,WACR,CACF,CACF,CACF,CACF,EACA,OAAQ,CACN,CACE,KAAM,IACN,KAAM,eACN,IAAK,mBACP,CACF,CACF,ECpsCA,IAAAC,GAAuC,iCAGvCC,GAAgB,qBAChBC,GAAiB,mBAOjB,eAAsBC,GAAoBC,EAAoBC,EAA+C,CAC3G,OAAO,MAAM,OAAI,MAAMA,CAAQ,EAAE,QAAQ,MAAM,MAAMD,CAAO,CAC9D,CAEA,eAAsBE,GACpBC,EACAC,EACAC,EACiB,CACjB,IAAMC,EAAkB,MAAMF,EAAO,QAAQ,KAAK,MAAMC,CAAW,EAC7DE,EA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",
6
6
  "names": ["src_exports", "__export", "AddressStatus", "AllbridgeCoreSdk", "AmountFormat", "AmountNotEnoughError", "ArgumentInvalidDecimalsError", "CCTPDoesNotSupportedError", "ChainSymbol", "ChainType", "ErrorCode", "ExtraGasMaxLimitExceededError", "FeePaymentMethod", "InsufficientPoolLiquidityError", "InvalidAmountError", "InvalidGasFeePaymentOptionError", "InvalidMessengerOptionError", "InvalidTxError", "JupiterError", "Messenger", "MethodNotSupportedError", "NodeRpcUrlNotInitializedError", "SdkError", "SdkRootError", "SolanaAutoTxFee", "TimeoutError", "TxTooLargeError", "VerifyTxError", "mainnet", "nodeRpcUrlsDefault", "nodeUrlsDefault", "__toCommonJS", "mainnet", "nodeUrlsDefault", "nodeRpcUrlsDefault", "import_big", "SdkRootError", "code", "message", "SdkError", "InvalidAmountError", "AmountNotEnoughError", "InsufficientPoolLiquidityError", "JupiterError", "InvalidGasFeePaymentOptionError", "InvalidMessengerOptionError", "MethodNotSupportedError", "VerifyTxError", "InvalidTxError", "ExtraGasMaxLimitExceededError", "ArgumentInvalidDecimalsError", "argName", "decimalsIs", "decimalsRequired", "TimeoutError", "NodeRpcUrlNotInitializedError", "chainSymbol", "CCTPDoesNotSupportedError", "TxTooLargeError", "ErrorCode", "ChainSymbol", "ChainType", "chainDecimalsByType", "defaultProperties", "Chains", "chainProperties", "additionalProperties", "chainSymbol", "property", "SdkError", "chainType", "import_axios", "VERSION", "import_big", "import_bn", "getFeePercent", "input", "output", "toSystemPrecision", "amount", "decimals", "convertAmountPrecision", "fromSystemPrecision", "decimalsFrom", "decimalsTo", "dif", "toPowBase10", "convertFloatAmountToInt", "amountFloat", "convertIntAmountToFloat", "amountInt", "amountValue", "calculatePoolInfoImbalance", "poolInfo", "swapToVUsd", "feeShare", "fee", "amountWithoutFee", "inSystemPrecision", "tokenBalance", "vUsdNewAmount", "getY", "swapFromVUsd", "vUsdBalance", "newAmount", "result", "getSwapFromVUsdPoolInfo", "vUsdAmount", "swapToVUsdReverse", "InsufficientPoolLiquidityError", "reversedFeeShare", "swapFromVUsdReverse", "amountWithFee", "x", "d", "commonPartBig", "dCubed", "commonPartSquared", "sqrtBig", "dividerBig", "getEarned", "userLpAmount", "userRewardDebt", "accRewardPerShareP", "p", "userLpAmountBN", "BN", "accRewardPerSharePBN", "userRewardDebtBN", "aprInPercents", "apr", "getD", "aValue", "y", "xy", "xPlusY", "a", "b", "aSquared", "bCubed", "a2b3", "c", "cbrtAPlusC", "cbrtAMinusC", "AddressStatus", "Messenger", "mapChainDetailsResponseToChainDetailsMap", "response", "map", "entry", "chainSymbol", "chainDetailsDTO", "chainDetails", "mapChainDetailsFromDto", "mapChainDetailsResponseToPoolInfoMap", "poolInfoMap", "chainSymbolValue", "token", "poolKey", "mapPoolKeyObjectToPoolKey", "imbalance", "calculatePoolInfoImbalance", "mapTokenWithChainDetailsFromDto", "dto", "chainName", "chainDetailsWithoutName", "_poolInfo", "dtoWithoutPoolInfo", "mapMessengerKeyDtoToMessenger", "mapTransferTimeFromDto", "result", "key", "value", "mapMessengerTransferTimeFromDto", "messengerTransferTime", "messenger", "basicChainProperties", "Chains", "tokenDto", "mapPoolKeyObjectToPoolKey", "poolKeyObject", "mapChainDetailsMapToPoolKeyObjects", "chainDetailsMap", "result", "chainSymbolValue", "chainDetails", "chainSymbol", "token", "mapPoolInfoResponseToPoolInfoMap", "responseBody", "poolInfoMap", "poolInfoByAddress", "poolAddress", "poolInfo", "calculatePoolInfoImbalance", "ApiClientImpl", "params", "axios", "VERSION", "data", "mapChainDetailsResponseToChainDetailsMap", "mapChainDetailsResponseToPoolInfoMap", "chainSymbol", "address", "txId", "args", "pools", "poolKeys", "mapPoolInfoResponseToPoolInfoMap", "has", "obj", "key", "prefix", "serialize", "Cache", "options", "value", "ttl", "callback", "key_", "v", "handle", "entry", "cache_default", "_20_SECONDS_TTL", "_55_SECONDS_TTL", "ApiClientCaching", "apiClient", "cache_default", "TOKEN_INFO_CACHE_KEY", "tokenInfo", "tokenInfoPromise", "chainSymbol", "address", "GAS_BALANCE_CACHE_KEY", "gasBalance", "gasBalancePromise", "PENDING_INFO_CACHE_KEY", "pendingInfo", "pendingInfoPromise", "args", "RECEIVE_TX_COST_KEY", "transactionCost", "fetchedTransactionCost", "txId", "pools", "AllbridgeCoreClientImpl", "apiClient", "map", "chainDetails", "chainSymbol", "address", "txId", "args", "pools", "AllbridgeCoreClientFilteredImpl", "client", "params", "type", "chainDetailsMapWithFlags", "result", "key", "chainDetailsWithTokensWithFlag", "filterAndConvertToTokenWithChainDetails", "chainSymbol", "address", "txId", "args", "poolKeyObject", "poolInfo", "poolKeyObjects", "tokens", "isStaging", "token", "convertToTokenWithChainDetails", "flags", "rest", "_55_SECONDS_TTL", "AllbridgeCoreClientPoolInfoCaching", "client", "PoolInfoCache", "chainSymbol", "txId", "args", "address", "poolKeyObject", "poolInfo", "poolInfoMap", "result", "mapPoolKeyObjectToPoolKey", "SdkError", "poolKeyObjects", "mapChainDetailsMapToPoolKeyObjects", "cache_default", "key", "value", "import_tronweb", "import_web3", "import_big", "getPoolInfoByToken", "api", "sourceChainToken", "validateAmountGtZero", "amount", "InvalidAmountError", "validateAmountDecimals", "argName", "amountFloat", "decimalRequired", "integerPart", "fractionalPart", "ArgumentInvalidDecimalsError", "promiseWithTimeout", "promise", "msg", "timeoutMs", "resolve", "reject", "TimeoutError", "promiseWithTimeoutAndRetries", "toTry", "maxRetries", "attemptCount", "withExponentialBackoff", "fn", "keepWaitingIf", "secondsToWait", "exponentialFactor", "verbose", "attempts", "count", "initialAttempt", "waitUntil", "waitTime", "totalWaitTime", "lastAttempt", "res", "nextAttempt", "anchor", "import_web3", "import_big", "Bridge_default", "CctpBridge_default", "anchor", "import_web3", "getAssociatedAccount", "publicKey", "mintAccount", "getConfigAccount", "programId", "configPda", "getLockAccount", "nonce", "bridgeProgramId", "lockPda", "getPriceAccount", "chainId", "gasOracleProgramId", "pricePda", "getAuthorityAccount", "configAccount", "poolAuthority", "getCctpAuthorityAccount", "cctpBridgeAccount", "cctpBridgeProgramId", "getBridgeTokenAccount", "poolPda", "getOtherChainTokenAccount", "token", "otherChainTokenPda", "getChainBridgeAccount", "chainBridgePda", "getGasUsageAccount", "messengerProgramId", "getSendMessageAccount", "messageWithSigner", "sentMessagePda", "getUserDepositAccount", "userPublicKey", "tokenMintAccount", "userDepositPda", "getCctpBridgeAccount", "getCctpBridgeTokenAccount", "getCctpLockAccount", "messageSentEventDataAccount", "tokenMessengerEventAuthority", "getCctpAccounts", "domain", "cctpTransmitterProgramId", "cctpTokenMessengerMinter", "messageTransmitterAccount", "findProgramAddress", "tokenMessenger", "tokenMinter", "localToken", "remoteTokenMessengerKey", "authorityPda", "label", "extraSeeds", "seeds", "extraSeed", "import_anchor", "import_web3", "buildAnchorProvider", "solanaRpcUrl", "accountAddress", "connection", "publicKey", "ChainBridgeService", "import_web3", "import_stellar_sdk", "import_big", "import_randombytes", "TronWebLib", "formatAddress", "address", "from", "to", "buffer", "evmAddressToBuffer32", "tronAddressToBuffer32", "hexToBuffer", "hex", "buff", "ethAddress", "tronAddressToEthAddress", "bufferToSize", "size", "result", "getNonce", "randomBytes", "getNonceBigInt", "bigint", "prepareTxSwapParams", "bridgeChainType", "params", "txSwapParams", "sourceToken", "convertFloatAmountToInt", "formatAddress", "prepareTxSendParams", "api", "txSendParams", "toChainType", "Chains", "CCTPDoesNotSupportedError", "fee", "feeFormat", "gasFeeOption", "getGasFeeOptions", "InvalidGasFeePaymentOptionError", "extraGas", "extraGasFormat", "validateExtraGasNotExceeded", "validateAmountEnough", "amountInt", "decimals", "feeInt", "extraGasInt", "amountTotal", "AmountNotEnoughError", "convertIntAmountToFloat", "sourceAllbridgeChainId", "sourceChainType", "destinationAllbridgeChainId", "sourceChainTokenDecimals", "messenger", "transactionCostResponse", "gasFeeOptions", "gasFeeIntWithStables", "convertAmountPrecision", "gasFeePaymentMethod", "destinationToken", "extraGasMaxLimit", "getExtraGasMaxLimits", "extraGasMaxIntLimit", "ExtraGasMaxLimitExceededError", "sourceChainToken", "destinationChainToken", "extraGasMaxLimits", "maxAmount", "maxAmountFloat", "maxAmountFloatInSourceNative", "maxAmountInSourceNative", "maxAmountFloatInStable", "isSendParams", "EvmBridgeService", "ChainBridgeService", "web3", "api", "nodeRpcUrlsConfig", "params", "rawTransaction", "txSwapParams", "prepareTxSwapParams", "amount", "contractAddress", "fromAccountAddress", "fromTokenAddress", "toAccountAddress", "toTokenAddress", "minimumReceiveAmount", "swapMethod", "txSendParams", "prepareTxSendParams", "toChainId", "messenger", "fee", "gasFeePaymentMethod", "extraGas", "nonce", "getNonce", "sendMethod", "value", "totalFee", "cctp", "bridgeContract", "cctpBridgeContract", "CctpBridge_default", "recipientWalletAddress", "receiverAccount", "receiveMint", "receiveUserToken", "getAssociatedAccount", "provider", "buildAnchorProvider", "accountData", "formatAddress", "tokenAccounts", "firstTokenAccount", "SdkError", "estimateGas", "feeOptions", "transactionHash", "abiItem", "Bridge_default", "DefaultRawBridgeTransactionBuilder", "api", "nodeRpcUrlsConfig", "params", "tokenService", "b", "provider", "approveData", "spender", "getSpender", "validateAmountGtZero", "validateAmountDecimals", "isSendParams", "getChainBridgeService", "import_anchor", "import_web3", "import_big", "IDL", "IDL", "import_anchor", "import_big", "import_web3", "getTokenAccountData", "account", "provider", "getVUsdAmount", "amount", "bridge", "poolAccount", "poolAccountInfo", "decimals", "feeShare", "Big", "poolInfo", "swapToVUsd", "getMessage", "args", "recipient", "sourceChainId", "destinationsChainId", "receiveToken", "nonce", "messenger", "chainBridge", "message", "Web3", "SdkError", "hash", "hashBuffer", "messageWithSigner", "InvalidTxError", "hashWithSigner", "hashWithSignerBuffer", "import_web3", "import_big", "import_web3", "fetchAddressLookupTableAccountsFromTx", "transaction", "connection", "lookup", "res", "SdkError", "SolanaAutoTxFee", "addUnitLimitAndUnitPriceToTx", "transaction", "txFeeParams", "solanaRpcUrl", "connection", "simUnitsConsumed", "addUnitLimitAndUnitPriceToInstructions", "addUnitLimitAndUnitPriceToVersionedTx", "addressLookupTableAccounts", "fetchAddressLookupTableAccountsFromTx", "message", "TxTooLargeError", "instructions", "units", "updateUnitLimit", "solanaTxFee", "SolanaAutoTxFee", "updateUnitPrice", "pricePerUnitInMicroLamports", "toPowBase10", "computeUnitLimitIndex", "instruction", "computeUnitLimitInstruction", "computeUnitPriceIndex", "unitPrice", "getAveragePrioritizationFee", "computeUnitPriceInstruction", "prioritizationFees", "sum", "prioritizationFee", "import_spl_token", "import_web3", "import_axios", "JupiterService", "solanaRpcUrl", "jupiterUrl", "userAddress", "stableTokenAddress", "amount", "exactOut", "quoteResponse", "swapMode", "axios", "err", "JupiterError", "inAmount", "transactionResponse", "swapTransaction", "swapTransactionBuf", "tx", "transaction", "sdkTx", "addressLookupTableAccounts", "fetchAddressLookupTableAccountsFromTx", "sdkAddressLookupTableAccounts", "message", "sdkMessage", "signature", "SdkError", "e", "COMPUTE_UNIT_LIMIT", "JUP_ADD_INDEX", "SolanaBridgeService", "ChainBridgeService", "solanaRpcUrl", "params", "api", "JupiterService", "txSwapParams", "prepareTxSwapParams", "poolAddress", "toPoolAddress", "txFeeParams", "fromAccountAddress", "amount", "contractAddress", "fromTokenAddress", "toTokenAddress", "toAccountAddress", "minimumReceiveAmount", "account", "bridgeAddress", "tokenAddress", "receiveTokenAddress", "receivePoolAddress", "receiverOriginal", "userAccount", "provider", "buildAnchorProvider", "bridge", "IDL", "bridgeAuthority", "getAuthorityAccount", "configAccount", "getConfigAccount", "sendMint", "sendBridgeToken", "getBridgeTokenAccount", "sendPool", "sendUserToken", "getAssociatedAccount", "receiverAccount", "receiveMint", "receiveBridgeToken", "receivePool", "receiveUserToken", "preInstructions", "getTokenAccountData", "createReceiveUserTokenInstruction", "transaction", "connection", "addUnitLimitAndUnitPriceToTx", "txSendParams", "prepareTxSendParams", "solTxSendParams", "isJupiterForStableCoin", "jupTx", "tx", "solTxSendUpdatedParams", "e", "SdkRootError", "JupiterError", "swapAndBridgeTx", "requiredMessageSigner", "swapAndBridgeSolData", "messageAccount", "messageSentEventDataKeypair", "addUnitLimitAndUnitPriceToVersionedTx", "exactOut", "fee", "extraGas", "gasFeePaymentMethod", "amountToProcess", "amountIn", "newAmount", "AmountNotEnoughError", "convertIntAmountToFloat", "tokenDecimals", "sourceNativeTokenPrice", "Chains", "fromChainId", "toChainId", "destinationChainId", "receiverInBuffer32", "sourceChainId", "nonce", "getNonce", "poolAccount", "vUsdAmount", "getVUsdAmount", "lockAccount", "getLockAccount", "userToken", "bridgeTokenAccount", "chainBridgeAccount", "getChainBridgeAccount", "otherBridgeTokenAccount", "getOtherChainTokenAccount", "configAccountInfo", "priceAccount", "getPriceAccount", "thisGasPriceAccount", "message", "getMessage", "swapAndBridgeData", "vusdAmount", "recipient", "receiveToken", "mint", "config", "gasPrice", "thisGasPrice", "extraGasInstruction", "allbridgeMessengerProgramId", "messengerGasUsageAccount", "getGasUsageAccount", "messengerConfig", "sentMessageAccount", "getSendMessageAccount", "instructions", "allbridgeTableAccount", "res", "SdkError", "messageV0", "wormholeProgramId", "whBridgeAccount", "whFeeCollectorAccount", "whSequenceAccount", "wormholeMessengerConfigAccount", "bridgeAccountInfo", "feeLamports", "feeInstruction", "accounts", "cctpAddress", "CCTPDoesNotSupportedError", "CHAIN_ID", "cctpBridge", "cctpBridgeAccount", "getCctpBridgeAccount", "getCctpAuthorityAccount", "getCctpBridgeTokenAccount", "destinationChainSymbol", "domain", "cctpTransmitterProgramIdAddress", "cctpTokenMessengerMinterAddress", "cctpTransmitterProgramId", "cctpTokenMessengerMinter", "messageTransmitterAccount", "tokenMessenger", "tokenMessengerEventAuthority", "tokenMinter", "localToken", "remoteTokenMessengerKey", "authorityPda", "getCctpAccounts", "getCctpLockAccount", "MethodNotSupportedError", "import_stellar_sdk", "import_big", "import_stellar_sdk", "ContractSpec", "ContractClient", "BridgeContract", "ContractClient", "options", "ContractSpec", "SrbBridgeService", "ChainBridgeService", "nodeRpcUrlsConfig", "params", "api", "txSendParams", "prepareTxSendParams", "amount", "contractAddress", "fromAccountAddress", "fromTokenAddress", "toChainId", "toAccountAddress", "toTokenAddress", "fee", "gasFeePaymentMethod", "extraGas", "totalFee", "contract", "BridgeContract", "tx", "getNonceBigInt", "txSwapParams", "prepareTxSwapParams", "minimumReceiveAmount", "MethodNotSupportedError", "address", "sender", "config", "import_big", "import_bn", "amountToHex", "amount", "BN", "sleep", "ms", "resolve", "promisify", "func", "args", "reject", "err", "result", "sendRawTransaction", "tronWeb", "rawTransaction", "signedTx", "InvalidTxError", "transactionHash", "verifyTx", "txId", "timeout", "start", "VerifyTxError", "result", "sleep", "TronBridgeService", "ChainBridgeService", "tronWeb", "api", "params", "txSendParams", "prepareTxSendParams", "rawTransaction", "sendRawTransaction", "txSwapParams", "prepareTxSwapParams", "amount", "contractAddress", "fromAccountAddress", "fromTokenAddress", "toAccountAddress", "toTokenAddress", "minimumReceiveAmount", "parameters", "toChainId", "messenger", "fee", "gasFeePaymentMethod", "extraGas", "totalFee", "nonce", "getNonce", "value", "methodSignature", "fromAddress", "transactionObject", "SdkError", "DefaultBridgeService", "api", "nodeRpcUrlsConfig", "params", "tokenService", "DefaultRawBridgeTransactionBuilder", "b", "provider", "spender", "getSpender", "approveData", "validateAmountGtZero", "validateAmountDecimals", "getChainBridgeService", "token", "messenger", "CCTPDoesNotSupportedError", "chainSymbol", "Chains", "EvmBridgeService", "nodeRpcUrl", "Web3", "TronBridgeService", "TronWeb", "SolanaBridgeService", "SrbBridgeService", "import_big", "import_tronweb", "import_web3", "import_big", "depositAmountToVUsd", "amount", "aValue", "dValue", "tokenBalance", "vUsdBalance", "amountSP", "convertFloatAmountToInt", "amountSPBig", "oldD", "oldBalance", "newTokenBalance", "newVUsdBalance", "halfAmount", "getD", "vUsdToWithdrawalAmount", "lpAmount", "lpAmountSP", "Pool_default", "UserBalance", "userInfo", "convertIntAmountToFloat", "poolInfo", "decimals", "earned", "getEarned", "ChainPoolService", "EvmPoolService", "ChainPoolService", "web3", "api", "accountAddress", "token", "userBalanceInfo", "promiseWithTimeout", "promiseWithTimeoutAndRetries", "batch", "contract", "Pool_default", "arr", "methodName", "promisify", "cb", "rewardDebt", "lpAmount", "UserBalance", "poolInfo", "aValue", "dValue", "tokenBalance", "vUsdBalance", "totalLpAmount", "accRewardPerShareP", "tokenBalanceStr", "vUsdBalanceStr", "imbalance", "calculatePoolInfoImbalance", "poolContract", "params", "abiItem", "contractAddress", "DefaultRawPoolTransactionBuilder", "api", "nodeRpcUrlsConfig", "params", "tokenService", "b", "provider", "approveData", "validateAmountGtZero", "validateAmountDecimals", "convertFloatAmountToInt", "getChainPoolService", "import_anchor", "import_web3", "SolanaPoolService", "ChainPoolService", "solanaRpcUrl", "api", "accountAddress", "token", "provider", "bridge", "poolAccount", "poolAccountInfo", "userDepositAccount", "getUserDepositAccount", "lpAmount", "rewardDebt", "UserBalance", "pool", "vUsdBalance", "tokenBalance", "imbalance", "calculatePoolInfoImbalance", "params", "accounts", "preInstructions", "tx", "addUnitLimitAndUnitPriceToTx", "bridgeAddress", "IDL", "connection", "publicKey", "poolAddress", "account", "user", "configAccount", "getConfigAccount", "bridgeAuthority", "getAuthorityAccount", "tokenMintAccount", "userToken", "getAssociatedAccount", "bridgeTokenAccount", "getBridgeTokenAccount", "getTokenAccountData", "createUserTokenInstruction", "instruction", "import_stellar_sdk", "import_stellar_sdk", "ContractSpec", "ContractClient", "PoolContract", "ContractClient", "options", "ContractSpec", "SrbPoolService", "ChainPoolService", "nodeRpcUrlsConfig", "params", "api", "accountAddress", "token", "result", "SdkError", "userDeposit", "UserBalance", "pool", "calculatePoolInfoImbalance", "address", "sender", "config", "PoolContract", "import_web3", "TronPoolService", "ChainPoolService", "tronWeb", "api", "tronJsonRpc", "Web3", "accountAddress", "token", "userBalanceInfo", "web3", "batch", "contract", "Pool_default", "tronAddressToEthAddress", "userAccount", "arr", "methodName", "promisify", "cb", "rewardDebt", "lpAmount", "UserBalance", "poolInfo", "aValue", "dValue", "tokenBalance", "vUsdBalance", "totalLpAmount", "accRewardPerShareP", "tokenBalanceStr", "vUsdBalanceStr", "imbalance", "calculatePoolInfoImbalance", "poolContract", "params", "amount", "parameter", "contractAddress", "methodSignature", "value", "fromAddress", "transactionObject", "SdkError", "DefaultLiquidityPoolService", "api", "nodeRpcUrlsConfig", "params", "tokenService", "DefaultRawPoolTransactionBuilder", "ttl", "cache_default", "b", "provider", "approveData", "amount", "token", "validateAmountGtZero", "validateAmountDecimals", "pool", "vUsdBalance", "tokenBalance", "aValue", "dValue", "vUsd", "depositAmountToVUsd", "convertIntAmountToFloat", "accountAddress", "tokenAmountInSP", "vUsdToWithdrawalAmount", "tokenAmount", "fromSystemPrecision", "earned", "commonAmount", "getChainPoolService", "poolKey", "fromCache", "poolInfo", "chainSymbol", "Chains", "EvmPoolService", "nodeRpcUrl", "Web3", "tronJsonRpc", "TronPoolService", "tronWeb", "TronWeb", "SolanaPoolService", "SrbPoolService", "import_big", "swapAndBridgeFeeCalculation", "amountInTokenPrecision", "sourcePoolInfo", "destinationPoolInfo", "swapToVUsdCalcResult", "swapToVUsd", "swapFromVUsdCalcResult", "swapFromVUsd", "swapAndBridgeFeeCalculationReverse", "swapToVUsdReverse", "swapFromVUsdReverse", "amount", "feeShare", "decimals", "poolInfo", "amountValue", "fee", "amountWithoutFee", "calcSwapToVUsd", "toSystemPrecision", "amountInSystemPrecision", "tokenBalance", "vUsdNewAmount", "getY", "vUsdBalance", "newAmount", "result", "fromSystemPrecision", "resultWithoutFee", "reversedFeeShare", "amountWithFee", "calcSwapToVUsdReverse", "inSystemPrecision", "import_big", "getSendAmountDetails", "amountInTokenPrecision", "sourceToken", "sourcePool", "destToken", "destPool", "vUsd", "swapToVUsd", "vUsdInTokenPrecision", "fromSystemPrecision", "result", "swapFromVUsd", "swapToFeeInt", "swapFromFeeInt", "convertIntAmountToFloat", "import_web3", "DefaultSolUtils", "nodeRpcUrlsConfig", "params", "transaction", "memo", "SdkError", "connection", "addressLookupTableAccounts", "fetchAddressLookupTableAccountsFromTx", "message", "lastInstruction", "import_stellar_sdk", "import_stellar_sdk", "ContractSpec", "ContractClient", "TokenContract", "ContractClient", "options", "ContractSpec", "FEE", "SEND_TRANSACTION_TIMEOUT", "DefaultSrbUtils", "nodeRpcUrlsConfig", "params", "stellarAccount", "tokenName", "TokenContract", "symbol", "srbTokenAddress", "SdkError", "asset", "StellarAsset", "changeTrust", "StellarOperation", "StellarTransactionBuilder", "sender", "tokenAddress", "nodeRpcUrl", "balance", "xdrTx", "stellar", "transaction", "sourceAccount", "server", "account", "simulation", "hash", "secondsToWait", "getTransactionResponseAll", "withExponentialBackoff", "resp", "lastResponse", "contract", "address", "config", "DefaultUtils", "nodeRpcUrlsConfig", "params", "DefaultSrbUtils", "DefaultSolUtils", "FeePaymentMethod", "AmountFormat", "import_big", "import_tronweb", "import_web3", "import_erc_20_abi", "import_big", "ChainTokenService", "params", "allowance", "MAX_AMOUNT", "USDT_TOKEN_ADDRESS", "POLYGON_GAS_LIMIT", "EvmTokenService", "ChainTokenService", "web3", "api", "params", "tokenAddress", "owner", "spender", "erc20abi", "rawTransaction", "amount", "approveMethod", "amountToHex", "chainSymbol", "transactionConfig", "feeOptions", "transactionHash", "abiItem", "contractAddress", "import_anchor", "import_web3", "SolanaTokenService", "ChainTokenService", "solanaRpcUrl", "api", "params", "MethodNotSupportedError", "accountAddress", "connection", "publicKey", "account", "token", "associatedAccount", "getAssociatedAccount", "getTokenAccountData", "e", "import_stellar_sdk", "SrbTokenService", "ChainTokenService", "nodeRpcUrlsConfig", "params", "api", "MethodNotSupportedError", "SdkError", "symbol", "srbTokenAddress", "stellar", "stellarAccount", "err", "balanceInfo", "balance", "convertFloatAmountToInt", "Chains", "nativeBalance", "ERC20_default", "MAX_AMOUNT", "TronTokenService", "ChainTokenService", "tronWeb", "api", "params", "tokenAddress", "owner", "rawTransaction", "sendRawTransaction", "spender", "amount", "amountHex", "amountToHex", "parameter", "contractAddress", "ERC20_default", "methodSignature", "parameters", "value", "fromAddress", "transactionObject", "SdkError", "DefaultTokenService", "api", "nodeRpcUrlsConfig", "params", "provider", "allowanceInt", "convertIntAmountToFloat", "validateAmountGtZero", "validateAmountDecimals", "approveData", "tokenBalance", "Chains", "chainSymbol", "ownerAddress", "EvmTokenService", "nodeRpcUrl", "Web3", "TronTokenService", "tronWeb", "TronWeb", "SolanaTokenService", "SrbTokenService", "convertFloatAmountToInt", "NodeRpcUrlsConfig", "nodeRpcUrls", "chainSymbol", "nodeRpcUrl", "NodeRpcUrlNotInitializedError", "AllbridgeCoreSdkService", "nodeRpcUrlsConfig", "params", "mainnet", "Chains", "apiClient", "ApiClientImpl", "apiClientCaching", "ApiClientCaching", "coreClient", "AllbridgeCoreClientImpl", "coreClientPoolInfoCaching", "AllbridgeCoreClientPoolInfoCaching", "AllbridgeCoreClientFilteredImpl", "DefaultTokenService", "DefaultBridgeService", "DefaultLiquidityPoolService", "type", "chainDetails", "txId", "address", "resolve", "amount", "amountFormat", "sourceToken", "destToken", "validateAmountGtZero", "amountInTokenPrecision", "validateAmountDecimals", "convertFloatAmountToInt", "vUsdAmountInt", "swapToVUsd", "getPoolInfoByToken", "destPoolInfo", "amountResultIntFormatted", "pendingInfoDTO", "pendingInfo", "tokenAddress", "info", "SdkError", "destPoolAfterPending", "getSwapFromVUsdPoolInfo", "amountResultIntAfterPendingFormatted", "estimatedAmount", "convertAmountPrecision", "convertIntAmountToFloat", "provider", "amountFloat", "sourceChainToken", "amountInt", "vUsdInSystemPrecision", "vUsdInSourcePrecision", "fromSystemPrecision", "getFeePercent", "destinationChainToken", "usd", "swapFromVUsd", "vUsdInDestinationPrecision", "amountToSendFloat", "messenger", "amountToBeReceivedFloat", "sourcePool", "destPool", "sourceProvider", "destinationProvider", "destinationPool", "amountToSend", "CCTPDoesNotSupportedError", "result", "resultInDestPrecision", "vUsd", "amountToBeReceived", "resultInSourcePrecision", "swapFromVUsdReverse", "resultInt", "swapToVUsdReverse", "InsufficientPoolLiquidityError", "getGasFeeOptions", "token", "tokens", "poolKeys", "t", "apr", "aprInPercents", "getExtraGasMaxLimits", "vUsdAmount", "amountResultInt", "swapAndBridgeFeeCalculation", "swapAndBridgeFeeCalculationReverse", "newAmount", "getSendAmountDetails", "isNodeUrlsConfig", "nodeUrls", "AllbridgeCoreSdk", "params", "mainnet", "nodeRpcUrlsConfig", "NodeRpcUrlsConfig", "AllbridgeCoreSdkService", "DefaultUtils", "type", "chainSymbol", "txId", "address", "recipientAddress", "tokenAddress", "amount", "amountFormat", "sourceToken", "destToken", "provider", "amountFloat", "sourceChainToken", "destinationChainToken", "amountToSendFloat", "messenger", "amountToBeReceivedFloat", "sourceProvider", "destinationProvider", "sourcePool", "destinationPool", "token", "tokens", "apr", "vUsdAmount", "amountInTokenPrecision"]
7
7
  }