@aptos-labs/cross-chain-core 5.4.14 → 5.4.15-xchaininit.0

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/CrossChainCore.ts","../src/providers/wormhole/wormhole.ts","../src/utils/logger.ts","../src/providers/wormhole/signers/AptosLocalSigner.ts","../src/providers/wormhole/signers/SolanaSigner.ts","../src/providers/wormhole/signers/EthereumSigner.ts","../src/providers/wormhole/signers/AptosSigner.ts","../src/providers/wormhole/signers/Signer.ts","../src/config/types.ts","../src/config/testnet/chains.ts","../src/config/testnet/tokens.ts","../src/config/mainnet/chains.ts","../src/config/mainnet/tokens.ts","../src/utils/getUsdcBalance.ts"],"sourcesContent":["export * from \"./CrossChainCore\";\nexport * from \"./config\";\nexport * from \"./providers/wormhole/index\";\nexport * from \"./providers/wormhole/types\";\nexport { Network } from \"@aptos-labs/ts-sdk\";\n","import { Account, Network } from \"@aptos-labs/ts-sdk\";\n\nimport {\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeProvider,\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse,\n} from \"./providers/wormhole\";\n\nimport {\n ChainsConfig,\n testnetChains,\n testnetTokens,\n mainnetChains,\n mainnetTokens,\n TokenConfig,\n ChainConfig,\n} from \"./config\";\nimport {\n getAptosWalletUSDCBalance,\n getEthereumWalletUSDCBalance,\n getSolanaWalletUSDCBalance,\n} from \"./utils/getUsdcBalance\";\n\nexport interface CrossChainDappConfig {\n aptosNetwork: Network;\n disableTelemetry?: boolean;\n solanaConfig?: {\n rpc?: string;\n priorityFeeConfig?: {\n percentile?: number;\n percentileMultiple?: number;\n min?: number;\n max?: number;\n };\n };\n}\nexport type { AccountAddressInput } from \"@aptos-labs/ts-sdk\";\nexport { NetworkToChainId, NetworkToNodeAPI } from \"@aptos-labs/ts-sdk\";\nexport type AptosAccount = Account;\n\n// List of all the supported chain\nexport type Chain =\n | \"Solana\"\n | \"Ethereum\"\n | \"Sepolia\"\n | \"Aptos\"\n | \"BaseSepolia\"\n | \"ArbitrumSepolia\"\n | \"Avalanche\"\n | \"Base\"\n | \"Arbitrum\"\n | \"PolygonSepolia\"\n | \"Polygon\"\n | \"HyperEVM\";\n\n// Map of Ethereum chain id to testnet chain config\nexport const EthereumChainIdToTestnetChain: Record<string, ChainConfig> = {\n 11155111: testnetChains.Sepolia!,\n 84532: testnetChains.BaseSepolia!,\n 421614: testnetChains.ArbitrumSepolia!,\n 43113: testnetChains.Avalanche!,\n 80002: testnetChains.PolygonSepolia!,\n 998: testnetChains.HyperEVM!,\n};\n\n// Map of Ethereum chain id to mainnet chain config\nexport const EthereumChainIdToMainnetChain: Record<string, ChainConfig> = {\n 1: mainnetChains.Ethereum!,\n 8453: mainnetChains.Base!,\n 42161: mainnetChains.Arbitrum!,\n 43114: mainnetChains.Avalanche!,\n 137: mainnetChains.Polygon!,\n 999: mainnetChains.HyperEVM!,\n};\n\nexport type CCTPProviders = \"Wormhole\";\n\nexport interface CrossChainProvider<\n TQuoteRequest = any,\n TQuoteResponse = any,\n TTransferRequest = any,\n TTransferResponse = any,\n TWithdrawRequest = any,\n TWithdrawResponse = any,\n> {\n getQuote(params: TQuoteRequest): Promise<TQuoteResponse>;\n transfer(params: TTransferRequest): Promise<TTransferResponse>;\n withdraw(params: TWithdrawRequest): Promise<TWithdrawResponse>;\n}\n\nexport class CrossChainCore {\n readonly _dappConfig: CrossChainDappConfig = {\n aptosNetwork: Network.TESTNET,\n };\n\n readonly CHAINS: ChainsConfig = testnetChains;\n readonly TOKENS: Record<string, TokenConfig> = testnetTokens;\n\n constructor(args: { dappConfig: CrossChainDappConfig }) {\n this._dappConfig = args.dappConfig;\n if (args.dappConfig?.aptosNetwork === Network.MAINNET) {\n this.CHAINS = mainnetChains;\n this.TOKENS = mainnetTokens;\n } else {\n this.CHAINS = testnetChains;\n this.TOKENS = testnetTokens;\n }\n }\n\n getProvider(providerType: CCTPProviders): CrossChainProvider {\n switch (providerType) {\n case \"Wormhole\":\n return new WormholeProvider(this) as CrossChainProvider<\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse\n >;\n default:\n throw new Error(`Unknown provider: ${providerType}`);\n }\n }\n\n async getWalletUSDCBalance(\n walletAddress: string,\n sourceChain: Chain\n ): Promise<string> {\n if (sourceChain === \"Aptos\") {\n return await getAptosWalletUSDCBalance(\n walletAddress,\n this._dappConfig.aptosNetwork\n );\n }\n if (!this.CHAINS[sourceChain]) {\n throw new Error(`Unsupported chain: ${sourceChain}`);\n }\n switch (sourceChain) {\n case \"Solana\":\n return await getSolanaWalletUSDCBalance(\n walletAddress,\n this._dappConfig.aptosNetwork,\n this._dappConfig?.solanaConfig?.rpc ??\n this.CHAINS[sourceChain].defaultRpc\n );\n case \"Ethereum\":\n case \"BaseSepolia\":\n case \"Sepolia\":\n case \"Avalanche\":\n case \"ArbitrumSepolia\":\n case \"Arbitrum\":\n case \"Base\":\n case \"PolygonSepolia\":\n case \"Polygon\":\n case \"HyperEVM\":\n return await getEthereumWalletUSDCBalance(\n walletAddress,\n this._dappConfig.aptosNetwork,\n sourceChain,\n // TODO: maybe let the user config it\n this.CHAINS[sourceChain].defaultRpc\n );\n default:\n throw new Error(`Unsupported chain: ${sourceChain}`);\n }\n }\n}\n","import {\n chainToPlatform,\n routes,\n TokenId,\n Wormhole,\n wormhole,\n PlatformLoader,\n TransferState,\n} from \"@wormhole-foundation/sdk\";\nimport { Network, sleep } from \"@aptos-labs/ts-sdk\";\nimport aptos from \"@wormhole-foundation/sdk/aptos\";\nimport solana from \"@wormhole-foundation/sdk/solana\";\nimport evm from \"@wormhole-foundation/sdk/evm\";\n\nimport {\n Chain,\n CrossChainProvider,\n CrossChainCore,\n} from \"../../CrossChainCore\";\nimport { logger } from \"../../utils/logger\";\nimport { AptosLocalSigner } from \"./signers/AptosLocalSigner\";\nimport { Signer } from \"./signers/Signer\";\nimport { ChainConfig } from \"../../config\";\nimport {\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeRouteResponse,\n WormholeRequest,\n WormholeSubmitTransferRequest,\n WormholeStartTransferResponse,\n WormholeClaimTransferRequest,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse,\n} from \"./types\";\nimport { SolanaDerivedWallet } from \"@aptos-labs/derived-wallet-solana\";\nimport { EIP1193DerivedWallet } from \"@aptos-labs/derived-wallet-ethereum\";\n\nexport class WormholeProvider\n implements\n CrossChainProvider<\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse\n >\n{\n private crossChainCore: CrossChainCore;\n\n private _wormholeContext: Wormhole<\"Mainnet\" | \"Testnet\"> | undefined;\n\n private wormholeRoute: WormholeRouteResponse | undefined;\n private wormholeRequest: WormholeRequest | undefined;\n private wormholeQuote: WormholeQuoteResponse | undefined;\n\n constructor(core: CrossChainCore) {\n this.crossChainCore = core;\n }\n\n get wormholeContext(): Wormhole<\"Mainnet\" | \"Testnet\"> | undefined {\n return this._wormholeContext;\n }\n\n private async setWormholeContext(sourceChain: Chain) {\n const dappNetwork = this.crossChainCore._dappConfig?.aptosNetwork;\n if (dappNetwork === Network.DEVNET) {\n throw new Error(\"Devnet is not supported on Wormhole\");\n }\n if (!sourceChain) {\n throw new Error(\"Origin chain not selected\");\n }\n const isMainnet = dappNetwork === Network.MAINNET;\n const platforms: PlatformLoader<any>[] = [aptos, solana, evm];\n\n // Override RPC URLs where the Wormhole SDK has incorrect defaults\n const rpcOverrides = isMainnet\n ? {}\n : {\n chains: {\n // Wormhole SDK has wrong testnet RPC for HyperEVM (uses api. instead of rpc.)\n HyperEVM: {\n rpc: \"https://rpc.hyperliquid-testnet.xyz/evm\",\n },\n },\n };\n\n const wh = await wormhole(\n isMainnet ? \"Mainnet\" : \"Testnet\",\n platforms,\n rpcOverrides\n );\n this._wormholeContext = wh;\n }\n\n private async getRoute(\n sourceChain: Chain,\n destinationChain: Chain\n ): Promise<{\n route: WormholeRouteResponse;\n request: WormholeRequest;\n }> {\n if (!this._wormholeContext) {\n throw new Error(\"Wormhole context not initialized\");\n }\n\n const { sourceToken, destToken } = this.getTokenInfo(\n sourceChain,\n destinationChain\n );\n\n const destContext = this._wormholeContext\n .getPlatform(chainToPlatform(destinationChain))\n .getChain(destinationChain);\n const sourceContext = this._wormholeContext\n .getPlatform(chainToPlatform(sourceChain))\n .getChain(sourceChain);\n\n logger.log(\"sourceContext\", sourceContext);\n logger.log(\"sourceToken\", sourceToken);\n\n logger.log(\"destContext\", destContext);\n logger.log(\"destToken\", destToken);\n\n const request = await routes.RouteTransferRequest.create(\n this._wormholeContext,\n {\n source: sourceToken,\n destination: destToken,\n },\n sourceContext,\n destContext\n );\n\n const resolver = this._wormholeContext.resolver([\n routes.CCTPRoute, // manual CCTP\n ]);\n\n const route = await resolver.findRoutes(request);\n const cctpRoute = route[0];\n\n this.wormholeRoute = cctpRoute;\n this.wormholeRequest = request;\n\n return { route: cctpRoute, request };\n }\n\n async getQuote(input: WormholeQuoteRequest): Promise<WormholeQuoteResponse> {\n const { amount, originChain, type } = input;\n\n if (!this._wormholeContext) {\n await this.setWormholeContext(originChain);\n }\n\n logger.log(\"type\", type);\n // If the type of the transaction is \"transfer\", we want to transfer from a x-chain wallet to the Aptos wallet\n // If the type of the transaction is \"withdraw\", we want to transfer from the Aptos wallet to a x-chain wallet\n const sourceChain = type === \"transfer\" ? originChain : \"Aptos\";\n const destinationChain = type === \"transfer\" ? \"Aptos\" : originChain;\n\n const { route, request } = await this.getRoute(\n sourceChain,\n destinationChain\n );\n\n // TODO what is nativeGas for?\n const transferParams = {\n amount: amount,\n options: { nativeGas: 0 },\n };\n\n const validated = await route.validate(request, transferParams);\n if (!validated.valid) {\n logger.log(\"invalid\", validated.valid);\n throw new Error(`Invalid quote: ${validated.error}`).message;\n }\n const quote = await route.quote(request, validated.params);\n if (!quote.success) {\n logger.log(\"quote failed\", quote.success);\n throw new Error(`Invalid quote: ${quote.error}`).message;\n }\n this.wormholeQuote = quote;\n logger.log(\"quote\", quote);\n return quote;\n }\n\n async submitCCTPTransfer(\n input: WormholeSubmitTransferRequest\n ): Promise<WormholeStartTransferResponse> {\n const { sourceChain, wallet, destinationAddress } = input;\n\n if (!this._wormholeContext) {\n await this.setWormholeContext(sourceChain);\n }\n if (!this.wormholeRoute || !this.wormholeRequest || !this.wormholeQuote) {\n throw new Error(\"Wormhole route, request, or quote not initialized\");\n }\n\n let signerAddress: string;\n\n const chainContext = this.getChainConfig(sourceChain).context;\n\n //const currentAccount = await wallet.getAccount();\n if (chainContext === \"Solana\") {\n signerAddress =\n (wallet as SolanaDerivedWallet).solanaWallet.publicKey?.toBase58() ||\n \"\";\n } else {\n // is Ethereum\n [signerAddress] = await (\n wallet as EIP1193DerivedWallet\n ).eip1193Provider.request({\n method: \"eth_requestAccounts\",\n });\n }\n logger.log(\"signerAddress\", signerAddress);\n\n //const chainContext =\n\n const signer = new Signer(\n this.getChainConfig(sourceChain),\n signerAddress,\n {},\n wallet\n );\n\n logger.log(\"signer\", signer);\n logger.log(\"wormholeRequest\", this.wormholeRequest);\n logger.log(\"wormholeQuote\", this.wormholeQuote);\n\n let receipt = await this.wormholeRoute.initiate(\n this.wormholeRequest,\n signer,\n this.wormholeQuote,\n Wormhole.chainAddress(\"Aptos\", destinationAddress.toString())\n );\n\n const originChainTxnId =\n \"originTxs\" in receipt\n ? receipt.originTxs[receipt.originTxs.length - 1].txid\n : undefined;\n\n return { originChainTxnId: originChainTxnId || \"\", receipt };\n }\n\n async claimCCTPTransfer(\n input: WormholeClaimTransferRequest\n ): Promise<{ destinationChainTxnId: string }> {\n let { receipt, mainSigner, sponsorAccount } = input;\n if (!this.wormholeRoute) {\n throw new Error(\"Wormhole route not initialized\");\n }\n\n logger.log(\"mainSigner\", mainSigner.accountAddress.toString());\n\n let retries = 0;\n const maxRetries = 5;\n const baseDelay = 1000; // Initial delay of 1 second\n\n while (retries < maxRetries) {\n try {\n for await (receipt of this.wormholeRoute.track(receipt, 120 * 1000)) {\n if (receipt.state >= TransferState.SourceInitiated) {\n logger.log(\"Receipt is on track \", receipt);\n\n try {\n const signer = new AptosLocalSigner(\n \"Aptos\",\n {},\n mainSigner, // the account that signs the \"claim\" transaction\n sponsorAccount ? sponsorAccount : undefined // the fee payer account\n );\n\n if (routes.isManual(this.wormholeRoute)) {\n const circleAttestationReceipt =\n await this.wormholeRoute.complete(signer, receipt);\n logger.log(\"Claim receipt: \", circleAttestationReceipt);\n const destinationChainTxnId = signer.claimedTransactionHashes();\n return { destinationChainTxnId };\n } else {\n // Should be unreachable\n return { destinationChainTxnId: \"\" };\n }\n } catch (e) {\n console.error(\"Failed to claim\", e);\n return { destinationChainTxnId: \"\" };\n }\n }\n }\n } catch (e) {\n console.error(\n `Error tracking transfer (attempt ${retries + 1} / ${maxRetries}):`,\n e\n );\n const delay = baseDelay * Math.pow(2, retries); // Exponential backoff\n await sleep(delay);\n retries++;\n }\n }\n // Should be unreachable\n return { destinationChainTxnId: \"\" };\n }\n\n /**\n * Initiates a transfer of USDC funds from the source chain wallet to the destination chain wallet\n * @param args\n * @returns\n */\n async transfer(\n input: WormholeTransferRequest\n ): Promise<WormholeTransferResponse> {\n if (this.crossChainCore._dappConfig?.aptosNetwork === Network.DEVNET) {\n throw new Error(\"Devnet is not supported on Wormhole\");\n }\n // if amount is provided, it is expected to get the quote internally\n // and initiate a transfer automatically\n if (input.amount) {\n await this.getQuote({\n amount: input.amount,\n originChain: input.sourceChain,\n type: \"transfer\",\n });\n }\n // Submit transfer transaction from origin chain\n let { originChainTxnId, receipt } = await this.submitCCTPTransfer(input);\n // Claim transfer transaction on destination chain\n const { destinationChainTxnId } = await this.claimCCTPTransfer({\n receipt,\n mainSigner: input.mainSigner,\n sponsorAccount: input.sponsorAccount,\n });\n return { originChainTxnId, destinationChainTxnId };\n }\n\n async withdraw(\n input: WormholeWithdrawRequest\n ): Promise<WormholeWithdrawResponse> {\n const { sourceChain, wallet, destinationAddress, sponsorAccount } = input;\n logger.log(\"sourceChain\", sourceChain);\n logger.log(\"wallet\", wallet);\n logger.log(\"destinationAddress\", destinationAddress);\n logger.log(\"sponsorAccount\", sponsorAccount);\n\n if (!this._wormholeContext) {\n await this.setWormholeContext(sourceChain);\n }\n if (!this._wormholeContext) {\n throw new Error(\"Wormhole context not initialized\");\n }\n if (!this.wormholeRoute || !this.wormholeRequest || !this.wormholeQuote) {\n throw new Error(\"Wormhole route, request, or quote not initialized\");\n }\n\n const signer = new Signer(\n this.getChainConfig(\"Aptos\"),\n (\n await input.wallet.features[\"aptos:account\"].account()\n ).address.toString(),\n {},\n input.wallet,\n undefined,\n sponsorAccount\n );\n\n logger.log(\"signer\", signer);\n logger.log(\"wormholeRequest\", this.wormholeRequest);\n logger.log(\"wormholeQuote\", this.wormholeQuote);\n logger.log(\n \"Wormhole.chainAddress\",\n Wormhole.chainAddress(sourceChain, input.destinationAddress.toString())\n );\n\n let receipt = await this.wormholeRoute.initiate(\n this.wormholeRequest,\n signer,\n this.wormholeQuote,\n Wormhole.chainAddress(sourceChain, input.destinationAddress.toString())\n );\n logger.log(\"receipt\", receipt);\n\n const originChainTxnId =\n \"originTxs\" in receipt\n ? receipt.originTxs[receipt.originTxs.length - 1].txid\n : undefined;\n\n let retries = 0;\n const maxRetries = 5;\n const baseDelay = 1000; // Initial delay of 1 second\n\n while (retries < maxRetries) {\n try {\n for await (receipt of this.wormholeRoute.track(receipt, 120 * 1000)) {\n if (receipt.state >= TransferState.SourceInitiated) {\n logger.log(\"Receipt is on track \", receipt);\n\n try {\n const signer = new Signer(\n this.getChainConfig(sourceChain),\n destinationAddress.toString(),\n {},\n wallet\n );\n\n if (routes.isManual(this.wormholeRoute)) {\n const circleAttestationReceipt =\n await this.wormholeRoute.complete(signer, receipt);\n logger.log(\"Claim receipt: \", circleAttestationReceipt);\n\n const destinationChainTxnId = signer.claimedTransactionHashes();\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId,\n };\n } else {\n // Should be unreachable\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId: \"\",\n };\n }\n } catch (e) {\n console.error(\"Failed to claim\", e);\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId: \"\",\n };\n }\n }\n }\n } catch (e) {\n console.error(\n `Error tracking transfer (attempt ${retries + 1} / ${maxRetries}):`,\n e\n );\n const delay = baseDelay * Math.pow(2, retries); // Exponential backoff\n await sleep(delay);\n retries++;\n }\n }\n\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId: \"\",\n };\n }\n\n getChainConfig(chain: Chain): ChainConfig {\n const chainConfig =\n this.crossChainCore.CHAINS[\n chain as keyof typeof this.crossChainCore.CHAINS\n ];\n if (!chainConfig) {\n throw new Error(`Chain config not found for chain: ${chain}`);\n }\n return chainConfig;\n }\n\n getTokenInfo(\n sourceChain: Chain,\n destinationChain: Chain\n ): {\n sourceToken: TokenId;\n destToken: TokenId;\n } {\n const sourceToken: TokenId = Wormhole.tokenId(\n this.crossChainCore.TOKENS[sourceChain].tokenId.chain as Chain,\n this.crossChainCore.TOKENS[sourceChain].tokenId.address\n );\n\n const destToken: TokenId = Wormhole.tokenId(\n this.crossChainCore.TOKENS[destinationChain].tokenId.chain as Chain,\n this.crossChainCore.TOKENS[destinationChain].tokenId.address\n );\n\n return { sourceToken, destToken };\n }\n}\n","export const logger = {\n log: (...args: any[]) => {\n if (process.env.NODE_ENV === \"development\") {\n console.log(...args);\n }\n },\n warn: (...args: any[]) => {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(...args);\n }\n },\n error: (...args: any[]) => {\n if (process.env.NODE_ENV === \"development\") {\n console.error(...args);\n }\n },\n};\n","import {\n AccountAuthenticator,\n AnyRawTransaction,\n Aptos,\n AptosConfig,\n Network as AptosNetwork,\n Account,\n} from \"@aptos-labs/ts-sdk\";\n\nimport {\n Chain,\n Network,\n SignAndSendSigner,\n TxHash,\n UnsignedTransaction,\n} from \"@wormhole-foundation/sdk\";\nimport {\n AptosUnsignedTransaction,\n AptosChains,\n} from \"@wormhole-foundation/sdk-aptos\";\nimport { GasStationApiKey } from \"../types\";\n\nexport class AptosLocalSigner<N extends Network, C extends Chain>\n implements SignAndSendSigner<N, C>\n{\n _chain: C;\n _options: any;\n _wallet: Account;\n _sponsorAccount: Account | GasStationApiKey | undefined;\n _claimedTransactionHashes: string;\n\n constructor(\n chain: C,\n options: any,\n wallet: Account,\n feePayerAccount: Account | GasStationApiKey | undefined,\n ) {\n this._chain = chain;\n this._options = options;\n this._wallet = wallet;\n this._sponsorAccount = feePayerAccount;\n this._claimedTransactionHashes = \"\";\n }\n\n chain(): C {\n return this._chain;\n }\n address(): string {\n return this._wallet.accountAddress.toString();\n }\n\n claimedTransactionHashes(): string {\n return this._claimedTransactionHashes;\n }\n /* other methods... */\n\n async signAndSend(txs: UnsignedTransaction<N, C>[]): Promise<TxHash[]> {\n const txHashes: TxHash[] = [];\n\n for (const tx of txs) {\n const txId = await signAndSendTransaction(\n tx as AptosUnsignedTransaction<Network, AptosChains>,\n this._wallet,\n this._sponsorAccount,\n );\n txHashes.push(txId);\n this._claimedTransactionHashes = txId;\n }\n return txHashes;\n }\n}\n\nexport async function signAndSendTransaction(\n request: UnsignedTransaction<Network, AptosChains>,\n wallet: Account,\n sponsorAccount: Account | GasStationApiKey | undefined,\n) {\n if (!wallet) {\n throw new Error(\"Wallet is undefined\");\n }\n\n const payload = request.transaction;\n // The wallets do not handle Uint8Array serialization\n payload.functionArguments = payload.functionArguments.map((a: any) => {\n if (a instanceof Uint8Array) {\n return Array.from(a);\n } else if (typeof a === \"bigint\") {\n return a.toString();\n } else {\n return a;\n }\n });\n\n const aptosConfig = new AptosConfig({\n network: AptosNetwork.TESTNET,\n });\n const aptos = new Aptos(aptosConfig);\n\n const txnToSign = await aptos.transaction.build.simple({\n data: payload,\n sender: wallet.accountAddress.toString(),\n withFeePayer: sponsorAccount ? true : false,\n });\n\n const senderAuthenticator = await aptos.transaction.sign({\n signer: wallet,\n transaction: txnToSign,\n });\n\n const txnToSubmit: {\n transaction: AnyRawTransaction;\n senderAuthenticator: AccountAuthenticator;\n feePayerAuthenticator?: AccountAuthenticator;\n } = {\n transaction: txnToSign,\n senderAuthenticator,\n };\n\n if (sponsorAccount) {\n if (typeof sponsorAccount === \"string\") {\n // TODO: handle gas station integration here\n } else {\n const feePayerSignerAuthenticator = aptos.transaction.signAsFeePayer({\n signer: sponsorAccount as Account,\n transaction: txnToSign,\n });\n txnToSubmit.feePayerAuthenticator = feePayerSignerAuthenticator;\n }\n }\n const response = await aptos.transaction.submit.simple(txnToSubmit);\n\n const tx = await aptos.waitForTransaction({\n transactionHash: response.hash,\n });\n\n return tx.hash;\n}\n","// This function signs and sends the transaction while constantly checking for confirmation\n// and resending the transaction if it hasn't been confirmed after the specified interval\n\nimport {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n ConfirmOptions,\n LAMPORTS_PER_SOL,\n SimulatedTransactionResponse,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport { Transaction } from \"@solana/web3.js\";\nimport { RpcResponseAndContext, SignatureResult } from \"@solana/web3.js\";\nimport {\n determinePriorityFee,\n determinePriorityFeeTritonOne,\n SolanaUnsignedTransaction,\n} from \"@wormhole-foundation/sdk-solana\";\n\nimport { Connection } from \"@solana/web3.js\";\nimport { Network } from \"@wormhole-foundation/sdk\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport { CrossChainCore } from \"../../../CrossChainCore\";\nimport { SolanaDerivedWallet } from \"@aptos-labs/derived-wallet-solana\";\n\nexport type SolanaRpcProvider = \"triton\" | \"helius\" | \"ankr\" | \"unknown\";\n\n// See https://docs.triton.one/chains/solana/sending-txs for more information\nexport async function signAndSendTransaction(\n request: SolanaUnsignedTransaction<Network>,\n wallet: AdapterWallet | undefined,\n options?: ConfirmOptions,\n crossChainCore?: CrossChainCore,\n) {\n if (!wallet || !(wallet instanceof SolanaDerivedWallet)) {\n throw new Error(\"Invalid wallet type or missing Solana wallet\").message;\n }\n\n const commitment = options?.commitment ?? \"finalized\";\n // Solana rpc should come from dapp config\n const connection = new Connection(\n crossChainCore?._dappConfig?.solanaConfig?.rpc ??\n \"https://api.devnet.solana.com\",\n );\n const { blockhash, lastValidBlockHeight } =\n await connection.getLatestBlockhash(commitment);\n\n // Circle Manual CCTP on Wormhole is always of a Trnasaction type\n // https://github.com/wormhole-foundation/wormhole-sdk-ts/blob/f7d992e04f844edcc4128659f12f75ade3553717/platforms/solana/protocols/cctp/src/circleBridge.ts#L173\n const transaction = request.transaction.transaction as Transaction;\n\n /**\n * TODO: Priority Fee is supported, but needs to come from dapp config\n */\n const unsignedTx = await setPriorityFeeInstructions(\n connection,\n blockhash,\n lastValidBlockHeight,\n request,\n crossChainCore,\n );\n\n let confirmTransactionPromise: Promise<\n RpcResponseAndContext<SignatureResult>\n > | null = null;\n let confirmedTx: RpcResponseAndContext<SignatureResult> | null = null;\n let txSendAttempts = 1;\n let signature = \"\";\n\n // transaction.recentBlockhash = blockhash;\n // if (request.transaction.signers) {\n // transaction.partialSign(...request.transaction.signers);\n // }\n\n if (!wallet.solanaWallet.signTransaction) {\n throw new Error(\"Wallet does not support signing transactions\").message;\n }\n\n const tx = await wallet.solanaWallet.signTransaction(unsignedTx);\n\n if (!tx) throw new Error(\"Failed to sign transaction\").message;\n const serializedTx = tx.serialize();\n const sendOptions = {\n skipPreflight: true,\n maxRetries: 0,\n preFlightCommitment: commitment, // See PR and linked issue for why setting this matters: https://github.com/anza-xyz/agave/pull/483\n };\n signature = await connection.sendRawTransaction(serializedTx, sendOptions);\n confirmTransactionPromise = connection.confirmTransaction(\n {\n signature,\n blockhash,\n lastValidBlockHeight,\n },\n commitment,\n );\n\n // This loop will break once the transaction has been confirmed or the block height is exceeded.\n // An exception will be thrown if the block height is exceeded by the confirmTransactionPromise.\n // The transaction will be resent if it hasn't been confirmed after the interval.\n const txRetryInterval = 5000;\n while (!confirmedTx) {\n confirmedTx = await Promise.race([\n confirmTransactionPromise,\n new Promise<null>((resolve) =>\n setTimeout(() => {\n resolve(null);\n }, txRetryInterval),\n ),\n ]);\n if (confirmedTx) {\n break;\n }\n console.log(\n `Tx not confirmed after ${\n txRetryInterval * txSendAttempts++\n }ms, resending`,\n );\n try {\n await connection.sendRawTransaction(serializedTx, sendOptions);\n } catch (e) {\n console.error(\"Failed to resend transaction:\", e);\n }\n }\n\n if (confirmedTx.value.err) {\n let errorMessage = `Transaction failed: ${confirmedTx.value.err}`;\n if (typeof confirmedTx.value.err === \"object\") {\n try {\n errorMessage = `Transaction failed: ${JSON.stringify(\n confirmedTx.value.err,\n (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value, // Handle bigint props\n )}`;\n } catch (e: unknown) {\n // Most likely a circular reference error, we can't stringify this error object.\n // See for more details:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#exceptions\n errorMessage = `Transaction failed: Unknown error`;\n }\n }\n throw new Error(`Transaction failed: ${errorMessage}`).message;\n }\n\n return signature;\n}\n\nexport async function setPriorityFeeInstructions(\n connection: Connection,\n blockhash: string,\n lastValidBlockHeight: number,\n request: SolanaUnsignedTransaction<Network>,\n crossChainCore?: CrossChainCore,\n): Promise<Transaction | VersionedTransaction> {\n const unsignedTx = request.transaction.transaction as Transaction;\n\n const computeBudgetIxFilter = (ix: TransactionInstruction) =>\n ix.programId.toString() !== \"ComputeBudget111111111111111111111111111111\";\n\n unsignedTx.recentBlockhash = blockhash;\n unsignedTx.lastValidBlockHeight = lastValidBlockHeight;\n\n // Remove existing compute budget instructions if they were added by the SDK\n unsignedTx.instructions = unsignedTx.instructions.filter(\n computeBudgetIxFilter,\n );\n unsignedTx.add(\n ...(await createPriorityFeeInstructions(\n connection,\n unsignedTx,\n crossChainCore,\n )),\n );\n if (request.transaction.signers) {\n unsignedTx.partialSign(...request.transaction.signers);\n }\n\n return unsignedTx;\n}\n\n// This will throw if the simulation fails\nasync function createPriorityFeeInstructions(\n connection: Connection,\n transaction: Transaction | VersionedTransaction,\n crossChainCore?: CrossChainCore,\n) {\n let unitsUsed = 200_000;\n let simulationAttempts = 0;\n\n simulationLoop: while (true) {\n const response = await connection.simulateTransaction(\n transaction as Transaction,\n );\n\n if (response.value.err) {\n if (checkKnownSimulationError(response.value)) {\n // Number of attempts will be at most 5 for known errors\n if (simulationAttempts < 5) {\n simulationAttempts++;\n await sleep(1000);\n continue simulationLoop;\n }\n } else if (simulationAttempts < 3) {\n // Number of attempts will be at most 3 for unknown errors\n simulationAttempts++;\n await sleep(1000);\n continue simulationLoop;\n }\n\n // Still failing after multiple attempts for both known and unknown errors\n // We should throw in that case\n throw new Error(\n `Simulation failed: ${JSON.stringify(response.value.err)}\\nLogs:\\n${(\n response.value.logs || []\n ).join(\"\\n \")}`,\n ).message;\n } else {\n // Simulation was successful\n if (response.value.unitsConsumed) {\n unitsUsed = response.value.unitsConsumed;\n }\n break;\n }\n }\n\n const unitBudget = Math.floor(unitsUsed * 1.2); // Budget in 20% headroom\n\n const instructions: TransactionInstruction[] = [];\n instructions.push(\n ComputeBudgetProgram.setComputeUnitLimit({\n // Set compute budget to 120% of the units used in the simulated transaction\n units: unitBudget,\n }),\n );\n\n const {\n percentile = 0.9,\n percentileMultiple = 1,\n min = 100_000,\n max = 100_000_000,\n } = crossChainCore?._dappConfig?.solanaConfig?.priorityFeeConfig ?? {};\n\n const calculateFee = async (\n rpcProvider?: SolanaRpcProvider,\n ): Promise<{ fee: number; methodUsed: \"triton\" | \"default\" | \"minimum\" }> => {\n if (rpcProvider === \"triton\") {\n // Triton has an experimental RPC method that accepts a percentile paramater\n // and usually gives more accurate fee numbers.\n try {\n const fee = await determinePriorityFeeTritonOne(\n connection,\n transaction,\n percentile,\n percentileMultiple,\n min,\n max,\n );\n\n return {\n fee,\n methodUsed: \"triton\",\n };\n } catch (e) {\n console.warn(`Failed to determine priority fee using Triton RPC:`, e);\n }\n }\n\n try {\n // By default, use generic Solana RPC method\n const fee = await determinePriorityFee(\n connection,\n transaction,\n percentile,\n percentileMultiple,\n min,\n max,\n );\n\n return {\n fee,\n methodUsed: \"default\",\n };\n } catch (e) {\n console.warn(`Failed to determine priority fee using Triton RPC:`, e);\n\n return {\n fee: min,\n methodUsed: \"minimum\",\n };\n }\n };\n\n const rpcProvider = determineRpcProvider(connection.rpcEndpoint);\n\n const { fee, methodUsed } = await calculateFee(rpcProvider);\n\n const maxFeeInSol =\n (fee /\n // convert microlamports to lamports\n 1e6 /\n // convert lamports to SOL\n LAMPORTS_PER_SOL) *\n // multiply by maximum compute units used\n unitBudget;\n\n console.table({\n \"RPC Provider\": rpcProvider,\n \"Method used\": methodUsed,\n \"Percentile used\": percentile,\n \"Multiple used\": percentileMultiple,\n \"Compute budget\": unitBudget,\n \"Priority fee\": fee,\n \"Max fee in SOL\": maxFeeInSol,\n });\n\n instructions.push(\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: fee }),\n );\n return instructions;\n}\n\n// Checks response logs for known errors.\n// Returns when the first error is encountered.\nfunction checkKnownSimulationError(\n response: SimulatedTransactionResponse,\n): boolean {\n const errors = {} as any;\n\n // This error occur when the blockhash included in a transaction is not deemed to be valid\n // when a validator processes a transaction. We can retry the simulation to get a valid blockhash.\n if (response.err === \"BlockhashNotFound\") {\n errors[\"BlockhashNotFound\"] =\n \"Blockhash not found during simulation. Trying again.\";\n }\n\n // Check the response logs for any known errors\n if (response.logs) {\n for (const line of response.logs) {\n // In some cases which aren't deterministic, like a slippage error, we can retry the\n // simulation a few times to get a successful response.\n if (line.includes(\"SlippageToleranceExceeded\")) {\n errors[\"SlippageToleranceExceeded\"] =\n \"Slippage failure during simulation. Trying again.\";\n }\n\n // In this case a require_gte expression was violated during a Swap instruction.\n // We can retry the simulation to get a successful response.\n if (line.includes(\"RequireGteViolated\")) {\n errors[\"RequireGteViolated\"] =\n \"Swap instruction failure during simulation. Trying again.\";\n }\n }\n }\n\n // No known simulation errors found\n if (isEmptyObject(errors)) {\n return false;\n }\n\n console.table(errors);\n return true;\n}\n\nexport async function sleep(timeout: number) {\n return new Promise((resolve) => setTimeout(resolve, timeout));\n}\n\n/**\n * Checks whether an object is empty.\n *\n * isEmptyObject(null)\n * // => true\n *\n * isEmptyObject(undefined)\n * // => true\n *\n * isEmptyObject({})\n * // => true\n *\n * isEmptyObject({ 'a': 1 })\n * // => false\n */\nexport const isEmptyObject = (value: object | null | undefined) => {\n if (value === null || value === undefined) {\n return true;\n }\n\n // Check all property keys for any own prop\n for (const key in value) {\n if (value.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n};\n\nfunction determineRpcProvider(endpoint: string): SolanaRpcProvider {\n try {\n const url = new URL(endpoint);\n const hostname = url.hostname;\n if (hostname === \"rpcpool.com\") {\n return \"triton\";\n } else if (hostname === \"helius-rpc.com\") {\n return \"helius\";\n } else if (hostname === \"rpc.ankr.com\") {\n return \"ankr\";\n } else {\n return \"unknown\";\n }\n } catch (e) {\n return \"unknown\";\n }\n}\n","import {\n EvmUnsignedTransaction,\n EvmChains,\n} from \"@wormhole-foundation/sdk-evm\";\nimport { Network } from \"@wormhole-foundation/sdk\";\nimport { ethers, getBigInt } from \"ethers\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport { EIP1193DerivedWallet } from \"@aptos-labs/derived-wallet-ethereum\";\nexport async function signAndSendTransaction(\n request: EvmUnsignedTransaction<Network, EvmChains>,\n wallet: AdapterWallet,\n chainName: string,\n options: any,\n): Promise<string> {\n if (!wallet) {\n throw new Error(\"wallet.sendTransaction is undefined\").message;\n }\n // Ensure the signer is connected to the correct chain\n const chainId = await (\n wallet as EIP1193DerivedWallet\n ).eip1193Provider.request({\n method: \"eth_chainId\",\n });\n const actualChainId = parseInt(chainId, 16);\n\n if (!actualChainId)\n throw new Error(\"No signer found for chain\" + chainName).message;\n const expectedChainId = request.transaction.chainId\n ? getBigInt(request.transaction.chainId)\n : undefined;\n if (\n !actualChainId ||\n !expectedChainId ||\n BigInt(actualChainId) !== expectedChainId\n ) {\n throw new Error(\n `Signer is not connected to the right chain. Expected ${expectedChainId}, got ${actualChainId}`,\n ).message;\n }\n\n const provider = new ethers.BrowserProvider(\n (wallet as EIP1193DerivedWallet).eip1193Provider,\n );\n const signer = await provider.getSigner();\n const response = await signer.sendTransaction(request.transaction);\n const receipt = await response.wait();\n\n return receipt?.hash || \"\";\n}\n","import {\n Account,\n AccountAddress,\n AccountAuthenticator,\n AnyRawTransaction,\n Aptos,\n AptosConfig,\n Network as AptosNetwork,\n Deserializer,\n EntryFunctionArgumentTypes,\n InputGenerateTransactionPayloadData,\n ScriptFunctionArgumentTypes,\n Serializer,\n SimpleEntryFunctionArgumentTypes,\n U64,\n} from \"@aptos-labs/ts-sdk\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport { Network } from \"@wormhole-foundation/sdk\";\nimport {\n AptosChains,\n AptosUnsignedTransaction,\n} from \"@wormhole-foundation/sdk-aptos\";\nimport { GasStationApiKey } from \"..\";\nimport { UserResponseStatus } from \"@aptos-labs/wallet-standard\";\n\nexport async function signAndSendTransaction(\n request: AptosUnsignedTransaction<Network, AptosChains>,\n wallet: AdapterWallet,\n sponsorAccount: Account | GasStationApiKey | undefined,\n) {\n if (!wallet) {\n throw new Error(\"wallet.sendTransaction is undefined\").message;\n }\n\n const payload = request.transaction;\n // The wallets do not handle Uint8Array serialization\n payload.functionArguments = payload.functionArguments.map((a: any) => {\n if (a instanceof Uint8Array) {\n return Array.from(a);\n } else if (typeof a === \"bigint\") {\n return a.toString();\n } else {\n return a;\n }\n });\n\n const aptosConfig = new AptosConfig({\n network: AptosNetwork.TESTNET,\n });\n const aptos = new Aptos(aptosConfig);\n\n // TODO: handle mainnet\n const contractAddress = AptosNetwork.TESTNET\n ? \"0x5e2d961f06cd27aa07554a39d55f5ce1e58dff35d803c3529b1cd5c4fa3ab584\"\n : \"0x1\";\n\n // Wormhole resturns a script function transaction payload, but due to a ts-sdk version mismatch,\n // linter complains on different types - so need to first convert to unknown and then to ScriptFunctionArgumentTypes.\n // Also, tranfering the arguments as it brings some errors (which not sure if bug or not), so we first extract them\n // and then tranform them into the functionArguments.\n const functionArguments = extractFunctionArguments(\n payload.functionArguments as unknown as ScriptFunctionArgumentTypes[],\n );\n\n const transactionData: InputGenerateTransactionPayloadData = {\n // a custom function to withdraw tokens from the aptos chain, published here on testnet:\n // https://explorer.aptoslabs.com/account/0x5e2d961f06cd27aa07554a39d55f5ce1e58dff35d803c3529b1cd5c4fa3ab584/modules/code/withdraw?network=testnet\n function: `${contractAddress}::withdraw::deposit_for_burn`,\n functionArguments,\n };\n\n const txnToSign = await aptos.transaction.build.simple({\n data: transactionData,\n sender: (\n await wallet.features[\"aptos:account\"]?.account()\n ).address.toString(),\n withFeePayer: sponsorAccount ? true : false,\n });\n\n const response =\n await wallet.features[\"aptos:signTransaction\"]?.signTransaction(txnToSign);\n\n if (response?.status === UserResponseStatus.REJECTED) {\n throw new Error(\"User has rejected the request\");\n }\n\n const txnToSubmit: {\n transaction: AnyRawTransaction;\n senderAuthenticator: AccountAuthenticator;\n feePayerAuthenticator?: AccountAuthenticator;\n } = {\n transaction: txnToSign,\n senderAuthenticator: response.args,\n };\n\n if (sponsorAccount) {\n if (typeof sponsorAccount === \"string\") {\n // TODO: handle gas station integration here\n } else {\n const feePayerSignerAuthenticator = aptos.transaction.signAsFeePayer({\n signer: sponsorAccount as Account,\n transaction: txnToSign,\n });\n txnToSubmit.feePayerAuthenticator = feePayerSignerAuthenticator;\n }\n }\n\n const txnSubmitted = await aptos.transaction.submit.simple(txnToSubmit);\n\n const tx = await aptos.waitForTransaction({\n transactionHash: txnSubmitted.hash,\n });\n\n return tx.hash;\n}\n\n/**\n * Extracts the function arguments from the function arguments array and tranform them into types the sdk can ready.\n *\n * Note: we assume the argument types are always [U64, U32, accountAddress, accountAddress] - even tho we use\n * Wormhole fix version in the package.json, if wormhole changes this, we need to update this function.\n * @param functionArguments - The function arguments array.\n * @returns The function arguments.\n */\nfunction extractFunctionArguments(\n functionArguments: ScriptFunctionArgumentTypes[],\n) {\n const deserializer1 = new Deserializer(functionArguments[0].bcsToBytes());\n const amount = deserializer1.deserializeU64();\n\n const deserializer2 = new Deserializer(functionArguments[1].bcsToBytes());\n const destination_domain = deserializer2.deserializeU32();\n\n const mint_recipient = new AccountAddress(functionArguments[2].bcsToBytes());\n\n const burn_token = new AccountAddress(functionArguments[3].bcsToBytes());\n\n return [amount, destination_domain, mint_recipient, burn_token];\n}\n","import {\n UnsignedTransaction,\n Network,\n Chain,\n TxHash,\n SignAndSendSigner,\n} from \"@wormhole-foundation/sdk\";\nimport { SolanaUnsignedTransaction } from \"@wormhole-foundation/sdk-solana\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport {\n EvmUnsignedTransaction,\n EvmChains,\n} from \"@wormhole-foundation/sdk-evm\";\n\nimport * as solanaSigner from \"./SolanaSigner\";\nimport * as ethereumSigner from \"./EthereumSigner\";\nimport * as aptosSigner from \"./AptosSigner\";\n// import {\n// SuiChains,\n// SuiUnsignedTransaction,\n// } from \"@wormhole-foundation/sdk-sui\";\n// import * as suiSigner from \"./SuiSigner\";\n\nimport { ChainConfig } from \"../../../config\";\nimport { CrossChainCore } from \"../../../CrossChainCore\";\nimport { AptosChains } from \"@wormhole-foundation/sdk-aptos/dist/cjs/types\";\nimport { AptosUnsignedTransaction } from \"@wormhole-foundation/sdk-aptos/dist/cjs/unsignedTransaction\";\nimport { GasStationApiKey } from \"../types\";\nimport { Account } from \"@aptos-labs/ts-sdk\";\nexport class Signer<N extends Network, C extends Chain>\n implements SignAndSendSigner<N, C>\n{\n _chain: ChainConfig;\n _address: string;\n _options: any;\n _wallet: AdapterWallet;\n _crossChainCore?: CrossChainCore;\n _sponsorAccount: Account | GasStationApiKey | undefined;\n _claimedTransactionHashes: string;\n\n constructor(\n chain: ChainConfig,\n address: string,\n options: any,\n wallet: AdapterWallet,\n crossChainCore?: CrossChainCore,\n sponsorAccount?: Account | GasStationApiKey | undefined,\n ) {\n this._chain = chain;\n this._address = address;\n this._options = options;\n this._wallet = wallet;\n this._crossChainCore = crossChainCore;\n this._sponsorAccount = sponsorAccount;\n this._claimedTransactionHashes = \"\";\n }\n\n chain(): C {\n return this._chain.key as C;\n }\n address(): string {\n return this._address;\n }\n\n claimedTransactionHashes(): string {\n return this._claimedTransactionHashes;\n }\n\n async signAndSend(txs: UnsignedTransaction<N, C>[]): Promise<TxHash[]> {\n const txHashes: TxHash[] = [];\n\n for (const tx of txs) {\n const txId = await signAndSendTransaction(\n this._chain,\n tx,\n this._wallet,\n this._options,\n this._crossChainCore,\n this._sponsorAccount,\n );\n txHashes.push(txId);\n this._claimedTransactionHashes = txId;\n }\n return txHashes;\n }\n}\n\nexport const signAndSendTransaction = async (\n chain: ChainConfig,\n request: UnsignedTransaction<Network, Chain>,\n wallet: AdapterWallet,\n options: any = {},\n crossChainCore?: CrossChainCore,\n sponsorAccount?: Account | GasStationApiKey | undefined,\n): Promise<string> => {\n if (!wallet) {\n throw new Error(\"wallet is undefined\");\n }\n\n if (chain.context === \"Solana\") {\n const signature = await solanaSigner.signAndSendTransaction(\n request as SolanaUnsignedTransaction<Network>,\n wallet,\n options,\n crossChainCore,\n );\n return signature;\n } else if (chain.context === \"Ethereum\") {\n const tx = await ethereumSigner.signAndSendTransaction(\n request as EvmUnsignedTransaction<Network, EvmChains>,\n wallet,\n chain.displayName,\n options,\n );\n return tx;\n } else if (chain.context === \"Aptos\") {\n const tx = await aptosSigner.signAndSendTransaction(\n request as AptosUnsignedTransaction<Network, AptosChains>,\n wallet,\n sponsorAccount,\n );\n return tx;\n } else {\n throw new Error(`Unsupported chain: ${chain}`);\n }\n};\n","import { Chain } from \"../CrossChainCore\";\n\nexport enum Context {\n ETH = \"Ethereum\",\n SOLANA = \"Solana\",\n APTOS = \"Aptos\",\n}\n\nexport type BaseChainConfig = {\n key: Chain;\n context: Context;\n disabledAsSource?: boolean;\n disabledAsDestination?: boolean;\n};\n\nexport interface ChainConfig extends BaseChainConfig {\n defaultRpc: string;\n displayName: string;\n explorerUrl: string;\n explorerName: string;\n chainId: number | string;\n icon: Chain;\n symbol?: string;\n}\n\nexport type ChainsConfig = {\n [chain in Chain]?: ChainConfig;\n};\n\nexport type TokenConfig = {\n symbol: string;\n name?: string;\n decimals: number;\n icon: string;\n tokenId: {\n chain: Chain;\n address: string;\n };\n};\n","import { Context, ChainsConfig } from \"../types\";\n\nexport const testnetChains: ChainsConfig = {\n Sepolia: {\n key: \"Sepolia\",\n context: Context.ETH,\n chainId: 11155111,\n displayName: \"Sepolia\",\n explorerUrl: \"https://sepolia.etherscan.io/\",\n explorerName: \"Etherscan\",\n icon: \"Ethereum\",\n symbol: \"SepoliaETH\",\n defaultRpc: \"https://ethereum-sepolia-rpc.publicnode.com\",\n },\n BaseSepolia: {\n key: \"BaseSepolia\",\n context: Context.ETH,\n chainId: 84532,\n displayName: \"Base Sepolia\",\n explorerUrl: \"https://sepolia.basescan.org\",\n explorerName: \"Basescan\",\n icon: \"BaseSepolia\",\n symbol: \"BASE\",\n defaultRpc:\n \"https://chain-proxy.wallet.coinbase.com?targetName=base-sepolia\",\n },\n ArbitrumSepolia: {\n key: \"ArbitrumSepolia\",\n context: Context.ETH,\n chainId: 421614,\n displayName: \"Arbitrum Sepolia\",\n explorerUrl: \"https://sepolia.arbiscan.io\",\n explorerName: \"Etherscan\",\n icon: \"Arbitrum\",\n symbol: \"ARB\",\n defaultRpc: \"https://sepolia-rollup.arbitrum.io/rpc\",\n },\n Avalanche: {\n key: \"Avalanche\",\n context: Context.ETH,\n chainId: 43113,\n displayName: \"Avalanche Fuji\",\n explorerUrl: \"https://testnet.snowtrace.io\",\n explorerName: \"Avascan\",\n icon: \"Avalanche\",\n symbol: \"AVAX\",\n defaultRpc: \"https://api.avax-test.network/ext/bc/C/rpc\",\n },\n PolygonSepolia: {\n key: \"PolygonSepolia\",\n context: Context.ETH,\n chainId: 80002,\n displayName: \"Polygon\",\n explorerUrl: \"https://amoy.polygonscan.com/\",\n explorerName: \"PolygonScan\",\n icon: \"Polygon\",\n symbol: \"MATIC\",\n defaultRpc: \"https://rpc-amoy.polygon.technology/\",\n },\n HyperEVM: {\n key: \"HyperEVM\",\n context: Context.ETH,\n chainId: 998,\n displayName: \"HyperEVM\",\n explorerUrl: \"https://testnet.purrsec.com\",\n explorerName: \"Purrsec testnet\",\n icon: \"HyperEVM\",\n symbol: \"HYPE\",\n defaultRpc: \"https://rpc.hyperliquid-testnet.xyz/evm\",\n },\n Solana: {\n key: \"Solana\",\n context: Context.SOLANA,\n displayName: \"Solana\",\n explorerUrl: \"https://explorer.solana.com/\",\n explorerName: \"Solana Explorer\",\n chainId: 0,\n icon: \"Solana\",\n symbol: \"SOL\",\n defaultRpc: \"https://api.devnet.solana.com\",\n },\n Aptos: {\n key: \"Aptos\",\n context: Context.APTOS,\n displayName: \"Aptos\",\n explorerUrl: \"https://explorer.aptoslabs.com?network=testnet\",\n explorerName: \"Aptos Explorer\",\n chainId: 0,\n icon: \"Aptos\",\n symbol: \"APT\",\n defaultRpc: \"https://fullnode.testnet.aptos.dev\",\n },\n // Sui: {\n // key: \"Sui\",\n // id: 21,\n // context: Context.SUI,\n // finalityThreshold: 0,\n // displayName: \"Sui\",\n // explorerUrl: \"https://suiscan.xyz/testnet/\",\n // explorerName: \"Suiscan\",\n // gasToken: \"SUI\",\n // chainId: 0,\n // icon: \"Sui\",\n // maxBlockSearch: 0,\n // symbol: \"SUI\",\n // sdkName: \"Sui\",\n // },\n};\n","import { TokenConfig } from \"../types\";\n\nexport const testnetTokens: Record<string, TokenConfig> = {\n Sepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Sepolia\",\n address: \"0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238\",\n },\n },\n Solana: {\n symbol: \"USDC\",\n tokenId: {\n chain: \"Solana\",\n address: \"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\",\n },\n icon: \"USDC\",\n decimals: 6,\n },\n Aptos: {\n symbol: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Aptos\",\n address:\n \"0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832\",\n },\n icon: \"USDC\",\n },\n BaseSepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"BaseSepolia\",\n address: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n },\n },\n Avalanche: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Avalanche\",\n address: \"0x5425890298aed601595a70AB815c96711a31Bc65\",\n },\n },\n ArbitrumSepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"ArbitrumSepolia\",\n address: \"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d\",\n },\n },\n PolygonSepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"PolygonSepolia\",\n address: \"0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582\",\n },\n },\n HyperEVM: {\n symbol: \"USDC\",\n icon: \"USDC\",\n tokenId: {\n chain: \"HyperEVM\",\n address: \"0x2B3370eE501B4a559b57D449569354196457D8Ab\",\n },\n decimals: 6,\n },\n // Sui: {\n // symbol: \"USDC\",\n // tokenId: {\n // chain: \"Sui\",\n // address:\n // \"0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC\",\n // },\n // icon: \"USDC\",\n // decimals: 6,\n // },\n};\n","import { Context, ChainsConfig } from \"../types\";\n\nexport const mainnetChains: ChainsConfig = {\n Ethereum: {\n key: \"Ethereum\",\n context: Context.ETH,\n displayName: \"Ethereum\",\n explorerUrl: \"https://etherscan.io/\",\n explorerName: \"Etherscan\",\n chainId: 1,\n icon: \"Ethereum\",\n symbol: \"ETH\",\n defaultRpc: \"https://rpc.ankr.com/eth\",\n },\n Solana: {\n key: \"Solana\",\n context: Context.SOLANA,\n displayName: \"Solana\",\n explorerUrl: \"https://explorer.solana.com/\",\n explorerName: \"Solana Explorer\",\n chainId: 0,\n icon: \"Solana\",\n symbol: \"SOL\",\n defaultRpc: \"https://solana-mainnet.rpc.extrnode.com\",\n },\n Aptos: {\n key: \"Aptos\",\n context: Context.APTOS,\n displayName: \"Aptos\",\n explorerUrl: \"https://explorer.aptoslabs.com/\",\n explorerName: \"Aptos Explorer\",\n chainId: 0,\n icon: \"Aptos\",\n symbol: \"APT\",\n defaultRpc: \"https://fullnode.mainnet.aptos.dev\",\n },\n Avalanche: {\n key: \"Avalanche\",\n context: Context.ETH,\n chainId: 43114,\n displayName: \"Avalanche\",\n explorerUrl: \"https://snowtrace.io\",\n explorerName: \"Avascan\",\n icon: \"Avalanche\",\n symbol: \"AVAX\",\n defaultRpc: \"https://avalanche-c-chain-rpc.publicnode.com\",\n },\n Base: {\n key: \"Base\",\n context: Context.ETH,\n chainId: 8453,\n displayName: \"Base\",\n explorerUrl: \"https://basescan.org\",\n explorerName: \"BaseScan\",\n icon: \"Base\",\n symbol: \"BASE\",\n defaultRpc: \"https://mainnet.base.org\",\n },\n HyperEVM: {\n key: \"HyperEVM\",\n context: Context.ETH,\n chainId: 999,\n displayName: \"HyperEVM\",\n explorerUrl: \"https://hyperevmscan.io/\",\n explorerName: \"HyperEVMScan\",\n icon: \"HyperEVM\",\n symbol: \"HYPE\",\n defaultRpc: \"https://rpc.hyperliquid.xyz/evm\",\n },\n Arbitrum: {\n key: \"Arbitrum\",\n context: Context.ETH,\n chainId: 42161,\n displayName: \"Arbitrum\",\n explorerUrl: \"https://arbiscan.io/\",\n explorerName: \"Arbitrum Explorer\",\n icon: \"Arbitrum\",\n symbol: \"ARB\",\n defaultRpc: \"https://arb1.arbitrum.io/rpc\",\n },\n Polygon: {\n key: \"Polygon\",\n context: Context.ETH,\n chainId: 137,\n displayName: \"Polygon\",\n explorerUrl: \"https://polygonscan.com/\",\n explorerName: \"PolygonScan\",\n icon: \"Polygon\",\n symbol: \"MATIC\",\n defaultRpc: \"https://polygon-bor-rpc.publicnode.com\",\n },\n // Sui: {\n // key: \"Sui\",\n // id: 21,\n // context: Context.SUI,\n // finalityThreshold: 0,\n // displayName: \"Sui\",\n // sdkName: \"Sui\",\n // explorerUrl: \"https://suiscan.xyz/\",\n // explorerName: \"Suiscan\",\n // gasToken: \"SUI\",\n // chainId: 0,\n // icon: \"Sui\",\n // maxBlockSearch: 0,\n // symbol: \"SUI\",\n // },\n};\n","import { TokenConfig } from \"../types\";\n\nexport const mainnetTokens: Record<string, TokenConfig> = {\n Ethereum: {\n symbol: \"USDC\",\n tokenId: {\n chain: \"Ethereum\",\n address: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n },\n icon: \"USDC\",\n decimals: 6,\n },\n Solana: {\n symbol: \"USDC\",\n tokenId: {\n chain: \"Solana\",\n address: \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n },\n icon: \"USDC\",\n decimals: 6,\n },\n Aptos: {\n symbol: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Aptos\",\n address:\n \"0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b\",\n },\n icon: \"USDC\",\n },\n Base: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Base\",\n address: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n },\n },\n Arbitrum: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Arbitrum\",\n address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n },\n },\n Avalanche: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Avalanche\",\n address: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n },\n },\n Polygon: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Polygon\",\n address: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n },\n },\n HyperEVM: {\n symbol: \"USDC\",\n icon: \"USDC\",\n tokenId: {\n chain: \"HyperEVM\",\n address: \"0xb88339CB7199b77E23DB6E890353E22632Ba630f\",\n },\n decimals: 6,\n },\n // Sui: {\n // symbol: \"USDC\",\n // decimals: 6,\n // tokenId: {\n // chain: \"Sui\",\n // address:\n // \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\",\n // },\n // icon: \"USDC\",\n // },\n};\n","import { Aptos, AptosConfig, Network } from \"@aptos-labs/ts-sdk\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { mainnetTokens, testnetTokens } from \"../config\";\nimport { ethers, JsonRpcProvider } from \"ethers\";\nimport { Chain } from \"../CrossChainCore\";\n\nexport const getSolanaWalletUSDCBalance = async (\n walletAddress: string,\n aptosNetwork: Network,\n rpc: string\n): Promise<string> => {\n const address = new PublicKey(walletAddress);\n const tokenAddress =\n aptosNetwork === Network.MAINNET\n ? mainnetTokens[\"Solana\"].tokenId.address\n : testnetTokens[\"Solana\"].tokenId.address;\n\n const connection = new Connection(rpc);\n // Check to see if we were passed wallet address or token account\n const splToken = await connection.getTokenAccountsByOwner(address, {\n mint: new PublicKey(tokenAddress),\n });\n\n // Use the first token account if it exists, otherwise fall back to wallet address\n const checkAddress =\n splToken.value.length > 0 ? splToken.value[0]!.pubkey : address;\n\n const balance = await connection.getTokenAccountBalance(checkAddress);\n\n return (\n balance.value.uiAmountString ??\n (Number(balance.value.amount) / 10 ** balance.value.decimals).toString()\n );\n};\n\nexport const getEthereumWalletUSDCBalance = async (\n walletAddress: string,\n aptosNetwork: Network,\n chain: Chain,\n rpc: string\n): Promise<string> => {\n console.log(\"chain\", chain);\n const token =\n aptosNetwork === Network.MAINNET\n ? mainnetTokens[chain]\n : testnetTokens[chain];\n\n const tokenAddress = token.tokenId.address;\n const connection = new JsonRpcProvider(rpc);\n const abi = [\"function balanceOf(address owner) view returns (uint256)\"];\n const contract = new ethers.Contract(tokenAddress, abi, connection);\n const balance = await contract.balanceOf(walletAddress);\n return ethers.formatUnits(balance, token.decimals).toString();\n};\n\nexport const getAptosWalletUSDCBalance = async (\n walletAddress: string,\n aptosNetwork: Network\n): Promise<string> => {\n const token =\n aptosNetwork === Network.MAINNET\n ? mainnetTokens[\"Aptos\"]\n : testnetTokens[\"Aptos\"];\n const tokenAddress = token.tokenId.address;\n const aptosConfig = new AptosConfig({ network: aptosNetwork });\n const connection = new Aptos(aptosConfig);\n const response = await connection.getCurrentFungibleAssetBalances({\n options: {\n where: {\n owner_address: { _eq: walletAddress },\n asset_type: { _eq: tokenAddress },\n },\n },\n });\n if (response.length === 0) {\n return \"0\";\n }\n const balance = (\n Number(response[0].amount) /\n 10 ** token.decimals\n ).toString();\n return balance;\n};\n"],"mappings":"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","names":["import_ts_sdk","import_ts_sdk","AptosNetwork","aptos","import_web3","signAndSendTransaction","rpcProvider","fee","signAndSendTransaction","import_ts_sdk","signAndSendTransaction","AptosNetwork","aptos","signAndSendTransaction","aptos","solana","evm","signer","Context","import_ts_sdk","import_web3","import_ethers","import_ts_sdk","import_ts_sdk"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/CrossChainCore.ts","../src/providers/wormhole/wormhole.ts","../src/utils/logger.ts","../src/providers/wormhole/signers/AptosLocalSigner.ts","../src/providers/wormhole/signers/SolanaSigner.ts","../src/providers/wormhole/signers/EthereumSigner.ts","../src/providers/wormhole/signers/AptosSigner.ts","../src/providers/wormhole/signers/Signer.ts","../src/config/types.ts","../src/config/testnet/chains.ts","../src/config/testnet/tokens.ts","../src/config/mainnet/chains.ts","../src/config/mainnet/tokens.ts","../src/utils/getUsdcBalance.ts"],"sourcesContent":["export * from \"./CrossChainCore\";\nexport * from \"./config\";\nexport * from \"./providers/wormhole/index\";\nexport * from \"./providers/wormhole/types\";\nexport { Network } from \"@aptos-labs/ts-sdk\";\n","import { Account, Network } from \"@aptos-labs/ts-sdk\";\n\nimport {\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeProvider,\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse,\n} from \"./providers/wormhole\";\n\nimport {\n ChainsConfig,\n testnetChains,\n testnetTokens,\n mainnetChains,\n mainnetTokens,\n TokenConfig,\n ChainConfig,\n} from \"./config\";\nimport {\n getAptosWalletUSDCBalance,\n getEthereumWalletUSDCBalance,\n getSolanaWalletUSDCBalance,\n} from \"./utils/getUsdcBalance\";\n\nexport interface CrossChainDappConfig {\n aptosNetwork: Network;\n disableTelemetry?: boolean;\n solanaConfig?: {\n rpc?: string;\n priorityFeeConfig?: {\n percentile?: number;\n percentileMultiple?: number;\n min?: number;\n max?: number;\n };\n };\n}\nexport type { AccountAddressInput } from \"@aptos-labs/ts-sdk\";\nexport { NetworkToChainId, NetworkToNodeAPI } from \"@aptos-labs/ts-sdk\";\nexport type AptosAccount = Account;\n\n// List of all the supported chain\nexport type Chain =\n | \"Solana\"\n | \"Ethereum\"\n | \"Sepolia\"\n | \"Aptos\"\n | \"BaseSepolia\"\n | \"ArbitrumSepolia\"\n | \"Avalanche\"\n | \"Base\"\n | \"Arbitrum\"\n | \"PolygonSepolia\"\n | \"Polygon\";\n\n// Map of Ethereum chain id to testnet chain config\nexport const EthereumChainIdToTestnetChain: Record<string, ChainConfig> = {\n 11155111: testnetChains.Sepolia!,\n 84532: testnetChains.BaseSepolia!,\n 421614: testnetChains.ArbitrumSepolia!,\n 43113: testnetChains.Avalanche!,\n 80002: testnetChains.PolygonSepolia!,\n};\n\n// Map of Ethereum chain id to mainnet chain config\nexport const EthereumChainIdToMainnetChain: Record<string, ChainConfig> = {\n 1: mainnetChains.Ethereum!,\n 8453: mainnetChains.Base!,\n 42161: mainnetChains.Arbitrum!,\n 43114: mainnetChains.Avalanche!,\n 137: mainnetChains.Polygon!,\n};\n\nexport type CCTPProviders = \"Wormhole\";\n\nexport interface CrossChainProvider<\n TQuoteRequest = any,\n TQuoteResponse = any,\n TTransferRequest = any,\n TTransferResponse = any,\n TWithdrawRequest = any,\n TWithdrawResponse = any,\n> {\n getQuote(params: TQuoteRequest): Promise<TQuoteResponse>;\n transfer(params: TTransferRequest): Promise<TTransferResponse>;\n withdraw(params: TWithdrawRequest): Promise<TWithdrawResponse>;\n}\n\nexport class CrossChainCore {\n readonly _dappConfig: CrossChainDappConfig = {\n aptosNetwork: Network.TESTNET,\n };\n\n readonly CHAINS: ChainsConfig = testnetChains;\n readonly TOKENS: Record<string, TokenConfig> = testnetTokens;\n\n constructor(args: { dappConfig: CrossChainDappConfig }) {\n this._dappConfig = args.dappConfig;\n if (args.dappConfig?.aptosNetwork === Network.MAINNET) {\n this.CHAINS = mainnetChains;\n this.TOKENS = mainnetTokens;\n } else {\n this.CHAINS = testnetChains;\n this.TOKENS = testnetTokens;\n }\n }\n\n getProvider(providerType: CCTPProviders): CrossChainProvider {\n switch (providerType) {\n case \"Wormhole\":\n return new WormholeProvider(this) as CrossChainProvider<\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse\n >;\n default:\n throw new Error(`Unknown provider: ${providerType}`);\n }\n }\n\n async getWalletUSDCBalance(\n walletAddress: string,\n sourceChain: Chain,\n ): Promise<string> {\n if (sourceChain === \"Aptos\") {\n return await getAptosWalletUSDCBalance(\n walletAddress,\n this._dappConfig.aptosNetwork,\n );\n }\n if (!this.CHAINS[sourceChain]) {\n throw new Error(`Unsupported chain: ${sourceChain}`);\n }\n switch (sourceChain) {\n case \"Solana\":\n return await getSolanaWalletUSDCBalance(\n walletAddress,\n this._dappConfig.aptosNetwork,\n this._dappConfig?.solanaConfig?.rpc ??\n this.CHAINS[sourceChain].defaultRpc,\n );\n case \"Ethereum\":\n case \"BaseSepolia\":\n case \"Sepolia\":\n case \"Avalanche\":\n case \"ArbitrumSepolia\":\n case \"Arbitrum\":\n case \"Base\":\n case \"PolygonSepolia\":\n case \"Polygon\":\n return await getEthereumWalletUSDCBalance(\n walletAddress,\n this._dappConfig.aptosNetwork,\n sourceChain,\n // TODO: maybe let the user config it\n this.CHAINS[sourceChain].defaultRpc,\n );\n default:\n throw new Error(`Unsupported chain: ${sourceChain}`);\n }\n }\n}\n","import {\n chainToPlatform,\n routes,\n TokenId,\n Wormhole,\n wormhole,\n PlatformLoader,\n TransferState,\n} from \"@wormhole-foundation/sdk\";\nimport { Network, sleep } from \"@aptos-labs/ts-sdk\";\nimport aptos from \"@wormhole-foundation/sdk/aptos\";\nimport solana from \"@wormhole-foundation/sdk/solana\";\nimport evm from \"@wormhole-foundation/sdk/evm\";\n\nimport {\n Chain,\n CrossChainProvider,\n CrossChainCore,\n} from \"../../CrossChainCore\";\nimport { logger } from \"../../utils/logger\";\nimport { AptosLocalSigner } from \"./signers/AptosLocalSigner\";\nimport { Signer } from \"./signers/Signer\";\nimport { ChainConfig } from \"../../config\";\nimport {\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeRouteResponse,\n WormholeRequest,\n WormholeSubmitTransferRequest,\n WormholeStartTransferResponse,\n WormholeClaimTransferRequest,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse,\n} from \"./types\";\nimport { SolanaDerivedWallet } from \"@aptos-labs/derived-wallet-solana\";\nimport { EIP1193DerivedWallet } from \"@aptos-labs/derived-wallet-ethereum\";\n\nexport class WormholeProvider\n implements\n CrossChainProvider<\n WormholeQuoteRequest,\n WormholeQuoteResponse,\n WormholeTransferRequest,\n WormholeTransferResponse,\n WormholeWithdrawRequest,\n WormholeWithdrawResponse\n >\n{\n private crossChainCore: CrossChainCore;\n\n private _wormholeContext: Wormhole<\"Mainnet\" | \"Testnet\"> | undefined;\n\n private wormholeRoute: WormholeRouteResponse | undefined;\n private wormholeRequest: WormholeRequest | undefined;\n private wormholeQuote: WormholeQuoteResponse | undefined;\n\n constructor(core: CrossChainCore) {\n this.crossChainCore = core;\n }\n\n get wormholeContext(): Wormhole<\"Mainnet\" | \"Testnet\"> | undefined {\n return this._wormholeContext;\n }\n\n private async setWormholeContext(sourceChain: Chain) {\n const dappNetwork = this.crossChainCore._dappConfig?.aptosNetwork;\n if (dappNetwork === Network.DEVNET) {\n throw new Error(\"Devnet is not supported on Wormhole\");\n }\n if (!sourceChain) {\n throw new Error(\"Origin chain not selected\");\n }\n const isMainnet = dappNetwork === Network.MAINNET;\n const platforms: PlatformLoader<any>[] = [aptos, solana, evm];\n const wh = await wormhole(isMainnet ? \"Mainnet\" : \"Testnet\", platforms);\n this._wormholeContext = wh;\n }\n\n private async getRoute(\n sourceChain: Chain,\n destinationChain: Chain,\n ): Promise<{\n route: WormholeRouteResponse;\n request: WormholeRequest;\n }> {\n if (!this._wormholeContext) {\n throw new Error(\"Wormhole context not initialized\");\n }\n\n const { sourceToken, destToken } = this.getTokenInfo(\n sourceChain,\n destinationChain,\n );\n\n const destContext = this._wormholeContext\n .getPlatform(chainToPlatform(destinationChain))\n .getChain(destinationChain);\n const sourceContext = this._wormholeContext\n .getPlatform(chainToPlatform(sourceChain))\n .getChain(sourceChain);\n\n logger.log(\"sourceContext\", sourceContext);\n logger.log(\"sourceToken\", sourceToken);\n\n logger.log(\"destContext\", destContext);\n logger.log(\"destToken\", destToken);\n\n const request = await routes.RouteTransferRequest.create(\n this._wormholeContext,\n {\n source: sourceToken,\n destination: destToken,\n },\n sourceContext,\n destContext,\n );\n\n const resolver = this._wormholeContext.resolver([\n routes.CCTPRoute, // manual CCTP\n ]);\n\n const route = await resolver.findRoutes(request);\n const cctpRoute = route[0];\n\n this.wormholeRoute = cctpRoute;\n this.wormholeRequest = request;\n\n return { route: cctpRoute, request };\n }\n\n async getQuote(input: WormholeQuoteRequest): Promise<WormholeQuoteResponse> {\n const { amount, originChain, type } = input;\n\n if (!this._wormholeContext) {\n await this.setWormholeContext(originChain);\n }\n\n logger.log(\"type\", type);\n // If the type of the transaction is \"transfer\", we want to transfer from a x-chain wallet to the Aptos wallet\n // If the type of the transaction is \"withdraw\", we want to transfer from the Aptos wallet to a x-chain wallet\n const sourceChain = type === \"transfer\" ? originChain : \"Aptos\";\n const destinationChain = type === \"transfer\" ? \"Aptos\" : originChain;\n\n const { route, request } = await this.getRoute(\n sourceChain,\n destinationChain,\n );\n\n // TODO what is nativeGas for?\n const transferParams = {\n amount: amount,\n options: { nativeGas: 0 },\n };\n\n const validated = await route.validate(request, transferParams);\n if (!validated.valid) {\n logger.log(\"invalid\", validated.valid);\n throw new Error(`Invalid quote: ${validated.error}`).message;\n }\n const quote = await route.quote(request, validated.params);\n if (!quote.success) {\n logger.log(\"quote failed\", quote.success);\n throw new Error(`Invalid quote: ${quote.error}`).message;\n }\n this.wormholeQuote = quote;\n logger.log(\"quote\", quote);\n return quote;\n }\n\n async submitCCTPTransfer(\n input: WormholeSubmitTransferRequest,\n ): Promise<WormholeStartTransferResponse> {\n const { sourceChain, wallet, destinationAddress } = input;\n\n if (!this._wormholeContext) {\n await this.setWormholeContext(sourceChain);\n }\n if (!this.wormholeRoute || !this.wormholeRequest || !this.wormholeQuote) {\n throw new Error(\"Wormhole route, request, or quote not initialized\");\n }\n\n let signerAddress: string;\n\n const chainContext = this.getChainConfig(sourceChain).context;\n\n //const currentAccount = await wallet.getAccount();\n if (chainContext === \"Solana\") {\n signerAddress =\n (wallet as SolanaDerivedWallet).solanaWallet.publicKey?.toBase58() ||\n \"\";\n } else {\n // is Ethereum\n [signerAddress] = await (\n wallet as EIP1193DerivedWallet\n ).eip1193Provider.request({\n method: \"eth_requestAccounts\",\n });\n }\n logger.log(\"signerAddress\", signerAddress);\n\n //const chainContext =\n\n const signer = new Signer(\n this.getChainConfig(sourceChain),\n signerAddress,\n {},\n wallet,\n );\n\n logger.log(\"signer\", signer);\n logger.log(\"wormholeRequest\", this.wormholeRequest);\n logger.log(\"wormholeQuote\", this.wormholeQuote);\n\n let receipt = await this.wormholeRoute.initiate(\n this.wormholeRequest,\n signer,\n this.wormholeQuote,\n Wormhole.chainAddress(\"Aptos\", destinationAddress.toString()),\n );\n\n const originChainTxnId =\n \"originTxs\" in receipt\n ? receipt.originTxs[receipt.originTxs.length - 1].txid\n : undefined;\n\n return { originChainTxnId: originChainTxnId || \"\", receipt };\n }\n\n async claimCCTPTransfer(\n input: WormholeClaimTransferRequest,\n ): Promise<{ destinationChainTxnId: string }> {\n let { receipt, mainSigner, sponsorAccount } = input;\n if (!this.wormholeRoute) {\n throw new Error(\"Wormhole route not initialized\");\n }\n\n logger.log(\"mainSigner\", mainSigner.accountAddress.toString());\n\n let retries = 0;\n const maxRetries = 5;\n const baseDelay = 1000; // Initial delay of 1 second\n\n while (retries < maxRetries) {\n try {\n for await (receipt of this.wormholeRoute.track(receipt, 120 * 1000)) {\n if (receipt.state >= TransferState.SourceInitiated) {\n logger.log(\"Receipt is on track \", receipt);\n\n try {\n const signer = new AptosLocalSigner(\n \"Aptos\",\n {},\n mainSigner, // the account that signs the \"claim\" transaction\n sponsorAccount ? sponsorAccount : undefined, // the fee payer account\n );\n\n if (routes.isManual(this.wormholeRoute)) {\n const circleAttestationReceipt =\n await this.wormholeRoute.complete(signer, receipt);\n logger.log(\"Claim receipt: \", circleAttestationReceipt);\n const destinationChainTxnId = signer.claimedTransactionHashes();\n return { destinationChainTxnId };\n } else {\n // Should be unreachable\n return { destinationChainTxnId: \"\" };\n }\n } catch (e) {\n console.error(\"Failed to claim\", e);\n return { destinationChainTxnId: \"\" };\n }\n }\n }\n } catch (e) {\n console.error(\n `Error tracking transfer (attempt ${retries + 1} / ${maxRetries}):`,\n e,\n );\n const delay = baseDelay * Math.pow(2, retries); // Exponential backoff\n await sleep(delay);\n retries++;\n }\n }\n // Should be unreachable\n return { destinationChainTxnId: \"\" };\n }\n\n /**\n * Initiates a transfer of USDC funds from the source chain wallet to the destination chain wallet\n * @param args\n * @returns\n */\n async transfer(\n input: WormholeTransferRequest,\n ): Promise<WormholeTransferResponse> {\n if (this.crossChainCore._dappConfig?.aptosNetwork === Network.DEVNET) {\n throw new Error(\"Devnet is not supported on Wormhole\");\n }\n // if amount is provided, it is expected to get the quote internally\n // and initiate a transfer automatically\n if (input.amount) {\n await this.getQuote({\n amount: input.amount,\n originChain: input.sourceChain,\n type: \"transfer\",\n });\n }\n // Submit transfer transaction from origin chain\n let { originChainTxnId, receipt } = await this.submitCCTPTransfer(input);\n // Claim transfer transaction on destination chain\n const { destinationChainTxnId } = await this.claimCCTPTransfer({\n receipt,\n mainSigner: input.mainSigner,\n sponsorAccount: input.sponsorAccount,\n });\n return { originChainTxnId, destinationChainTxnId };\n }\n\n async withdraw(\n input: WormholeWithdrawRequest,\n ): Promise<WormholeWithdrawResponse> {\n const { sourceChain, wallet, destinationAddress, sponsorAccount } = input;\n logger.log(\"sourceChain\", sourceChain);\n logger.log(\"wallet\", wallet);\n logger.log(\"destinationAddress\", destinationAddress);\n logger.log(\"sponsorAccount\", sponsorAccount);\n\n if (!this._wormholeContext) {\n await this.setWormholeContext(sourceChain);\n }\n if (!this._wormholeContext) {\n throw new Error(\"Wormhole context not initialized\");\n }\n if (!this.wormholeRoute || !this.wormholeRequest || !this.wormholeQuote) {\n throw new Error(\"Wormhole route, request, or quote not initialized\");\n }\n\n const signer = new Signer(\n this.getChainConfig(\"Aptos\"),\n (\n await input.wallet.features[\"aptos:account\"].account()\n ).address.toString(),\n {},\n input.wallet,\n undefined,\n sponsorAccount,\n );\n\n logger.log(\"signer\", signer);\n logger.log(\"wormholeRequest\", this.wormholeRequest);\n logger.log(\"wormholeQuote\", this.wormholeQuote);\n logger.log(\n \"Wormhole.chainAddress\",\n Wormhole.chainAddress(sourceChain, input.destinationAddress.toString()),\n );\n\n let receipt = await this.wormholeRoute.initiate(\n this.wormholeRequest,\n signer,\n this.wormholeQuote,\n Wormhole.chainAddress(sourceChain, input.destinationAddress.toString()),\n );\n logger.log(\"receipt\", receipt);\n\n const originChainTxnId =\n \"originTxs\" in receipt\n ? receipt.originTxs[receipt.originTxs.length - 1].txid\n : undefined;\n\n let retries = 0;\n const maxRetries = 5;\n const baseDelay = 1000; // Initial delay of 1 second\n\n while (retries < maxRetries) {\n try {\n for await (receipt of this.wormholeRoute.track(receipt, 120 * 1000)) {\n if (receipt.state >= TransferState.SourceInitiated) {\n logger.log(\"Receipt is on track \", receipt);\n\n try {\n const signer = new Signer(\n this.getChainConfig(sourceChain),\n destinationAddress.toString(),\n {},\n wallet,\n );\n\n if (routes.isManual(this.wormholeRoute)) {\n const circleAttestationReceipt =\n await this.wormholeRoute.complete(signer, receipt);\n logger.log(\"Claim receipt: \", circleAttestationReceipt);\n\n const destinationChainTxnId = signer.claimedTransactionHashes();\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId,\n };\n } else {\n // Should be unreachable\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId: \"\",\n };\n }\n } catch (e) {\n console.error(\"Failed to claim\", e);\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId: \"\",\n };\n }\n }\n }\n } catch (e) {\n console.error(\n `Error tracking transfer (attempt ${retries + 1} / ${maxRetries}):`,\n e,\n );\n const delay = baseDelay * Math.pow(2, retries); // Exponential backoff\n await sleep(delay);\n retries++;\n }\n }\n\n return {\n originChainTxnId: originChainTxnId || \"\",\n destinationChainTxnId: \"\",\n };\n }\n\n getChainConfig(chain: Chain): ChainConfig {\n const chainConfig =\n this.crossChainCore.CHAINS[\n chain as keyof typeof this.crossChainCore.CHAINS\n ];\n if (!chainConfig) {\n throw new Error(`Chain config not found for chain: ${chain}`);\n }\n return chainConfig;\n }\n\n getTokenInfo(\n sourceChain: Chain,\n destinationChain: Chain,\n ): {\n sourceToken: TokenId;\n destToken: TokenId;\n } {\n const sourceToken: TokenId = Wormhole.tokenId(\n this.crossChainCore.TOKENS[sourceChain].tokenId.chain as Chain,\n this.crossChainCore.TOKENS[sourceChain].tokenId.address,\n );\n\n const destToken: TokenId = Wormhole.tokenId(\n this.crossChainCore.TOKENS[destinationChain].tokenId.chain as Chain,\n this.crossChainCore.TOKENS[destinationChain].tokenId.address,\n );\n\n return { sourceToken, destToken };\n }\n}\n","export const logger = {\n log: (...args: any[]) => {\n if (process.env.NODE_ENV === \"development\") {\n console.log(...args);\n }\n },\n warn: (...args: any[]) => {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(...args);\n }\n },\n error: (...args: any[]) => {\n if (process.env.NODE_ENV === \"development\") {\n console.error(...args);\n }\n },\n};\n","import {\n AccountAuthenticator,\n AnyRawTransaction,\n Aptos,\n AptosConfig,\n Network as AptosNetwork,\n Account,\n} from \"@aptos-labs/ts-sdk\";\n\nimport {\n Chain,\n Network,\n SignAndSendSigner,\n TxHash,\n UnsignedTransaction,\n} from \"@wormhole-foundation/sdk\";\nimport {\n AptosUnsignedTransaction,\n AptosChains,\n} from \"@wormhole-foundation/sdk-aptos\";\nimport { GasStationApiKey } from \"../types\";\n\nexport class AptosLocalSigner<N extends Network, C extends Chain>\n implements SignAndSendSigner<N, C>\n{\n _chain: C;\n _options: any;\n _wallet: Account;\n _sponsorAccount: Account | GasStationApiKey | undefined;\n _claimedTransactionHashes: string;\n\n constructor(\n chain: C,\n options: any,\n wallet: Account,\n feePayerAccount: Account | GasStationApiKey | undefined,\n ) {\n this._chain = chain;\n this._options = options;\n this._wallet = wallet;\n this._sponsorAccount = feePayerAccount;\n this._claimedTransactionHashes = \"\";\n }\n\n chain(): C {\n return this._chain;\n }\n address(): string {\n return this._wallet.accountAddress.toString();\n }\n\n claimedTransactionHashes(): string {\n return this._claimedTransactionHashes;\n }\n /* other methods... */\n\n async signAndSend(txs: UnsignedTransaction<N, C>[]): Promise<TxHash[]> {\n const txHashes: TxHash[] = [];\n\n for (const tx of txs) {\n const txId = await signAndSendTransaction(\n tx as AptosUnsignedTransaction<Network, AptosChains>,\n this._wallet,\n this._sponsorAccount,\n );\n txHashes.push(txId);\n this._claimedTransactionHashes = txId;\n }\n return txHashes;\n }\n}\n\nexport async function signAndSendTransaction(\n request: UnsignedTransaction<Network, AptosChains>,\n wallet: Account,\n sponsorAccount: Account | GasStationApiKey | undefined,\n) {\n if (!wallet) {\n throw new Error(\"Wallet is undefined\");\n }\n\n const payload = request.transaction;\n // The wallets do not handle Uint8Array serialization\n payload.functionArguments = payload.functionArguments.map((a: any) => {\n if (a instanceof Uint8Array) {\n return Array.from(a);\n } else if (typeof a === \"bigint\") {\n return a.toString();\n } else {\n return a;\n }\n });\n\n const aptosConfig = new AptosConfig({\n network: AptosNetwork.TESTNET,\n });\n const aptos = new Aptos(aptosConfig);\n\n const txnToSign = await aptos.transaction.build.simple({\n data: payload,\n sender: wallet.accountAddress.toString(),\n withFeePayer: sponsorAccount ? true : false,\n });\n\n const senderAuthenticator = await aptos.transaction.sign({\n signer: wallet,\n transaction: txnToSign,\n });\n\n const txnToSubmit: {\n transaction: AnyRawTransaction;\n senderAuthenticator: AccountAuthenticator;\n feePayerAuthenticator?: AccountAuthenticator;\n } = {\n transaction: txnToSign,\n senderAuthenticator,\n };\n\n if (sponsorAccount) {\n if (typeof sponsorAccount === \"string\") {\n // TODO: handle gas station integration here\n } else {\n const feePayerSignerAuthenticator = aptos.transaction.signAsFeePayer({\n signer: sponsorAccount as Account,\n transaction: txnToSign,\n });\n txnToSubmit.feePayerAuthenticator = feePayerSignerAuthenticator;\n }\n }\n const response = await aptos.transaction.submit.simple(txnToSubmit);\n\n const tx = await aptos.waitForTransaction({\n transactionHash: response.hash,\n });\n\n return tx.hash;\n}\n","// This function signs and sends the transaction while constantly checking for confirmation\n// and resending the transaction if it hasn't been confirmed after the specified interval\n\nimport {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n ConfirmOptions,\n LAMPORTS_PER_SOL,\n SimulatedTransactionResponse,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport { Transaction } from \"@solana/web3.js\";\nimport { RpcResponseAndContext, SignatureResult } from \"@solana/web3.js\";\nimport {\n determinePriorityFee,\n determinePriorityFeeTritonOne,\n SolanaUnsignedTransaction,\n} from \"@wormhole-foundation/sdk-solana\";\n\nimport { Connection } from \"@solana/web3.js\";\nimport { Network } from \"@wormhole-foundation/sdk\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport { CrossChainCore } from \"../../../CrossChainCore\";\nimport { SolanaDerivedWallet } from \"@aptos-labs/derived-wallet-solana\";\n\nexport type SolanaRpcProvider = \"triton\" | \"helius\" | \"ankr\" | \"unknown\";\n\n// See https://docs.triton.one/chains/solana/sending-txs for more information\nexport async function signAndSendTransaction(\n request: SolanaUnsignedTransaction<Network>,\n wallet: AdapterWallet | undefined,\n options?: ConfirmOptions,\n crossChainCore?: CrossChainCore,\n) {\n if (!wallet || !(wallet instanceof SolanaDerivedWallet)) {\n throw new Error(\"Invalid wallet type or missing Solana wallet\").message;\n }\n\n const commitment = options?.commitment ?? \"finalized\";\n // Solana rpc should come from dapp config\n const connection = new Connection(\n crossChainCore?._dappConfig?.solanaConfig?.rpc ??\n \"https://api.devnet.solana.com\",\n );\n const { blockhash, lastValidBlockHeight } =\n await connection.getLatestBlockhash(commitment);\n\n // Circle Manual CCTP on Wormhole is always of a Trnasaction type\n // https://github.com/wormhole-foundation/wormhole-sdk-ts/blob/f7d992e04f844edcc4128659f12f75ade3553717/platforms/solana/protocols/cctp/src/circleBridge.ts#L173\n const transaction = request.transaction.transaction as Transaction;\n\n /**\n * TODO: Priority Fee is supported, but needs to come from dapp config\n */\n const unsignedTx = await setPriorityFeeInstructions(\n connection,\n blockhash,\n lastValidBlockHeight,\n request,\n crossChainCore,\n );\n\n let confirmTransactionPromise: Promise<\n RpcResponseAndContext<SignatureResult>\n > | null = null;\n let confirmedTx: RpcResponseAndContext<SignatureResult> | null = null;\n let txSendAttempts = 1;\n let signature = \"\";\n\n // transaction.recentBlockhash = blockhash;\n // if (request.transaction.signers) {\n // transaction.partialSign(...request.transaction.signers);\n // }\n\n if (!wallet.solanaWallet.signTransaction) {\n throw new Error(\"Wallet does not support signing transactions\").message;\n }\n\n const tx = await wallet.solanaWallet.signTransaction(unsignedTx);\n\n if (!tx) throw new Error(\"Failed to sign transaction\").message;\n const serializedTx = tx.serialize();\n const sendOptions = {\n skipPreflight: true,\n maxRetries: 0,\n preFlightCommitment: commitment, // See PR and linked issue for why setting this matters: https://github.com/anza-xyz/agave/pull/483\n };\n signature = await connection.sendRawTransaction(serializedTx, sendOptions);\n confirmTransactionPromise = connection.confirmTransaction(\n {\n signature,\n blockhash,\n lastValidBlockHeight,\n },\n commitment,\n );\n\n // This loop will break once the transaction has been confirmed or the block height is exceeded.\n // An exception will be thrown if the block height is exceeded by the confirmTransactionPromise.\n // The transaction will be resent if it hasn't been confirmed after the interval.\n const txRetryInterval = 5000;\n while (!confirmedTx) {\n confirmedTx = await Promise.race([\n confirmTransactionPromise,\n new Promise<null>((resolve) =>\n setTimeout(() => {\n resolve(null);\n }, txRetryInterval),\n ),\n ]);\n if (confirmedTx) {\n break;\n }\n console.log(\n `Tx not confirmed after ${\n txRetryInterval * txSendAttempts++\n }ms, resending`,\n );\n try {\n await connection.sendRawTransaction(serializedTx, sendOptions);\n } catch (e) {\n console.error(\"Failed to resend transaction:\", e);\n }\n }\n\n if (confirmedTx.value.err) {\n let errorMessage = `Transaction failed: ${confirmedTx.value.err}`;\n if (typeof confirmedTx.value.err === \"object\") {\n try {\n errorMessage = `Transaction failed: ${JSON.stringify(\n confirmedTx.value.err,\n (_key, value) =>\n typeof value === \"bigint\" ? value.toString() : value, // Handle bigint props\n )}`;\n } catch (e: unknown) {\n // Most likely a circular reference error, we can't stringify this error object.\n // See for more details:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#exceptions\n errorMessage = `Transaction failed: Unknown error`;\n }\n }\n throw new Error(`Transaction failed: ${errorMessage}`).message;\n }\n\n return signature;\n}\n\nexport async function setPriorityFeeInstructions(\n connection: Connection,\n blockhash: string,\n lastValidBlockHeight: number,\n request: SolanaUnsignedTransaction<Network>,\n crossChainCore?: CrossChainCore,\n): Promise<Transaction | VersionedTransaction> {\n const unsignedTx = request.transaction.transaction as Transaction;\n\n const computeBudgetIxFilter = (ix: TransactionInstruction) =>\n ix.programId.toString() !== \"ComputeBudget111111111111111111111111111111\";\n\n unsignedTx.recentBlockhash = blockhash;\n unsignedTx.lastValidBlockHeight = lastValidBlockHeight;\n\n // Remove existing compute budget instructions if they were added by the SDK\n unsignedTx.instructions = unsignedTx.instructions.filter(\n computeBudgetIxFilter,\n );\n unsignedTx.add(\n ...(await createPriorityFeeInstructions(\n connection,\n unsignedTx,\n crossChainCore,\n )),\n );\n if (request.transaction.signers) {\n unsignedTx.partialSign(...request.transaction.signers);\n }\n\n return unsignedTx;\n}\n\n// This will throw if the simulation fails\nasync function createPriorityFeeInstructions(\n connection: Connection,\n transaction: Transaction | VersionedTransaction,\n crossChainCore?: CrossChainCore,\n) {\n let unitsUsed = 200_000;\n let simulationAttempts = 0;\n\n simulationLoop: while (true) {\n const response = await connection.simulateTransaction(\n transaction as Transaction,\n );\n\n if (response.value.err) {\n if (checkKnownSimulationError(response.value)) {\n // Number of attempts will be at most 5 for known errors\n if (simulationAttempts < 5) {\n simulationAttempts++;\n await sleep(1000);\n continue simulationLoop;\n }\n } else if (simulationAttempts < 3) {\n // Number of attempts will be at most 3 for unknown errors\n simulationAttempts++;\n await sleep(1000);\n continue simulationLoop;\n }\n\n // Still failing after multiple attempts for both known and unknown errors\n // We should throw in that case\n throw new Error(\n `Simulation failed: ${JSON.stringify(response.value.err)}\\nLogs:\\n${(\n response.value.logs || []\n ).join(\"\\n \")}`,\n ).message;\n } else {\n // Simulation was successful\n if (response.value.unitsConsumed) {\n unitsUsed = response.value.unitsConsumed;\n }\n break;\n }\n }\n\n const unitBudget = Math.floor(unitsUsed * 1.2); // Budget in 20% headroom\n\n const instructions: TransactionInstruction[] = [];\n instructions.push(\n ComputeBudgetProgram.setComputeUnitLimit({\n // Set compute budget to 120% of the units used in the simulated transaction\n units: unitBudget,\n }),\n );\n\n const {\n percentile = 0.9,\n percentileMultiple = 1,\n min = 100_000,\n max = 100_000_000,\n } = crossChainCore?._dappConfig?.solanaConfig?.priorityFeeConfig ?? {};\n\n const calculateFee = async (\n rpcProvider?: SolanaRpcProvider,\n ): Promise<{ fee: number; methodUsed: \"triton\" | \"default\" | \"minimum\" }> => {\n if (rpcProvider === \"triton\") {\n // Triton has an experimental RPC method that accepts a percentile paramater\n // and usually gives more accurate fee numbers.\n try {\n const fee = await determinePriorityFeeTritonOne(\n connection,\n transaction,\n percentile,\n percentileMultiple,\n min,\n max,\n );\n\n return {\n fee,\n methodUsed: \"triton\",\n };\n } catch (e) {\n console.warn(`Failed to determine priority fee using Triton RPC:`, e);\n }\n }\n\n try {\n // By default, use generic Solana RPC method\n const fee = await determinePriorityFee(\n connection,\n transaction,\n percentile,\n percentileMultiple,\n min,\n max,\n );\n\n return {\n fee,\n methodUsed: \"default\",\n };\n } catch (e) {\n console.warn(`Failed to determine priority fee using Triton RPC:`, e);\n\n return {\n fee: min,\n methodUsed: \"minimum\",\n };\n }\n };\n\n const rpcProvider = determineRpcProvider(connection.rpcEndpoint);\n\n const { fee, methodUsed } = await calculateFee(rpcProvider);\n\n const maxFeeInSol =\n (fee /\n // convert microlamports to lamports\n 1e6 /\n // convert lamports to SOL\n LAMPORTS_PER_SOL) *\n // multiply by maximum compute units used\n unitBudget;\n\n console.table({\n \"RPC Provider\": rpcProvider,\n \"Method used\": methodUsed,\n \"Percentile used\": percentile,\n \"Multiple used\": percentileMultiple,\n \"Compute budget\": unitBudget,\n \"Priority fee\": fee,\n \"Max fee in SOL\": maxFeeInSol,\n });\n\n instructions.push(\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: fee }),\n );\n return instructions;\n}\n\n// Checks response logs for known errors.\n// Returns when the first error is encountered.\nfunction checkKnownSimulationError(\n response: SimulatedTransactionResponse,\n): boolean {\n const errors = {} as any;\n\n // This error occur when the blockhash included in a transaction is not deemed to be valid\n // when a validator processes a transaction. We can retry the simulation to get a valid blockhash.\n if (response.err === \"BlockhashNotFound\") {\n errors[\"BlockhashNotFound\"] =\n \"Blockhash not found during simulation. Trying again.\";\n }\n\n // Check the response logs for any known errors\n if (response.logs) {\n for (const line of response.logs) {\n // In some cases which aren't deterministic, like a slippage error, we can retry the\n // simulation a few times to get a successful response.\n if (line.includes(\"SlippageToleranceExceeded\")) {\n errors[\"SlippageToleranceExceeded\"] =\n \"Slippage failure during simulation. Trying again.\";\n }\n\n // In this case a require_gte expression was violated during a Swap instruction.\n // We can retry the simulation to get a successful response.\n if (line.includes(\"RequireGteViolated\")) {\n errors[\"RequireGteViolated\"] =\n \"Swap instruction failure during simulation. Trying again.\";\n }\n }\n }\n\n // No known simulation errors found\n if (isEmptyObject(errors)) {\n return false;\n }\n\n console.table(errors);\n return true;\n}\n\nexport async function sleep(timeout: number) {\n return new Promise((resolve) => setTimeout(resolve, timeout));\n}\n\n/**\n * Checks whether an object is empty.\n *\n * isEmptyObject(null)\n * // => true\n *\n * isEmptyObject(undefined)\n * // => true\n *\n * isEmptyObject({})\n * // => true\n *\n * isEmptyObject({ 'a': 1 })\n * // => false\n */\nexport const isEmptyObject = (value: object | null | undefined) => {\n if (value === null || value === undefined) {\n return true;\n }\n\n // Check all property keys for any own prop\n for (const key in value) {\n if (value.hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n\n return true;\n};\n\nfunction determineRpcProvider(endpoint: string): SolanaRpcProvider {\n try {\n const url = new URL(endpoint);\n const hostname = url.hostname;\n if (hostname === \"rpcpool.com\") {\n return \"triton\";\n } else if (hostname === \"helius-rpc.com\") {\n return \"helius\";\n } else if (hostname === \"rpc.ankr.com\") {\n return \"ankr\";\n } else {\n return \"unknown\";\n }\n } catch (e) {\n return \"unknown\";\n }\n}\n","import {\n EvmUnsignedTransaction,\n EvmChains,\n} from \"@wormhole-foundation/sdk-evm\";\nimport { Network } from \"@wormhole-foundation/sdk\";\nimport { ethers, getBigInt } from \"ethers\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport { EIP1193DerivedWallet } from \"@aptos-labs/derived-wallet-ethereum\";\nexport async function signAndSendTransaction(\n request: EvmUnsignedTransaction<Network, EvmChains>,\n wallet: AdapterWallet,\n chainName: string,\n options: any,\n): Promise<string> {\n if (!wallet) {\n throw new Error(\"wallet.sendTransaction is undefined\").message;\n }\n // Ensure the signer is connected to the correct chain\n const chainId = await (\n wallet as EIP1193DerivedWallet\n ).eip1193Provider.request({\n method: \"eth_chainId\",\n });\n const actualChainId = parseInt(chainId, 16);\n\n if (!actualChainId)\n throw new Error(\"No signer found for chain\" + chainName).message;\n const expectedChainId = request.transaction.chainId\n ? getBigInt(request.transaction.chainId)\n : undefined;\n if (\n !actualChainId ||\n !expectedChainId ||\n BigInt(actualChainId) !== expectedChainId\n ) {\n throw new Error(\n `Signer is not connected to the right chain. Expected ${expectedChainId}, got ${actualChainId}`,\n ).message;\n }\n\n const provider = new ethers.BrowserProvider(\n (wallet as EIP1193DerivedWallet).eip1193Provider,\n );\n const signer = await provider.getSigner();\n const response = await signer.sendTransaction(request.transaction);\n const receipt = await response.wait();\n\n return receipt?.hash || \"\";\n}\n","import {\n Account,\n AccountAddress,\n AccountAuthenticator,\n AnyRawTransaction,\n Aptos,\n AptosConfig,\n Network as AptosNetwork,\n Deserializer,\n EntryFunctionArgumentTypes,\n InputGenerateTransactionPayloadData,\n ScriptFunctionArgumentTypes,\n Serializer,\n SimpleEntryFunctionArgumentTypes,\n U64,\n} from \"@aptos-labs/ts-sdk\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport { Network } from \"@wormhole-foundation/sdk\";\nimport {\n AptosChains,\n AptosUnsignedTransaction,\n} from \"@wormhole-foundation/sdk-aptos\";\nimport { GasStationApiKey } from \"..\";\nimport { UserResponseStatus } from \"@aptos-labs/wallet-standard\";\n\nexport async function signAndSendTransaction(\n request: AptosUnsignedTransaction<Network, AptosChains>,\n wallet: AdapterWallet,\n sponsorAccount: Account | GasStationApiKey | undefined,\n) {\n if (!wallet) {\n throw new Error(\"wallet.sendTransaction is undefined\").message;\n }\n\n const payload = request.transaction;\n // The wallets do not handle Uint8Array serialization\n payload.functionArguments = payload.functionArguments.map((a: any) => {\n if (a instanceof Uint8Array) {\n return Array.from(a);\n } else if (typeof a === \"bigint\") {\n return a.toString();\n } else {\n return a;\n }\n });\n\n const aptosConfig = new AptosConfig({\n network: AptosNetwork.TESTNET,\n });\n const aptos = new Aptos(aptosConfig);\n\n // TODO: handle mainnet\n const contractAddress = AptosNetwork.TESTNET\n ? \"0x5e2d961f06cd27aa07554a39d55f5ce1e58dff35d803c3529b1cd5c4fa3ab584\"\n : \"0x1\";\n\n // Wormhole resturns a script function transaction payload, but due to a ts-sdk version mismatch,\n // linter complains on different types - so need to first convert to unknown and then to ScriptFunctionArgumentTypes.\n // Also, tranfering the arguments as it brings some errors (which not sure if bug or not), so we first extract them\n // and then tranform them into the functionArguments.\n const functionArguments = extractFunctionArguments(\n payload.functionArguments as unknown as ScriptFunctionArgumentTypes[],\n );\n\n const transactionData: InputGenerateTransactionPayloadData = {\n // a custom function to withdraw tokens from the aptos chain, published here on testnet:\n // https://explorer.aptoslabs.com/account/0x5e2d961f06cd27aa07554a39d55f5ce1e58dff35d803c3529b1cd5c4fa3ab584/modules/code/withdraw?network=testnet\n function: `${contractAddress}::withdraw::deposit_for_burn`,\n functionArguments,\n };\n\n const txnToSign = await aptos.transaction.build.simple({\n data: transactionData,\n sender: (\n await wallet.features[\"aptos:account\"]?.account()\n ).address.toString(),\n withFeePayer: sponsorAccount ? true : false,\n });\n\n const response =\n await wallet.features[\"aptos:signTransaction\"]?.signTransaction(txnToSign);\n\n if (response?.status === UserResponseStatus.REJECTED) {\n throw new Error(\"User has rejected the request\");\n }\n\n const txnToSubmit: {\n transaction: AnyRawTransaction;\n senderAuthenticator: AccountAuthenticator;\n feePayerAuthenticator?: AccountAuthenticator;\n } = {\n transaction: txnToSign,\n senderAuthenticator: response.args,\n };\n\n if (sponsorAccount) {\n if (typeof sponsorAccount === \"string\") {\n // TODO: handle gas station integration here\n } else {\n const feePayerSignerAuthenticator = aptos.transaction.signAsFeePayer({\n signer: sponsorAccount as Account,\n transaction: txnToSign,\n });\n txnToSubmit.feePayerAuthenticator = feePayerSignerAuthenticator;\n }\n }\n\n const txnSubmitted = await aptos.transaction.submit.simple(txnToSubmit);\n\n const tx = await aptos.waitForTransaction({\n transactionHash: txnSubmitted.hash,\n });\n\n return tx.hash;\n}\n\n/**\n * Extracts the function arguments from the function arguments array and tranform them into types the sdk can ready.\n *\n * Note: we assume the argument types are always [U64, U32, accountAddress, accountAddress] - even tho we use\n * Wormhole fix version in the package.json, if wormhole changes this, we need to update this function.\n * @param functionArguments - The function arguments array.\n * @returns The function arguments.\n */\nfunction extractFunctionArguments(\n functionArguments: ScriptFunctionArgumentTypes[],\n) {\n const deserializer1 = new Deserializer(functionArguments[0].bcsToBytes());\n const amount = deserializer1.deserializeU64();\n\n const deserializer2 = new Deserializer(functionArguments[1].bcsToBytes());\n const destination_domain = deserializer2.deserializeU32();\n\n const mint_recipient = new AccountAddress(functionArguments[2].bcsToBytes());\n\n const burn_token = new AccountAddress(functionArguments[3].bcsToBytes());\n\n return [amount, destination_domain, mint_recipient, burn_token];\n}\n","import {\n UnsignedTransaction,\n Network,\n Chain,\n TxHash,\n SignAndSendSigner,\n} from \"@wormhole-foundation/sdk\";\nimport { SolanaUnsignedTransaction } from \"@wormhole-foundation/sdk-solana\";\nimport { AdapterWallet } from \"@aptos-labs/wallet-adapter-core\";\nimport {\n EvmUnsignedTransaction,\n EvmChains,\n} from \"@wormhole-foundation/sdk-evm\";\n\nimport * as solanaSigner from \"./SolanaSigner\";\nimport * as ethereumSigner from \"./EthereumSigner\";\nimport * as aptosSigner from \"./AptosSigner\";\n// import {\n// SuiChains,\n// SuiUnsignedTransaction,\n// } from \"@wormhole-foundation/sdk-sui\";\n// import * as suiSigner from \"./SuiSigner\";\n\nimport { ChainConfig } from \"../../../config\";\nimport { CrossChainCore } from \"../../../CrossChainCore\";\nimport { AptosChains } from \"@wormhole-foundation/sdk-aptos/dist/cjs/types\";\nimport { AptosUnsignedTransaction } from \"@wormhole-foundation/sdk-aptos/dist/cjs/unsignedTransaction\";\nimport { GasStationApiKey } from \"../types\";\nimport { Account } from \"@aptos-labs/ts-sdk\";\nexport class Signer<N extends Network, C extends Chain>\n implements SignAndSendSigner<N, C>\n{\n _chain: ChainConfig;\n _address: string;\n _options: any;\n _wallet: AdapterWallet;\n _crossChainCore?: CrossChainCore;\n _sponsorAccount: Account | GasStationApiKey | undefined;\n _claimedTransactionHashes: string;\n\n constructor(\n chain: ChainConfig,\n address: string,\n options: any,\n wallet: AdapterWallet,\n crossChainCore?: CrossChainCore,\n sponsorAccount?: Account | GasStationApiKey | undefined,\n ) {\n this._chain = chain;\n this._address = address;\n this._options = options;\n this._wallet = wallet;\n this._crossChainCore = crossChainCore;\n this._sponsorAccount = sponsorAccount;\n this._claimedTransactionHashes = \"\";\n }\n\n chain(): C {\n return this._chain.key as C;\n }\n address(): string {\n return this._address;\n }\n\n claimedTransactionHashes(): string {\n return this._claimedTransactionHashes;\n }\n\n async signAndSend(txs: UnsignedTransaction<N, C>[]): Promise<TxHash[]> {\n const txHashes: TxHash[] = [];\n\n for (const tx of txs) {\n const txId = await signAndSendTransaction(\n this._chain,\n tx,\n this._wallet,\n this._options,\n this._crossChainCore,\n this._sponsorAccount,\n );\n txHashes.push(txId);\n this._claimedTransactionHashes = txId;\n }\n return txHashes;\n }\n}\n\nexport const signAndSendTransaction = async (\n chain: ChainConfig,\n request: UnsignedTransaction<Network, Chain>,\n wallet: AdapterWallet,\n options: any = {},\n crossChainCore?: CrossChainCore,\n sponsorAccount?: Account | GasStationApiKey | undefined,\n): Promise<string> => {\n if (!wallet) {\n throw new Error(\"wallet is undefined\");\n }\n\n if (chain.context === \"Solana\") {\n const signature = await solanaSigner.signAndSendTransaction(\n request as SolanaUnsignedTransaction<Network>,\n wallet,\n options,\n crossChainCore,\n );\n return signature;\n } else if (chain.context === \"Ethereum\") {\n const tx = await ethereumSigner.signAndSendTransaction(\n request as EvmUnsignedTransaction<Network, EvmChains>,\n wallet,\n chain.displayName,\n options,\n );\n return tx;\n } else if (chain.context === \"Aptos\") {\n const tx = await aptosSigner.signAndSendTransaction(\n request as AptosUnsignedTransaction<Network, AptosChains>,\n wallet,\n sponsorAccount,\n );\n return tx;\n } else {\n throw new Error(`Unsupported chain: ${chain}`);\n }\n};\n","import { Chain } from \"../CrossChainCore\";\n\nexport enum Context {\n ETH = \"Ethereum\",\n SOLANA = \"Solana\",\n APTOS = \"Aptos\",\n}\n\nexport type BaseChainConfig = {\n key: Chain;\n context: Context;\n disabledAsSource?: boolean;\n disabledAsDestination?: boolean;\n};\n\nexport interface ChainConfig extends BaseChainConfig {\n defaultRpc: string;\n displayName: string;\n explorerUrl: string;\n explorerName: string;\n chainId: number | string;\n icon: Chain;\n symbol?: string;\n}\n\nexport type ChainsConfig = {\n [chain in Chain]?: ChainConfig;\n};\n\nexport type TokenConfig = {\n symbol: string;\n name?: string;\n decimals: number;\n icon: string;\n tokenId: {\n chain: Chain;\n address: string;\n };\n};\n","import { Context, ChainsConfig } from \"../types\";\n\nexport const testnetChains: ChainsConfig = {\n Sepolia: {\n key: \"Sepolia\",\n context: Context.ETH,\n chainId: 11155111,\n displayName: \"Sepolia\",\n explorerUrl: \"https://sepolia.etherscan.io/\",\n explorerName: \"Etherscan\",\n icon: \"Ethereum\",\n symbol: \"ETH\",\n defaultRpc: \"https://eth-sepolia.public.blastapi.io\",\n },\n BaseSepolia: {\n key: \"BaseSepolia\",\n context: Context.ETH,\n chainId: 84532,\n displayName: \"Base Sepolia\",\n explorerUrl: \"https://sepolia.basescan.org\",\n explorerName: \"Basescan\",\n icon: \"BaseSepolia\",\n symbol: \"BASE\",\n defaultRpc:\n \"https://chain-proxy.wallet.coinbase.com?targetName=base-sepolia\",\n },\n ArbitrumSepolia: {\n key: \"ArbitrumSepolia\",\n context: Context.ETH,\n chainId: 421614,\n displayName: \"Arbitrum Sepolia\",\n explorerUrl: \"https://sepolia.arbiscan.io\",\n explorerName: \"Etherscan\",\n icon: \"Arbitrum\",\n symbol: \"ARB\",\n defaultRpc: \"https://sepolia-rollup.arbitrum.io/rpc\",\n },\n Avalanche: {\n key: \"Avalanche\",\n context: Context.ETH,\n chainId: 43113,\n displayName: \"Avalanche Fuji\",\n explorerUrl: \"https://testnet.snowtrace.io\",\n explorerName: \"Avascan\",\n icon: \"Avalanche\",\n symbol: \"AVAX\",\n defaultRpc: \"https://api.avax-test.network/ext/bc/C/rpc\",\n },\n PolygonSepolia: {\n key: \"PolygonSepolia\",\n context: Context.ETH,\n chainId: 80002,\n displayName: \"Polygon\",\n explorerUrl: \"https://amoy.polygonscan.com/\",\n explorerName: \"PolygonScan\",\n icon: \"Polygon\",\n symbol: \"MATIC\",\n defaultRpc: \"https://rpc-amoy.polygon.technology/\",\n },\n Solana: {\n key: \"Solana\",\n context: Context.SOLANA,\n displayName: \"Solana\",\n explorerUrl: \"https://explorer.solana.com/\",\n explorerName: \"Solana Explorer\",\n chainId: 0,\n icon: \"Solana\",\n symbol: \"SOL\",\n defaultRpc: \"https://api.devnet.solana.com\",\n },\n Aptos: {\n key: \"Aptos\",\n context: Context.APTOS,\n displayName: \"Aptos\",\n explorerUrl: \"https://explorer.aptoslabs.com?network=testnet\",\n explorerName: \"Aptos Explorer\",\n chainId: 0,\n icon: \"Aptos\",\n symbol: \"APT\",\n defaultRpc: \"https://fullnode.testnet.aptos.dev\",\n },\n // Sui: {\n // key: \"Sui\",\n // id: 21,\n // context: Context.SUI,\n // finalityThreshold: 0,\n // displayName: \"Sui\",\n // explorerUrl: \"https://suiscan.xyz/testnet/\",\n // explorerName: \"Suiscan\",\n // gasToken: \"SUI\",\n // chainId: 0,\n // icon: \"Sui\",\n // maxBlockSearch: 0,\n // symbol: \"SUI\",\n // sdkName: \"Sui\",\n // },\n};\n","import { TokenConfig } from \"../types\";\n\nexport const testnetTokens: Record<string, TokenConfig> = {\n Sepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Sepolia\",\n address: \"0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238\",\n },\n },\n Solana: {\n symbol: \"USDC\",\n tokenId: {\n chain: \"Solana\",\n address: \"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\",\n },\n icon: \"USDC\",\n decimals: 6,\n },\n Aptos: {\n symbol: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Aptos\",\n address:\n \"0x69091fbab5f7d635ee7ac5098cf0c1efbe31d68fec0f2cd565e8d168daf52832\",\n },\n icon: \"USDC\",\n },\n BaseSepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"BaseSepolia\",\n address: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n },\n },\n Avalanche: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Avalanche\",\n address: \"0x5425890298aed601595a70AB815c96711a31Bc65\",\n },\n },\n ArbitrumSepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"ArbitrumSepolia\",\n address: \"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d\",\n },\n },\n PolygonSepolia: {\n symbol: \"USDC\",\n icon: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"PolygonSepolia\",\n address: \"0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582\",\n },\n },\n // Sui: {\n // symbol: \"USDC\",\n // tokenId: {\n // chain: \"Sui\",\n // address:\n // \"0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC\",\n // },\n // icon: \"USDC\",\n // decimals: 6,\n // },\n};\n","import { Context, ChainsConfig } from \"../types\";\n\nexport const mainnetChains: ChainsConfig = {\n Ethereum: {\n key: \"Ethereum\",\n context: Context.ETH,\n displayName: \"Ethereum\",\n explorerUrl: \"https://etherscan.io/\",\n explorerName: \"Etherscan\",\n chainId: 1,\n icon: \"Ethereum\",\n symbol: \"ETH\",\n defaultRpc: \"https://rpc.ankr.com/eth\",\n },\n Solana: {\n key: \"Solana\",\n context: Context.SOLANA,\n displayName: \"Solana\",\n explorerUrl: \"https://explorer.solana.com/\",\n explorerName: \"Solana Explorer\",\n chainId: 0,\n icon: \"Solana\",\n symbol: \"SOL\",\n defaultRpc: \"https://solana-mainnet.rpc.extrnode.com\",\n },\n Aptos: {\n key: \"Aptos\",\n context: Context.APTOS,\n displayName: \"Aptos\",\n explorerUrl: \"https://explorer.aptoslabs.com/\",\n explorerName: \"Aptos Explorer\",\n chainId: 0,\n icon: \"Aptos\",\n symbol: \"APT\",\n defaultRpc: \"https://fullnode.mainnet.aptos.dev\",\n },\n Avalanche: {\n key: \"Avalanche\",\n context: Context.ETH,\n chainId: 43114,\n displayName: \"Avalanche\",\n explorerUrl: \"https://snowtrace.io\",\n explorerName: \"Avascan\",\n icon: \"Avalanche\",\n symbol: \"AVAX\",\n defaultRpc: \"https://avalanche-c-chain-rpc.publicnode.com\",\n },\n Base: {\n key: \"Base\",\n context: Context.ETH,\n chainId: 8453,\n displayName: \"Base\",\n explorerUrl: \"https://basescan.org\",\n explorerName: \"BaseScan\",\n icon: \"Base\",\n symbol: \"BASE\",\n defaultRpc: \"https://mainnet.base.org\",\n },\n Arbitrum: {\n key: \"Arbitrum\",\n context: Context.ETH,\n chainId: 42161,\n displayName: \"Arbitrum\",\n explorerUrl: \"https://arbiscan.io/\",\n explorerName: \"Arbitrum Explorer\",\n icon: \"Arbitrum\",\n symbol: \"ARB\",\n defaultRpc: \"https://arb1.arbitrum.io/rpc\",\n },\n Polygon: {\n key: \"Polygon\",\n context: Context.ETH,\n chainId: 137,\n displayName: \"Polygon\",\n explorerUrl: \"https://polygonscan.com/\",\n explorerName: \"PolygonScan\",\n icon: \"Polygon\",\n symbol: \"MATIC\",\n defaultRpc: \"https://polygon-bor-rpc.publicnode.com\",\n },\n // Sui: {\n // key: \"Sui\",\n // id: 21,\n // context: Context.SUI,\n // finalityThreshold: 0,\n // displayName: \"Sui\",\n // sdkName: \"Sui\",\n // explorerUrl: \"https://suiscan.xyz/\",\n // explorerName: \"Suiscan\",\n // gasToken: \"SUI\",\n // chainId: 0,\n // icon: \"Sui\",\n // maxBlockSearch: 0,\n // symbol: \"SUI\",\n // },\n};\n","import { TokenConfig } from \"../types\";\n\nexport const mainnetTokens: Record<string, TokenConfig> = {\n Ethereum: {\n symbol: \"USDC\",\n tokenId: {\n chain: \"Ethereum\",\n address: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n },\n icon: \"USDC\",\n decimals: 6,\n },\n Solana: {\n symbol: \"USDC\",\n tokenId: {\n chain: \"Solana\",\n address: \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\n },\n icon: \"USDC\",\n decimals: 6,\n },\n Aptos: {\n symbol: \"USDC\",\n decimals: 6,\n tokenId: {\n chain: \"Aptos\",\n address:\n \"0xbae207659db88bea0cbead6da0ed00aac12edcdda169e591cd41c94180b46f3b\",\n },\n icon: \"USDC\",\n },\n Base: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Base\",\n address: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n },\n },\n Arbitrum: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Arbitrum\",\n address: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n },\n },\n Avalanche: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Avalanche\",\n address: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n },\n },\n Polygon: {\n symbol: \"USDC\",\n decimals: 6,\n icon: \"USDC\",\n tokenId: {\n chain: \"Polygon\",\n address: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n },\n },\n // Sui: {\n // symbol: \"USDC\",\n // decimals: 6,\n // tokenId: {\n // chain: \"Sui\",\n // address:\n // \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\",\n // },\n // icon: \"USDC\",\n // },\n};\n","import { Aptos, AptosConfig, Network } from \"@aptos-labs/ts-sdk\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { mainnetTokens, testnetTokens } from \"../config\";\nimport { ethers, JsonRpcProvider } from \"ethers\";\nimport { Chain } from \"../CrossChainCore\";\n\nexport const getSolanaWalletUSDCBalance = async (\n walletAddress: string,\n aptosNetwork: Network,\n rpc: string,\n): Promise<string> => {\n const address = new PublicKey(walletAddress);\n const tokenAddress =\n aptosNetwork === Network.MAINNET\n ? mainnetTokens[\"Solana\"].tokenId.address\n : testnetTokens[\"Solana\"].tokenId.address;\n\n const connection = new Connection(rpc);\n // Check to see if we were passed wallet address or token account\n const splToken = await connection.getTokenAccountsByOwner(address, {\n mint: new PublicKey(tokenAddress),\n });\n\n // Use the first token account if it exists, otherwise fall back to wallet address\n const checkAddress =\n splToken.value.length > 0 ? splToken.value[0]!.pubkey : address;\n\n const balance = await connection.getTokenAccountBalance(checkAddress);\n\n return (\n balance.value.uiAmountString ??\n (Number(balance.value.amount) / 10 ** balance.value.decimals).toString()\n );\n};\n\nexport const getEthereumWalletUSDCBalance = async (\n walletAddress: string,\n aptosNetwork: Network,\n chain: Chain,\n rpc: string,\n): Promise<string> => {\n const token =\n aptosNetwork === Network.MAINNET\n ? mainnetTokens[chain]\n : testnetTokens[chain];\n\n const tokenAddress = token.tokenId.address;\n const connection = new JsonRpcProvider(rpc);\n const abi = [\"function balanceOf(address owner) view returns (uint256)\"];\n const contract = new ethers.Contract(tokenAddress, abi, connection);\n const balance = await contract.balanceOf(walletAddress);\n return ethers.formatUnits(balance, token.decimals).toString();\n};\n\nexport const getAptosWalletUSDCBalance = async (\n walletAddress: string,\n aptosNetwork: Network,\n): Promise<string> => {\n const token =\n aptosNetwork === Network.MAINNET\n ? mainnetTokens[\"Aptos\"]\n : testnetTokens[\"Aptos\"];\n const tokenAddress = token.tokenId.address;\n const aptosConfig = new AptosConfig({ network: aptosNetwork });\n const connection = new Aptos(aptosConfig);\n const response = await connection.getCurrentFungibleAssetBalances({\n options: {\n where: {\n owner_address: { _eq: walletAddress },\n asset_type: { _eq: tokenAddress },\n },\n },\n });\n if (response.length === 0) {\n return \"0\";\n }\n const balance = (\n Number(response[0].amount) /\n 10 ** token.decimals\n ).toString();\n return balance;\n};\n"],"mappings":"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","names":["import_ts_sdk","import_ts_sdk","AptosNetwork","aptos","import_web3","signAndSendTransaction","rpcProvider","fee","signAndSendTransaction","import_ts_sdk","signAndSendTransaction","AptosNetwork","aptos","signAndSendTransaction","aptos","solana","evm","signer","Context","import_ts_sdk","import_web3","import_ethers","import_ts_sdk","import_ts_sdk"]}
package/dist/index.mjs CHANGED
@@ -579,14 +579,6 @@ var WormholeProvider = class {
579
579
  }
