@aptos-labs/cross-chain-core 5.4.13 → 5.4.14
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/BridgeConnector.d.ts +82 -0
- package/dist/BridgeConnector.d.ts.map +1 -0
- package/dist/CrossChainCore.d.ts +1 -1
- package/dist/CrossChainCore.d.ts.map +1 -1
- package/dist/config/mainnet/chains.d.ts.map +1 -1
- package/dist/config/mainnet/tokens.d.ts.map +1 -1
- package/dist/config/testnet/chains.d.ts.map +1 -1
- package/dist/config/testnet/tokens.d.ts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +174 -6
- package/dist/index.js +58 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +58 -5
- package/dist/index.mjs.map +1 -1
- package/dist/providers/layer0/index.d.ts +1 -0
- package/dist/providers/layer0/index.d.ts.map +1 -0
- package/dist/providers/wormhole/signers/SuiSigner.d.ts +5 -0
- package/dist/providers/wormhole/signers/SuiSigner.d.ts.map +1 -0
- package/dist/providers/wormhole/wormhole.d.ts.map +1 -1
- package/dist/utils/getUsdcBalance.d.ts.map +1 -1
- package/dist/wallets/sui.d.ts +1 -0
- package/dist/wallets/sui.d.ts.map +1 -0
- package/package.json +6 -6
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\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"]}
|
|
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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -579,6 +579,14 @@ 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
|
+
};
|
|
582
590
|
const wh = await wormhole(isMainnet ? "Mainnet" : "Testnet", platforms);
|
|
583
591
|
this._wormholeContext = wh;
|
|
584
592
|
}
|
|
@@ -605,10 +613,12 @@ var WormholeProvider = class {
|
|
|
605
613
|
sourceContext,
|
|
606
614
|
destContext
|
|
607
615
|
);
|
|
616
|
+
logger.log("request", request);
|
|
608
617
|
const resolver = this._wormholeContext.resolver([
|
|
609
618
|
routes.CCTPRoute
|
|
610
619
|
// manual CCTP
|
|
611
620
|
]);
|
|
621
|
+
logger.log("resolver", resolver);
|
|
612
622
|
const route = await resolver.findRoutes(request);
|
|
613
623
|
const cctpRoute = route[0];
|
|
614
624
|
this.wormholeRoute = cctpRoute;
|
|
@@ -883,8 +893,8 @@ var testnetChains = {
|
|
|
883
893
|
explorerUrl: "https://sepolia.etherscan.io/",
|
|
884
894
|
explorerName: "Etherscan",
|
|
885
895
|
icon: "Ethereum",
|
|
886
|
-
symbol: "
|
|
887
|
-
defaultRpc: "https://
|
|
896
|
+
symbol: "SepoliaETH",
|
|
897
|
+
defaultRpc: "https://ethereum-sepolia-rpc.publicnode.com"
|
|
888
898
|
},
|
|
889
899
|
BaseSepolia: {
|
|
890
900
|
key: "BaseSepolia",
|
|
@@ -930,6 +940,17 @@ var testnetChains = {
|
|
|
930
940
|
symbol: "MATIC",
|
|
931
941
|
defaultRpc: "https://rpc-amoy.polygon.technology/"
|
|
932
942
|
},
|
|
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
|
+
},
|
|
933
954
|
Solana: {
|
|
934
955
|
key: "Solana",
|
|
935
956
|
context: "Solana" /* SOLANA */,
|
|
@@ -1033,6 +1054,15 @@ var testnetTokens = {
|
|
|
1033
1054
|
chain: "PolygonSepolia",
|
|
1034
1055
|
address: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582"
|
|
1035
1056
|
}
|
|
1057
|
+
},
|
|
1058
|
+
HyperEVM: {
|
|
1059
|
+
symbol: "USDC",
|
|
1060
|
+
icon: "USDC",
|
|
1061
|
+
tokenId: {
|
|
1062
|
+
chain: "HyperEVM",
|
|
1063
|
+
address: "0x2B3370eE501B4a559b57D449569354196457D8Ab"
|
|
1064
|
+
},
|
|
1065
|
+
decimals: 6
|
|
1036
1066
|
}
|
|
1037
1067
|
// Sui: {
|
|
1038
1068
|
// symbol: "USDC",
|
|
@@ -1103,6 +1133,17 @@ var mainnetChains = {
|
|
|
1103
1133
|
symbol: "BASE",
|
|
1104
1134
|
defaultRpc: "https://mainnet.base.org"
|
|
1105
1135
|
},
|
|
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
|
+
},
|
|
1106
1147
|
Arbitrum: {
|
|
1107
1148
|
key: "Arbitrum",
|
|
1108
1149
|
context: "Ethereum" /* ETH */,
|
|
@@ -1206,6 +1247,15 @@ var mainnetTokens = {
|
|
|
1206
1247
|
chain: "Polygon",
|
|
1207
1248
|
address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
|
|
1208
1249
|
}
|
|
1250
|
+
},
|
|
1251
|
+
HyperEVM: {
|
|
1252
|
+
symbol: "USDC",
|
|
1253
|
+
icon: "USDC",
|
|
1254
|
+
tokenId: {
|
|
1255
|
+
chain: "HyperEVM",
|
|
1256
|
+
address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f"
|
|
1257
|
+
},
|
|
1258
|
+
decimals: 6
|
|
1209
1259
|
}
|
|
1210
1260
|
// Sui: {
|
|
1211
1261
|
// symbol: "USDC",
|
|
@@ -1235,6 +1285,7 @@ var getSolanaWalletUSDCBalance = async (walletAddress, aptosNetwork, rpc) => {
|
|
|
1235
1285
|
return balance.value.uiAmountString ?? (Number(balance.value.amount) / 10 ** balance.value.decimals).toString();
|
|
1236
1286
|
};
|
|
1237
1287
|
var getEthereumWalletUSDCBalance = async (walletAddress, aptosNetwork, chain, rpc) => {
|
|
1288
|
+
console.log("chain", chain);
|
|
1238
1289
|
const token = aptosNetwork === Network2.MAINNET ? mainnetTokens[chain] : testnetTokens[chain];
|
|
1239
1290
|
const tokenAddress = token.tokenId.address;
|
|
1240
1291
|
const connection = new JsonRpcProvider(rpc);
|
|
@@ -1270,14 +1321,16 @@ var EthereumChainIdToTestnetChain = {
|
|
|
1270
1321
|
84532: testnetChains.BaseSepolia,
|
|
1271
1322
|
421614: testnetChains.ArbitrumSepolia,
|
|
1272
1323
|
43113: testnetChains.Avalanche,
|
|
1273
|
-
80002: testnetChains.PolygonSepolia
|
|
1324
|
+
80002: testnetChains.PolygonSepolia,
|
|
1325
|
+
998: testnetChains.HyperEVM
|
|
1274
1326
|
};
|
|
1275
1327
|
var EthereumChainIdToMainnetChain = {
|
|
1276
1328
|
1: mainnetChains.Ethereum,
|
|
1277
1329
|
8453: mainnetChains.Base,
|
|
1278
1330
|
42161: mainnetChains.Arbitrum,
|
|
1279
1331
|
43114: mainnetChains.Avalanche,
|
|
1280
|
-
137: mainnetChains.Polygon
|
|
1332
|
+
137: mainnetChains.Polygon,
|
|
1333
|
+
999: mainnetChains.HyperEVM
|
|
1281
1334
|
};
|
|
1282
1335
|
var CrossChainCore = class {
|
|
1283
1336
|
constructor(args) {
|
|
@@ -1329,6 +1382,7 @@ var CrossChainCore = class {
|
|
|
1329
1382
|
case "Base":
|
|
1330
1383
|
case "PolygonSepolia":
|
|
1331
1384
|
case "Polygon":
|
|
1385
|
+
case "HyperEVM":
|
|
1332
1386
|
return await getEthereumWalletUSDCBalance(
|
|
1333
1387
|
walletAddress,
|
|
1334
1388
|
this._dappConfig.aptosNetwork,
|
|
@@ -1360,4 +1414,3 @@ export {
|
|
|
1360
1414
|
testnetChains,
|
|
1361
1415
|
testnetTokens
|
|
1362
1416
|
};
|
|
1363
|
-
//# sourceMappingURL=index.mjs.map
|