@allbridge/bridge-core-sdk 3.33.0-alpha.1 → 3.33.0-alpha.3
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 +4 -4
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +4 -4
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/bridge/cctp-utils.d.ts +1 -0
- package/dist/src/services/bridge/cctp-utils.js +13 -0
- package/dist/src/services/bridge/cctp-utils.js.map +1 -0
- package/dist/src/services/bridge/evm/abr-payer.d.ts +3 -0
- package/dist/src/services/bridge/evm/abr-payer.js +11 -0
- package/dist/src/services/bridge/evm/abr-payer.js.map +1 -0
- package/dist/src/services/bridge/evm/index.js +35 -10
- package/dist/src/services/bridge/evm/index.js.map +1 -1
- package/dist/src/services/bridge/sol/bridge-tx-service.d.ts +2 -1
- package/dist/src/services/bridge/sol/bridge-tx-service.js +28 -12
- package/dist/src/services/bridge/sol/bridge-tx-service.js.map +1 -1
- package/dist/src/services/bridge/sol/index.d.ts +1 -1
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/services/bridge/sol/payer-with-token-service.js +17 -1
- package/dist/src/services/bridge/sol/payer-with-token-service.js.map +1 -1
- package/dist/src/services/bridge/srb/index.d.ts +1 -1
- package/dist/src/services/bridge/srb/index.js +33 -3
- package/dist/src/services/bridge/srb/index.js.map +1 -1
- package/dist/src/services/liquidity-pool/index.js +2 -1
- package/dist/src/services/liquidity-pool/index.js.map +1 -1
- package/dist/src/services/models/abi/CctpBridge.d.ts +40 -0
- package/dist/src/services/models/abi/CctpBridge.js +52 -0
- package/dist/src/services/models/abi/CctpBridge.js.map +1 -1
- package/dist/src/services/models/sol/types/cctp_v2_bridge.d.ts +254 -0
- package/dist/src/services/models/sol/types/cctp_v2_bridge.js.map +1 -1
- package/dist/src/services/models/sol/types/cctp_v2_bridge.json +254 -0
- package/dist/src/services/models/sol/types/payer_with_token.d.ts +6 -0
- package/dist/src/services/models/sol/types/payer_with_token.js.map +1 -1
- package/dist/src/services/models/sol/types/payer_with_token.json +6 -0
- package/dist/src/services/models/srb/cctp-bridge-contract.d.ts +451 -0
- package/dist/src/services/models/srb/cctp-bridge-contract.js +150 -0
- package/dist/src/services/models/srb/cctp-bridge-contract.js.map +1 -0
- package/dist/src/services/utils/srb/index.d.ts +1 -0
- package/dist/src/services/utils/srb/index.js +9 -0
- package/dist/src/services/utils/srb/index.js.map +1 -0
- 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 +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-tx-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/bridge-tx-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BN, Idl, Program, Provider, web3 } from \"@coral-xyz/anchor\";\nimport { createAssociatedTokenAccountInstruction, getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Keypair, PublicKey, SystemProgram, TransactionInstruction, VersionedTransaction } from \"@solana/web3.js\";\nimport { Messenger } from \"../../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { CCTPDoesNotSupportedError, OFTDoesNotSupportedError, SdkError } from \"../../../exceptions\";\nimport { CctpParams, ChainType, SwapParams, TxFeeParams } from \"../../../models\";\nimport { assertNever } from \"../../../utils/utils\";\nimport { RawTransaction } from \"../../models\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\nimport * as bridgeIdl from \"../../models/sol/types/bridge.json\";\nimport { CctpBridge as CctpBridgeType } from \"../../models/sol/types/cctp_bridge\";\nimport * as cctpBridgeIdl from \"../../models/sol/types/cctp_bridge.json\";\nimport { CctpV2Bridge as CctpV2BridgeType } from \"../../models/sol/types/cctp_v2_bridge\";\nimport * as cctpV2BridgeIdl from \"../../models/sol/types/cctp_v2_bridge.json\";\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 getCctpV2BridgeConfigAccount,\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 } from \"../../utils/sol/compute-budget\";\nimport { SendParams, TxSwapParamsSol } from \"../models\";\nimport { getNonce, prepareTxSwapParams } from \"../utils\";\nimport { convertToVersionedTransaction, SolTxSendParams } from \"./utils\";\n\ninterface SwapAndBridgeSolData {\n bridge: Program<BridgeType>;\n amount: BN;\n vusdAmount: BN;\n nonce: number[];\n recipient: number[];\n receiveToken: number[];\n poolAccount: PublicKey;\n lockAccount: PublicKey;\n bridgeAuthority: PublicKey;\n userToken: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n config: PublicKey;\n configAccountInfo: ConfigAccountInfo;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n message: Buffer;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\ninterface ConfigAccountInfo {\n allbridgeMessengerProgramId: PublicKey;\n wormholeMessengerProgramId: PublicKey;\n gasOracleProgramId: PublicKey;\n}\n\ninterface SwapAndBridgeSolDataCctpData<IDL extends Idl> {\n cctpBridge: Program<IDL>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SolanaBridgeParams {\n /** @deprecated Do not use. */\n wormholeMessengerProgramId: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n}\n\nconst COMPUTE_UNIT_LIMIT = 1_000_000;\n\nexport class BridgeTxService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {}\n\n /** @deprecated Do not use. */\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, address: 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 = 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 = 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 (ignoreError) {\n const receiveUserToken = getAssociatedTokenAddressSync(receiveMint, receiverAccount);\n const createReceiveUserTokenInstruction = createAssociatedTokenAccountInstruction(\n userAccount,\n receiveUserToken,\n receiverAccount,\n receiveMint\n );\n preInstructions.push(createReceiveUserTokenInstruction);\n }\n const transaction = await bridge.methods\n .swap(new BN(amount), new BN(minimumReceiveAmount || 0))\n .accountsPartial({\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 convertToVersionedTransaction(transaction, connection, this.params.solanaLookUpTable);\n }\n\n async buildRawTransactionSend(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair | undefined }> {\n let swapAndBridgeTx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined = undefined;\n switch (params.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n case Messenger.CCTP_V2: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpV2Data(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpV2Transaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n case Messenger.X_RESERVE:\n throw new SdkError(\"Messenger xReserve is not supported yet.\");\n case Messenger.OFT:\n throw new OFTDoesNotSupportedError(\"Messenger OFT is not supported yet.\");\n default: {\n return assertNever(params.messenger, \"Unhandled Messenger type\");\n }\n }\n return { tx: swapAndBridgeTx, requiredMessageSigner };\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, address: 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 = 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 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 .accountsPartial({\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 = userAccount;\n return await convertToVersionedTransaction(transaction, connection, this.params.solanaLookUpTable);\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 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 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 = userAccount;\n return {\n transaction: await convertToVersionedTransaction(transaction, provider.connection, this.params.solanaLookUpTable),\n messageAccount,\n };\n }\n\n private async prepareSwapAndBridgeCctpData(\n txSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeSolDataCctpData<CctpBridgeType>> {\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>(\n { ...cctpBridgeIdl, address: cctpAddress },\n provider\n );\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<CctpBridgeType>;\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 = 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<CctpBridgeType>\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 .accountsPartial({\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 = userAccount;\n return {\n transaction: await convertToVersionedTransaction(tx, connection, this.params.solanaLookUpTable),\n messageSentEventDataKeypair,\n };\n }\n\n private async prepareSwapAndBridgeCctpV2Data(\n txSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeSolDataCctpData<CctpV2BridgeType>> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpV2BridgeAddress = contractAddress;\n if (!cctpV2BridgeAddress) {\n throw new CCTPDoesNotSupportedError(\"The route does not support CCTPv2 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<CctpV2BridgeType> = new Program<CctpV2BridgeType>(\n { ...cctpV2BridgeIdl, address: cctpV2BridgeAddress },\n provider\n );\n const mint = new PublicKey(fromTokenAddress);\n const cctpBridgeConfigAccount = getCctpV2BridgeConfigAccount(mint, cctpBridge.programId);\n const userAccount = new PublicKey(account);\n\n const configAccountInfo = await cctpBridge.account.config.fetch(cctpBridgeConfigAccount);\n\n const swapAndBridgeData = {} as SwapAndBridgeSolDataCctpData<CctpV2BridgeType>;\n\n swapAndBridgeData.cctpBridge = cctpBridge;\n swapAndBridgeData.amount = new BN(amount);\n swapAndBridgeData.recipient = Array.from(receiverInBuffer32);\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.userToken = getAssociatedAccount(userAccount, mint);\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 cctpBridgeConfigAccount\n );\n }\n\n return swapAndBridgeData;\n }\n\n async buildSwapAndBridgeCctpV2Transaction(\n destinationChainSymbol: string,\n swapAndBridgeData: SwapAndBridgeSolDataCctpData<CctpV2BridgeType>\n ): Promise<{ transaction: VersionedTransaction; messageSentEventDataKeypair: Keypair }> {\n const {\n amount,\n cctpBridge: program,\n chainBridgeAccount,\n destinationChainId,\n extraGasInstruction,\n gasPrice,\n mint,\n provider,\n receiveToken,\n recipient,\n thisGasPrice,\n userAccount,\n userToken,\n } = swapAndBridgeData;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpV2TransmitterProgramId;\n const cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpV2TokenMessengerMinter;\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(\"CCTPv2 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: remoteTokenMessenger,\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\n const tx = await program.methods\n .bridge({\n amount,\n destinationChainId,\n recipient,\n receiveToken,\n })\n .accounts({\n mint: mint,\n user: userAccount,\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n tokenMessengerMinterProgram: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger: tokenMessenger,\n tokenMinter: tokenMinter,\n localToken: localToken,\n remoteTokenMessenger: remoteTokenMessenger,\n authorityPda: authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n\n gasPrice: gasPrice,\n thisGasPrice: thisGasPrice,\n chainBridge: chainBridgeAccount,\n userToken,\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 {\n transaction: await convertToVersionedTransaction(tx, connection, this.params.solanaLookUpTable),\n messageSentEventDataKeypair,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bridge-tx-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/bridge-tx-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BN, Idl, Program, Provider, web3 } from \"@coral-xyz/anchor\";\nimport { createAssociatedTokenAccountInstruction, getAssociatedTokenAddressSync } from \"@solana/spl-token\";\nimport { Keypair, PublicKey, SystemProgram, TransactionInstruction, VersionedTransaction } from \"@solana/web3.js\";\nimport { Messenger } from \"../../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { CCTPDoesNotSupportedError, OFTDoesNotSupportedError, SdkError } from \"../../../exceptions\";\nimport { CctpParams, ChainType, SwapParams, TxFeeParams } from \"../../../models\";\nimport { assertNever } from \"../../../utils/utils\";\nimport { RawTransaction } from \"../../models\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\nimport * as bridgeIdl from \"../../models/sol/types/bridge.json\";\nimport { CctpBridge as CctpBridgeType } from \"../../models/sol/types/cctp_bridge\";\nimport * as cctpBridgeIdl from \"../../models/sol/types/cctp_bridge.json\";\nimport { CctpV2Bridge as CctpV2BridgeType } from \"../../models/sol/types/cctp_v2_bridge\";\nimport * as cctpV2BridgeIdl from \"../../models/sol/types/cctp_v2_bridge.json\";\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 getCctpV2BridgeConfigAccount,\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 } from \"../../utils/sol/compute-budget\";\nimport { encodeCctpHookForStellar } from \"../cctp-utils\";\nimport { SendParams, TxSwapParamsSol } from \"../models\";\nimport { getNonce, prepareTxSwapParams } from \"../utils\";\nimport { convertToVersionedTransaction, SolTxSendParams } from \"./utils\";\n\ninterface SwapAndBridgeSolData {\n bridge: Program<BridgeType>;\n amount: BN;\n vusdAmount: BN;\n nonce: number[];\n recipient: number[];\n receiveToken: number[];\n poolAccount: PublicKey;\n lockAccount: PublicKey;\n bridgeAuthority: PublicKey;\n userToken: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n config: PublicKey;\n configAccountInfo: ConfigAccountInfo;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n message: Buffer;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\ninterface ConfigAccountInfo {\n allbridgeMessengerProgramId: PublicKey;\n wormholeMessengerProgramId: PublicKey;\n gasOracleProgramId: PublicKey;\n}\n\ninterface SwapAndBridgeSolDataCctpData<IDL extends Idl> {\n cctpBridge: Program<IDL>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n hookData?: Buffer;\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SolanaBridgeParams {\n /** @deprecated Do not use. */\n wormholeMessengerProgramId?: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n}\n\nconst COMPUTE_UNIT_LIMIT = 1_000_000;\n\nexport class BridgeTxService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {}\n\n /** @deprecated Do not use. */\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, address: 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 = 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 = 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 (ignoreError) {\n const receiveUserToken = getAssociatedTokenAddressSync(receiveMint, receiverAccount);\n const createReceiveUserTokenInstruction = createAssociatedTokenAccountInstruction(\n userAccount,\n receiveUserToken,\n receiverAccount,\n receiveMint\n );\n preInstructions.push(createReceiveUserTokenInstruction);\n }\n const transaction = await bridge.methods\n .swap(new BN(amount), new BN(minimumReceiveAmount || 0))\n .accountsPartial({\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 convertToVersionedTransaction(transaction, connection, this.params.solanaLookUpTable);\n }\n\n async buildRawTransactionSend(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair | undefined }> {\n let swapAndBridgeTx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined = undefined;\n switch (params.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n swapAndBridgeTx = await this.buildSwapAndBridgeAllbridgeTransaction(swapAndBridgeSolData);\n break;\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeData(solTxSendParams);\n const { transaction, messageAccount } = await this.buildSwapAndBridgeWormholeTransaction(swapAndBridgeSolData);\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageAccount;\n break;\n }\n case Messenger.CCTP: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n case Messenger.CCTP_V2: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpV2Data(params, solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpV2Transaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n case Messenger.X_RESERVE:\n throw new SdkError(\"Messenger xReserve is not supported yet.\");\n case Messenger.OFT:\n throw new OFTDoesNotSupportedError(\"Messenger OFT is not supported yet.\");\n default: {\n return assertNever(params.messenger, \"Unhandled Messenger type\");\n }\n }\n return { tx: swapAndBridgeTx, requiredMessageSigner };\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, address: 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 = 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 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 .accountsPartial({\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 = userAccount;\n return await convertToVersionedTransaction(transaction, connection, this.params.solanaLookUpTable);\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 extraGasInstruction,\n } = swapAndBridgeData;\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n if (!wormholeProgramId) {\n throw new SdkError(\"Do not use.\");\n }\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 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 = userAccount;\n return {\n transaction: await convertToVersionedTransaction(transaction, provider.connection, this.params.solanaLookUpTable),\n messageAccount,\n };\n }\n\n private async prepareSwapAndBridgeCctpData(\n txSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeSolDataCctpData<CctpBridgeType>> {\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>(\n { ...cctpBridgeIdl, address: cctpAddress },\n provider\n );\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<CctpBridgeType>;\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 = 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<CctpBridgeType>\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 .accountsPartial({\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 = userAccount;\n return {\n transaction: await convertToVersionedTransaction(tx, connection, this.params.solanaLookUpTable),\n messageSentEventDataKeypair,\n };\n }\n\n private async prepareSwapAndBridgeCctpV2Data(\n params: SendParams,\n txSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeSolDataCctpData<CctpV2BridgeType>> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpV2BridgeAddress = contractAddress;\n if (!cctpV2BridgeAddress) {\n throw new CCTPDoesNotSupportedError(\"The route does not support CCTPv2 protocol\");\n }\n const CHAIN_ID = 4;\n\n const account = fromAccountAddress;\n const receiveTokenAddress = toTokenAddress;\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const cctpBridge: Program<CctpV2BridgeType> = new Program<CctpV2BridgeType>(\n { ...cctpV2BridgeIdl, address: cctpV2BridgeAddress },\n provider\n );\n const mint = new PublicKey(fromTokenAddress);\n const cctpBridgeConfigAccount = getCctpV2BridgeConfigAccount(mint, cctpBridge.programId);\n const userAccount = new PublicKey(account);\n\n const configAccountInfo = await cctpBridge.account.config.fetch(cctpBridgeConfigAccount);\n let recipient;\n let hookData;\n if (params.destinationToken.chainType === ChainType.SRB) {\n const destinationCctpV2Address = params.destinationToken.cctpV2Address;\n if (!destinationCctpV2Address) {\n throw new CCTPDoesNotSupportedError(\"The route does not support CCTPv2 protocol\");\n }\n recipient = Array.from(new PublicKey(destinationCctpV2Address).toBytes());\n hookData = encodeCctpHookForStellar(params.toAccountAddress);\n } else {\n recipient = Array.from(toAccountAddress);\n hookData = undefined;\n }\n\n const swapAndBridgeData = {} as SwapAndBridgeSolDataCctpData<CctpV2BridgeType>;\n\n swapAndBridgeData.cctpBridge = cctpBridge;\n swapAndBridgeData.amount = new BN(amount);\n swapAndBridgeData.recipient = recipient;\n swapAndBridgeData.receiveToken = Array.from(receiveTokenAddress);\n swapAndBridgeData.hookData = hookData;\n swapAndBridgeData.userToken = getAssociatedAccount(userAccount, mint);\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 cctpBridgeConfigAccount\n );\n }\n\n return swapAndBridgeData;\n }\n\n async buildSwapAndBridgeCctpV2Transaction(\n destinationChainSymbol: string,\n swapAndBridgeData: SwapAndBridgeSolDataCctpData<CctpV2BridgeType>\n ): Promise<{ transaction: VersionedTransaction; messageSentEventDataKeypair: Keypair }> {\n const {\n amount,\n cctpBridge: program,\n chainBridgeAccount,\n destinationChainId,\n extraGasInstruction,\n gasPrice,\n hookData,\n mint,\n provider,\n receiveToken,\n recipient,\n thisGasPrice,\n userAccount,\n userToken,\n } = swapAndBridgeData;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n const cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpV2TransmitterProgramId;\n const cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpV2TokenMessengerMinter;\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(\"CCTPv2 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: remoteTokenMessenger,\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\n const bridgeArgs = { amount, destinationChainId, recipient, receiveToken };\n const method = hookData\n ? program.methods.bridgeWithHook({ ...bridgeArgs, hookData })\n : program.methods.bridge(bridgeArgs);\n\n const tx = await method\n .accounts({\n mint: mint,\n user: userAccount,\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n tokenMessengerMinterProgram: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger: tokenMessenger,\n tokenMinter: tokenMinter,\n localToken: localToken,\n remoteTokenMessenger: remoteTokenMessenger,\n authorityPda: authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n\n gasPrice: gasPrice,\n thisGasPrice: thisGasPrice,\n chainBridge: chainBridgeAccount,\n userToken,\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 {\n transaction: await convertToVersionedTransaction(tx, connection, this.params.solanaLookUpTable),\n messageSentEventDataKeypair,\n };\n }\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import { ChainBridgeService, SendParams } from "../models";
|
|
|
5
5
|
import { JupiterParams } from "./jupiter-service";
|
|
6
6
|
export interface SolanaBridgeParams {
|
|
7
7
|
/** @deprecated Do not use. */
|
|
8
|
-
wormholeMessengerProgramId
|
|
8
|
+
wormholeMessengerProgramId?: string;
|
|
9
9
|
solanaLookUpTable: string;
|
|
10
10
|
cctpParams: CctpParams;
|
|
11
11
|
jupiterParams: JupiterParams;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiC,MAAM,iBAAiB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAc,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gCAAgC,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAA+B,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAiB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAmB,MAAM,SAAS,CAAC;AA2BjE,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Connection, Keypair, VersionedTransaction } from \"@solana/web3.js\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport { JupiterError, MethodNotSupportedError } from \"../../../exceptions\";\nimport { ChainType, FeePaymentMethod, SwapParams } from \"../../../models\";\nimport { assertNever } from \"../../../utils/utils\";\nimport { RawTransaction, TransactionResponse } from \"../../models\";\nimport { addUnitLimitAndUnitPriceToVersionedTx } from \"../../utils/sol/compute-budget\";\nimport { ChainBridgeService, SendParams, TxSendParamsSol } from \"../models\";\nimport { prepareTxSendParams } from \"../utils\";\nimport { BridgeTxService } from \"./bridge-tx-service\";\nimport { JupiterParams, JupiterService } from \"./jupiter-service\";\nimport { PayerWithTokenService } from \"./payer-with-token-service\";\nimport { amendJupiterWithSdkTx, SolTxSendParams } from \"./utils\";\n\nexport interface SolanaBridgeParams {\n /** @deprecated Do not use. */\n wormholeMessengerProgramId?: string;\n solanaLookUpTable: string;\n cctpParams: CctpParams;\n jupiterParams: JupiterParams;\n}\n\nexport interface CctpParams {\n cctpTransmitterProgramId: string;\n cctpTokenMessengerMinter: string;\n cctpV2TransmitterProgramId: string;\n cctpV2TokenMessengerMinter: 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\nexport class SolanaBridgeService extends ChainBridgeService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n private readonly connection: Connection;\n private jupiterService: JupiterService;\n private bridgeTxService: BridgeTxService;\n private payerWithTokenService: PayerWithTokenService;\n constructor(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {\n super();\n this.connection = new Connection(solanaRpcUrl);\n this.jupiterService = new JupiterService(api, params.jupiterParams);\n this.bridgeTxService = new BridgeTxService(solanaRpcUrl, params, api);\n this.payerWithTokenService = new PayerWithTokenService(solanaRpcUrl, params, api);\n }\n\n /** @deprecated Do not use. */\n async buildRawTransactionSwap(params: SwapParams): Promise<RawTransaction> {\n return this.bridgeTxService.buildRawTransactionSwap(params);\n }\n\n async buildRawTransactionSend(params: SendParams): Promise<RawTransaction> {\n const txSendParams = await prepareTxSendParams(this.chainType, params, this.api);\n const solTxSendParams = this.addPoolAddress(params, txSendParams);\n\n const paymentType = params.gasFeePaymentMethod ?? FeePaymentMethod.WITH_NATIVE_CURRENCY;\n\n let tx: VersionedTransaction;\n let requiredMessageSigner: Keypair | undefined;\n\n switch (paymentType) {\n case FeePaymentMethod.WITH_NATIVE_CURRENCY: {\n const builtTxResult = await this.buildTxWithNativePayment(params, solTxSendParams);\n tx = builtTxResult.tx;\n requiredMessageSigner = builtTxResult.requiredMessageSigner;\n break;\n }\n case FeePaymentMethod.WITH_STABLECOIN: {\n const builtTxResult = await this.buildTxWithStablePayment(params, solTxSendParams);\n tx = builtTxResult.tx;\n requiredMessageSigner = builtTxResult.requiredMessageSigner;\n break;\n }\n case FeePaymentMethod.WITH_ABR: {\n const builtTxResult = await this.buildTxWithAbrPayment(params, solTxSendParams);\n tx = builtTxResult.tx;\n requiredMessageSigner = builtTxResult.requiredMessageSigner;\n break;\n }\n default: {\n return assertNever(paymentType, \"Unhandled FeePaymentMethod\");\n }\n }\n await addUnitLimitAndUnitPriceToVersionedTx(tx, params.txFeeParams, this.solanaRpcUrl);\n\n if (requiredMessageSigner) {\n tx.sign([requiredMessageSigner]);\n }\n return tx;\n }\n\n private async buildTxWithNativePayment(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair | undefined }> {\n return await this.bridgeTxService.buildRawTransactionSend(params, solTxSendParams);\n }\n\n private async buildTxWithStablePayment(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair | undefined }> {\n const { jupTx, solTxSendParams: updatedSolTxSendParams } = await this.jupiterService.buildJupAndUpdateTxSendParams(\n params,\n solTxSendParams\n );\n\n const { tx, requiredMessageSigner } = await this.bridgeTxService.buildRawTransactionSend(\n params,\n updatedSolTxSendParams\n );\n\n if (!jupTx) {\n throw new JupiterError(\"Swap tx is absent\");\n }\n const resultTx = await amendJupiterWithSdkTx(this.connection, jupTx, tx);\n return { tx: resultTx, requiredMessageSigner: requiredMessageSigner };\n }\n\n private async buildTxWithAbrPayment(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner?: Keypair }> {\n return this.payerWithTokenService.buildRawTransactionSend(params, solTxSendParams);\n }\n\n send(_params: SendParams): Promise<TransactionResponse> {\n throw new MethodNotSupportedError();\n }\n\n private addPoolAddress(params: SendParams, txSendParams: TxSendParamsSol): SolTxSendParams {\n return {\n ...txSendParams,\n poolAddress: params.sourceToken.poolAddress,\n };\n }\n}\n"]}
|
|
@@ -9,6 +9,8 @@ import * as payerWithTokenIdl from "../../models/sol/types/payer_with_token.json
|
|
|
9
9
|
import { getMessage, getVUsdAmount } from "../../utils/sol";
|
|
10
10
|
import { getAssociatedAccount, getAuthorityAccount, getBridgeTokenAccount, getCctpAccounts, getCctpAuthorityAccount, getCctpBridgeAccount, getCctpLockAccount, getCctpV2BridgeConfigAccount, getChainBridgeAccount, getConfigAccount, getGasUsageAccount, getLockAccount, getOtherChainTokenAccount, getPriceAccount, getSendMessageAccount, } from "../../utils/sol/accounts";
|
|
11
11
|
import { buildAnchorProvider } from "../../utils/sol/anchor-provider";
|
|
12
|
+
import { decodeStellarContractId } from "../../utils/srb";
|
|
13
|
+
import { encodeCctpHookForStellar } from "../cctp-utils";
|
|
12
14
|
import { getNonce } from "../utils";
|
|
13
15
|
import { convertToVersionedTransaction } from "./utils";
|
|
14
16
|
const COMPUTE_UNIT_LIMIT = 1_000_000;
|
|
@@ -190,6 +192,9 @@ export class PayerWithTokenService {
|
|
|
190
192
|
const wormholeMessengerConfigAccount = await getConfigAccount(wormholeMessengerAccount);
|
|
191
193
|
const messengerGasUsageAccount = await getGasUsageAccount(toChainId, wormholeMessengerAccount);
|
|
192
194
|
const wormholeProgramId = this.params.wormholeMessengerProgramId;
|
|
195
|
+
if (!wormholeProgramId) {
|
|
196
|
+
throw new SdkError("Do not use.");
|
|
197
|
+
}
|
|
193
198
|
const { wormholeBridgeAccount, wormholeSequenceAccount, wormholeFeeCollectorAccount } = this.getWormholeProgramAddresses(wormholeProgramId, bridgeAuthorityAccount);
|
|
194
199
|
const messageAccount = Keypair.generate();
|
|
195
200
|
const feeInstruction = await this.getWormholeFeeInstruction(provider, wormholeBridgeAccount, userAccount, wormholeFeeCollectorAccount);
|
|
@@ -213,6 +218,7 @@ export class PayerWithTokenService {
|
|
|
213
218
|
const destinationChainSymbol = params.destinationToken.chainSymbol;
|
|
214
219
|
const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];
|
|
215
220
|
let cctpVersion;
|
|
221
|
+
let hookData;
|
|
216
222
|
let cctpAddress;
|
|
217
223
|
let cctpTransmitterProgramIdAddress;
|
|
218
224
|
let cctpTokenMessengerMinterAddress;
|
|
@@ -227,6 +233,14 @@ export class PayerWithTokenService {
|
|
|
227
233
|
cctpAddress = params.sourceToken.cctpV2Address;
|
|
228
234
|
cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpV2TransmitterProgramId;
|
|
229
235
|
cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpV2TokenMessengerMinter;
|
|
236
|
+
if (params.destinationToken.chainType === ChainType.SRB) {
|
|
237
|
+
const destinationCctpV2Address = params.destinationToken.cctpV2Address;
|
|
238
|
+
if (!destinationCctpV2Address) {
|
|
239
|
+
throw new CCTPDoesNotSupportedError("Such route does not support CCTP V2 protocol");
|
|
240
|
+
}
|
|
241
|
+
baseData.recipient = Array.from(decodeStellarContractId(destinationCctpV2Address));
|
|
242
|
+
hookData = encodeCctpHookForStellar(params.toAccountAddress);
|
|
243
|
+
}
|
|
230
244
|
}
|
|
231
245
|
if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {
|
|
232
246
|
throw new SdkError(`CCTP ${cctpVersion} is not configured`);
|
|
@@ -251,6 +265,7 @@ export class PayerWithTokenService {
|
|
|
251
265
|
lockAccount,
|
|
252
266
|
messageSentEventDataKeypair,
|
|
253
267
|
amount: new BN(amount),
|
|
268
|
+
hookData,
|
|
254
269
|
chainBridgeAccount,
|
|
255
270
|
cctpBridgeProgramId,
|
|
256
271
|
cctpBridgeAuthorityAccount,
|
|
@@ -391,7 +406,7 @@ export class PayerWithTokenService {
|
|
|
391
406
|
};
|
|
392
407
|
}
|
|
393
408
|
async buildBridgeCctpV2Tx(bridgeCctpData) {
|
|
394
|
-
const { provider, payerProgram, amount, recipient, recipientToken, userAccount, recipientChain, maxFeeAmount, extraGasAmountInFeeToken, lockAccount, mintAccount, feeTokenMintAccount, userTokenAccount, userFeeTokenAccount, gasPriceAccount, thisGasPriceAccount, chainBridgeAccount, cctpBridgeProgramId, cctpBridgeAuthorityAccount, cctpBridgeConfigAccount, cctpBridgeTokenAccount, cctpTokenMessengerMinter, cctpTransmitterProgramId, messageTransmitterAccount, tokenMessenger, tokenMessengerEventAuthority, tokenMinter, localToken, remoteTokenMessengerKey, authorityPda, messageSentEventDataKeypair, } = bridgeCctpData;
|
|
409
|
+
const { provider, payerProgram, amount, recipient, recipientToken, hookData, userAccount, recipientChain, maxFeeAmount, extraGasAmountInFeeToken, lockAccount, mintAccount, feeTokenMintAccount, userTokenAccount, userFeeTokenAccount, gasPriceAccount, thisGasPriceAccount, chainBridgeAccount, cctpBridgeProgramId, cctpBridgeAuthorityAccount, cctpBridgeConfigAccount, cctpBridgeTokenAccount, cctpTokenMessengerMinter, cctpTransmitterProgramId, messageTransmitterAccount, tokenMessenger, tokenMessengerEventAuthority, tokenMinter, localToken, remoteTokenMessengerKey, authorityPda, messageSentEventDataKeypair, } = bridgeCctpData;
|
|
395
410
|
const transaction = await payerProgram.methods
|
|
396
411
|
.bridgeCctpV2({
|
|
397
412
|
amount,
|
|
@@ -400,6 +415,7 @@ export class PayerWithTokenService {
|
|
|
400
415
|
destinationChainId: recipientChain,
|
|
401
416
|
maxFeeAmount,
|
|
402
417
|
extraGasAmountInFeeToken,
|
|
418
|
+
hookData: hookData ?? null,
|
|
403
419
|
})
|
|
404
420
|
.accounts({
|
|
405
421
|
mint: mintAccount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payer-with-token-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/payer-with-token-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BN, Program, Provider, web3 } from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram, TransactionInstruction, VersionedTransaction } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { Messenger } from \"../../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n CCTPDoesNotSupportedError,\n InvalidGasFeePaymentOptionError,\n OFTDoesNotSupportedError,\n SdkError,\n} from \"../../../exceptions\";\nimport { assertNever } from \"../../../utils/utils\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\nimport * as bridgeIdl from \"../../models/sol/types/bridge.json\";\nimport { PayerWithToken as PayerWithTokenType } from \"../../models/sol/types/payer_with_token\";\nimport * as payerWithTokenIdl from \"../../models/sol/types/payer_with_token.json\";\nimport { getMessage, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpLockAccount,\n getCctpV2BridgeConfigAccount,\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 { SendParams } from \"../models\";\nimport { getNonce } from \"../utils\";\nimport { SolanaBridgeParams } from \"./bridge-tx-service\";\nimport { convertToVersionedTransaction, SolTxSendParams } from \"./utils\";\n\ntype BridgeConfigInfo = Awaited<ReturnType<Program<BridgeType>[\"account\"][\"config\"][\"fetch\"]>>;\n\ninterface SwapAndBridgeBaseData {\n provider: Provider;\n payerProgram: Program<PayerWithTokenType>;\n bridgeProgram: Program<BridgeType>;\n userAccount: PublicKey;\n\n recipient: number[];\n recipientChain: number;\n recipientToken: number[];\n maxFeeAmount: BN;\n extraGasAmountInFeeToken: BN;\n\n mintAccount: PublicKey;\n feeTokenMintAccount: PublicKey;\n userTokenAccount: PublicKey;\n userFeeTokenAccount: PublicKey;\n gasPriceAccount: PublicKey;\n thisGasPriceAccount: PublicKey;\n\n poolAccount: PublicKey;\n bridgeConfigAccount: PublicKey;\n bridgeConfigInfo: BridgeConfigInfo;\n}\n\ninterface SwapAndBridgeCommonData extends SwapAndBridgeBaseData {\n vusdAmount: BN;\n nonce: number[];\n lockAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n bridgeProgramId: PublicKey;\n bridgeAuthorityAccount: PublicKey;\n bridgeTokenAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n}\n\ninterface SwapAndBridgeAllbridgeData extends SwapAndBridgeCommonData {\n sentMessageAccount: PublicKey;\n messengerProgramId: PublicKey;\n messengerConfigAccount: PublicKey;\n messengerGasUsageAccount: PublicKey;\n}\n\ninterface SwapAndBridgeWormholeData extends SwapAndBridgeCommonData {\n wormholeMessengerAccount: PublicKey;\n wormholeMessengerConfigAccount: PublicKey;\n wormholeProgramId: string;\n sequenceAccount: PublicKey;\n feeCollectorAccount: PublicKey;\n messengerGasUsageAccount: PublicKey;\n wormholeBridgeAccount: PublicKey;\n\n messageAccount: Keypair;\n feeInstruction: TransactionInstruction;\n}\n\ninterface BridgeCctpData extends SwapAndBridgeBaseData {\n amount: BN;\n lockAccount: PublicKey;\n\n chainBridgeAccount: PublicKey;\n cctpBridgeProgramId: PublicKey;\n cctpBridgeAuthorityAccount: PublicKey;\n cctpBridgeTokenAccount: PublicKey;\n cctpBridgeConfigAccount: PublicKey;\n cctpTokenMessengerMinter: PublicKey;\n cctpTransmitterProgramId: PublicKey;\n messageTransmitterAccount: PublicKey;\n tokenMessenger: PublicKey;\n tokenMessengerEventAuthority: PublicKey;\n tokenMinter: PublicKey;\n localToken: PublicKey;\n remoteTokenMessengerKey: PublicKey;\n authorityPda: PublicKey;\n\n messageSentEventDataKeypair: Keypair;\n}\n\nconst COMPUTE_UNIT_LIMIT = 1_000_000;\n\nexport class PayerWithTokenService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {}\n\n async buildRawTransactionSend(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner?: Keypair }> {\n switch (params.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeData = await this.prepareSwapAndBridgeAllbridgeData(params, solTxSendParams);\n const tx = await this.buildSwapAndBridgeTx(swapAndBridgeData);\n return { tx };\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeData = await this.prepareSwapAndBridgeWormholeData(params, solTxSendParams);\n return await this.buildSwapAndBridgeWormholeTx(swapAndBridgeData);\n }\n case Messenger.CCTP: {\n const bridgeCctpData = await this.prepareBridgeCctpData(params, solTxSendParams);\n return this.buildBridgeCctpTx(bridgeCctpData);\n }\n case Messenger.CCTP_V2: {\n const bridgeCctpData = await this.prepareBridgeCctpData(params, solTxSendParams);\n return this.buildBridgeCctpV2Tx(bridgeCctpData);\n }\n case Messenger.X_RESERVE:\n throw new SdkError(\"Messenger xReserve is not supported yet.\");\n case Messenger.OFT:\n throw new OFTDoesNotSupportedError(\"Messenger OFT is not supported yet.\");\n default: {\n return assertNever(params.messenger, \"Unhandled Messenger type\");\n }\n }\n }\n\n private async prepareSwapAndBridgeBaseData(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeBaseData> {\n const {\n fromChainId,\n fromAccountAddress,\n fromTokenAddress,\n poolAddress,\n toAccountAddress,\n toTokenAddress,\n toChainId,\n fee,\n extraGas = \"0\",\n } = solTxSendParams;\n\n const userAccount = new PublicKey(fromAccountAddress);\n const recipient = Array.from(toAccountAddress);\n const recipientToken = Array.from(toTokenAddress);\n const maxFeeAmount = new BN(fee);\n const extraGasAmountInFeeToken = new BN(extraGas);\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, fromAccountAddress);\n const payerProgram = this.getPayerProgram(params, provider);\n const bridgeProgram = new Program<BridgeType>(\n { ...bridgeIdl, address: params.sourceToken.bridgeAddress },\n provider\n );\n const poolAccount = new PublicKey(poolAddress);\n\n const bridgeConfigAccount = await getConfigAccount(bridgeProgram.programId);\n const bridgeConfigInfo = await bridgeProgram.account.config.fetch(bridgeConfigAccount);\n\n const mintAccount = new PublicKey(fromTokenAddress);\n const feeTokenMintAccount = new PublicKey(this.getAbrFeeTokenMintAddress(params));\n const userTokenAccount = getAssociatedAccount(userAccount, mintAccount);\n const userFeeTokenAccount = getAssociatedAccount(userAccount, feeTokenMintAccount);\n\n const gasPriceAccount = await getPriceAccount(toChainId, bridgeConfigInfo.gasOracleProgramId);\n const thisGasPriceAccount = await getPriceAccount(fromChainId, bridgeConfigInfo.gasOracleProgramId);\n\n return {\n provider,\n payerProgram,\n bridgeProgram,\n userAccount,\n\n recipient,\n recipientToken,\n recipientChain: toChainId,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n poolAccount,\n bridgeConfigAccount,\n bridgeConfigInfo,\n };\n }\n\n private getComputeUnitLimitInstruction(): TransactionInstruction {\n return web3.ComputeBudgetProgram.setComputeUnitLimit({ units: COMPUTE_UNIT_LIMIT });\n }\n\n private getPayerProgram(params: SendParams, provider: Provider): Program<PayerWithTokenType> {\n const payerAddress = params.sourceToken.abrPayer?.payerAddress;\n if (!payerAddress) {\n throw new InvalidGasFeePaymentOptionError(\"Payer with token not supported yet for ABR tokens\");\n }\n return new Program<PayerWithTokenType>({ ...payerWithTokenIdl, address: payerAddress }, provider);\n }\n\n private getAbrFeeTokenMintAddress(params: SendParams): string {\n const abrTokenAddress = params.sourceToken.abrPayer?.abrToken.tokenAddress;\n if (!abrTokenAddress) {\n throw new InvalidGasFeePaymentOptionError(\"Payer with token not supported yet for ABR tokens\");\n }\n return abrTokenAddress;\n }\n\n private async prepareSwapAndBridgeCommonData(\n baseData: SwapAndBridgeBaseData,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeCommonData> {\n const { amount, toChainId, toTokenAddress } = solTxSendParams;\n const { bridgeProgram, poolAccount, mintAccount } = baseData;\n\n const vUsdAmount = await getVUsdAmount(amount, bridgeProgram, poolAccount);\n\n const nonce = Array.from(getNonce());\n const lockAccount = await getLockAccount(nonce, bridgeProgram.programId);\n const bridgeProgramId = bridgeProgram.programId;\n const chainBridgeAccount = await getChainBridgeAccount(toChainId, bridgeProgramId);\n const bridgeAuthorityAccount = await getAuthorityAccount(bridgeProgramId);\n const bridgeTokenAccount = await getBridgeTokenAccount(mintAccount, bridgeProgramId);\n const otherBridgeTokenAccount = await getOtherChainTokenAccount(\n toChainId,\n Buffer.from(toTokenAddress),\n bridgeProgramId\n );\n\n return {\n ...baseData,\n vusdAmount: new BN(vUsdAmount),\n nonce,\n lockAccount,\n chainBridgeAccount,\n bridgeProgramId,\n bridgeAuthorityAccount,\n bridgeTokenAccount,\n otherBridgeTokenAccount,\n };\n }\n\n private getWormholeProgramAddresses(\n wormholeProgramId: string,\n bridgeAuthorityAccount: PublicKey\n ): {\n wormholeBridgeAccount: PublicKey;\n wormholeSequenceAccount: PublicKey;\n wormholeFeeCollectorAccount: PublicKey;\n } {\n const programId = new PublicKey(wormholeProgramId);\n const [wormholeBridgeAccount] = PublicKey.findProgramAddressSync([Buffer.from(\"Bridge\")], programId);\n const [wormholeSequenceAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Sequence\"), bridgeAuthorityAccount.toBuffer()],\n programId\n );\n const [wormholeFeeCollectorAccount] = PublicKey.findProgramAddressSync([Buffer.from(\"fee_collector\")], programId);\n\n return {\n wormholeBridgeAccount,\n wormholeSequenceAccount,\n wormholeFeeCollectorAccount,\n };\n }\n\n private async getWormholeFeeInstruction(\n provider: Provider,\n wormholeBridgeAccount: PublicKey,\n userAccount: PublicKey,\n wormholeFeeCollectorAccount: PublicKey\n ): Promise<TransactionInstruction> {\n const bridgeAccountInfo = await provider.connection.getAccountInfo(wormholeBridgeAccount);\n if (bridgeAccountInfo == null) {\n throw new SdkError(\"Cannot fetch wormhole bridge account info\");\n }\n\n const feeLamports = new BN(bridgeAccountInfo.data.slice(16, 24), \"le\").toString();\n return SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: wormholeFeeCollectorAccount,\n lamports: +feeLamports,\n });\n }\n private async prepareSwapAndBridgeAllbridgeData(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeAllbridgeData> {\n const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);\n const commonData = await this.prepareSwapAndBridgeCommonData(baseData, solTxSendParams);\n\n const { recipient, recipientToken, recipientChain, bridgeConfigInfo } = baseData;\n const { vusdAmount, nonce, bridgeAuthorityAccount } = commonData;\n const { fromChainId, toChainId } = solTxSendParams;\n\n const message = getMessage({\n amount: vusdAmount.toString(),\n recipient: Buffer.from(recipient),\n nonce: Buffer.from(nonce),\n receiveToken: Buffer.from(recipientToken),\n destinationChainId: recipientChain,\n sourceChainId: fromChainId,\n chainBridge: bridgeAuthorityAccount.toBuffer(),\n });\n\n const messengerProgramId = bridgeConfigInfo.allbridgeMessengerProgramId;\n const sentMessageAccount = await getSendMessageAccount(message, messengerProgramId);\n const messengerConfigAccount = await getConfigAccount(messengerProgramId);\n const messengerGasUsageAccount = await getGasUsageAccount(toChainId, messengerProgramId);\n\n return {\n ...commonData,\n sentMessageAccount,\n messengerProgramId,\n messengerConfigAccount,\n messengerGasUsageAccount,\n };\n }\n\n private async prepareSwapAndBridgeWormholeData(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeWormholeData> {\n const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);\n const commonData = await this.prepareSwapAndBridgeCommonData(baseData, solTxSendParams);\n\n const { provider, userAccount, bridgeConfigInfo } = baseData;\n const { bridgeAuthorityAccount } = commonData;\n const { toChainId } = solTxSendParams;\n\n const wormholeMessengerAccount = bridgeConfigInfo.wormholeMessengerProgramId;\n const wormholeMessengerConfigAccount = await getConfigAccount(wormholeMessengerAccount);\n const messengerGasUsageAccount = await getGasUsageAccount(toChainId, wormholeMessengerAccount);\n\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n const { wormholeBridgeAccount, wormholeSequenceAccount, wormholeFeeCollectorAccount } =\n this.getWormholeProgramAddresses(wormholeProgramId, bridgeAuthorityAccount);\n\n const messageAccount = Keypair.generate();\n const feeInstruction = await this.getWormholeFeeInstruction(\n provider,\n wormholeBridgeAccount,\n userAccount,\n wormholeFeeCollectorAccount\n );\n\n return {\n ...commonData,\n wormholeMessengerAccount,\n wormholeMessengerConfigAccount,\n wormholeProgramId,\n sequenceAccount: wormholeSequenceAccount,\n feeCollectorAccount: wormholeFeeCollectorAccount,\n messengerGasUsageAccount,\n messageAccount,\n wormholeBridgeAccount,\n feeInstruction,\n };\n }\n\n private async prepareBridgeCctpData(params: SendParams, solTxSendParams: SolTxSendParams): Promise<BridgeCctpData> {\n const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);\n\n const { mintAccount } = baseData;\n const { amount, toChainId } = solTxSendParams;\n\n const destinationChainSymbol = params.destinationToken.chainSymbol;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n\n let cctpVersion: number | undefined;\n let cctpAddress: string | undefined;\n let cctpTransmitterProgramIdAddress: string | undefined;\n let cctpTokenMessengerMinterAddress: string | undefined;\n if (params.messenger === Messenger.CCTP) {\n cctpVersion = 1;\n cctpAddress = params.sourceToken.cctpAddress;\n cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;\n cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;\n } else if (params.messenger === Messenger.CCTP_V2) {\n cctpVersion = 2;\n cctpAddress = params.sourceToken.cctpV2Address;\n cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpV2TransmitterProgramId;\n cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpV2TokenMessengerMinter;\n }\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(`CCTP ${cctpVersion} is not configured`);\n }\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(`Such route does not support CCTP ${cctpVersion} protocol`);\n }\n\n const cctpBridgeProgramId = new PublicKey(cctpAddress);\n const cctpBridgeConfigAccount =\n cctpVersion === 1\n ? await getCctpBridgeAccount(mintAccount, cctpBridgeProgramId)\n : getCctpV2BridgeConfigAccount(mintAccount, cctpBridgeProgramId);\n const chainBridgeAccount = await getChainBridgeAccount(toChainId, cctpBridgeProgramId);\n const cctpBridgeAuthorityAccount = await getCctpAuthorityAccount(cctpBridgeConfigAccount, cctpBridgeProgramId);\n const cctpBridgeTokenAccount = await getBridgeTokenAccount(mintAccount, cctpBridgeProgramId);\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, mintAccount, cctpTransmitterProgramId, cctpTokenMessengerMinter);\n\n const messageSentEventDataKeypair = Keypair.generate();\n const lockAccount = getCctpLockAccount(cctpBridgeProgramId, messageSentEventDataKeypair.publicKey);\n\n return {\n ...baseData,\n lockAccount,\n messageSentEventDataKeypair,\n\n amount: new BN(amount),\n chainBridgeAccount,\n cctpBridgeProgramId,\n cctpBridgeAuthorityAccount,\n cctpBridgeConfigAccount,\n cctpBridgeTokenAccount,\n cctpTokenMessengerMinter,\n cctpTransmitterProgramId,\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n };\n }\n\n private async buildSwapAndBridgeTx(\n swapAndBridgeAllbridgeData: SwapAndBridgeAllbridgeData\n ): Promise<VersionedTransaction> {\n const {\n provider,\n payerProgram,\n userAccount,\n vusdAmount,\n recipient,\n recipientChain,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n\n lockAccount,\n chainBridgeAccount,\n bridgeProgramId,\n bridgeAuthorityAccount,\n bridgeTokenAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n sentMessageAccount,\n messengerProgramId,\n messengerConfigAccount,\n messengerGasUsageAccount,\n bridgeConfigAccount,\n otherBridgeTokenAccount,\n poolAccount,\n } = swapAndBridgeAllbridgeData;\n\n const transaction = await payerProgram.methods\n .swapAndBridge({\n vusdAmount,\n recipient,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n destinationChainId: recipientChain,\n })\n .accountsPartial({\n lock: lockAccount,\n chainBridge: chainBridgeAccount,\n bridge: bridgeProgramId,\n bridgeAuthority: bridgeAuthorityAccount,\n bridgeToken: bridgeTokenAccount,\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n sentMessageAccount,\n messenger: messengerProgramId,\n messengerConfig: messengerConfigAccount,\n messengerGasUsage: messengerGasUsageAccount,\n bridgeConfig: bridgeConfigAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n pool: poolAccount,\n })\n .preInstructions([this.getComputeUnitLimitInstruction()])\n .transaction();\n\n return await this.finalizeTransaction(transaction, provider, userAccount);\n }\n\n private async buildSwapAndBridgeWormholeTx(\n swapAndBridgeWormholeData: SwapAndBridgeWormholeData\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair }> {\n const {\n provider,\n payerProgram,\n userAccount,\n vusdAmount,\n recipient,\n recipientChain,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n\n lockAccount,\n chainBridgeAccount,\n bridgeProgramId,\n bridgeAuthorityAccount,\n bridgeTokenAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n messengerGasUsageAccount,\n bridgeConfigAccount,\n otherBridgeTokenAccount,\n poolAccount,\n\n wormholeMessengerAccount,\n wormholeMessengerConfigAccount,\n wormholeProgramId,\n sequenceAccount,\n feeCollectorAccount,\n messageAccount,\n wormholeBridgeAccount,\n\n feeInstruction,\n } = swapAndBridgeWormholeData;\n\n const transaction = await payerProgram.methods\n .swapAndBridgeWormhole({\n vusdAmount,\n recipient,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n destinationChainId: recipientChain,\n })\n .accounts({\n lock: lockAccount,\n chainBridge: chainBridgeAccount,\n bridge: bridgeProgramId,\n bridgeAuthority: bridgeAuthorityAccount,\n bridgeToken: bridgeTokenAccount,\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n messengerGasUsage: messengerGasUsageAccount,\n bridgeConfig: bridgeConfigAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n pool: poolAccount,\n wormholeMessenger: wormholeMessengerAccount,\n wormholeMessengerConfig: wormholeMessengerConfigAccount,\n wormholeProgram: wormholeProgramId,\n sequence: sequenceAccount,\n feeCollector: feeCollectorAccount,\n message: messageAccount.publicKey,\n wormholeBridge: wormholeBridgeAccount,\n // user: user.publicKey,\n })\n .preInstructions([this.getComputeUnitLimitInstruction(), feeInstruction])\n .signers([messageAccount])\n .transaction();\n\n return {\n tx: await this.finalizeTransaction(transaction, provider, userAccount),\n requiredMessageSigner: messageAccount,\n };\n }\n\n private async buildBridgeCctpTx(\n bridgeCctpData: BridgeCctpData\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair }> {\n const {\n provider,\n payerProgram,\n\n amount,\n recipient,\n recipientToken,\n\n userAccount,\n recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n\n lockAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n chainBridgeAccount,\n cctpBridgeProgramId,\n cctpBridgeAuthorityAccount,\n cctpBridgeConfigAccount,\n cctpBridgeTokenAccount,\n cctpTokenMessengerMinter,\n cctpTransmitterProgramId,\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n\n messageSentEventDataKeypair,\n } = bridgeCctpData;\n\n const transaction = await payerProgram.methods\n .bridgeCctp({\n amount,\n recipient,\n receiveToken: recipientToken,\n destinationChainId: recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n })\n .accounts({\n lock: lockAccount,\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userFeeTokenAccount,\n bridgeToken: cctpBridgeTokenAccount,\n cctpBridge: cctpBridgeProgramId,\n cctpBridgeConfig: cctpBridgeConfigAccount,\n cctpMessenger: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n chainBridge: chainBridgeAccount,\n bridgeAuthority: cctpBridgeAuthorityAccount,\n userTokenAccount,\n })\n .preInstructions([this.getComputeUnitLimitInstruction()])\n .transaction();\n\n return {\n tx: await this.finalizeTransaction(transaction, provider, userAccount),\n requiredMessageSigner: messageSentEventDataKeypair,\n };\n }\n\n private async buildBridgeCctpV2Tx(\n bridgeCctpData: BridgeCctpData\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair }> {\n const {\n provider,\n payerProgram,\n\n amount,\n recipient,\n recipientToken,\n\n userAccount,\n recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n\n lockAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n chainBridgeAccount,\n cctpBridgeProgramId,\n cctpBridgeAuthorityAccount,\n cctpBridgeConfigAccount,\n cctpBridgeTokenAccount,\n cctpTokenMessengerMinter,\n cctpTransmitterProgramId,\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n\n messageSentEventDataKeypair,\n } = bridgeCctpData;\n\n const transaction = await payerProgram.methods\n .bridgeCctpV2({\n amount,\n recipient,\n receiveToken: recipientToken,\n destinationChainId: recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n })\n .accounts({\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userFeeTokenAccount,\n bridgeToken: cctpBridgeTokenAccount,\n cctpBridge: cctpBridgeProgramId,\n tokenMessengerMinterProgram: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger,\n tokenMinter,\n localToken,\n remoteTokenMessenger: remoteTokenMessengerKey,\n authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n lock: lockAccount,\n cctpBridgeConfig: cctpBridgeConfigAccount,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n chainBridge: chainBridgeAccount,\n bridgeAuthority: cctpBridgeAuthorityAccount,\n userTokenAccount,\n })\n .preInstructions([this.getComputeUnitLimitInstruction()])\n .transaction();\n\n return {\n tx: await this.finalizeTransaction(transaction, provider, userAccount),\n requiredMessageSigner: messageSentEventDataKeypair,\n };\n }\n\n private async finalizeTransaction(\n transaction: web3.Transaction,\n provider: Provider,\n userAccount: PublicKey\n ): Promise<VersionedTransaction> {\n const connection = provider.connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return await convertToVersionedTransaction(transaction, connection, this.params.solanaLookUpTable);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"payer-with-token-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/payer-with-token-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BN, Program, Provider, web3 } from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram, TransactionInstruction, VersionedTransaction } from \"@solana/web3.js\";\nimport { ChainType } from \"../../../chains/chain.enums\";\nimport { Messenger } from \"../../../client/core-api/core-api.model\";\nimport { AllbridgeCoreClient } from \"../../../client/core-api/core-client-base\";\nimport {\n CCTPDoesNotSupportedError,\n InvalidGasFeePaymentOptionError,\n OFTDoesNotSupportedError,\n SdkError,\n} from \"../../../exceptions\";\nimport { assertNever } from \"../../../utils/utils\";\nimport { Bridge as BridgeType } from \"../../models/sol/types/bridge\";\nimport * as bridgeIdl from \"../../models/sol/types/bridge.json\";\nimport { PayerWithToken as PayerWithTokenType } from \"../../models/sol/types/payer_with_token\";\nimport * as payerWithTokenIdl from \"../../models/sol/types/payer_with_token.json\";\nimport { getMessage, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpLockAccount,\n getCctpV2BridgeConfigAccount,\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 { decodeStellarContractId } from \"../../utils/srb\";\nimport { encodeCctpHookForStellar } from \"../cctp-utils\";\nimport { SendParams } from \"../models\";\nimport { getNonce } from \"../utils\";\nimport { SolanaBridgeParams } from \"./bridge-tx-service\";\nimport { convertToVersionedTransaction, SolTxSendParams } from \"./utils\";\n\ntype BridgeConfigInfo = Awaited<ReturnType<Program<BridgeType>[\"account\"][\"config\"][\"fetch\"]>>;\n\ninterface SwapAndBridgeBaseData {\n provider: Provider;\n payerProgram: Program<PayerWithTokenType>;\n bridgeProgram: Program<BridgeType>;\n userAccount: PublicKey;\n\n recipient: number[];\n recipientChain: number;\n recipientToken: number[];\n maxFeeAmount: BN;\n extraGasAmountInFeeToken: BN;\n\n mintAccount: PublicKey;\n feeTokenMintAccount: PublicKey;\n userTokenAccount: PublicKey;\n userFeeTokenAccount: PublicKey;\n gasPriceAccount: PublicKey;\n thisGasPriceAccount: PublicKey;\n\n poolAccount: PublicKey;\n bridgeConfigAccount: PublicKey;\n bridgeConfigInfo: BridgeConfigInfo;\n}\n\ninterface SwapAndBridgeCommonData extends SwapAndBridgeBaseData {\n vusdAmount: BN;\n nonce: number[];\n lockAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n bridgeProgramId: PublicKey;\n bridgeAuthorityAccount: PublicKey;\n bridgeTokenAccount: PublicKey;\n otherBridgeTokenAccount: PublicKey;\n}\n\ninterface SwapAndBridgeAllbridgeData extends SwapAndBridgeCommonData {\n sentMessageAccount: PublicKey;\n messengerProgramId: PublicKey;\n messengerConfigAccount: PublicKey;\n messengerGasUsageAccount: PublicKey;\n}\n\ninterface SwapAndBridgeWormholeData extends SwapAndBridgeCommonData {\n wormholeMessengerAccount: PublicKey;\n wormholeMessengerConfigAccount: PublicKey;\n wormholeProgramId: string;\n sequenceAccount: PublicKey;\n feeCollectorAccount: PublicKey;\n messengerGasUsageAccount: PublicKey;\n wormholeBridgeAccount: PublicKey;\n\n messageAccount: Keypair;\n feeInstruction: TransactionInstruction;\n}\n\ninterface BridgeCctpData extends SwapAndBridgeBaseData {\n amount: BN;\n hookData?: Buffer;\n lockAccount: PublicKey;\n\n chainBridgeAccount: PublicKey;\n cctpBridgeProgramId: PublicKey;\n cctpBridgeAuthorityAccount: PublicKey;\n cctpBridgeTokenAccount: PublicKey;\n cctpBridgeConfigAccount: PublicKey;\n cctpTokenMessengerMinter: PublicKey;\n cctpTransmitterProgramId: PublicKey;\n messageTransmitterAccount: PublicKey;\n tokenMessenger: PublicKey;\n tokenMessengerEventAuthority: PublicKey;\n tokenMinter: PublicKey;\n localToken: PublicKey;\n remoteTokenMessengerKey: PublicKey;\n authorityPda: PublicKey;\n\n messageSentEventDataKeypair: Keypair;\n}\n\nconst COMPUTE_UNIT_LIMIT = 1_000_000;\n\nexport class PayerWithTokenService {\n chainType: ChainType.SOLANA = ChainType.SOLANA;\n\n constructor(\n public solanaRpcUrl: string,\n public params: SolanaBridgeParams,\n public api: AllbridgeCoreClient\n ) {}\n\n async buildRawTransactionSend(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner?: Keypair }> {\n switch (params.messenger) {\n case Messenger.ALLBRIDGE: {\n const swapAndBridgeData = await this.prepareSwapAndBridgeAllbridgeData(params, solTxSendParams);\n const tx = await this.buildSwapAndBridgeTx(swapAndBridgeData);\n return { tx };\n }\n case Messenger.WORMHOLE: {\n const swapAndBridgeData = await this.prepareSwapAndBridgeWormholeData(params, solTxSendParams);\n return await this.buildSwapAndBridgeWormholeTx(swapAndBridgeData);\n }\n case Messenger.CCTP: {\n const bridgeCctpData = await this.prepareBridgeCctpData(params, solTxSendParams);\n return this.buildBridgeCctpTx(bridgeCctpData);\n }\n case Messenger.CCTP_V2: {\n const bridgeCctpData = await this.prepareBridgeCctpData(params, solTxSendParams);\n return this.buildBridgeCctpV2Tx(bridgeCctpData);\n }\n case Messenger.X_RESERVE:\n throw new SdkError(\"Messenger xReserve is not supported yet.\");\n case Messenger.OFT:\n throw new OFTDoesNotSupportedError(\"Messenger OFT is not supported yet.\");\n default: {\n return assertNever(params.messenger, \"Unhandled Messenger type\");\n }\n }\n }\n\n private async prepareSwapAndBridgeBaseData(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeBaseData> {\n const {\n fromChainId,\n fromAccountAddress,\n fromTokenAddress,\n poolAddress,\n toAccountAddress,\n toTokenAddress,\n toChainId,\n fee,\n extraGas = \"0\",\n } = solTxSendParams;\n\n const userAccount = new PublicKey(fromAccountAddress);\n const recipient = Array.from(toAccountAddress);\n const recipientToken = Array.from(toTokenAddress);\n const maxFeeAmount = new BN(fee);\n const extraGasAmountInFeeToken = new BN(extraGas);\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, fromAccountAddress);\n const payerProgram = this.getPayerProgram(params, provider);\n const bridgeProgram = new Program<BridgeType>(\n { ...bridgeIdl, address: params.sourceToken.bridgeAddress },\n provider\n );\n const poolAccount = new PublicKey(poolAddress);\n\n const bridgeConfigAccount = await getConfigAccount(bridgeProgram.programId);\n const bridgeConfigInfo = await bridgeProgram.account.config.fetch(bridgeConfigAccount);\n\n const mintAccount = new PublicKey(fromTokenAddress);\n const feeTokenMintAccount = new PublicKey(this.getAbrFeeTokenMintAddress(params));\n const userTokenAccount = getAssociatedAccount(userAccount, mintAccount);\n const userFeeTokenAccount = getAssociatedAccount(userAccount, feeTokenMintAccount);\n\n const gasPriceAccount = await getPriceAccount(toChainId, bridgeConfigInfo.gasOracleProgramId);\n const thisGasPriceAccount = await getPriceAccount(fromChainId, bridgeConfigInfo.gasOracleProgramId);\n\n return {\n provider,\n payerProgram,\n bridgeProgram,\n userAccount,\n\n recipient,\n recipientToken,\n recipientChain: toChainId,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n poolAccount,\n bridgeConfigAccount,\n bridgeConfigInfo,\n };\n }\n\n private getComputeUnitLimitInstruction(): TransactionInstruction {\n return web3.ComputeBudgetProgram.setComputeUnitLimit({ units: COMPUTE_UNIT_LIMIT });\n }\n\n private getPayerProgram(params: SendParams, provider: Provider): Program<PayerWithTokenType> {\n const payerAddress = params.sourceToken.abrPayer?.payerAddress;\n if (!payerAddress) {\n throw new InvalidGasFeePaymentOptionError(\"Payer with token not supported yet for ABR tokens\");\n }\n return new Program<PayerWithTokenType>({ ...payerWithTokenIdl, address: payerAddress }, provider);\n }\n\n private getAbrFeeTokenMintAddress(params: SendParams): string {\n const abrTokenAddress = params.sourceToken.abrPayer?.abrToken.tokenAddress;\n if (!abrTokenAddress) {\n throw new InvalidGasFeePaymentOptionError(\"Payer with token not supported yet for ABR tokens\");\n }\n return abrTokenAddress;\n }\n\n private async prepareSwapAndBridgeCommonData(\n baseData: SwapAndBridgeBaseData,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeCommonData> {\n const { amount, toChainId, toTokenAddress } = solTxSendParams;\n const { bridgeProgram, poolAccount, mintAccount } = baseData;\n\n const vUsdAmount = await getVUsdAmount(amount, bridgeProgram, poolAccount);\n\n const nonce = Array.from(getNonce());\n const lockAccount = await getLockAccount(nonce, bridgeProgram.programId);\n const bridgeProgramId = bridgeProgram.programId;\n const chainBridgeAccount = await getChainBridgeAccount(toChainId, bridgeProgramId);\n const bridgeAuthorityAccount = await getAuthorityAccount(bridgeProgramId);\n const bridgeTokenAccount = await getBridgeTokenAccount(mintAccount, bridgeProgramId);\n const otherBridgeTokenAccount = await getOtherChainTokenAccount(\n toChainId,\n Buffer.from(toTokenAddress),\n bridgeProgramId\n );\n\n return {\n ...baseData,\n vusdAmount: new BN(vUsdAmount),\n nonce,\n lockAccount,\n chainBridgeAccount,\n bridgeProgramId,\n bridgeAuthorityAccount,\n bridgeTokenAccount,\n otherBridgeTokenAccount,\n };\n }\n\n private getWormholeProgramAddresses(\n wormholeProgramId: string,\n bridgeAuthorityAccount: PublicKey\n ): {\n wormholeBridgeAccount: PublicKey;\n wormholeSequenceAccount: PublicKey;\n wormholeFeeCollectorAccount: PublicKey;\n } {\n const programId = new PublicKey(wormholeProgramId);\n const [wormholeBridgeAccount] = PublicKey.findProgramAddressSync([Buffer.from(\"Bridge\")], programId);\n const [wormholeSequenceAccount] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"Sequence\"), bridgeAuthorityAccount.toBuffer()],\n programId\n );\n const [wormholeFeeCollectorAccount] = PublicKey.findProgramAddressSync([Buffer.from(\"fee_collector\")], programId);\n\n return {\n wormholeBridgeAccount,\n wormholeSequenceAccount,\n wormholeFeeCollectorAccount,\n };\n }\n\n private async getWormholeFeeInstruction(\n provider: Provider,\n wormholeBridgeAccount: PublicKey,\n userAccount: PublicKey,\n wormholeFeeCollectorAccount: PublicKey\n ): Promise<TransactionInstruction> {\n const bridgeAccountInfo = await provider.connection.getAccountInfo(wormholeBridgeAccount);\n if (bridgeAccountInfo == null) {\n throw new SdkError(\"Cannot fetch wormhole bridge account info\");\n }\n\n const feeLamports = new BN(bridgeAccountInfo.data.slice(16, 24), \"le\").toString();\n return SystemProgram.transfer({\n fromPubkey: userAccount,\n toPubkey: wormholeFeeCollectorAccount,\n lamports: +feeLamports,\n });\n }\n private async prepareSwapAndBridgeAllbridgeData(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeAllbridgeData> {\n const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);\n const commonData = await this.prepareSwapAndBridgeCommonData(baseData, solTxSendParams);\n\n const { recipient, recipientToken, recipientChain, bridgeConfigInfo } = baseData;\n const { vusdAmount, nonce, bridgeAuthorityAccount } = commonData;\n const { fromChainId, toChainId } = solTxSendParams;\n\n const message = getMessage({\n amount: vusdAmount.toString(),\n recipient: Buffer.from(recipient),\n nonce: Buffer.from(nonce),\n receiveToken: Buffer.from(recipientToken),\n destinationChainId: recipientChain,\n sourceChainId: fromChainId,\n chainBridge: bridgeAuthorityAccount.toBuffer(),\n });\n\n const messengerProgramId = bridgeConfigInfo.allbridgeMessengerProgramId;\n const sentMessageAccount = await getSendMessageAccount(message, messengerProgramId);\n const messengerConfigAccount = await getConfigAccount(messengerProgramId);\n const messengerGasUsageAccount = await getGasUsageAccount(toChainId, messengerProgramId);\n\n return {\n ...commonData,\n sentMessageAccount,\n messengerProgramId,\n messengerConfigAccount,\n messengerGasUsageAccount,\n };\n }\n\n private async prepareSwapAndBridgeWormholeData(\n params: SendParams,\n solTxSendParams: SolTxSendParams\n ): Promise<SwapAndBridgeWormholeData> {\n const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);\n const commonData = await this.prepareSwapAndBridgeCommonData(baseData, solTxSendParams);\n\n const { provider, userAccount, bridgeConfigInfo } = baseData;\n const { bridgeAuthorityAccount } = commonData;\n const { toChainId } = solTxSendParams;\n\n const wormholeMessengerAccount = bridgeConfigInfo.wormholeMessengerProgramId;\n const wormholeMessengerConfigAccount = await getConfigAccount(wormholeMessengerAccount);\n const messengerGasUsageAccount = await getGasUsageAccount(toChainId, wormholeMessengerAccount);\n\n const wormholeProgramId = this.params.wormholeMessengerProgramId;\n if (!wormholeProgramId) {\n throw new SdkError(\"Do not use.\");\n }\n const { wormholeBridgeAccount, wormholeSequenceAccount, wormholeFeeCollectorAccount } =\n this.getWormholeProgramAddresses(wormholeProgramId, bridgeAuthorityAccount);\n\n const messageAccount = Keypair.generate();\n const feeInstruction = await this.getWormholeFeeInstruction(\n provider,\n wormholeBridgeAccount,\n userAccount,\n wormholeFeeCollectorAccount\n );\n\n return {\n ...commonData,\n wormholeMessengerAccount,\n wormholeMessengerConfigAccount,\n wormholeProgramId,\n sequenceAccount: wormholeSequenceAccount,\n feeCollectorAccount: wormholeFeeCollectorAccount,\n messengerGasUsageAccount,\n messageAccount,\n wormholeBridgeAccount,\n feeInstruction,\n };\n }\n\n private async prepareBridgeCctpData(params: SendParams, solTxSendParams: SolTxSendParams): Promise<BridgeCctpData> {\n const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);\n\n const { mintAccount } = baseData;\n const { amount, toChainId } = solTxSendParams;\n\n const destinationChainSymbol = params.destinationToken.chainSymbol;\n const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];\n\n let cctpVersion: number | undefined;\n let hookData: Buffer | undefined;\n let cctpAddress: string | undefined;\n let cctpTransmitterProgramIdAddress: string | undefined;\n let cctpTokenMessengerMinterAddress: string | undefined;\n if (params.messenger === Messenger.CCTP) {\n cctpVersion = 1;\n cctpAddress = params.sourceToken.cctpAddress;\n cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;\n cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;\n } else if (params.messenger === Messenger.CCTP_V2) {\n cctpVersion = 2;\n cctpAddress = params.sourceToken.cctpV2Address;\n cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpV2TransmitterProgramId;\n cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpV2TokenMessengerMinter;\n if (params.destinationToken.chainType === ChainType.SRB) {\n const destinationCctpV2Address = params.destinationToken.cctpV2Address;\n if (!destinationCctpV2Address) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP V2 protocol\");\n }\n baseData.recipient = Array.from(decodeStellarContractId(destinationCctpV2Address));\n hookData = encodeCctpHookForStellar(params.toAccountAddress);\n }\n }\n if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {\n throw new SdkError(`CCTP ${cctpVersion} is not configured`);\n }\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(`Such route does not support CCTP ${cctpVersion} protocol`);\n }\n\n const cctpBridgeProgramId = new PublicKey(cctpAddress);\n const cctpBridgeConfigAccount =\n cctpVersion === 1\n ? await getCctpBridgeAccount(mintAccount, cctpBridgeProgramId)\n : getCctpV2BridgeConfigAccount(mintAccount, cctpBridgeProgramId);\n const chainBridgeAccount = await getChainBridgeAccount(toChainId, cctpBridgeProgramId);\n const cctpBridgeAuthorityAccount = await getCctpAuthorityAccount(cctpBridgeConfigAccount, cctpBridgeProgramId);\n const cctpBridgeTokenAccount = await getBridgeTokenAccount(mintAccount, cctpBridgeProgramId);\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, mintAccount, cctpTransmitterProgramId, cctpTokenMessengerMinter);\n\n const messageSentEventDataKeypair = Keypair.generate();\n const lockAccount = getCctpLockAccount(cctpBridgeProgramId, messageSentEventDataKeypair.publicKey);\n\n return {\n ...baseData,\n lockAccount,\n messageSentEventDataKeypair,\n\n amount: new BN(amount),\n hookData,\n chainBridgeAccount,\n cctpBridgeProgramId,\n cctpBridgeAuthorityAccount,\n cctpBridgeConfigAccount,\n cctpBridgeTokenAccount,\n cctpTokenMessengerMinter,\n cctpTransmitterProgramId,\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n };\n }\n\n private async buildSwapAndBridgeTx(\n swapAndBridgeAllbridgeData: SwapAndBridgeAllbridgeData\n ): Promise<VersionedTransaction> {\n const {\n provider,\n payerProgram,\n userAccount,\n vusdAmount,\n recipient,\n recipientChain,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n\n lockAccount,\n chainBridgeAccount,\n bridgeProgramId,\n bridgeAuthorityAccount,\n bridgeTokenAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n sentMessageAccount,\n messengerProgramId,\n messengerConfigAccount,\n messengerGasUsageAccount,\n bridgeConfigAccount,\n otherBridgeTokenAccount,\n poolAccount,\n } = swapAndBridgeAllbridgeData;\n\n const transaction = await payerProgram.methods\n .swapAndBridge({\n vusdAmount,\n recipient,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n destinationChainId: recipientChain,\n })\n .accountsPartial({\n lock: lockAccount,\n chainBridge: chainBridgeAccount,\n bridge: bridgeProgramId,\n bridgeAuthority: bridgeAuthorityAccount,\n bridgeToken: bridgeTokenAccount,\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n sentMessageAccount,\n messenger: messengerProgramId,\n messengerConfig: messengerConfigAccount,\n messengerGasUsage: messengerGasUsageAccount,\n bridgeConfig: bridgeConfigAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n pool: poolAccount,\n })\n .preInstructions([this.getComputeUnitLimitInstruction()])\n .transaction();\n\n return await this.finalizeTransaction(transaction, provider, userAccount);\n }\n\n private async buildSwapAndBridgeWormholeTx(\n swapAndBridgeWormholeData: SwapAndBridgeWormholeData\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair }> {\n const {\n provider,\n payerProgram,\n userAccount,\n vusdAmount,\n recipient,\n recipientChain,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n\n lockAccount,\n chainBridgeAccount,\n bridgeProgramId,\n bridgeAuthorityAccount,\n bridgeTokenAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n messengerGasUsageAccount,\n bridgeConfigAccount,\n otherBridgeTokenAccount,\n poolAccount,\n\n wormholeMessengerAccount,\n wormholeMessengerConfigAccount,\n wormholeProgramId,\n sequenceAccount,\n feeCollectorAccount,\n messageAccount,\n wormholeBridgeAccount,\n\n feeInstruction,\n } = swapAndBridgeWormholeData;\n\n const transaction = await payerProgram.methods\n .swapAndBridgeWormhole({\n vusdAmount,\n recipient,\n recipientToken,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n nonce,\n destinationChainId: recipientChain,\n })\n .accounts({\n lock: lockAccount,\n chainBridge: chainBridgeAccount,\n bridge: bridgeProgramId,\n bridgeAuthority: bridgeAuthorityAccount,\n bridgeToken: bridgeTokenAccount,\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n messengerGasUsage: messengerGasUsageAccount,\n bridgeConfig: bridgeConfigAccount,\n otherBridgeToken: otherBridgeTokenAccount,\n pool: poolAccount,\n wormholeMessenger: wormholeMessengerAccount,\n wormholeMessengerConfig: wormholeMessengerConfigAccount,\n wormholeProgram: wormholeProgramId,\n sequence: sequenceAccount,\n feeCollector: feeCollectorAccount,\n message: messageAccount.publicKey,\n wormholeBridge: wormholeBridgeAccount,\n // user: user.publicKey,\n })\n .preInstructions([this.getComputeUnitLimitInstruction(), feeInstruction])\n .signers([messageAccount])\n .transaction();\n\n return {\n tx: await this.finalizeTransaction(transaction, provider, userAccount),\n requiredMessageSigner: messageAccount,\n };\n }\n\n private async buildBridgeCctpTx(\n bridgeCctpData: BridgeCctpData\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair }> {\n const {\n provider,\n payerProgram,\n\n amount,\n recipient,\n recipientToken,\n\n userAccount,\n recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n\n lockAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n chainBridgeAccount,\n cctpBridgeProgramId,\n cctpBridgeAuthorityAccount,\n cctpBridgeConfigAccount,\n cctpBridgeTokenAccount,\n cctpTokenMessengerMinter,\n cctpTransmitterProgramId,\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n\n messageSentEventDataKeypair,\n } = bridgeCctpData;\n\n const transaction = await payerProgram.methods\n .bridgeCctp({\n amount,\n recipient,\n receiveToken: recipientToken,\n destinationChainId: recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n })\n .accounts({\n lock: lockAccount,\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userFeeTokenAccount,\n bridgeToken: cctpBridgeTokenAccount,\n cctpBridge: cctpBridgeProgramId,\n cctpBridgeConfig: cctpBridgeConfigAccount,\n cctpMessenger: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n chainBridge: chainBridgeAccount,\n bridgeAuthority: cctpBridgeAuthorityAccount,\n userTokenAccount,\n })\n .preInstructions([this.getComputeUnitLimitInstruction()])\n .transaction();\n\n return {\n tx: await this.finalizeTransaction(transaction, provider, userAccount),\n requiredMessageSigner: messageSentEventDataKeypair,\n };\n }\n\n private async buildBridgeCctpV2Tx(\n bridgeCctpData: BridgeCctpData\n ): Promise<{ tx: VersionedTransaction; requiredMessageSigner: Keypair }> {\n const {\n provider,\n payerProgram,\n\n amount,\n recipient,\n recipientToken,\n hookData,\n\n userAccount,\n recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n\n lockAccount,\n mintAccount,\n feeTokenMintAccount,\n userTokenAccount,\n userFeeTokenAccount,\n gasPriceAccount,\n thisGasPriceAccount,\n\n chainBridgeAccount,\n cctpBridgeProgramId,\n cctpBridgeAuthorityAccount,\n cctpBridgeConfigAccount,\n cctpBridgeTokenAccount,\n cctpTokenMessengerMinter,\n cctpTransmitterProgramId,\n messageTransmitterAccount,\n tokenMessenger,\n tokenMessengerEventAuthority,\n tokenMinter,\n localToken,\n remoteTokenMessengerKey,\n authorityPda,\n\n messageSentEventDataKeypair,\n } = bridgeCctpData;\n\n const transaction = await payerProgram.methods\n .bridgeCctpV2({\n amount,\n recipient,\n receiveToken: recipientToken,\n destinationChainId: recipientChain,\n maxFeeAmount,\n extraGasAmountInFeeToken,\n hookData: hookData ?? null,\n })\n .accounts({\n mint: mintAccount,\n feeTokenMint: feeTokenMintAccount,\n userFeeTokenAccount,\n bridgeToken: cctpBridgeTokenAccount,\n cctpBridge: cctpBridgeProgramId,\n tokenMessengerMinterProgram: cctpTokenMessengerMinter,\n messageTransmitterProgram: cctpTransmitterProgramId,\n messageTransmitterAccount: messageTransmitterAccount,\n tokenMessenger,\n tokenMinter,\n localToken,\n remoteTokenMessenger: remoteTokenMessengerKey,\n authorityPda,\n eventAuthority: tokenMessengerEventAuthority,\n messageSentEventData: messageSentEventDataKeypair.publicKey,\n lock: lockAccount,\n cctpBridgeConfig: cctpBridgeConfigAccount,\n gasPrice: gasPriceAccount,\n thisGasPrice: thisGasPriceAccount,\n chainBridge: chainBridgeAccount,\n bridgeAuthority: cctpBridgeAuthorityAccount,\n userTokenAccount,\n })\n .preInstructions([this.getComputeUnitLimitInstruction()])\n .transaction();\n\n return {\n tx: await this.finalizeTransaction(transaction, provider, userAccount),\n requiredMessageSigner: messageSentEventDataKeypair,\n };\n }\n\n private async finalizeTransaction(\n transaction: web3.Transaction,\n provider: Provider,\n userAccount: PublicKey\n ): Promise<VersionedTransaction> {\n const connection = provider.connection;\n transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;\n transaction.feePayer = userAccount;\n return await convertToVersionedTransaction(transaction, connection, this.params.solanaLookUpTable);\n }\n}\n"]}
|