@allbridge/bridge-core-sdk 3.30.0 → 3.31.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/client/core-api/api-client.js +40 -3
- package/dist/src/client/core-api/api-client.js.map +1 -1
- package/dist/src/client/core-api/core-client-base.d.ts +1 -0
- package/dist/src/client/core-api/core-client-base.js.map +1 -1
- package/dist/src/configs/mainnet.js +2 -0
- package/dist/src/configs/mainnet.js.map +1 -1
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/bridge/sol/bridge-tx-service.d.ts +10 -4
- package/dist/src/services/bridge/sol/bridge-tx-service.js +99 -2
- package/dist/src/services/bridge/sol/bridge-tx-service.js.map +1 -1
- package/dist/src/services/bridge/sol/index.d.ts +2 -0
- package/dist/src/services/bridge/sol/index.js.map +1 -1
- package/dist/src/services/bridge/sol/payer-with-token-service.d.ts +1 -0
- package/dist/src/services/bridge/sol/payer-with-token-service.js +76 -18
- package/dist/src/services/bridge/sol/payer-with-token-service.js.map +1 -1
- package/dist/src/services/models/sol/types/cctp_v2_bridge.d.ts +1453 -0
- package/dist/src/services/models/sol/types/cctp_v2_bridge.js +3 -0
- package/dist/src/services/models/sol/types/cctp_v2_bridge.js.map +1 -0
- package/dist/src/services/models/sol/types/cctp_v2_bridge.json +1447 -0
- package/dist/src/services/models/sol/types/payer_with_token.d.ts +1343 -597
- 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 +378 -0
- package/dist/src/services/utils/sol/accounts.d.ts +1 -0
- package/dist/src/services/utils/sol/accounts.js +5 -0
- package/dist/src/services/utils/sol/accounts.js.map +1 -1
- package/dist/src/tokens-info/tokens-info.model.d.ts +8 -8
- package/dist/src/tokens-info/tokens-info.model.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -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, 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 { getMessage, getTokenAccountData, getVUsdAmount } from \"../../utils/sol\";\nimport {\n getAssociatedAccount,\n getAuthorityAccount,\n getBridgeTokenAccount,\n getCctpAccounts,\n getCctpAuthorityAccount,\n getCctpBridgeAccount,\n getCctpBridgeTokenAccount,\n getCctpLockAccount,\n getChainBridgeAccount,\n getConfigAccount,\n getGasUsageAccount,\n getLockAccount,\n getOtherChainTokenAccount,\n getPriceAccount,\n getSendMessageAccount,\n} from \"../../utils/sol/accounts\";\nimport { buildAnchorProvider } from \"../../utils/sol/anchor-provider\";\nimport { addUnitLimitAndUnitPriceToTx } 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 {\n cctpBridge: Program<CctpBridgeType>;\n cctpBridgeAccount: PublicKey;\n cctpAddressAccount: PublicKey;\n amount: BN;\n recipient: number[];\n receiveToken: number[];\n userToken: PublicKey;\n bridgeAuthority: PublicKey;\n bridgeTokenAccount: PublicKey;\n chainBridgeAccount: PublicKey;\n userAccount: PublicKey;\n destinationChainId: number;\n mint: PublicKey;\n gasPrice: PublicKey;\n thisGasPrice: PublicKey;\n extraGasInstruction?: TransactionInstruction;\n provider: Provider;\n}\n\nexport interface SolanaBridgeParams {\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 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 case Messenger.CCTP_V2: {\n const swapAndBridgeSolData = await this.prepareSwapAndBridgeCctpData(solTxSendParams);\n const { transaction, messageSentEventDataKeypair } = await this.buildSwapAndBridgeCctpTransaction(\n params.destinationToken.chainSymbol,\n swapAndBridgeSolData\n );\n swapAndBridgeTx = transaction;\n requiredMessageSigner = messageSentEventDataKeypair;\n break;\n }\n case Messenger.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(txSendParams: SolTxSendParams): Promise<SwapAndBridgeSolDataCctpData> {\n const {\n contractAddress,\n amount,\n fromAccountAddress,\n fromTokenAddress,\n toChainId,\n toAccountAddress,\n toTokenAddress,\n extraGas,\n } = txSendParams;\n const cctpAddress = contractAddress;\n if (!cctpAddress) {\n throw new CCTPDoesNotSupportedError(\"Such route does not support CCTP protocol\");\n }\n const CHAIN_ID = 4;\n\n const account = fromAccountAddress;\n const receiveTokenAddress = toTokenAddress;\n const receiverInBuffer32 = toAccountAddress;\n\n const provider = buildAnchorProvider(this.solanaRpcUrl, account);\n const cctpBridge: Program<CctpBridgeType> = new Program<CctpBridgeType>(\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;\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\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"]}
|
|
1
|
+
{"version":3,"file":"bridge-tx-service.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/bridge-tx-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAAqE;AACrE,iDAA2G;AAC3G,6CAAkH;AAClH,4EAAoE;AAEpE,oDAAoG;AACpG,4CAAiF;AACjF,gDAAmD;AAGnD,8EAAgE;AAEhE,uFAAyE;AAEzE,4FAA8E;AAC9E,yCAAiF;AACjF,uDAiBkC;AAClC,qEAAsE;AACtE,mEAA8E;AAE9E,oCAAyD;AACzD,mCAAyE;AA4DzE,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,MAAa,eAAe;IAIjB;IACA;IACA;IALT,SAAS,GAAqB,kBAAS,CAAC,MAAM,CAAC;IAE/C,YACS,YAAoB,EACpB,MAA0B,EAC1B,GAAwB;QAFxB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,WAAM,GAAN,MAAM,CAAoB;QAC1B,QAAG,GAAH,GAAG,CAAqB;IAC9B,CAAC;IAEJ,KAAK,CAAC,uBAAuB,CAAC,MAAkB;QAC9C,MAAM,YAAY,GAAG,IAAA,2BAAmB,EAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,MAAM,IAAI,CAAC,oBAAoB,CACpC,YAAY,EACZ,MAAM,CAAC,WAAW,CAAC,WAAW,EAC9B,MAAM,CAAC,gBAAgB,CAAC,WAAW,EACnC,MAAM,CAAC,WAAW,CACnB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,MAAuB,EACvB,WAAmB,EACnB,aAAqB,EACrB,WAAyB;QAEzB,MAAM,EACJ,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,oBAAoB,GACrB,GAAG,MAAM,CAAC;QACX,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACnC,MAAM,aAAa,GAAG,eAAe,CAAC;QACtC,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACtC,MAAM,mBAAmB,GAAG,cAAc,CAAC;QAC3C,MAAM,kBAAkB,GAAG,aAAa,CAAC;QACzC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;QAE1C,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,gBAAO,CAAa,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE3F,MAAM,eAAe,GAAG,MAAM,IAAA,8BAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,IAAI,mBAAS,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,MAAM,IAAA,gCAAqB,EAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,IAAA,+BAAoB,EAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAElE,MAAM,eAAe,GAAG,IAAI,mBAAS,CAAC,gBAAgB,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAG,MAAM,IAAA,gCAAqB,EAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtF,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,kBAAkB,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,IAAA,+BAAoB,EAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAE5E,MAAM,eAAe,GAA6B;YAChD,aAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;gBAC5C,KAAK,EAAE,kBAAkB;aAC1B,CAAC;SACH,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,IAAA,yBAAmB,EAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,MAAM,gBAAgB,GAAG,IAAA,yCAA6B,EAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACrF,MAAM,iCAAiC,GAAG,IAAA,mDAAuC,EAC/E,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,WAAW,CACZ,CAAC;YACF,eAAe,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO;aACrC,IAAI,CAAC,IAAI,WAAE,CAAC,MAAM,CAAC,EAAE,IAAI,WAAE,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;aACvD,eAAe,CAAC;YACf,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,aAAa;YACrB,eAAe;YACf,IAAI,EAAE,WAAW;YACjB,eAAe;YACf,QAAQ;YACR,QAAQ;YACR,aAAa;YACb,kBAAkB;YAClB,WAAW;YACX,WAAW;YACX,gBAAgB;SACjB,CAAC;aACD,eAAe,CAAC,eAAe,CAAC;aAChC,WAAW,EAAE,CAAC;QAEjB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,WAAW,CAAC,eAAe,GAAG,CAAC,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;QAChF,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC;QACnC,MAAM,IAAA,6CAA4B,EAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChF,OAAO,MAAM,IAAA,qCAA6B,EAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,MAAkB,EAClB,eAAgC;QAEhC,IAAI,eAAqC,CAAC;QAC1C,IAAI,qBAAqB,GAAwB,SAAS,CAAC;QAC3D,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC;YACzB,KAAK,0BAAS,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;gBAClF,eAAe,GAAG,MAAM,IAAI,CAAC,sCAAsC,CAAC,oBAAoB,CAAC,CAAC;gBAC1F,MAAM;YACR,CAAC;YACD,KAAK,0BAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;gBAClF,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,qCAAqC,CAAC,oBAAoB,CAAC,CAAC;gBAC/G,eAAe,GAAG,WAAW,CAAC;gBAC9B,qBAAqB,GAAG,cAAc,CAAC;gBACvC,MAAM;YACR,CAAC;YACD,KAAK,0BAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC,CAAC;gBACtF,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAC/F,MAAM,CAAC,gBAAgB,CAAC,WAAW,EACnC,oBAAoB,CACrB,CAAC;gBACF,eAAe,GAAG,WAAW,CAAC;gBAC9B,qBAAqB,GAAG,2BAA2B,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,0BAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBACvB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,8BAA8B,CAAC,eAAe,CAAC,CAAC;gBACxF,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE,GAAG,MAAM,IAAI,CAAC,mCAAmC,CACjG,MAAM,CAAC,gBAAgB,CAAC,WAAW,EACnC,oBAAoB,CACrB,CAAC;gBACF,eAAe,GAAG,WAAW,CAAC;gBAC9B,qBAAqB,GAAG,2BAA2B,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,0BAAS,CAAC,SAAS;gBACtB,MAAM,IAAI,qBAAQ,CAAC,0CAA0C,CAAC,CAAC;YACjE,KAAK,0BAAS,CAAC,GAAG;gBAChB,MAAM,IAAI,qCAAwB,CAAC,qCAAqC,CAAC,CAAC;YAC5E,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,IAAA,mBAAW,EAAC,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACxD,CAAC;IACO,sBAAsB,CAC5B,QAAgB,EAChB,WAAsB,EACtB,aAAwB;QAExB,OAAO,aAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YACjC,UAAU,EAAE,WAAW;YACvB,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,CAAC,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,YAA6B;QAClE,MAAM,EACJ,MAAM,EACN,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,QAAQ,GACT,GAAG,YAAY,CAAC;QACjB,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACnC,MAAM,kBAAkB,GAAG,SAAS,CAAC;QACrC,MAAM,mBAAmB,GAAG,cAAc,CAAC;QAC3C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;QAC5C,MAAM,aAAa,GAAG,eAAe,CAAC;QACtC,MAAM,aAAa,GAAG,WAAW,CAAC;QAElC,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,gBAAO,CAAa,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3F,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAA,gBAAQ,GAAE,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAa,EAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAEpE,MAAM,WAAW,GAAG,MAAM,IAAA,yBAAc,EAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,MAAM,IAAA,8BAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,IAAA,+BAAoB,EAAC,IAAI,mBAAS,CAAC,OAAO,CAAC,EAAE,IAAI,mBAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5F,MAAM,kBAAkB,GAAG,MAAM,IAAA,gCAAqB,EAAC,IAAI,mBAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtG,MAAM,kBAAkB,GAAG,MAAM,IAAA,gCAAqB,EAAC,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7F,MAAM,uBAAuB,GAAG,MAAM,IAAA,oCAAyB,EAC7D,kBAAkB,EAClB,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAChC,MAAM,CAAC,SAAS,CACjB,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,kBAAkB,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACrG,MAAM,mBAAmB,GAAG,MAAM,IAAA,0BAAe,EAAC,aAAa,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QAEvG,MAAM,OAAO,GAAG,IAAA,gBAAU,EAAC;YACzB,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC1C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAC9C,kBAAkB;YAClB,aAAa;YACb,WAAW,EAAE,CAAC,MAAM,IAAA,8BAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;SACtE,CAAC,CAAC;QAEH,MAAM,iBAAiB,GAAG,EAA0B,CAAC;QAErD,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;QAClC,iBAAiB,CAAC,MAAM,GAAG,IAAI,WAAE,CAAC,MAAM,CAAC,CAAC;QAC1C,iBAAiB,CAAC,UAAU,GAAG,IAAI,WAAE,CAAC,UAAU,CAAC,CAAC;QAClD,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjE,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5C,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5C,iBAAiB,CAAC,eAAe,GAAG,eAAe,CAAC;QACpD,iBAAiB,CAAC,SAAS,GAAG,SAAS,CAAC;QACxC,iBAAiB,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC1D,iBAAiB,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC1D,iBAAiB,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;QACpE,iBAAiB,CAAC,WAAW,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,CAAC;QACvD,iBAAiB,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC1D,iBAAiB,CAAC,IAAI,GAAG,IAAI,mBAAS,CAAC,YAAY,CAAC,CAAC;QACrD,iBAAiB,CAAC,MAAM,GAAG,aAAa,CAAC;QACzC,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QACxD,iBAAiB,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC1C,iBAAiB,CAAC,YAAY,GAAG,mBAAmB,CAAC;QACrD,iBAAiB,CAAC,OAAO,GAAG,OAAO,CAAC;QAEpC,IAAI,QAAQ,EAAE,CAAC;YACb,iBAAiB,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CACjE,QAAQ,EACR,iBAAiB,CAAC,WAAW,EAC7B,aAAa,CACd,CAAC;QACJ,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,sCAAsC,CAClD,iBAAuC;QAEvC,MAAM,EACJ,MAAM,EACN,UAAU,EACV,KAAK,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,IAAI,EACJ,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,mBAAmB,GACpB,GAAG,iBAAiB,CAAC;QACtB,MAAM,2BAA2B,GAAG,iBAAiB,CAAC,2BAA2B,CAAC;QAClF,MAAM,wBAAwB,GAAG,MAAM,IAAA,6BAAkB,EAAC,kBAAkB,EAAE,2BAA2B,CAAC,CAAC;QAC3G,MAAM,eAAe,GAAG,MAAM,IAAA,2BAAgB,EAAC,2BAA2B,CAAC,CAAC;QAE5E,MAAM,kBAAkB,GAAG,MAAM,IAAA,gCAAqB,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QAE7F,MAAM,YAAY,GAA6B,EAAE,CAAC;QAClD,IAAI,mBAAmB,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO;aACrC,aAAa,CAAC;YACb,UAAU;YACV,KAAK;YACL,kBAAkB;YAClB,SAAS;YACT,YAAY;SACb,CAAC;aACD,eAAe,CAAC;YACf,KAAK,EAAE,WAAW;YAClB,IAAI;YACJ,IAAI,EAAE,WAAW;YACjB,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,WAAW;YACjB,QAAQ;YACR,YAAY;YACZ,eAAe;YACf,SAAS;YACT,WAAW,EAAE,kBAAkB;YAC/B,WAAW,EAAE,kBAAkB;YAC/B,SAAS,EAAE,2BAA2B;YACtC,iBAAiB,EAAE,wBAAwB;YAC3C,eAAe;YACf,kBAAkB;YAClB,gBAAgB,EAAE,uBAAuB;SAC1C,CAAC;aACD,eAAe,CAAC;YACf,aAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;gBAC5C,KAAK,EAAE,kBAAkB;aAC1B,CAAC;SACH,CAAC;aACD,gBAAgB,CAAC,YAAY,CAAC;aAC9B,WAAW,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC;QAC7F,WAAW,CAAC,eAAe,GAAG,CAAC,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;QAChF,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC;QACnC,OAAO,MAAM,IAAA,qCAA6B,EAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrG,CAAC;IAEO,KAAK,CAAC,qCAAqC,CACjD,iBAAuC;QAEvC,MAAM,EACJ,MAAM,EACN,UAAU,EACV,KAAK,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,IAAI,EACJ,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,GAAG,iBAAiB,CAAC;QACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC;QAEjE,MAAM,CAAC,eAAe,CAAC,GAAG,mBAAS,CAAC,sBAAsB,CACxD,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EACvB,IAAI,mBAAS,CAAC,iBAAiB,CAAC,CACjC,CAAC;QACF,MAAM,CAAC,qBAAqB,CAAC,GAAG,mBAAS,CAAC,sBAAsB,CAC9D,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAC9B,IAAI,mBAAS,CAAC,iBAAiB,CAAC,CACjC,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,GAAG,mBAAS,CAAC,sBAAsB,CAC1D,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,EACrD,IAAI,mBAAS,CAAC,iBAAiB,CAAC,CACjC,CAAC;QAEF,MAAM,wBAAwB,GAAG,MAAM,IAAA,6BAAkB,EACvD,kBAAkB,EAClB,iBAAiB,CAAC,0BAA0B,CAC7C,CAAC;QACF,MAAM,8BAA8B,GAAG,MAAM,IAAA,2BAAgB,EAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC;QAC5G,MAAM,cAAc,GAAG,iBAAO,CAAC,QAAQ,EAAE,CAAC;QAE1C,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhF,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACpF,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,qBAAQ,CAAC,2CAA2C,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,WAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAElF,MAAM,cAAc,GAAG,uBAAa,CAAC,QAAQ,CAAC;YAC5C,UAAU,EAAE,WAAW;YACvB,QAAQ,EAAE,qBAAqB;YAC/B,QAAQ,EAAE,CAAC,WAAW;SACvB,CAAC,CAAC;QAEH,MAAM,YAAY,GAA6B,EAAE,CAAC;QAClD,IAAI,mBAAmB,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,WAAW;YAClB,IAAI;YACJ,IAAI,EAAE,WAAW;YACjB,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,WAAW;YACjB,QAAQ;YACR,YAAY;YACZ,eAAe;YACf,SAAS;YACT,WAAW,EAAE,kBAAkB;YAC/B,WAAW,EAAE,kBAAkB;YAC/B,gBAAgB,EAAE,uBAAuB;YACzC,iBAAiB,EAAE,wBAAwB;YAC3C,eAAe,EAAE,iBAAiB;YAClC,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,cAAc,CAAC,SAAS;YACjC,iBAAiB,EAAE,iBAAiB,CAAC,0BAA0B;YAC/D,QAAQ,EAAE,iBAAiB;YAC3B,YAAY,EAAE,qBAAqB;YACnC,uBAAuB,EAAE,8BAA8B;YACvD,KAAK,EAAE,aAAI,CAAC,mBAAmB;SAChC,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO;aACrC,qBAAqB,CAAC;YACrB,UAAU;YACV,KAAK,EAAE,KAAK;YACZ,kBAAkB;YAClB,SAAS;YACT,YAAY;SACb,CAAC;aACD,QAAQ,CAAC,QAAQ,CAAC;aAClB,eAAe,CAAC;YACf,aAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;gBAC5C,KAAK,EAAE,kBAAkB;aAC1B,CAAC;YACF,cAAc;SACf,CAAC;aACD,gBAAgB,CAAC,YAAY,CAAC;aAC9B,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC;aACzB,WAAW,EAAE,CAAC;QACjB,WAAW,CAAC,eAAe,GAAG,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;QACzF,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC;QACnC,OAAO;YACL,WAAW,EAAE,MAAM,IAAA,qCAA6B,EAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;YACjH,cAAc;SACf,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,YAA6B;QAE7B,MAAM,EACJ,eAAe,EACf,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,QAAQ,GACT,GAAG,YAAY,CAAC;QACjB,MAAM,WAAW,GAAG,eAAe,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,sCAAyB,CAAC,2CAA2C,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC;QAEnB,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACnC,MAAM,mBAAmB,GAAG,cAAc,CAAC;QAC3C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;QAE5C,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,UAAU,GAA4B,IAAI,gBAAO,CACrD,EAAE,GAAG,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,EAC1C,QAAQ,CACT,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,mBAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,iBAAiB,GAAG,MAAM,IAAA,+BAAoB,EAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEvF,MAAM,iBAAiB,GAAG,EAAkD,CAAC;QAE7E,iBAAiB,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QACxD,iBAAiB,CAAC,kBAAkB,GAAG,IAAI,mBAAS,CAAC,WAAW,CAAC,CAAC;QAClE,iBAAiB,CAAC,MAAM,GAAG,IAAI,WAAE,CAAC,MAAM,CAAC,CAAC;QAC1C,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjE,iBAAiB,CAAC,SAAS,GAAG,IAAA,+BAAoB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACtE,iBAAiB,CAAC,eAAe,GAAG,MAAM,IAAA,kCAAuB,EAAC,iBAAiB,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3G,iBAAiB,CAAC,kBAAkB,GAAG,MAAM,IAAA,oCAAyB,EAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACnG,iBAAiB,CAAC,kBAAkB,GAAG,MAAM,IAAA,gCAAqB,EAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACpG,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5C,iBAAiB,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACjD,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,iBAAiB,CAAC,QAAQ,GAAG,MAAM,IAAA,0BAAe,EAAC,SAAS,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACpG,iBAAiB,CAAC,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,QAAQ,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACvG,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEtC,IAAI,QAAQ,EAAE,CAAC;YACb,iBAAiB,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CACjE,QAAQ,EACR,iBAAiB,CAAC,WAAW,EAC7B,iBAAiB,CAClB,CAAC;QACJ,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,iCAAiC,CACrC,sBAA8B,EAC9B,iBAA+D;QAE/D,MAAM,EACJ,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,YAAY,EACZ,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,QAAQ,GACT,GAAG,iBAAiB,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC1E,MAAM,+BAA+B,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACxF,MAAM,+BAA+B,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC;QACxF,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC,+BAA+B,IAAI,CAAC,+BAA+B,EAAE,CAAC;YAChG,MAAM,IAAI,qBAAQ,CAAC,wBAAwB,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,wBAAwB,GAAG,IAAI,mBAAS,CAAC,+BAA+B,CAAC,CAAC;QAChF,MAAM,wBAAwB,GAAG,IAAI,mBAAS,CAAC,+BAA+B,CAAC,CAAC;QAChF,MAAM,EACJ,yBAAyB,EACzB,cAAc,EACd,4BAA4B,EAC5B,WAAW,EACX,UAAU,EACV,uBAAuB,EACvB,YAAY,GACb,GAAG,IAAA,0BAAe,EAAC,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAC;QAEtF,MAAM,YAAY,GAA6B,EAAE,CAAC;QAClD,IAAI,mBAAmB,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,2BAA2B,GAAG,iBAAO,CAAC,QAAQ,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,IAAA,6BAAkB,EAAC,UAAU,CAAC,SAAS,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAEpG,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,OAAO;aAChC,MAAM,CAAC;YACN,MAAM;YACN,kBAAkB;YAClB,SAAS;YACT,YAAY;SACb,CAAC;aACD,eAAe,CAAC;YACf,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,iBAAiB;YAC7B,KAAK,EAAE,WAAW;YAElB,oBAAoB,EAAE,2BAA2B,CAAC,SAAS;YAC3D,IAAI,EAAE,WAAW;YAEjB,aAAa,EAAE,wBAAwB;YACvC,yBAAyB,EAAE,wBAAwB;YACnD,yBAAyB,EAAE,yBAAyB;YACpD,cAAc,EAAE,cAAc;YAC9B,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,UAAU;YACtB,uBAAuB,EAAE,uBAAuB;YAChD,YAAY,EAAE,YAAY;YAC1B,cAAc,EAAE,4BAA4B;YAE5C,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,kBAAkB;YAC/B,SAAS;YACT,eAAe,EAAE,eAAe;SACjC,CAAC;aACD,eAAe,CAAC;YACf,aAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;gBAC5C,KAAK,EAAE,OAAO;aACf,CAAC;SACH,CAAC;aACD,gBAAgB,CAAC,YAAY,CAAC;aAC9B,WAAW,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,EAAE,CAAC,eAAe,GAAG,CAAC,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;QACvE,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC1B,OAAO;YACL,WAAW,EAAE,MAAM,IAAA,qCAA6B,EAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC/F,2BAA2B;SAC5B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,YAA6B;QAE7B,MAAM,EACJ,eAAe,EACf,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,QAAQ,GACT,GAAG,YAAY,CAAC;QACjB,MAAM,mBAAmB,GAAG,eAAe,CAAC;QAC5C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,IAAI,sCAAyB,CAAC,4CAA4C,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC;QAEnB,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACnC,MAAM,mBAAmB,GAAG,cAAc,CAAC;QAC3C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;QAE5C,MAAM,QAAQ,GAAG,IAAA,qCAAmB,EAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,UAAU,GAA8B,IAAI,gBAAO,CACvD,EAAE,GAAG,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE,EACpD,QAAQ,CACT,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,mBAAS,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,uBAAuB,GAAG,IAAA,uCAA4B,EAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,IAAI,mBAAS,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEzF,MAAM,iBAAiB,GAAG,EAAoD,CAAC;QAE/E,iBAAiB,CAAC,UAAU,GAAG,UAAU,CAAC;QAC1C,iBAAiB,CAAC,MAAM,GAAG,IAAI,WAAE,CAAC,MAAM,CAAC,CAAC;QAC1C,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,iBAAiB,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjE,iBAAiB,CAAC,SAAS,GAAG,IAAA,+BAAoB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACtE,iBAAiB,CAAC,kBAAkB,GAAG,MAAM,IAAA,gCAAqB,EAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACpG,iBAAiB,CAAC,WAAW,GAAG,WAAW,CAAC;QAC5C,iBAAiB,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACjD,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,iBAAiB,CAAC,QAAQ,GAAG,MAAM,IAAA,0BAAe,EAAC,SAAS,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACpG,iBAAiB,CAAC,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,QAAQ,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACvG,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEtC,IAAI,QAAQ,EAAE,CAAC;YACb,iBAAiB,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CACjE,QAAQ,EACR,iBAAiB,CAAC,WAAW,EAC7B,uBAAuB,CACxB,CAAC;QACJ,CAAC;QAED,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,mCAAmC,CACvC,sBAA8B,EAC9B,iBAAiE;QAEjE,MAAM,EACJ,MAAM,EACN,UAAU,EAAE,OAAO,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,SAAS,GACV,GAAG,iBAAiB,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC1E,MAAM,+BAA+B,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,0BAA0B,CAAC;QAC1F,MAAM,+BAA+B,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,0BAA0B,CAAC;QAC1F,IAAI,MAAM,IAAI,SAAS,IAAI,CAAC,+BAA+B,IAAI,CAAC,+BAA+B,EAAE,CAAC;YAChG,MAAM,IAAI,qBAAQ,CAAC,0BAA0B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,wBAAwB,GAAG,IAAI,mBAAS,CAAC,+BAA+B,CAAC,CAAC;QAChF,MAAM,wBAAwB,GAAG,IAAI,mBAAS,CAAC,+BAA+B,CAAC,CAAC;QAChF,MAAM,EACJ,yBAAyB,EACzB,cAAc,EACd,4BAA4B,EAC5B,WAAW,EACX,UAAU,EACV,uBAAuB,EAAE,oBAAoB,EAC7C,YAAY,GACb,GAAG,IAAA,0BAAe,EAAC,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAC;QAEtF,MAAM,YAAY,GAA6B,EAAE,CAAC;QAClD,IAAI,mBAAmB,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,2BAA2B,GAAG,iBAAO,CAAC,QAAQ,EAAE,CAAC;QAEvD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO;aAC7B,MAAM,CAAC;YACN,MAAM;YACN,kBAAkB;YAClB,SAAS;YACT,YAAY;SACb,CAAC;aACD,QAAQ,CAAC;YACR,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,oBAAoB,EAAE,2BAA2B,CAAC,SAAS;YAC3D,2BAA2B,EAAE,wBAAwB;YACrD,yBAAyB,EAAE,wBAAwB;YACnD,yBAAyB,EAAE,yBAAyB;YACpD,cAAc,EAAE,cAAc;YAC9B,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,UAAU;YACtB,oBAAoB,EAAE,oBAAoB;YAC1C,YAAY,EAAE,YAAY;YAC1B,cAAc,EAAE,4BAA4B;YAE5C,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,kBAAkB;YAC/B,SAAS;SACV,CAAC;aACD,eAAe,CAAC;YACf,aAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;gBAC5C,KAAK,EAAE,OAAO;aACf,CAAC;SACH,CAAC;aACD,gBAAgB,CAAC,YAAY,CAAC;aAC9B,WAAW,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,EAAE,CAAC,eAAe,GAAG,CAAC,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC;QACvE,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC1B,OAAO;YACL,WAAW,EAAE,MAAM,IAAA,qCAA6B,EAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC/F,2BAA2B;SAC5B,CAAC;IACJ,CAAC;CACF;AA9uBD,0CA8uBC","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 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 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"]}
|
|
@@ -12,6 +12,8 @@ export interface SolanaBridgeParams {
|
|
|
12
12
|
export interface CctpParams {
|
|
13
13
|
cctpTransmitterProgramId: string;
|
|
14
14
|
cctpTokenMessengerMinter: string;
|
|
15
|
+
cctpV2TransmitterProgramId: string;
|
|
16
|
+
cctpV2TokenMessengerMinter: string;
|
|
15
17
|
cctpDomains: CctpDomains;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/bridge/sol/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4E;AAE5E,oDAA4E;AAC5E,4CAA0E;AAC1E,gDAAmD;AAEnD,mEAAuF;AACvF,sCAA4E;AAC5E,oCAA+C;AAC/C,2DAAsD;AACtD,uDAAkE;AAClE,yEAAmE;AACnE,mCAAiE;
|
|
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 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\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 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"]}
|
|
@@ -31,7 +31,6 @@ const core_api_model_1 = require("../../../client/core-api/core-api.model");
|
|
|
31
31
|
const exceptions_1 = require("../../../exceptions");
|
|
32
32
|
const utils_1 = require("../../../utils/utils");
|
|
33
33
|
const bridgeIdl = __importStar(require("../../models/sol/types/bridge.json"));
|
|
34
|
-
const cctpBridgeIdl = __importStar(require("../../models/sol/types/cctp_bridge.json"));
|
|
35
34
|
const payerWithTokenIdl = __importStar(require("../../models/sol/types/payer_with_token.json"));
|
|
36
35
|
const sol_1 = require("../../utils/sol");
|
|
37
36
|
const accounts_1 = require("../../utils/sol/accounts");
|
|
@@ -60,11 +59,14 @@ class PayerWithTokenService {
|
|
|
60
59
|
const swapAndBridgeData = await this.prepareSwapAndBridgeWormholeData(params, solTxSendParams);
|
|
61
60
|
return await this.buildSwapAndBridgeWormholeTx(swapAndBridgeData);
|
|
62
61
|
}
|
|
63
|
-
case core_api_model_1.Messenger.CCTP:
|
|
64
|
-
case core_api_model_1.Messenger.CCTP_V2: {
|
|
62
|
+
case core_api_model_1.Messenger.CCTP: {
|
|
65
63
|
const bridgeCctpData = await this.prepareBridgeCctpData(params, solTxSendParams);
|
|
66
64
|
return this.buildBridgeCctpTx(bridgeCctpData);
|
|
67
65
|
}
|
|
66
|
+
case core_api_model_1.Messenger.CCTP_V2: {
|
|
67
|
+
const bridgeCctpData = await this.prepareBridgeCctpData(params, solTxSendParams);
|
|
68
|
+
return this.buildBridgeCctpV2Tx(bridgeCctpData);
|
|
69
|
+
}
|
|
68
70
|
case core_api_model_1.Messenger.X_RESERVE:
|
|
69
71
|
throw new exceptions_1.SdkError("Messenger xReserve is not supported yet.");
|
|
70
72
|
case core_api_model_1.Messenger.OFT:
|
|
@@ -232,30 +234,44 @@ class PayerWithTokenService {
|
|
|
232
234
|
}
|
|
233
235
|
async prepareBridgeCctpData(params, solTxSendParams) {
|
|
234
236
|
const baseData = await this.prepareSwapAndBridgeBaseData(params, solTxSendParams);
|
|
235
|
-
const { mintAccount
|
|
237
|
+
const { mintAccount } = baseData;
|
|
236
238
|
const { amount, toChainId } = solTxSendParams;
|
|
237
|
-
const cctpAddress = params.sourceToken.cctpAddress;
|
|
238
|
-
if (!cctpAddress) {
|
|
239
|
-
throw new exceptions_1.CCTPDoesNotSupportedError("Such route does not support CCTP protocol");
|
|
240
|
-
}
|
|
241
|
-
const cctpBridge = new anchor_1.Program({ ...cctpBridgeIdl, address: cctpAddress }, provider);
|
|
242
|
-
const chainBridgeAccount = await (0, accounts_1.getChainBridgeAccount)(toChainId, cctpBridge.programId);
|
|
243
|
-
const cctpBridgeProgramId = cctpBridge.programId;
|
|
244
|
-
const cctpBridgeConfigAccount = await (0, accounts_1.getCctpBridgeAccount)(mintAccount, cctpBridge.programId);
|
|
245
|
-
const cctpBridgeAuthorityAccount = await (0, accounts_1.getCctpAuthorityAccount)(cctpBridgeConfigAccount, cctpBridge.programId);
|
|
246
|
-
const cctpBridgeTokenAccount = await (0, accounts_1.getBridgeTokenAccount)(mintAccount, cctpBridge.programId);
|
|
247
239
|
const destinationChainSymbol = params.destinationToken.chainSymbol;
|
|
248
240
|
const domain = this.params.cctpParams.cctpDomains[destinationChainSymbol];
|
|
249
|
-
|
|
250
|
-
|
|
241
|
+
let cctpVersion;
|
|
242
|
+
let cctpAddress;
|
|
243
|
+
let cctpTransmitterProgramIdAddress;
|
|
244
|
+
let cctpTokenMessengerMinterAddress;
|
|
245
|
+
if (params.messenger === core_api_model_1.Messenger.CCTP) {
|
|
246
|
+
cctpVersion = 1;
|
|
247
|
+
cctpAddress = params.sourceToken.cctpAddress;
|
|
248
|
+
cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpTransmitterProgramId;
|
|
249
|
+
cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpTokenMessengerMinter;
|
|
250
|
+
}
|
|
251
|
+
else if (params.messenger === core_api_model_1.Messenger.CCTP_V2) {
|
|
252
|
+
cctpVersion = 2;
|
|
253
|
+
cctpAddress = params.sourceToken.cctpV2Address;
|
|
254
|
+
cctpTransmitterProgramIdAddress = this.params.cctpParams.cctpV2TransmitterProgramId;
|
|
255
|
+
cctpTokenMessengerMinterAddress = this.params.cctpParams.cctpV2TokenMessengerMinter;
|
|
256
|
+
}
|
|
251
257
|
if (domain == undefined || !cctpTransmitterProgramIdAddress || !cctpTokenMessengerMinterAddress) {
|
|
252
|
-
throw new exceptions_1.SdkError(
|
|
258
|
+
throw new exceptions_1.SdkError(`CCTP ${cctpVersion} is not configured`);
|
|
259
|
+
}
|
|
260
|
+
if (!cctpAddress) {
|
|
261
|
+
throw new exceptions_1.CCTPDoesNotSupportedError(`Such route does not support CCTP ${cctpVersion} protocol`);
|
|
253
262
|
}
|
|
263
|
+
const cctpBridgeProgramId = new web3_js_1.PublicKey(cctpAddress);
|
|
264
|
+
const cctpBridgeConfigAccount = cctpVersion === 1
|
|
265
|
+
? await (0, accounts_1.getCctpBridgeAccount)(mintAccount, cctpBridgeProgramId)
|
|
266
|
+
: (0, accounts_1.getCctpV2BridgeConfigAccount)(mintAccount, cctpBridgeProgramId);
|
|
267
|
+
const chainBridgeAccount = await (0, accounts_1.getChainBridgeAccount)(toChainId, cctpBridgeProgramId);
|
|
268
|
+
const cctpBridgeAuthorityAccount = await (0, accounts_1.getCctpAuthorityAccount)(cctpBridgeConfigAccount, cctpBridgeProgramId);
|
|
269
|
+
const cctpBridgeTokenAccount = await (0, accounts_1.getBridgeTokenAccount)(mintAccount, cctpBridgeProgramId);
|
|
254
270
|
const cctpTransmitterProgramId = new web3_js_1.PublicKey(cctpTransmitterProgramIdAddress);
|
|
255
271
|
const cctpTokenMessengerMinter = new web3_js_1.PublicKey(cctpTokenMessengerMinterAddress);
|
|
256
272
|
const { messageTransmitterAccount, tokenMessenger, tokenMessengerEventAuthority, tokenMinter, localToken, remoteTokenMessengerKey, authorityPda, } = (0, accounts_1.getCctpAccounts)(domain, mintAccount, cctpTransmitterProgramId, cctpTokenMessengerMinter);
|
|
257
273
|
const messageSentEventDataKeypair = web3_js_1.Keypair.generate();
|
|
258
|
-
const lockAccount = (0, accounts_1.getCctpLockAccount)(
|
|
274
|
+
const lockAccount = (0, accounts_1.getCctpLockAccount)(cctpBridgeProgramId, messageSentEventDataKeypair.publicKey);
|
|
259
275
|
return {
|
|
260
276
|
...baseData,
|
|
261
277
|
lockAccount,
|
|
@@ -400,6 +416,48 @@ class PayerWithTokenService {
|
|
|
400
416
|
requiredMessageSigner: messageSentEventDataKeypair,
|
|
401
417
|
};
|
|
402
418
|
}
|
|
419
|
+
async buildBridgeCctpV2Tx(bridgeCctpData) {
|
|
420
|
+
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;
|
|
421
|
+
const transaction = await payerProgram.methods
|
|
422
|
+
.bridgeCctpV2({
|
|
423
|
+
amount,
|
|
424
|
+
recipient,
|
|
425
|
+
receiveToken: recipientToken,
|
|
426
|
+
destinationChainId: recipientChain,
|
|
427
|
+
maxFeeAmount,
|
|
428
|
+
extraGasAmountInFeeToken,
|
|
429
|
+
})
|
|
430
|
+
.accounts({
|
|
431
|
+
mint: mintAccount,
|
|
432
|
+
feeTokenMint: feeTokenMintAccount,
|
|
433
|
+
userFeeTokenAccount,
|
|
434
|
+
bridgeToken: cctpBridgeTokenAccount,
|
|
435
|
+
cctpBridge: cctpBridgeProgramId,
|
|
436
|
+
tokenMessengerMinterProgram: cctpTokenMessengerMinter,
|
|
437
|
+
messageTransmitterProgram: cctpTransmitterProgramId,
|
|
438
|
+
messageTransmitterAccount: messageTransmitterAccount,
|
|
439
|
+
tokenMessenger,
|
|
440
|
+
tokenMinter,
|
|
441
|
+
localToken,
|
|
442
|
+
remoteTokenMessenger: remoteTokenMessengerKey,
|
|
443
|
+
authorityPda,
|
|
444
|
+
eventAuthority: tokenMessengerEventAuthority,
|
|
445
|
+
messageSentEventData: messageSentEventDataKeypair.publicKey,
|
|
446
|
+
lock: lockAccount,
|
|
447
|
+
cctpBridgeConfig: cctpBridgeConfigAccount,
|
|
448
|
+
gasPrice: gasPriceAccount,
|
|
449
|
+
thisGasPrice: thisGasPriceAccount,
|
|
450
|
+
chainBridge: chainBridgeAccount,
|
|
451
|
+
bridgeAuthority: cctpBridgeAuthorityAccount,
|
|
452
|
+
userTokenAccount,
|
|
453
|
+
})
|
|
454
|
+
.preInstructions([this.getComputeUnitLimitInstruction()])
|
|
455
|
+
.transaction();
|
|
456
|
+
return {
|
|
457
|
+
tx: await this.finalizeTransaction(transaction, provider, userAccount),
|
|
458
|
+
requiredMessageSigner: messageSentEventDataKeypair,
|
|
459
|
+
};
|
|
460
|
+
}
|
|
403
461
|
async finalizeTransaction(transaction, provider, userAccount) {
|
|
404
462
|
const connection = provider.connection;
|
|
405
463
|
transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
|