580
580
  const isMainnet = dappNetwork === Network.MAINNET;
581
581
  const platforms = [aptos, solana, evm];
582
- const rpcOverrides = isMainnet ? {} : {
583
- chains: {
584
- // Wormhole SDK has wrong testnet RPC for HyperEVM (uses api. instead of rpc.)
585
- HyperEVM: {
586
- rpc: "https://rpc.hyperliquid-testnet.xyz/evm"
587
- }
588
- }
589
- };
590
582
  const wh = await wormhole(isMainnet ? "Mainnet" : "Testnet", platforms);
591
583
  this._wormholeContext = wh;
592
584
  }
@@ -613,12 +605,10 @@ var WormholeProvider = class {
613
605
  sourceContext,
614
606
  destContext
615
607
  );
616
- logger.log("request", request);
617
608
  const resolver = this._wormholeContext.resolver([
618
609
  routes.CCTPRoute
619
610
  // manual CCTP
620
611
  ]);
621
- logger.log("resolver", resolver);
622
612
  const route = await resolver.findRoutes(request);
623
613
  const cctpRoute = route[0];
624
614
  this.wormholeRoute = cctpRoute;
@@ -893,8 +883,8 @@ var testnetChains = {
893
883
  explorerUrl: "https://sepolia.etherscan.io/",
894
884
  explorerName: "Etherscan",
895
885
  icon: "Ethereum",
896
- symbol: "SepoliaETH",
897
- defaultRpc: "https://ethereum-sepolia-rpc.publicnode.com"
886
+ symbol: "ETH",
887
+ defaultRpc: "https://eth-sepolia.public.blastapi.io"
898
888
  },
