@allbridge/bridge-core-sdk 3.27.0-alpha.20 → 3.27.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +2 -2
- package/dist/browser/index.js.map +3 -3
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +3 -3
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/bridge/sol/index.d.ts +2 -2
- package/dist/src/services/bridge/sol/index.js +19 -11
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/services/bridge/sol/jupiter.d.ts +1 -1
- package/dist/src/services/bridge/sol/jupiter.js +2 -1
- package/dist/src/services/bridge/sol/jupiter.js.map +1 -1
- package/dist/src/services/liquidity-pool/sol/index.js +6 -3
- package/dist/src/services/liquidity-pool/sol/index.js.map +1 -1
- package/dist/src/services/models/index.d.ts +14 -2
- package/dist/src/services/models/index.js.map +1 -1
- package/dist/src/services/utils/sol/compute-budget.d.ts +2 -1
- package/dist/src/services/utils/sol/compute-budget.js +36 -18
- package/dist/src/services/utils/sol/compute-budget.js.map +1 -1
- package/dist/src/services/utils/sol/index.d.ts +2 -0
- package/dist/src/services/utils/sol/index.js +12 -0
- package/dist/src/services/utils/sol/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -184,6 +184,9 @@ export declare class AllbridgeCoreSdk {
|
|
|
184
184
|
* @param sourceChainToken selected token on the source chain
|
|
185
185
|
* @param destinationChainToken selected token on the destination chain
|
|
186
186
|
* @param messenger
|
|
187
|
+
*
|
|
188
|
+
* @Deprecated Use {@link getGasFeeOptions} and separately call one of:
|
|
189
|
+
* {@link getAmountToBeReceived}, {@link getAmountToBeReceivedFromChain}, or {@link getAmountToBeReceivedFromPools}.
|
|
187
190
|
*/
|
|
188
191
|
getAmountToBeReceivedAndGasFeeOptions(amountToSendFloat: BigSource, sourceChainToken: TokenWithChainDetails, destinationChainToken: TokenWithChainDetails, messenger: Messenger): Promise<AmountsAndGasFeeOptions>;
|
|
189
192
|
/**
|
|
@@ -193,6 +196,9 @@ export declare class AllbridgeCoreSdk {
|
|
|
193
196
|
* @param sourceChainToken selected token on the source chain
|
|
194
197
|
* @param destinationChainToken selected token on the destination chain
|
|
195
198
|
* @param messenger
|
|
199
|
+
*
|
|
200
|
+
* @Deprecated Use {@link getGasFeeOptions} and separately call one of:
|
|
201
|
+
* {@link getAmountToSend}, {@link getAmountToSendFromChain}, or {@link getAmountToSendFromPools}.
|
|
196
202
|
*/
|
|
197
203
|
getAmountToSendAndGasFeeOptions(amountToBeReceivedFloat: BigSource, sourceChainToken: TokenWithChainDetails, destinationChainToken: TokenWithChainDetails, messenger: Messenger): Promise<AmountsAndGasFeeOptions>;
|
|
198
204
|
/**
|
package/dist/src/index.js
CHANGED
|
@@ -173,6 +173,9 @@ class AllbridgeCoreSdk {
|
|
|
173
173
|
* @param sourceChainToken selected token on the source chain
|
|
174
174
|
* @param destinationChainToken selected token on the destination chain
|
|
175
175
|
* @param messenger
|
|
176
|
+
*
|
|
177
|
+
* @Deprecated Use {@link getGasFeeOptions} and separately call one of:
|
|
178
|
+
* {@link getAmountToBeReceived}, {@link getAmountToBeReceivedFromChain}, or {@link getAmountToBeReceivedFromPools}.
|
|
176
179
|
*/
|
|
177
180
|
async getAmountToBeReceivedAndGasFeeOptions(amountToSendFloat, sourceChainToken, destinationChainToken, messenger) {
|
|
178
181
|
return this.service.getAmountToBeReceivedAndGasFeeOptions(amountToSendFloat, sourceChainToken, destinationChainToken, messenger);
|
|
@@ -184,6 +187,9 @@ class AllbridgeCoreSdk {
|
|
|
184
187
|
* @param sourceChainToken selected token on the source chain
|
|
185
188
|
* @param destinationChainToken selected token on the destination chain
|
|
186
189
|
* @param messenger
|
|
190
|
+
*
|
|
191
|
+
* @Deprecated Use {@link getGasFeeOptions} and separately call one of:
|
|
192
|
+
* {@link getAmountToSend}, {@link getAmountToSendFromChain}, or {@link getAmountToSendFromPools}.
|
|
187
193
|
*/
|
|
188
194
|
async getAmountToSendAndGasFeeOptions(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger) {
|
|
189
195
|
return this.service.getAmountToSendAndGasFeeOptions(amountToBeReceivedFloat, sourceChainToken, destinationChainToken, messenger);
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","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 { YieldService } from \"./services/yield\";\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 Swap Api</br>\n * Default: https://lite-api.jup.ag/swap/v1</br>\n * {@link https://dev.jup.ag/docs/swap-api/}\n */\n jupiterUrl: string;\n /**\n * Jupiter Api Key Header</br>\n * {@link https://dev.jup.ag/docs/api-setup}\n */\n jupiterApiKeyHeader?: string;\n /**\n * Jupiter v6 'maxAccounts' parameter</br>\n * Rough estimate of the max accounts to be used for the quote, so that you can compose with your own accounts</br>\n * {@link https://station.jup.ag/docs/apis/swap-api#using-maxaccounts}\n */\n jupiterMaxAccounts?: number;\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 stxIsTestnet?: boolean;\n stxHeroApiKey?: string;\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 yield: YieldService;\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.yield = this.service.yield;\n this.utils = new DefaultUtils(this.service);\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 _chainSymbol: string,\n _recipientAddress: string,\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 selected messenger\n */\n async getAmountToBeReceived(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n */\n messenger: Messenger = Messenger.ALLBRIDGE\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 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 */\n messenger: Messenger = Messenger.ALLBRIDGE,\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 selected messenger\n */\n getAmountToBeReceivedFromPools(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger: Exclude<Messenger, Messenger.OFT> = Messenger.ALLBRIDGE\n ): string {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE:\n return this.service.getAmountToBeReceivedComputeWithPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool\n );\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.service.getAmountToBeReceivedComputeCctp(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\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 selected messenger\n */\n async getAmountToSend(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n */\n messenger: Messenger = Messenger.ALLBRIDGE\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 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 */\n messenger: Messenger = Messenger.ALLBRIDGE,\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 selected messenger\n */\n getAmountToSendFromPools(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger: Exclude<Messenger, Messenger.OFT> = Messenger.ALLBRIDGE\n ): string {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE:\n return this.service.getAmountToSendComputeWithPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool\n );\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.service.getAmountToSendComputeCctp(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\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 * @param messenger selected Messenger, Allbridge by default\n * @returns {@link ExtraGasMaxLimitResponse}\n */\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger = Messenger.ALLBRIDGE\n ): Promise<ExtraGasMaxLimitResponse> {\n return this.service.getExtraGasMaxLimits(sourceChainToken, destinationChainToken, messenger);\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"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","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 { YieldService } from \"./services/yield\";\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 Swap Api</br>\n * Default: https://lite-api.jup.ag/swap/v1</br>\n * {@link https://dev.jup.ag/docs/swap-api/}\n */\n jupiterUrl: string;\n /**\n * Jupiter Api Key Header</br>\n * {@link https://dev.jup.ag/docs/api-setup}\n */\n jupiterApiKeyHeader?: string;\n /**\n * Jupiter v6 'maxAccounts' parameter</br>\n * Rough estimate of the max accounts to be used for the quote, so that you can compose with your own accounts</br>\n * {@link https://station.jup.ag/docs/apis/swap-api#using-maxaccounts}\n */\n jupiterMaxAccounts?: number;\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 stxIsTestnet?: boolean;\n stxHeroApiKey?: string;\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 yield: YieldService;\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.yield = this.service.yield;\n this.utils = new DefaultUtils(this.service);\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 _chainSymbol: string,\n _recipientAddress: string,\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 * @Deprecated Use {@link getGasFeeOptions} and separately call one of:\n * {@link getAmountToBeReceived}, {@link getAmountToBeReceivedFromChain}, or {@link getAmountToBeReceivedFromPools}.\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 * @Deprecated Use {@link getGasFeeOptions} and separately call one of:\n * {@link getAmountToSend}, {@link getAmountToSendFromChain}, or {@link getAmountToSendFromPools}.\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 selected messenger\n */\n async getAmountToBeReceived(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n */\n messenger: Messenger = Messenger.ALLBRIDGE\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 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 */\n messenger: Messenger = Messenger.ALLBRIDGE,\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 selected messenger\n */\n getAmountToBeReceivedFromPools(\n amountToSendFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger: Exclude<Messenger, Messenger.OFT> = Messenger.ALLBRIDGE\n ): string {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE:\n return this.service.getAmountToBeReceivedComputeWithPools(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool\n );\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.service.getAmountToBeReceivedComputeCctp(\n amountToSendFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\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 selected messenger\n */\n async getAmountToSend(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n /**\n * The Messengers for different routes.\n */\n messenger: Messenger = Messenger.ALLBRIDGE\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 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 */\n messenger: Messenger = Messenger.ALLBRIDGE,\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 selected messenger\n */\n getAmountToSendFromPools(\n amountToBeReceivedFloat: BigSource,\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n sourcePool: PoolInfo,\n destinationPool: PoolInfo,\n messenger: Exclude<Messenger, Messenger.OFT> = Messenger.ALLBRIDGE\n ): string {\n switch (messenger) {\n case Messenger.ALLBRIDGE:\n case Messenger.WORMHOLE:\n return this.service.getAmountToSendComputeWithPools(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n sourcePool,\n destinationPool\n );\n case Messenger.CCTP:\n case Messenger.CCTP_V2:\n return this.service.getAmountToSendComputeCctp(\n amountToBeReceivedFloat,\n sourceChainToken,\n destinationChainToken,\n messenger\n );\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 * @param messenger selected Messenger, Allbridge by default\n * @returns {@link ExtraGasMaxLimitResponse}\n */\n async getExtraGasMaxLimits(\n sourceChainToken: TokenWithChainDetails,\n destinationChainToken: TokenWithChainDetails,\n messenger: Messenger = Messenger.ALLBRIDGE\n ): Promise<ExtraGasMaxLimitResponse> {\n return this.service.getExtraGasMaxLimits(sourceChainToken, destinationChainToken, messenger);\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"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Keypair, VersionedTransaction } from "@solana/web3.js";
|
|
2
2
|
import { AllbridgeCoreClient } from "../../../client/core-api/core-client-base";
|
|
3
|
-
import { ChainType, FeePaymentMethod, SwapParams, TokenWithChainDetails } from "../../../models";
|
|
3
|
+
import { ChainType, FeePaymentMethod, SwapParams, TokenWithChainDetails, TxFeeParams } from "../../../models";
|
|
4
4
|
import { RawTransaction, TransactionResponse } from "../../models";
|
|
5
5
|
import { SwapAndBridgeSolDataCctpData } from "../../models/sol";
|
|
6
6
|
import { SendParams, TxSendParamsSol } from "../models";
|
|
@@ -53,7 +53,7 @@ export declare class SolanaBridgeService extends ChainBridgeService {
|
|
|
53
53
|
private convertToVersionedTransaction;
|
|
54
54
|
private buildSwapAndBridgeWormholeTransaction;
|
|
55
55
|
private prepareSwapAndBridgeCctpData;
|
|
56
|
-
buildSwapAndBridgeCctpTransaction(destinationChainSymbol: string, swapAndBridgeData: SwapAndBridgeSolDataCctpData): Promise<{
|
|
56
|
+
buildSwapAndBridgeCctpTransaction(destinationChainSymbol: string, swapAndBridgeData: SwapAndBridgeSolDataCctpData, txFeeParams?: TxFeeParams): Promise<{
|
|
57
57
|
transaction: VersionedTransaction;
|
|
58
58
|
messageSentEventDataKeypair: Keypair;
|
|
59
59
|
}>;
|
|
@@ -66,6 +66,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
66
66
|
units: COMPUTE_UNIT_LIMIT,
|
|
67
67
|
}),
|
|
68
68
|
];
|
|
69
|
+
const feePayer = (0, sol_1.getFeePayer)(userAccount, txFeeParams);
|
|
69
70
|
try {
|
|
70
71
|
await (0, sol_1.getTokenAccountData)(receiveUserToken, provider);
|
|
71
72
|
}
|
|
@@ -101,7 +102,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
101
102
|
.transaction();
|
|
102
103
|
const connection = provider.connection;
|
|
103
104
|
transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
|
|
104
|
-
transaction.feePayer =
|
|
105
|
+
transaction.feePayer = feePayer;
|
|
105
106
|
await (0, compute_budget_1.addUnitLimitAndUnitPriceToTx)(transaction, txFeeParams, this.solanaRpcUrl);
|
|
106
107
|
return await this.convertToVersionedTransaction(transaction, connection);
|
|
107
108
|
}
|
|
@@ -138,12 +139,12 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
138
139
|
switch (txSendParams.messenger) {
|
|
139
140
|
case core_api_model_1.Messenger.ALLBRIDGE: {
|
|
140
141
|
const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);
|
|
141
|
-
swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);
|
|
142
|
+
swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData, params.txFeeParams);
|
|
142
143
|
break;
|
|
143
144
|
}
|
|
144
145
|
case core_api_model_1.Messenger.WORMHOLE: {
|
|
145
146
|
const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);
|
|
146
|
-
const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);
|
|
147
|
+
const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData, params.txFeeParams);
|
|
147
148
|
swapAndBridgeTx = transaction;
|
|
148
149
|
requiredMessageSigner = messageAccount;
|
|
149
150
|
break;
|
|
@@ -151,7 +152,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
151
152
|
case core_api_model_1.Messenger.CCTP:
|
|
152
153
|
case core_api_model_1.Messenger.CCTP_V2: {
|
|
153
154
|
const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);
|
|
154
|
-
const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(params.destinationToken.chainSymbol, swapAndBridgeSolData);
|
|
155
|
+
const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(params.destinationToken.chainSymbol, swapAndBridgeSolData, params.txFeeParams);
|
|
155
156
|
swapAndBridgeTx = transaction;
|
|
156
157
|
requiredMessageSigner = messageSentEventDataKeypair;
|
|
157
158
|
break;
|
|
@@ -180,7 +181,8 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
180
181
|
if (!exactOut) {
|
|
181
182
|
amountToProcess = amountToProcess.mul(JUP_ADD_INDEX);
|
|
182
183
|
}
|
|
183
|
-
const
|
|
184
|
+
const feePayer = (0, sol_1.getFeePayer)(new web3_js_1.PublicKey(params.fromAccountAddress), params.txFeeParams);
|
|
185
|
+
const { tx, amountIn } = await this.jupiterService.getJupiterSwapTx(params.fromAccountAddress, params.sourceToken.tokenAddress, amountToProcess.toFixed(0), exactOut, feePayer.toString());
|
|
184
186
|
let newAmount;
|
|
185
187
|
if (exactOut) {
|
|
186
188
|
if (!amountIn) {
|
|
@@ -305,7 +307,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
305
307
|
}
|
|
306
308
|
return swapAndBridgeData;
|
|
307
309
|
}
|
|
308
|
-
async buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeData) {
|
|
310
|
+
async buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeData, txFeeParams) {
|
|
309
311
|
const { bridge, vusdAmount, nonce, recipient, receiveToken, poolAccount, lockAccount, bridgeAuthority, userToken, bridgeTokenAccount, chainBridgeAccount, otherBridgeTokenAccount, userAccount, destinationChainId, mint, config, configAccountInfo, gasPrice, thisGasPrice, message, extraGasInstruction, } = swapAndBridgeData;
|
|
310
312
|
const allbridgeMessengerProgramId = configAccountInfo.allbridgeMessengerProgramId;
|
|
311
313
|
const messengerGasUsageAccount = await (0, accounts_1.getGasUsageAccount)(destinationChainId, allbridgeMessengerProgramId);
|
|
@@ -315,6 +317,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
315
317
|
if (extraGasInstruction) {
|
|
316
318
|
instructions.push(extraGasInstruction);
|
|
317
319
|
}
|
|
320
|
+
const feePayer = (0, sol_1.getFeePayer)(userAccount, txFeeParams);
|
|
318
321
|
const transaction = await bridge.methods
|
|
319
322
|
.swapAndBridge({
|
|
320
323
|
vusdAmount,
|
|
@@ -324,6 +327,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
324
327
|
receiveToken,
|
|
325
328
|
})
|
|
326
329
|
.accounts({
|
|
330
|
+
payer: userAccount,
|
|
327
331
|
mint,
|
|
328
332
|
user: userAccount,
|
|
329
333
|
config,
|
|
@@ -350,7 +354,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
350
354
|
.transaction();
|
|
351
355
|
const connection = (0, anchor_provider_1.buildAnchorProvider)(this.solanaRpcUrl, userAccount.toString()).connection;
|
|
352
356
|
transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
|
|
353
|
-
transaction.feePayer =
|
|
357
|
+
transaction.feePayer = feePayer;
|
|
354
358
|
return await this.convertToVersionedTransaction(transaction, connection);
|
|
355
359
|
}
|
|
356
360
|
async convertToVersionedTransaction(tx, connection) {
|
|
@@ -367,7 +371,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
367
371
|
}).compileToV0Message([allbridgeTableAccount]);
|
|
368
372
|
return new anchor_1.web3.VersionedTransaction(messageV0);
|
|
369
373
|
}
|
|
370
|
-
async buildSwapAndBridgeWormholeTransaction(swapAndBridgeData) {
|
|
374
|
+
async buildSwapAndBridgeWormholeTransaction(swapAndBridgeData, txFeeParams) {
|
|
371
375
|
const { bridge, vusdAmount, nonce, recipient, receiveToken, poolAccount, lockAccount, bridgeAuthority, userToken, bridgeTokenAccount, chainBridgeAccount, otherBridgeTokenAccount, userAccount, destinationChainId, mint, config, configAccountInfo, gasPrice, thisGasPrice, message, extraGasInstruction, } = swapAndBridgeData;
|
|
372
376
|
const wormholeProgramId = this.params.wormholeMessengerProgramId;
|
|
373
377
|
const [whBridgeAccount] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("Bridge")], new web3_js_1.PublicKey(wormholeProgramId));
|
|
@@ -391,7 +395,9 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
391
395
|
if (extraGasInstruction) {
|
|
392
396
|
instructions.push(extraGasInstruction);
|
|
393
397
|
}
|
|
398
|
+
const feePayer = (0, sol_1.getFeePayer)(userAccount, txFeeParams);
|
|
394
399
|
const accounts = {
|
|
400
|
+
payer: userAccount,
|
|
395
401
|
mint,
|
|
396
402
|
user: userAccount,
|
|
397
403
|
config,
|
|
@@ -433,7 +439,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
433
439
|
.signers([messageAccount])
|
|
434
440
|
.transaction();
|
|
435
441
|
transaction.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
|
|
436
|
-
transaction.feePayer =
|
|
442
|
+
transaction.feePayer = feePayer;
|
|
437
443
|
return { transaction: await this.convertToVersionedTransaction(transaction, provider.connection), messageAccount };
|
|
438
444
|
}
|
|
439
445
|
async prepareSwapAndBridgeCctpData(txSendParams) {
|
|
@@ -474,7 +480,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
474
480
|
}
|
|
475
481
|
return swapAndBridgeData;
|
|
476
482
|
}
|
|
477
|
-
async buildSwapAndBridgeCctpTransaction(destinationChainSymbol, swapAndBridgeData) {
|
|
483
|
+
async buildSwapAndBridgeCctpTransaction(destinationChainSymbol, swapAndBridgeData, txFeeParams) {
|
|
478
484
|
const { cctpBridge, cctpBridgeAccount, amount, recipient, receiveToken, bridgeAuthority, userToken, bridgeTokenAccount, chainBridgeAccount, userAccount, destinationChainId, mint, gasPrice, thisGasPrice, extraGasInstruction, provider, } = swapAndBridgeData;
|
|
479
485
|
const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];
|
|
480
486
|
const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;
|
|
@@ -491,6 +497,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
491
497
|
}
|
|
492
498
|
const messageSentEventDataKeypair = web3_js_1.Keypair.generate();
|
|
493
499
|
const lockAccount = (0, accounts_1.getCctpLockAccount)(cctpBridge.programId, messageSentEventDataKeypair.publicKey);
|
|
500
|
+
const feePayer = (0, sol_1.getFeePayer)(userAccount, txFeeParams);
|
|
494
501
|
const tx = await cctpBridge.methods
|
|
495
502
|
.bridge({
|
|
496
503
|
amount,
|
|
@@ -502,6 +509,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
502
509
|
mint: mint,
|
|
503
510
|
user: userAccount,
|
|
504
511
|
cctpBridge: cctpBridgeAccount,
|
|
512
|
+
payer: userAccount,
|
|
505
513
|
messageSentEventData: messageSentEventDataKeypair.publicKey,
|
|
506
514
|
lock: lockAccount,
|
|
507
515
|
cctpMessenger: cctpTokenMessengerMinter,
|
|
@@ -529,7 +537,7 @@ class SolanaBridgeService extends bridge_2.ChainBridgeService {
|
|
|
529
537
|
.transaction();
|
|
530
538
|
const connection = provider.connection;
|
|
531
539
|
tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
|
|
532
|
-
tx.feePayer =
|
|
540
|
+
tx.feePayer = feePayer;
|
|
533
541
|
return { transaction: await this.convertToVersionedTransaction(tx, connection), messageSentEventDataKeypair };
|
|
534
542
|
}
|
|
535
543
|
send(params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* 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 OFTDoesNotSupportedError,\n SdkError,\n SdkRootError,\n} from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams, TokenWithChainDetails, 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, TxSendParamsSol, TxSwapParamsSol } 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 jupiterParams: JupiterParams;\n}\n\nexport interface JupiterParams {\n jupiterUrl: string;\n jupiterApiKeyHeader?: string;\n jupiterMaxAccounts?: number;\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(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {\n super();\n this.jupiterService = new JupiterService(solanaRpcUrl, params.jupiterParams);\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: TxSwapParamsSol,\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 case Messenger.CCTP_V2: {\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 case Messenger.OFT:\n throw new OFTDoesNotSupportedError(\"Messenger OFT is not supported yet.\");\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,\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: TxSendParamsSol): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n\n async convertStableCoinFeeAndExtraGasToNativeCurrency(\n sourceToken: TokenWithChainDetails,\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 sourceToken: sourceToken.tokenAddress,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - sourceToken.decimals))\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) - sourceToken.decimals))\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 swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\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 swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\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 TxSendParamsSol {\n poolAddress: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* 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 OFTDoesNotSupportedError,\n SdkError,\n SdkRootError,\n} from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams, TokenWithChainDetails, 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 { getFeePayer, 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, TxSendParamsSol, TxSwapParamsSol } 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 jupiterParams: JupiterParams;\n}\n\nexport interface JupiterParams {\n jupiterUrl: string;\n jupiterApiKeyHeader?: string;\n jupiterMaxAccounts?: number;\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(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {\n super();\n this.jupiterService = new JupiterService(solanaRpcUrl, params.jupiterParams);\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: TxSwapParamsSol,\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 const feePayer = getFeePayer(userAccount, txFeeParams);\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 = feePayer;\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, params.txFeeParams);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(\n swapAndBridgeSolData,\n params.txFeeParams\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP:\n case Messenger.CCTP_V2: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData,\n params.txFeeParams\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n case Messenger.OFT:\n throw new OFTDoesNotSupportedError(\"Messenger OFT is not supported yet.\");\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,\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 const feePayer = getFeePayer(new PublicKey(params.fromAccountAddress), params.txFeeParams);\n\n const { tx, amountIn } = await this.jupiterService.getJupiterSwapTx(\n params.fromAccountAddress,\n params.sourceToken.tokenAddress,\n amountToProcess.toFixed(0),\n exactOut,\n feePayer.toString()\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: TxSendParamsSol): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n\n async convertStableCoinFeeAndExtraGasToNativeCurrency(\n sourceToken: TokenWithChainDetails,\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 sourceToken: sourceToken.tokenAddress,\n })\n ).sourceNativeTokenPrice;\n const fee = Big(solTxSendParams.fee)\n .div(sourceNativeTokenPrice)\n .mul(Big(10).pow(Chains.getChainDecimalsByType(ChainType.SOLANA) - sourceToken.decimals))\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) - sourceToken.decimals))\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 swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\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 txFeeParams?: TxFeeParams\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 feePayer = getFeePayer(userAccount, txFeeParams);\n\n const transaction = await bridge.methods\n .swapAndBridge({\n vusdAmount,\n nonce,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n payer: userAccount,\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 = feePayer;\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 txFeeParams?: TxFeeParams\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 feePayer = getFeePayer(userAccount, txFeeParams);\n\n const accounts = {\n payer: userAccount,\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 = feePayer;\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 swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\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 txFeeParams?: TxFeeParams\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 feePayer = getFeePayer(userAccount, txFeeParams);\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 payer: userAccount,\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 = feePayer;\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 TxSendParamsSol {\n poolAddress: string;\n}\n"]}
|