899
889
  BaseSepolia: {
900
890
  key: "BaseSepolia",
@@ -940,17 +930,6 @@ var testnetChains = {
940
930
  symbol: "MATIC",
941
931
  defaultRpc: "https://rpc-amoy.polygon.technology/"
942
932
  },
943
- HyperEVM: {
944
- key: "HyperEVM",
945
- context: "Ethereum" /* ETH */,
946
- chainId: 998,
947
- displayName: "HyperEVM",
948
- explorerUrl: "https://testnet.purrsec.com",
949
- explorerName: "Purrsec testnet",
950
- icon: "HyperEVM",
951
- symbol: "HYPE",
952
- defaultRpc: "https://rpc.hyperliquid-testnet.xyz/evm"
953
- },
954
933
  Solana: {
955
934
  key: "Solana",
956
935
  context: "Solana" /* SOLANA */,
@@ -1054,15 +1033,6 @@ var testnetTokens = {
1054
1033
  chain: "PolygonSepolia",
1055
1034
  address: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582"
1056
1035
  }
1057
- },
1058
- HyperEVM: {
1059
- symbol: "USDC",
1060
- icon: "USDC",
1061
- tokenId: {
1062
- chain: "HyperEVM",
1063
- address: "0x2B3370eE501B4a559b57D449569354196457D8Ab"
1064
- },
1065
- decimals: 6
1066
1036
  }
1067
1037
  // Sui: {
1068
1038
  // symbol: "USDC",
@@ -1133,17 +1103,6 @@ var mainnetChains = {
1133
1103
  symbol: "BASE",
1134
1104
  defaultRpc: "https://mainnet.base.org"
1135
1105
  },
1136
- HyperEVM: {
1137
- key: "HyperEVM",
1138
- context: "Ethereum" /* ETH */,
1139
- chainId: 999,
1140
- displayName: "HyperEVM",
1141
- explorerUrl: "https://hyperevmscan.io/",
1142
- explorerName: "HyperEVMScan",
1143
- icon: "HyperEVM",
1144
- symbol: "HYPE",
1145
- defaultRpc: "https://rpc.hyperliquid.xyz/evm"
1146
- },
1147
1106
  Arbitrum: {
1148
1107
  key: "Arbitrum",
1149
1108
  context: "Ethereum" /* ETH */,
@@ -1247,15 +1206,6 @@ var mainnetTokens = {
1247
1206
  chain: "Polygon",
1248
1207
  address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
1249
1208
  }
1250
- },
1251
- HyperEVM: {
1252
- symbol: "USDC",
1253
- icon: "USDC",
1254
- tokenId: {
1255
- chain: "HyperEVM",
1256
- address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f"
1257
- },
1258
- decimals: 6
1259
1209
  }
1260
1210
  // Sui: {
1261
1211
  // symbol: "USDC",
@@ -1285,7 +1235,6 @@ var getSolanaWalletUSDCBalance = async (walletAddress, aptosNetwork, rpc) => {
1285
1235
  return balance.value.uiAmountString ?? (Number(balance.value.amount) / 10 ** balance.value.decimals).toString();
1286
1236
  };
1287
1237
  var getEthereumWalletUSDCBalance = async (walletAddress, aptosNetwork, chain, rpc) => {
1288
- console.log("chain", chain);
1289
1238
  const token = aptosNetwork === Network2.MAINNET ? mainnetTokens[chain] : testnetTokens[chain];
1290
1239
  const tokenAddress = token.tokenId.address;
1291
1240
  const connection = new JsonRpcProvider(rpc);
@@ -1321,16 +1270,14 @@ var EthereumChainIdToTestnetChain = {
1321
1270
  84532: testnetChains.BaseSepolia,
1322
1271
  421614: testnetChains.ArbitrumSepolia,
1323
1272
  43113: testnetChains.Avalanche,
1324
- 80002: testnetChains.PolygonSepolia,
1325
- 998: testnetChains.HyperEVM
1273
+ 80002: testnetChains.PolygonSepolia
1326
1274
  };
1327
1275
  var EthereumChainIdToMainnetChain = {
1328
1276
  1: mainnetChains.Ethereum,
1329
1277
  8453: mainnetChains.Base,
1330
1278
  42161: mainnetChains.Arbitrum,
1331
1279
  43114: mainnetChains.Avalanche,
1332
- 137: mainnetChains.Polygon,
1333
- 999: mainnetChains.HyperEVM
1280
+ 137: mainnetChains.Polygon
1334
1281
  };
1335
1282
  var CrossChainCore = class {
1336
1283
  constructor(args) {
@@ -1382,7 +1329,6 @@ var CrossChainCore = class {
1382
1329
  case "Base":
1383
1330
  case "PolygonSepolia":
1384
1331
  case "Polygon":
1385
- case "HyperEVM":
1386
1332
  return await getEthereumWalletUSDCBalance(
1387
1333
  walletAddress,
1388
1334
  this._dappConfig.aptosNetwork,
@@ -1414,3 +1360,4 @@ export {
1414
1360
  testnetChains,
1415
1361
  testnetTokens
1416
1362
  };
1363
+ //# sourceMappingURL=index.mjs.map