@usewhisk/cctp 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/chains/constants.ts","../src/chains/mainnet.ts","../src/chains/testnet.ts","../src/chains/solana.ts","../src/chains/stellar.ts","../src/chains/starknet.ts","../src/chains/registry.ts","../src/chains/attestation.ts","../src/abi/tokenMessengerV2.ts","../src/abi/messageTransmitterV2.ts","../src/abi/usdc.ts","../src/abi/tokenMessengerWithFees.ts","../src/iris/urls.ts","../src/iris/limiter.ts","../src/iris/fetch.ts","../src/iris/types.ts","../src/fees/math.ts","../src/iris/fees.ts","../src/iris/messages.ts","../src/iris/reattest.ts","../src/iris/quote.ts","../src/rpc/jsonRpc.ts","../src/rpc/nonce.ts","../src/rpc/starknetTx.ts","../src/forwarder/hookData.ts","../src/encoding/address.ts","../src/fees/minFee.ts","../src/message/decode.ts","../src/burn/recipient.ts","../src/burn/build.ts","../src/burn/buildWithFees.ts","../src/mint/build.ts","../src/starknet/address.ts","../src/starknet/calldata.ts","../src/starknet/burn.ts","../src/starknet/receive.ts","../src/stellar/strkey.ts","../src/stellar/precision.ts","../src/stellar/hookData.ts","../src/stellar/approve.ts","../src/stellar/burn.ts","../src/stellar/mint.ts","../src/solana/pda.ts","../src/solana/discriminators.ts","../src/solana/borsh.ts","../src/solana/burn.ts","../src/solana/receive.ts","../src/solana/state.ts","../src/index.ts"],"names":["sleep","DEFAULT_TIMEOUT_MS","hash","encodeFunctionData","s","nativeToScVal","Contract","Address","PublicKey","Buffer","ANY_DESTINATION_CALLER","MAX_USDC_AMOUNT","SystemProgram","TOKEN_PROGRAM_ID","TransactionInstruction","VERSION"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error hierarchy for `@usewhisk/cctp`.\n *\n * Each subclass has a stable `code` callers can switch on, plus a\n * machine-readable `name`. Human-readable detail goes in `message`.\n *\n * Layers:\n * - `InvalidInputError`: caller passed bad data\n * - `IrisError`: HTTP / parse failures from Iris\n * - `ProtocolError`: CCTP-level invariant violated\n * - `UnsupportedError`: the chain or ecosystem can't serve the call\n */\n\nexport type CctpErrorCode =\n // input\n | \"invalid_address\"\n | \"invalid_bytes32\"\n | \"invalid_amount\"\n | \"invalid_chain\"\n | \"invalid_domain\"\n | \"invalid_input\"\n // iris\n | \"iris_http\"\n | \"iris_network\"\n | \"iris_parse\"\n | \"iris_aborted\"\n | \"iris_rate_limited\"\n // protocol\n | \"amount_too_large\"\n | \"fee_unavailable\"\n | \"tier_not_found\"\n | \"no_route\"\n | \"rpc_unavailable\"\n // unsupported\n | \"unsupported_chain\"\n | \"unsupported_ecosystem\";\n\nexport class CctpError extends Error {\n readonly code: CctpErrorCode;\n override readonly cause?: unknown;\n\n constructor(code: CctpErrorCode, message: string, cause?: unknown) {\n super(message);\n this.name = \"CctpError\";\n this.code = code;\n if (cause !== undefined) this.cause = cause;\n }\n}\n\n/** Caller passed bad input. The fix is in the calling code. */\nexport class InvalidInputError extends CctpError {\n constructor(code: CctpErrorCode, message: string, cause?: unknown) {\n super(code, message, cause);\n this.name = \"InvalidInputError\";\n }\n}\n\n/** HTTP, JSON, or network failures from Iris. May be transient. */\nexport class IrisError extends CctpError {\n constructor(code: CctpErrorCode, message: string, cause?: unknown) {\n super(code, message, cause);\n this.name = \"IrisError\";\n }\n}\n\n/** HTTP non-2xx response from Iris. */\nexport class IrisHttpError extends IrisError {\n readonly status: number;\n readonly bodySnippet: string;\n readonly url: string;\n constructor(status: number, url: string, bodySnippet: string) {\n super(\n \"iris_http\",\n `Iris ${status} on ${url}: ${bodySnippet.slice(0, 200)}`,\n );\n this.name = \"IrisHttpError\";\n this.status = status;\n this.url = url;\n this.bodySnippet = bodySnippet;\n }\n}\n\n/**\n * Iris answered 429, which blocks every request from this IP for five\n * minutes. `retryAt` is when this process will ask again, in ms since the\n * epoch.\n */\nexport class IrisRateLimitedError extends IrisError {\n readonly retryAt: number;\n readonly host: string;\n constructor(host: string, retryAt: number) {\n super(\n \"iris_rate_limited\",\n `Iris rate limit reached on ${host}; requests resume at ${new Date(retryAt).toISOString()}`,\n );\n this.name = \"IrisRateLimitedError\";\n this.host = host;\n this.retryAt = retryAt;\n }\n}\n\n/** Network failure or per-request timeout, after retries. */\nexport class IrisNetworkError extends IrisError {\n constructor(message: string, cause?: unknown) {\n super(\"iris_network\", message, cause);\n this.name = \"IrisNetworkError\";\n }\n}\n\n/** Iris returned non-JSON or unexpected JSON shape. */\nexport class IrisParseError extends IrisError {\n constructor(message: string, cause?: unknown) {\n super(\"iris_parse\", message, cause);\n this.name = \"IrisParseError\";\n }\n}\n\n/** The caller's AbortSignal fired. */\nexport class IrisAbortedError extends IrisError {\n constructor(message: string) {\n super(\"iris_aborted\", message);\n this.name = \"IrisAbortedError\";\n }\n}\n\n/** CCTP-level invariant violated. */\nexport class ProtocolError extends CctpError {\n constructor(code: CctpErrorCode, message: string, cause?: unknown) {\n super(code, message, cause);\n this.name = \"ProtocolError\";\n }\n}\n\n/** The chain or ecosystem can't serve this call. */\nexport class UnsupportedError extends CctpError {\n constructor(code: CctpErrorCode, message: string) {\n super(code, message);\n this.name = \"UnsupportedError\";\n }\n}\n\nexport function isCctpError(value: unknown): value is CctpError {\n return value instanceof CctpError;\n}\n","/**\n * Shared CCTP V2 program / contract addresses.\n *\n * EVM: same address across every mainnet chain, same address across\n * every testnet chain.\n *\n * Solana: program IDs are the same across mainnet-beta and devnet;\n * only the USDC SPL mint differs by cluster. CCTP V2 on Solana merges\n * TokenMessenger + TokenMinter into a single `TokenMessengerMinter`\n * Anchor program.\n */\nimport type {\n Address,\n SolanaPubkey,\n StarknetFelt,\n StellarStrkey,\n} from \"./types.js\";\n\nexport const TOKEN_MESSENGER_V2_EVM_MAINNET: Address =\n \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\";\n\nexport const MESSAGE_TRANSMITTER_V2_EVM_MAINNET: Address =\n \"0x81D40F21F12A8F0E3252Bccb954D722d4c464B64\";\n\nexport const TOKEN_MESSENGER_V2_EVM_TESTNET: Address =\n \"0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA\";\n\nexport const MESSAGE_TRANSMITTER_V2_EVM_TESTNET: Address =\n \"0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275\";\n\n/** Takes Circle's signed upfront-fee quotes, on `upfrontFeeSource` chains only. */\nexport const TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET: Address =\n \"0x71f54F818671cD0D7ea140Da213e5C8b5C92a408\";\n\nexport const TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET: Address =\n \"0x8745D906D67C346E5eb1aEEED38Eb87F34DF0C0A\";\n\n/** `TokenMessengerMinterV2` program ID (same on mainnet-beta + devnet). */\nexport const TOKEN_MESSENGER_MINTER_V2_SOLANA: SolanaPubkey =\n \"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe\";\n\n/** `MessageTransmitterV2` program ID (same on mainnet-beta + devnet). */\nexport const MESSAGE_TRANSMITTER_V2_SOLANA: SolanaPubkey =\n \"CCTPV2Sm4AdWt5296sk4P66VBZ7bEhcARwFaaS9YPbeC\";\n\n/** USDC SPL mint on Solana mainnet-beta. */\nexport const USDC_SPL_MAINNET: SolanaPubkey =\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\";\n\n/** USDC SPL mint on Solana devnet. */\nexport const USDC_SPL_DEVNET: SolanaPubkey =\n \"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\";\n\n/** Circle-assigned CCTP domain ID for Solana. */\nexport const SOLANA_CCTP_DOMAIN = 5 as const;\n\n/**\n * Stellar's CCTP V2 contract IDs (Soroban contract strkeys). Each\n * network has its own deployment. Contract names mirror Circle's\n * naming on the Stellar contracts reference page.\n */\nexport const TOKEN_MESSENGER_MINTER_STELLAR_MAINNET: StellarStrkey =\n \"CAE2G5Z77UP7GYPYGFOWFGW7C7J6I4YP2AFGSADRKQY62SYUFLPNFTXL\";\nexport const MESSAGE_TRANSMITTER_STELLAR_MAINNET: StellarStrkey =\n \"CACMENFFJPJMSDAJQLX4R7K3SFZIW2LJSE3R2UMLGSWHFHS353FVXAZV\";\nexport const CCTP_FORWARDER_STELLAR_MAINNET: StellarStrkey =\n \"CBZL2IH7F6BIDAA3WBNXYKIXSATJGMSW7K5P5MJ6STX5RXN47TZJDF5T\";\n\nexport const TOKEN_MESSENGER_MINTER_STELLAR_TESTNET: StellarStrkey =\n \"CDNG7HXAPBWICI2E3AUBP3YZWZELJLYSB6F5CC7WLDTLTHVM74SLRTHP\";\nexport const MESSAGE_TRANSMITTER_STELLAR_TESTNET: StellarStrkey =\n \"CBJ6MTCKKZG73PMDZCJMSFRD7DQEMI4FKDH7CGDSV4W6FHCRBCQAVVJY\";\nexport const CCTP_FORWARDER_STELLAR_TESTNET: StellarStrkey =\n \"CA66Q2WFBND6V4UEB7RD4SAXSVIWMD6RA4X3U32ELVFGXV5PJK4T4VSZ\";\n\n/** Circle's USDC issuer on Stellar mainnet (Centre). */\nexport const USDC_ISSUER_STELLAR_MAINNET: StellarStrkey =\n \"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN\";\n/** Circle's USDC issuer on Stellar testnet. */\nexport const USDC_ISSUER_STELLAR_TESTNET: StellarStrkey =\n \"GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5\";\n\n/** Required when signing Soroban transactions. */\nexport const STELLAR_NETWORK_PASSPHRASE_MAINNET =\n \"Public Global Stellar Network ; September 2015\" as const;\nexport const STELLAR_NETWORK_PASSPHRASE_TESTNET =\n \"Test SDF Network ; September 2015\" as const;\n\n/** Circle-assigned CCTP domain ID for Stellar. */\nexport const STELLAR_CCTP_DOMAIN = 27 as const;\n\n/**\n * Stellar's USDC asset uses 7 decimals natively while CCTP messages\n * always use 6. Burn from Stellar drops the 7th decimal; mint to Stellar\n * scales the 6-decimal subunits by 10.\n */\nexport const STELLAR_USDC_DECIMALS = 7 as const;\nexport const CCTP_USDC_DECIMALS = 6 as const;\n\nexport const TOKEN_MESSENGER_MINTER_V2_STARKNET_MAINNET: StarknetFelt =\n \"0x07d421B9cA8aA32DF259965cDA8ACb93F7599F69209A41872AE84638B2A20F2a\";\nexport const MESSAGE_TRANSMITTER_V2_STARKNET_MAINNET: StarknetFelt =\n \"0x02EBB5777B6dD8B26ea11D68Fdf1D2c85cD2099335328Be845a28c77A8AEf183\";\n\nexport const TOKEN_MESSENGER_MINTER_V2_STARKNET_SEPOLIA: StarknetFelt =\n \"0x04bDdE1E09a4B09a2F95d893D94a967b7717eB85A3f6dEcA8c080Ee01fBc3370\";\nexport const MESSAGE_TRANSMITTER_V2_STARKNET_SEPOLIA: StarknetFelt =\n \"0x04db7926C64f1f32a840F3Fa95cB551f3801a3600Bae87aF87807A54DCE12Fe8\";\n\nexport const USDC_STARKNET_MAINNET: StarknetFelt =\n \"0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb\";\nexport const USDC_STARKNET_SEPOLIA: StarknetFelt =\n \"0x0512feAc6339Ff7889822cb5aA2a86C848e9D392bB0E3E237C008674feeD8343\";\n\n/**\n * Starknet chain IDs: `SN_MAIN` and `SN_SEPOLIA` as shortstring felts.\n * Wallets compare against these when signing.\n */\nexport const STARKNET_CHAIN_ID_MAINNET: StarknetFelt = \"0x534e5f4d41494e\"; // SN_MAIN\nexport const STARKNET_CHAIN_ID_SEPOLIA: StarknetFelt = \"0x534e5f5345504f4c4941\"; // SN_SEPOLIA\n\n/** Circle-assigned CCTP domain ID for Starknet. */\nexport const STARKNET_CCTP_DOMAIN = 25 as const;\n","import type { EvmChain } from \"./types.js\";\nimport {\n MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n TOKEN_MESSENGER_V2_EVM_MAINNET,\n TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n} from \"./constants.js\";\n\nexport const Ethereum = {\n id: \"Ethereum\",\n label: \"Ethereum\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 1,\n cctpDomain: 0,\n usdc: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\n \"https://ethereum-rpc.publicnode.com\",\n \"https://ethereum.publicnode.com\",\n ],\n explorerUrl: \"https://etherscan.io\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Avalanche = {\n id: \"Avalanche\",\n label: \"Avalanche\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 43_114,\n cctpDomain: 1,\n usdc: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"AVAX\", decimals: 18 },\n defaultRpcUrls: [\"https://api.avax.network/ext/bc/C/rpc\"],\n explorerUrl: \"https://explorer.avax.network/c-chain\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Optimism = {\n id: \"Optimism\",\n label: \"OP Mainnet\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 10,\n cctpDomain: 2,\n usdc: \"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://mainnet.optimism.io\"],\n explorerUrl: \"https://explorer.optimism.io\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Arbitrum = {\n id: \"Arbitrum\",\n label: \"Arbitrum\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 42_161,\n cctpDomain: 3,\n usdc: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://arb1.arbitrum.io/rpc\"],\n explorerUrl: \"https://arbiscan.io\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Base = {\n id: \"Base\",\n label: \"Base\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 8_453,\n cctpDomain: 6,\n usdc: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://mainnet.base.org\"],\n explorerUrl: \"https://basescan.org\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Polygon = {\n id: \"Polygon\",\n label: \"Polygon PoS\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 137,\n cctpDomain: 7,\n usdc: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"POL\", decimals: 18 },\n defaultRpcUrls: [\n \"https://polygon.drpc.org\",\n \"https://polygon.publicnode.com\",\n ],\n explorerUrl: \"https://polygonscan.com\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Unichain = {\n id: \"Unichain\",\n label: \"Unichain\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 130,\n cctpDomain: 10,\n usdc: \"0x078D782b760474a361dDA0AF3839290b0EF57AD6\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://mainnet.unichain.org\"],\n explorerUrl: \"https://uniscan.xyz\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Linea = {\n id: \"Linea\",\n label: \"Linea\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 59_144,\n cctpDomain: 11,\n usdc: \"0x176211869cA2b568f2A7D4EE941E073a821EE1ff\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.linea.build\"],\n explorerUrl: \"https://lineascan.build\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Codex = {\n id: \"Codex\",\n label: \"Codex\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 81_224,\n cctpDomain: 12,\n usdc: \"0xd996633a415985DBd7D6D12f4A4343E31f5037cf\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.codex.xyz\"],\n explorerUrl: \"https://explorer.codex.xyz\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Sonic = {\n id: \"Sonic\",\n label: \"Sonic\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 146,\n cctpDomain: 13,\n usdc: \"0x29219dd400f2Bf60E5a23d13Be72B486D4038894\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"S\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.soniclabs.com\"],\n explorerUrl: \"https://sonicscan.org\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const WorldChain = {\n id: \"World_Chain\",\n label: \"World Chain\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 480,\n cctpDomain: 14,\n usdc: \"0x79A02482A880bCE3F13e09Da970dC34db4CD24d1\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://worldchain-mainnet.g.alchemy.com/public\"],\n explorerUrl: \"https://worldscan.org\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const Monad = {\n id: \"Monad\",\n label: \"Monad\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 143,\n cctpDomain: 15,\n usdc: \"0x754704Bc059F8C67012fEd69BC8A327a5aafb603\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"MON\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.monad.xyz\", \"https://rpc1.monad.xyz\"],\n explorerUrl: \"https://monadvision.com\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Sei = {\n id: \"Sei\",\n label: \"Sei\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 1_329,\n cctpDomain: 16,\n usdc: \"0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"SEI\", decimals: 18 },\n defaultRpcUrls: [\"https://evm-rpc.sei-apis.com\"],\n explorerUrl: \"https://seiscan.io\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const XDC = {\n id: \"XDC\",\n label: \"XDC\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 50,\n cctpDomain: 18,\n usdc: \"0xfA2958CB79b0491CC627c1557F441eF849Ca8eb1\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"XDC\", decimals: 18 },\n defaultRpcUrls: [\"https://erpc.xinfin.network\", \"https://rpc.xinfin.network\"],\n explorerUrl: \"https://xdcscan.io\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const HyperEVM = {\n id: \"HyperEVM\",\n label: \"HyperEVM\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 999,\n cctpDomain: 19,\n usdc: \"0xb88339CB7199b77E23DB6E890353E22632Ba630f\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"HYPE\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.hyperliquid.xyz/evm\"],\n explorerUrl: \"https://hyperevmscan.io\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Ink = {\n id: \"Ink\",\n label: \"Ink\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 57_073,\n cctpDomain: 21,\n usdc: \"0x2D270e6886d130D724215A266106e6832161EAEd\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\n \"https://rpc-gel.inkonchain.com\",\n \"https://rpc-qnd.inkonchain.com\",\n ],\n explorerUrl: \"https://explorer.inkonchain.com\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Plume = {\n id: \"Plume\",\n label: \"Plume\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 98_866,\n cctpDomain: 22,\n usdc: \"0x222365EF19F7947e5484218551B56bb3965Aa7aF\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"PLUME\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.plume.org\"],\n explorerUrl: \"https://explorer.plume.org\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Arc = {\n id: \"Arc\",\n label: \"Arc\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 5_042,\n cctpDomain: 26,\n usdc: \"0x3600000000000000000000000000000000000000\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_MAINNET,\n nativeCurrency: { symbol: \"USDC\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.mainnet.arc.io\"],\n explorerUrl: \"https://explorer.arc.io\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Edge = {\n id: \"Edge\",\n label: \"EDGE\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 3_343,\n cctpDomain: 28,\n usdc: \"0x98d2919b9A214E6Fa5384AC81E6864bA686Ad74c\",\n usdcDecimals: 6,\n tokenMessenger: \"0x98706A006bc632Df31CAdFCBD43F38887ce2ca5c\",\n messageTransmitter: \"0x5b61381Fc9e58E70EfC13a4A97516997019198ee\",\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://edge-mainnet.g.alchemy.com/public\"],\n explorerUrl: \"https://pro.edgex.exchange/en-US/explorer\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Injective = {\n id: \"Injective\",\n label: \"Injective\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 1_776,\n cctpDomain: 29,\n usdc: \"0xa00C59fF5a080D2b954d0c75e46E22a0c371235a\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n nativeCurrency: { symbol: \"INJ\", decimals: 18 },\n defaultRpcUrls: [\n \"https://sentry.evm-rpc.injective.network\",\n \"https://evm.archival.chain.virtual.json-rpc.injective.network\",\n ],\n explorerUrl: \"https://blockscout.injective.network\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Morph = {\n id: \"Morph\",\n label: \"Morph\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 2_818,\n cctpDomain: 30,\n usdc: \"0xCfb1186F4e93D60E60a8bDd997427D1F33bc372B\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc-bgw.morph.network\"],\n explorerUrl: \"https://explorer.morph.network\",\n capabilities: {\n fastSource: true,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Pharos = {\n id: \"Pharos\",\n label: \"Pharos\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 1_672,\n cctpDomain: 31,\n usdc: \"0xC879C018dB60520F4355C26eD1a6D572cdAC1815\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n nativeCurrency: { symbol: \"PROS\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.pharos.xyz\"],\n explorerUrl: \"https://www.pharosscan.xyz\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Cronos = {\n id: \"Cronos\",\n label: \"Cronos\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 25,\n cctpDomain: 32,\n usdc: \"0x3D7F2C478aAfdB65542BCB44bCeeC05849999d2D\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n nativeCurrency: { symbol: \"CRO\", decimals: 18 },\n defaultRpcUrls: [\"https://evm.cronos.com\"],\n explorerUrl: \"https://explorer.cronos.com\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const Plasma = {\n id: \"Plasma\",\n label: \"Plasma\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 9_745,\n cctpDomain: 33,\n usdc: \"0x2d661C89D812261039AF9764eceaAee884f5F67F\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n nativeCurrency: { symbol: \"XPL\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.plasma.to\"],\n explorerUrl: \"https://plasmascan.to\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const XLayer = {\n id: \"X_Layer\",\n label: \"X Layer\",\n ecosystem: \"evm\",\n network: \"mainnet\",\n evmChainId: 196,\n cctpDomain: 37,\n usdc: \"0xB6CEceAB302E2E4948951eE7843FC24E92933061\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_MAINNET,\n nativeCurrency: { symbol: \"OKB\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.xlayer.tech\", \"https://xlayerrpc.okx.com\"],\n explorerUrl: \"https://www.okx.com/web3/explorer/xlayer\",\n capabilities: {\n fastSource: true,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const EVM_MAINNET_CHAINS = [\n Ethereum,\n Avalanche,\n Optimism,\n Arbitrum,\n Base,\n Polygon,\n Unichain,\n Linea,\n Codex,\n Sonic,\n WorldChain,\n Monad,\n Sei,\n XDC,\n HyperEVM,\n Ink,\n Plume,\n Arc,\n Edge,\n Injective,\n Morph,\n Pharos,\n Cronos,\n Plasma,\n XLayer,\n] as const;\n","import type { EvmChain } from \"./types.js\";\nimport {\n MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n TOKEN_MESSENGER_V2_EVM_TESTNET,\n TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n} from \"./constants.js\";\n\nexport const EthereumSepolia = {\n id: \"Ethereum_Sepolia\",\n label: \"Ethereum Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 11_155_111,\n cctpDomain: 0,\n usdc: \"0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://ethereum-sepolia-rpc.publicnode.com\"],\n explorerUrl: \"https://sepolia.etherscan.io\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const AvalancheFuji = {\n id: \"Avalanche_Fuji\",\n label: \"Avalanche Fuji\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 43_113,\n cctpDomain: 1,\n usdc: \"0x5425890298aed601595a70AB815c96711a31Bc65\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"AVAX\", decimals: 18 },\n defaultRpcUrls: [\"https://api.avax-test.network/ext/bc/C/rpc\"],\n explorerUrl: \"https://explorer-test.avax.network/c-chain\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const OptimismSepolia = {\n id: \"Optimism_Sepolia\",\n label: \"OP Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 11_155_420,\n cctpDomain: 2,\n usdc: \"0x5fd84259d66Cd46123540766Be93DFE6D43130D7\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://sepolia.optimism.io\"],\n explorerUrl: \"https://testnet-explorer.optimism.io\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const ArbitrumSepolia = {\n id: \"Arbitrum_Sepolia\",\n label: \"Arbitrum Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 421_614,\n cctpDomain: 3,\n usdc: \"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://sepolia-rollup.arbitrum.io/rpc\"],\n explorerUrl: \"https://sepolia.arbiscan.io\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const BaseSepolia = {\n id: \"Base_Sepolia\",\n label: \"Base Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 84_532,\n cctpDomain: 6,\n usdc: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://sepolia.base.org\"],\n explorerUrl: \"https://sepolia.basescan.org\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const PolygonAmoyTestnet = {\n id: \"Polygon_Amoy_Testnet\",\n label: \"Polygon PoS Amoy\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 80_002,\n cctpDomain: 7,\n usdc: \"0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"POL\", decimals: 18 },\n defaultRpcUrls: [\"https://polygon-amoy.drpc.org\"],\n explorerUrl: \"https://amoy.polygonscan.com\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const UnichainSepolia = {\n id: \"Unichain_Sepolia\",\n label: \"Unichain Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 1_301,\n cctpDomain: 10,\n usdc: \"0x31d0220469e10c4E71834a79b1f276d740d3768F\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://sepolia.unichain.org\"],\n explorerUrl: \"https://sepolia.uniscan.xyz\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const LineaSepolia = {\n id: \"Linea_Sepolia\",\n label: \"Linea Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 59_141,\n cctpDomain: 11,\n usdc: \"0xFEce4462D57bD51A6A552365A011b95f0E16d9B7\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.sepolia.linea.build\"],\n explorerUrl: \"https://sepolia.lineascan.build\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const CodexTestnet = {\n id: \"Codex_Testnet\",\n label: \"Codex Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 812_242,\n cctpDomain: 12,\n usdc: \"0x6d7f141b6819C2c9CC2f818e6ad549E7Ca090F8f\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.codex-stg.xyz\"],\n explorerUrl: \"https://explorer.codex-stg.xyz\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const SonicTestnet = {\n id: \"Sonic_Testnet\",\n label: \"Sonic Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 14_601,\n cctpDomain: 13,\n usdc: \"0x0BA304580ee7c9a980CF72e55f5Ed2E9fd30Bc51\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"S\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.testnet.soniclabs.com\"],\n explorerUrl: \"https://testnet.sonicscan.org\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const WorldChainSepolia = {\n id: \"World_Chain_Sepolia\",\n label: \"World Chain Sepolia\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 4_801,\n cctpDomain: 14,\n usdc: \"0x66145f38cBAC35Ca6F1Dfb4914dF98F1614aeA88\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://worldchain-sepolia.g.alchemy.com/public\"],\n explorerUrl: \"https://worldchain-sepolia.explorer.alchemy.com\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: false,\n },\n} as const satisfies EvmChain;\n\nexport const MonadTestnet = {\n id: \"Monad_Testnet\",\n label: \"Monad Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 10_143,\n cctpDomain: 15,\n usdc: \"0x534b2f3A21130d7a60830c2Df862319e593943A3\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"MON\", decimals: 18 },\n defaultRpcUrls: [\n \"https://testnet-rpc.monad.xyz\",\n \"https://rpc-testnet.monadinfra.com\",\n ],\n explorerUrl: \"https://testnet.monadvision.com\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const SeiTestnet = {\n id: \"Sei_Testnet\",\n label: \"Sei Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 1_328,\n cctpDomain: 16,\n usdc: \"0x4fCF1784B31630811181f670Aea7A7bEF803eaED\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"SEI\", decimals: 18 },\n defaultRpcUrls: [\"https://evm-rpc-testnet.sei-apis.com\"],\n explorerUrl: \"https://testnet.seiscan.io\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const XDCApothem = {\n id: \"XDC_Apothem\",\n label: \"XDC Apothem\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 51,\n cctpDomain: 18,\n usdc: \"0xb5AB69F7bBada22B28e79C8FFAECe55eF1c771D4\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"TXDC\", decimals: 18 },\n defaultRpcUrls: [\n \"https://rpc.apothem.network\",\n \"https://erpc.apothem.network\",\n ],\n explorerUrl: \"https://testnet.xdcscan.com\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const HyperEVMTestnet = {\n id: \"HyperEVM_Testnet\",\n label: \"HyperEVM Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 998,\n cctpDomain: 19,\n usdc: \"0x2B3370eE501B4a559b57D449569354196457D8Ab\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"HYPE\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.hyperliquid-testnet.xyz/evm\"],\n explorerUrl: \"https://app.hyperliquid-testnet.xyz/explorer\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const InkTestnet = {\n id: \"Ink_Testnet\",\n label: \"Ink Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 763_373,\n cctpDomain: 21,\n usdc: \"0xFabab97dCE620294D2B0b0e46C68964e326300Ac\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\n \"https://rpc-gel-sepolia.inkonchain.com\",\n \"https://rpc-qnd-sepolia.inkonchain.com\",\n ],\n explorerUrl: \"https://explorer-sepolia.inkonchain.com\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const PlumeTestnet = {\n id: \"Plume_Testnet\",\n label: \"Plume Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 98_867,\n cctpDomain: 22,\n usdc: \"0xcB5f30e335672893c7eb944B374c196392C19D18\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"PLUME\", decimals: 18 },\n defaultRpcUrls: [\"https://testnet-rpc.plume.org\"],\n explorerUrl: \"https://testnet-explorer.plume.org\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const ArcTestnet = {\n id: \"Arc_Testnet\",\n label: \"Arc Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 5_042_002,\n cctpDomain: 26,\n usdc: \"0x3600000000000000000000000000000000000000\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n tokenMessengerWithFees: TOKEN_MESSENGER_WITH_FEES_EVM_TESTNET,\n nativeCurrency: { symbol: \"USDC\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc.testnet.arc.io\"],\n explorerUrl: \"https://explorer.testnet.arc.io\",\n capabilities: {\n fastSource: false,\n forwardingDestination: true,\n upfrontFeeSource: true,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const EdgeTestnet = {\n id: \"Edge_Testnet\",\n label: \"EDGE Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 33_431,\n cctpDomain: 28,\n usdc: \"0x2d9F7CAD728051AA35Ecdc472a14cf8cDF5CFD6B\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://edge-testnet.g.alchemy.com/public\"],\n explorerUrl: \"https://edge-testnet.explorer.alchemy.com\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const InjectiveTestnet = {\n id: \"Injective_Testnet\",\n label: \"Injective Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 1_439,\n cctpDomain: 29,\n usdc: \"0x0C382e685bbeeFE5d3d9C29e29E341fEE8E84C5d\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"INJ\", decimals: 18 },\n defaultRpcUrls: [\n \"https://k8s.testnet.json-rpc.injective.network\",\n \"https://testnet.evm.archival.chain.virtual.json-rpc.injective.network\",\n ],\n explorerUrl: \"https://testnet.blockscout.injective.network\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const MorphTestnet = {\n id: \"Morph_Testnet\",\n label: \"Morph Hoodi Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 2_910,\n cctpDomain: 30,\n usdc: \"0x7433b41C6c5e1d58D4Da99483609520255ab661B\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"ETH\", decimals: 18 },\n defaultRpcUrls: [\"https://rpc-hoodi-bgw.morph.network\"],\n explorerUrl: \"https://explorer-hoodi.morph.network\",\n capabilities: {\n fastSource: true,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const PharosTestnet = {\n id: \"Pharos_Testnet\",\n label: \"Pharos Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 688_689,\n cctpDomain: 31,\n usdc: \"0xcfC8330f4BCAB529c625D12781b1C19466A9Fc8B\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"PHAROS\", decimals: 18 },\n defaultRpcUrls: [\"https://atlantic.dplabs-internal.com\"],\n explorerUrl: \"https://atlantic.pharosscan.xyz\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const CronosTestnet = {\n id: \"Cronos_Testnet\",\n label: \"Cronos Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 338,\n cctpDomain: 32,\n usdc: \"0xEb33dc5fac03833e132593659e1dE7256aB59794\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"tCRO\", decimals: 18 },\n defaultRpcUrls: [\"https://evm-t3.cronos.com\"],\n explorerUrl: \"https://explorer.cronos.com/testnet\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const PlasmaTestnet = {\n id: \"Plasma_Testnet\",\n label: \"Plasma Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 9_746,\n cctpDomain: 33,\n usdc: \"0xE67Fb267022cBA8064Dd388CC2FED724F3120D9D\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"XPL\", decimals: 18 },\n defaultRpcUrls: [\"https://testnet-rpc.plasma.to\"],\n explorerUrl: \"https://testnet.plasmascan.to\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const XLayerTestnet = {\n id: \"X_Layer_Testnet\",\n label: \"X Layer Testnet\",\n ecosystem: \"evm\",\n network: \"testnet\",\n evmChainId: 1_952,\n cctpDomain: 37,\n usdc: \"0xDec90b78111Ba2fc6FC6d84d8B9ec159A2d4b9B3\",\n usdcDecimals: 6,\n tokenMessenger: TOKEN_MESSENGER_V2_EVM_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_EVM_TESTNET,\n nativeCurrency: { symbol: \"OKB\", decimals: 18 },\n defaultRpcUrls: [\n \"https://testrpc.xlayer.tech/terigon\",\n \"https://xlayertestrpc.okx.com/terigon\",\n ],\n explorerUrl: \"https://www.okx.com/web3/explorer/xlayer-test\",\n capabilities: {\n fastSource: true,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: true,\n },\n} as const satisfies EvmChain;\n\nexport const EVM_TESTNET_CHAINS = [\n EthereumSepolia,\n AvalancheFuji,\n OptimismSepolia,\n ArbitrumSepolia,\n BaseSepolia,\n PolygonAmoyTestnet,\n UnichainSepolia,\n LineaSepolia,\n CodexTestnet,\n SonicTestnet,\n WorldChainSepolia,\n MonadTestnet,\n SeiTestnet,\n XDCApothem,\n HyperEVMTestnet,\n InkTestnet,\n PlumeTestnet,\n ArcTestnet,\n EdgeTestnet,\n InjectiveTestnet,\n MorphTestnet,\n PharosTestnet,\n CronosTestnet,\n PlasmaTestnet,\n XLayerTestnet,\n] as const;\n","import type { SolanaChain } from \"./types.js\";\nimport {\n MESSAGE_TRANSMITTER_V2_SOLANA,\n SOLANA_CCTP_DOMAIN,\n TOKEN_MESSENGER_MINTER_V2_SOLANA,\n USDC_SPL_DEVNET,\n USDC_SPL_MAINNET,\n} from \"./constants.js\";\n\nexport const Solana = {\n id: \"Solana\",\n label: \"Solana\",\n ecosystem: \"solana\",\n network: \"mainnet\",\n cluster: \"mainnet-beta\",\n cctpDomain: SOLANA_CCTP_DOMAIN,\n usdc: USDC_SPL_MAINNET,\n usdcDecimals: 6,\n tokenMessengerMinter: TOKEN_MESSENGER_MINTER_V2_SOLANA,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_SOLANA,\n nativeCurrency: { symbol: \"SOL\", decimals: 9 },\n defaultRpcUrls: [\n \"https://api.mainnet.solana.com\",\n \"https://api.mainnet-beta.solana.com\",\n ],\n explorerUrl: \"https://explorer.solana.com\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: false,\n standardFeeSwitch: false,\n },\n} as const satisfies SolanaChain;\n\nexport const SolanaDevnet = {\n id: \"Solana_Devnet\",\n label: \"Solana Devnet\",\n ecosystem: \"solana\",\n network: \"testnet\",\n cluster: \"devnet\",\n cctpDomain: SOLANA_CCTP_DOMAIN,\n usdc: USDC_SPL_DEVNET,\n usdcDecimals: 6,\n tokenMessengerMinter: TOKEN_MESSENGER_MINTER_V2_SOLANA,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_SOLANA,\n nativeCurrency: { symbol: \"SOL\", decimals: 9 },\n defaultRpcUrls: [\"https://api.devnet.solana.com\"],\n explorerUrl: \"https://explorer.solana.com\",\n explorerQuery: \"?cluster=devnet\",\n capabilities: {\n fastSource: true,\n forwardingDestination: true,\n upfrontFeeSource: false,\n standardFeeSwitch: false,\n },\n} as const satisfies SolanaChain;\n","import { Asset } from \"@stellar/stellar-sdk\";\nimport type { StellarChain } from \"./types.js\";\nimport {\n CCTP_FORWARDER_STELLAR_MAINNET,\n CCTP_FORWARDER_STELLAR_TESTNET,\n MESSAGE_TRANSMITTER_STELLAR_MAINNET,\n MESSAGE_TRANSMITTER_STELLAR_TESTNET,\n STELLAR_CCTP_DOMAIN,\n STELLAR_NETWORK_PASSPHRASE_MAINNET,\n STELLAR_NETWORK_PASSPHRASE_TESTNET,\n STELLAR_USDC_DECIMALS,\n TOKEN_MESSENGER_MINTER_STELLAR_MAINNET,\n TOKEN_MESSENGER_MINTER_STELLAR_TESTNET,\n USDC_ISSUER_STELLAR_MAINNET,\n USDC_ISSUER_STELLAR_TESTNET,\n} from \"./constants.js\";\n\nfunction deriveUsdcSac(issuer: string, passphrase: string): string {\n return new Asset(\"USDC\", issuer).contractId(passphrase);\n}\n\nconst USDC_SAC_STELLAR_MAINNET = deriveUsdcSac(\n USDC_ISSUER_STELLAR_MAINNET,\n STELLAR_NETWORK_PASSPHRASE_MAINNET,\n);\nconst USDC_SAC_STELLAR_TESTNET = deriveUsdcSac(\n USDC_ISSUER_STELLAR_TESTNET,\n STELLAR_NETWORK_PASSPHRASE_TESTNET,\n);\n\nexport const Stellar = {\n id: \"Stellar\",\n label: \"Stellar\",\n ecosystem: \"stellar\",\n network: \"mainnet\",\n stellarNetwork: \"public\",\n networkPassphrase: STELLAR_NETWORK_PASSPHRASE_MAINNET,\n cctpDomain: STELLAR_CCTP_DOMAIN,\n usdcIssuer: USDC_ISSUER_STELLAR_MAINNET,\n usdc: USDC_SAC_STELLAR_MAINNET,\n usdcDecimals: STELLAR_USDC_DECIMALS,\n tokenMessengerMinter: TOKEN_MESSENGER_MINTER_STELLAR_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_STELLAR_MAINNET,\n cctpForwarder: CCTP_FORWARDER_STELLAR_MAINNET,\n nativeCurrency: { symbol: \"XLM\", decimals: 7 },\n defaultRpcUrls: [\n \"https://soroban-rpc.mainnet.stellar.gateway.fm\",\n \"https://mainnet.sorobanrpc.com\",\n ],\n explorerUrl: \"https://stellar.expert/explorer/public\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: false,\n },\n} as const satisfies StellarChain;\n\nexport const StellarTestnet = {\n id: \"Stellar_Testnet\",\n label: \"Stellar Testnet\",\n ecosystem: \"stellar\",\n network: \"testnet\",\n stellarNetwork: \"testnet\",\n networkPassphrase: STELLAR_NETWORK_PASSPHRASE_TESTNET,\n cctpDomain: STELLAR_CCTP_DOMAIN,\n usdcIssuer: USDC_ISSUER_STELLAR_TESTNET,\n usdc: USDC_SAC_STELLAR_TESTNET,\n usdcDecimals: STELLAR_USDC_DECIMALS,\n tokenMessengerMinter: TOKEN_MESSENGER_MINTER_STELLAR_TESTNET,\n messageTransmitter: MESSAGE_TRANSMITTER_STELLAR_TESTNET,\n cctpForwarder: CCTP_FORWARDER_STELLAR_TESTNET,\n nativeCurrency: { symbol: \"XLM\", decimals: 7 },\n defaultRpcUrls: [\"https://soroban-testnet.stellar.org\"],\n explorerUrl: \"https://stellar.expert/explorer/testnet\",\n capabilities: {\n fastSource: false,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: false,\n },\n} as const satisfies StellarChain;\n","import type { StarknetChain } from \"./types.js\";\nimport {\n MESSAGE_TRANSMITTER_V2_STARKNET_MAINNET,\n MESSAGE_TRANSMITTER_V2_STARKNET_SEPOLIA,\n STARKNET_CCTP_DOMAIN,\n STARKNET_CHAIN_ID_MAINNET,\n STARKNET_CHAIN_ID_SEPOLIA,\n TOKEN_MESSENGER_MINTER_V2_STARKNET_MAINNET,\n TOKEN_MESSENGER_MINTER_V2_STARKNET_SEPOLIA,\n USDC_STARKNET_MAINNET,\n USDC_STARKNET_SEPOLIA,\n} from \"./constants.js\";\n\nexport const Starknet = {\n id: \"Starknet\",\n label: \"Starknet\",\n ecosystem: \"starknet\",\n network: \"mainnet\",\n starknetNetwork: \"mainnet\",\n chainId: STARKNET_CHAIN_ID_MAINNET,\n cctpDomain: STARKNET_CCTP_DOMAIN,\n usdc: USDC_STARKNET_MAINNET,\n usdcDecimals: 6,\n tokenMessengerMinter: TOKEN_MESSENGER_MINTER_V2_STARKNET_MAINNET,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_STARKNET_MAINNET,\n nativeCurrency: { symbol: \"STRK\", decimals: 18 },\n defaultRpcUrls: [\"https://starknet-rpc.publicnode.com\"],\n explorerUrl: \"https://voyager.online\",\n capabilities: {\n fastSource: true,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: false,\n },\n} as const satisfies StarknetChain;\n\nexport const StarknetSepolia = {\n id: \"Starknet_Sepolia\",\n label: \"Starknet Sepolia\",\n ecosystem: \"starknet\",\n network: \"testnet\",\n starknetNetwork: \"sepolia\",\n chainId: STARKNET_CHAIN_ID_SEPOLIA,\n cctpDomain: STARKNET_CCTP_DOMAIN,\n usdc: USDC_STARKNET_SEPOLIA,\n usdcDecimals: 6,\n tokenMessengerMinter: TOKEN_MESSENGER_MINTER_V2_STARKNET_SEPOLIA,\n messageTransmitter: MESSAGE_TRANSMITTER_V2_STARKNET_SEPOLIA,\n nativeCurrency: { symbol: \"STRK\", decimals: 18 },\n defaultRpcUrls: [\"https://starknet-sepolia-rpc.publicnode.com\"],\n explorerUrl: \"https://sepolia.voyager.online\",\n capabilities: {\n fastSource: true,\n forwardingDestination: false,\n upfrontFeeSource: false,\n standardFeeSwitch: false,\n },\n} as const satisfies StarknetChain;\n","import type {\n CctpChain,\n CctpDomain,\n EvmChain,\n EvmChainId,\n Network,\n SolanaChain,\n StarknetChain,\n StellarChain,\n} from \"./types.js\";\nimport { EVM_MAINNET_CHAINS } from \"./mainnet.js\";\nimport { EVM_TESTNET_CHAINS } from \"./testnet.js\";\nimport { Solana, SolanaDevnet } from \"./solana.js\";\nimport { Stellar, StellarTestnet } from \"./stellar.js\";\nimport { Starknet, StarknetSepolia } from \"./starknet.js\";\nimport { InvalidInputError } from \"../errors.js\";\n\nexport class UnknownChainError extends InvalidInputError {\n constructor(detail: string) {\n super(\"invalid_chain\", `Unknown chain: ${detail}`);\n this.name = \"UnknownChainError\";\n }\n}\n\nexport const CHAINS = [\n ...EVM_MAINNET_CHAINS,\n ...EVM_TESTNET_CHAINS,\n Solana,\n SolanaDevnet,\n Stellar,\n StellarTestnet,\n Starknet,\n StarknetSepolia,\n] as const satisfies readonly CctpChain[];\n\nexport type ChainId = (typeof CHAINS)[number][\"id\"];\n\nconst ALL: readonly CctpChain[] = CHAINS;\n\nconst BY_ID = new Map(ALL.map((c) => [c.id, c]));\n\nconst BY_EVM_CHAIN_ID = new Map(\n ALL.filter(isEvmChain).map((c) => [c.evmChainId, c]),\n);\n\nconst BY_DOMAIN_AND_NETWORK = new Map(\n ALL.map((c) => [`${c.cctpDomain}:${c.network}`, c]),\n);\n\nexport function isEvmChain(chain: CctpChain): chain is EvmChain {\n return chain.ecosystem === \"evm\";\n}\n\nexport function isSolanaChain(chain: CctpChain): chain is SolanaChain {\n return chain.ecosystem === \"solana\";\n}\n\nexport function isStellarChain(chain: CctpChain): chain is StellarChain {\n return chain.ecosystem === \"stellar\";\n}\n\nexport function isStarknetChain(chain: CctpChain): chain is StarknetChain {\n return chain.ecosystem === \"starknet\";\n}\n\nexport function isChainId(value: string): value is ChainId {\n return BY_ID.has(value);\n}\n\nexport function getChain(id: ChainId): CctpChain {\n const chain = BY_ID.get(id);\n if (!chain) throw new UnknownChainError(`id=\"${id}\"`);\n return chain;\n}\n\nexport function chainsByNetwork(network: Network): readonly CctpChain[] {\n return ALL.filter((c) => c.network === network);\n}\n\nexport function chainByEvmChainId(evmChainId: EvmChainId): EvmChain {\n const chain = BY_EVM_CHAIN_ID.get(evmChainId);\n if (!chain) throw new UnknownChainError(`evmChainId=${evmChainId}`);\n return chain;\n}\n\n/** For wallet chain ids, which can be any chain the wallet knows. */\nexport function tryChainByEvmChainId(\n evmChainId: EvmChainId,\n): EvmChain | undefined {\n return BY_EVM_CHAIN_ID.get(evmChainId);\n}\n\nexport function chainByDomain(domain: CctpDomain, network: Network): CctpChain {\n const chain = BY_DOMAIN_AND_NETWORK.get(`${domain}:${network}`);\n if (!chain) {\n throw new UnknownChainError(`domain=${domain} network=${network}`);\n }\n return chain;\n}\n\nexport function explorerTxUrl(chain: CctpChain, txHash: string): string {\n return `${chain.explorerUrl}/tx/${txHash}${chain.explorerQuery ?? \"\"}`;\n}\n\nexport function explorerAddressUrl(chain: CctpChain, address: string): string {\n return `${chain.explorerUrl}/${addressPath(chain, address)}/${address}${chain.explorerQuery ?? \"\"}`;\n}\n\nfunction addressPath(chain: CctpChain, address: string): string {\n switch (chain.ecosystem) {\n case \"starknet\":\n return \"contract\";\n case \"stellar\":\n return address.startsWith(\"C\") ? \"contract\" : \"account\";\n default:\n return \"address\";\n }\n}\n","import type { CctpChain, CctpDomain } from \"./types.js\";\nimport type { TransferSpeed } from \"../iris/types.js\";\nimport { ProtocolError } from \"../errors.js\";\n\nexport type SecondsRange = { min: number; max: number };\n\ntype DomainTimes = { fast?: SecondsRange; standard: SecondsRange };\n\nconst s = (min: number, max = min): SecondsRange => ({ min, max });\nconst L1_FINALITY = s(900, 1140);\n\n// Circle's average attestation times, from\n// https://developers.circle.com/cctp/concepts/finality-and-block-confirmations\n// Circle publishes mainnet figures only; testnets share the domain and use them.\nconst BY_DOMAIN: Record<CctpDomain, DomainTimes> = {\n 0: { fast: s(20), standard: L1_FINALITY },\n 1: { standard: s(8) },\n 2: { fast: s(8), standard: L1_FINALITY },\n 3: { fast: s(8), standard: L1_FINALITY },\n 5: { fast: s(8), standard: s(25) },\n 6: { fast: s(8), standard: L1_FINALITY },\n 7: { standard: s(8) },\n 10: { fast: s(8), standard: L1_FINALITY },\n 11: { fast: s(8), standard: s(21_600, 115_200) },\n 12: { fast: s(8), standard: L1_FINALITY },\n 13: { standard: s(8) },\n 14: { fast: s(8), standard: L1_FINALITY },\n 15: { standard: s(5) },\n 16: { standard: s(5) },\n 18: { standard: s(10) },\n 19: { standard: s(5) },\n 21: { fast: s(8), standard: s(1800) },\n 22: { fast: s(8), standard: L1_FINALITY },\n 25: { fast: s(20), standard: s(7200, 14_400) },\n 26: { standard: s(0.5) },\n 27: { standard: s(5) },\n 28: { fast: s(8), standard: s(960, 1260) },\n 29: { standard: s(0.65) },\n 30: { fast: s(8), standard: s(1200, 1800) },\n 31: { standard: s(7) },\n 32: { standard: s(0.5) },\n 33: { standard: s(1) },\n 37: { fast: s(8), standard: L1_FINALITY },\n};\n\n/** How long Circle takes to attest a burn from `chain`. The mint comes after. */\nexport function attestationSeconds(\n chain: CctpChain,\n speed: TransferSpeed,\n): SecondsRange {\n const times = BY_DOMAIN[chain.cctpDomain]?.[speed];\n if (!times) {\n throw new ProtocolError(\n \"no_route\",\n `No ${speed} attestation time for ${chain.label}.`,\n );\n }\n return times;\n}\n","/**\n * `TokenMessengerV2` ABI (relevant subset).\n *\n * Source: github.com/circlefin/evm-cctp-contracts (v2 abis).\n * Only the functions and events Whisk actually calls are included.\n */\nexport const tokenMessengerV2Abi = [\n {\n type: \"function\",\n name: \"depositForBurn\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"destinationCaller\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"minFinalityThreshold\", type: \"uint32\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"depositForBurnWithHook\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"destinationCaller\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"minFinalityThreshold\", type: \"uint32\" },\n { name: \"hookData\", type: \"bytes\" },\n ],\n outputs: [],\n },\n {\n type: \"event\",\n name: \"DepositForBurn\",\n anonymous: false,\n inputs: [\n { name: \"burnToken\", type: \"address\", indexed: true },\n { name: \"amount\", type: \"uint256\", indexed: false },\n { name: \"depositor\", type: \"address\", indexed: true },\n { name: \"mintRecipient\", type: \"bytes32\", indexed: false },\n { name: \"destinationDomain\", type: \"uint32\", indexed: false },\n { name: \"destinationTokenMessenger\", type: \"bytes32\", indexed: false },\n { name: \"destinationCaller\", type: \"bytes32\", indexed: false },\n { name: \"maxFee\", type: \"uint256\", indexed: false },\n { name: \"minFinalityThreshold\", type: \"uint32\", indexed: false },\n { name: \"hookData\", type: \"bytes\", indexed: false },\n ],\n },\n] as const;\n","/**\n * The subset of `MessageTransmitterV2` Whisk uses: `receiveMessage` for\n * manual recovery, `usedNonces` to check whether a message was minted, and\n * the `MessageReceived` and `MessageSent` events.\n */\nexport const messageTransmitterV2Abi = [\n {\n type: \"function\",\n name: \"receiveMessage\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n outputs: [{ name: \"success\", type: \"bool\" }],\n },\n {\n type: \"function\",\n name: \"usedNonces\",\n stateMutability: \"view\",\n inputs: [{ name: \"nonce\", type: \"bytes32\" }],\n outputs: [{ name: \"isUsed\", type: \"uint256\" }],\n },\n {\n type: \"event\",\n name: \"MessageReceived\",\n anonymous: false,\n inputs: [\n { name: \"caller\", type: \"address\", indexed: true },\n { name: \"sourceDomain\", type: \"uint32\", indexed: true },\n { name: \"nonce\", type: \"bytes32\", indexed: true },\n { name: \"sender\", type: \"bytes32\", indexed: false },\n { name: \"finalityThresholdExecuted\", type: \"uint32\", indexed: false },\n { name: \"messageBody\", type: \"bytes\", indexed: false },\n ],\n },\n {\n type: \"event\",\n name: \"MessageSent\",\n anonymous: false,\n inputs: [{ name: \"message\", type: \"bytes\", indexed: false }],\n },\n] as const;\n","/**\n * The parts of the USDC (FiatTokenV2) ABI that Whisk needs.\n *\n * Read: balanceOf, allowance, decimals, nonces, DOMAIN_SEPARATOR.\n * Write: approve, transfer, permit (EIP-2612).\n */\nexport const usdcAbi = [\n {\n type: \"function\",\n name: \"balanceOf\",\n stateMutability: \"view\",\n inputs: [{ name: \"account\", type: \"address\" }],\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"allowance\",\n stateMutability: \"view\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n outputs: [{ name: \"remaining\", type: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"decimals\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"\", type: \"uint8\" }],\n },\n {\n type: \"function\",\n name: \"approve\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n type: \"function\",\n name: \"transfer\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n type: \"function\",\n name: \"nonces\",\n stateMutability: \"view\",\n inputs: [{ name: \"owner\", type: \"address\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n },\n {\n type: \"function\",\n name: \"DOMAIN_SEPARATOR\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"\", type: \"bytes32\" }],\n },\n {\n type: \"function\",\n name: \"permit\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n outputs: [],\n },\n {\n type: \"event\",\n name: \"Transfer\",\n anonymous: false,\n inputs: [\n { name: \"from\", type: \"address\", indexed: true },\n { name: \"to\", type: \"address\", indexed: true },\n { name: \"value\", type: \"uint256\", indexed: false },\n ],\n },\n {\n type: \"event\",\n name: \"Approval\",\n anonymous: false,\n inputs: [\n { name: \"owner\", type: \"address\", indexed: true },\n { name: \"spender\", type: \"address\", indexed: true },\n { name: \"value\", type: \"uint256\", indexed: false },\n ],\n },\n] as const;\n","/**\n * The parts of Circle's `TokenMessengerWithFees` that Whisk calls, from the ABI\n * in Circle's contract interface reference. Only the `bytes signedQuote`\n * overload of each burn is listed, so encoding never has to pick between them.\n */\nexport const tokenMessengerWithFeesAbi = [\n {\n type: \"function\",\n name: \"depositForBurnWithFees\",\n stateMutability: \"payable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"destinationCaller\", type: \"bytes32\" },\n {\n name: \"claim\",\n type: \"tuple\",\n components: [\n { name: \"signedQuote\", type: \"bytes\" },\n { name: \"refundAddress\", type: \"address\" },\n ],\n },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"getFee\",\n stateMutability: \"pure\",\n inputs: [{ name: \"signedQuote\", type: \"bytes\" }],\n outputs: [\n { name: \"totalFee\", type: \"uint256\" },\n { name: \"feeToken\", type: \"address\" },\n ],\n },\n {\n type: \"function\",\n name: \"tokenMessenger\",\n stateMutability: \"view\",\n inputs: [],\n outputs: [{ name: \"\", type: \"address\" }],\n },\n] as const;\n","import type { Network } from \"../chains/types.js\";\n\nexport const IRIS_MAINNET_URL = \"https://iris-api.circle.com\";\nexport const IRIS_SANDBOX_URL = \"https://iris-api-sandbox.circle.com\";\n\nexport function irisBaseUrl(network: Network): string {\n return network === \"mainnet\" ? IRIS_MAINNET_URL : IRIS_SANDBOX_URL;\n}\n","import { IrisRateLimitedError } from \"../errors.js\";\n\nexport type IrisLimiterOptions = {\n /** Circle's limit is 35 a second; staying under it leaves room for others. */\n ratePerSecond?: number;\n /** Circle blocks the IP for five minutes after a 429. */\n standDownMs?: number;\n now?: () => number;\n sleep?: (ms: number) => Promise<void>;\n};\n\nexport type IrisLimiter = {\n /** Waits for a request slot, or throws while the host is standing down. */\n acquire(host: string): Promise<void>;\n /** Records a 429 and returns when requests may resume. */\n standDown(host: string): number;\n now(): number;\n sleep(ms: number): Promise<void>;\n};\n\ntype Bucket = { tokens: number; updatedAt: number; blockedUntil: number };\n\nexport function createIrisLimiter(\n options: IrisLimiterOptions = {},\n): IrisLimiter {\n const rate = options.ratePerSecond ?? 30;\n const standDownMs = options.standDownMs ?? 5 * 60_000;\n const now = options.now ?? (() => Date.now());\n const sleep =\n options.sleep ??\n ((ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)));\n const buckets = new Map<string, Bucket>();\n\n const bucket = (host: string): Bucket => {\n let b = buckets.get(host);\n if (!b) {\n b = { tokens: rate, updatedAt: now(), blockedUntil: 0 };\n buckets.set(host, b);\n }\n return b;\n };\n\n return {\n async acquire(host) {\n const b = bucket(host);\n if (now() < b.blockedUntil) {\n throw new IrisRateLimitedError(host, b.blockedUntil);\n }\n const elapsed = (now() - b.updatedAt) / 1000;\n b.tokens = Math.min(rate, b.tokens + elapsed * rate);\n b.updatedAt = now();\n if (b.tokens < 1) {\n const waitMs = Math.ceil(((1 - b.tokens) / rate) * 1000);\n await sleep(waitMs);\n b.tokens += (waitMs / 1000) * rate;\n b.updatedAt = now();\n }\n b.tokens -= 1;\n },\n standDown(host) {\n const b = bucket(host);\n b.blockedUntil = now() + standDownMs;\n return b.blockedUntil;\n },\n now,\n sleep,\n };\n}\n\n/** Shared by every Iris call in the process, as Circle's limit is per IP. */\nexport const defaultIrisLimiter = createIrisLimiter();\n","/**\n * Iris fetch wrapper with timeout, retry, and `AbortSignal`.\n *\n * Error mapping:\n * - 4xx (except 429) → IrisHttpError (no retry)\n * - 429 → IrisRateLimitedError (no retry)\n * - 5xx → retry, then IrisHttpError\n * - Network failure → retry, then IrisNetworkError\n * - Caller-signaled abort → IrisAbortedError\n * - Per-request timeout → retry, then IrisNetworkError\n * - JSON parse failure → IrisParseError (no retry)\n */\n\nimport {\n IrisAbortedError,\n IrisHttpError,\n IrisNetworkError,\n IrisParseError,\n IrisRateLimitedError,\n} from \"../errors.js\";\nimport { defaultIrisLimiter, type IrisLimiter } from \"./limiter.js\";\n\nexport type FetchJsonOptions = {\n /** Per-request timeout in ms. Default 5000. */\n timeoutMs?: number;\n /** Retries after the first attempt. Default 3. */\n maxRetries?: number;\n /** Base delay between retries in ms. Backoff multiplies by retry index. */\n baseDelayMs?: number;\n signal?: AbortSignal;\n /** Defaults to the global `fetch`. */\n fetch?: typeof fetch;\n /** Defaults to one limiter shared by every Iris call in the process. */\n limiter?: IrisLimiter;\n};\n\nconst DEFAULT_TIMEOUT_MS = 5000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_BASE_DELAY_MS = 300;\n\nexport async function fetchIrisJson<T>(\n url: string,\n options: FetchJsonOptions = {},\n request: { method: \"POST\"; body: unknown } | { method: \"GET\" } = {\n method: \"GET\",\n },\n): Promise<T> {\n const {\n timeoutMs = DEFAULT_TIMEOUT_MS,\n maxRetries = DEFAULT_MAX_RETRIES,\n baseDelayMs = DEFAULT_BASE_DELAY_MS,\n signal,\n fetch: fetchImpl = fetch,\n limiter = defaultIrisLimiter,\n } = options;\n const host = new URL(url).host;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n if (signal?.aborted) throw new IrisAbortedError(\"Aborted by caller\");\n await limiter.acquire(host);\n\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), timeoutMs);\n const onCallerAbort = () => ctrl.abort();\n signal?.addEventListener(\"abort\", onCallerAbort);\n\n try {\n const res = await fetchImpl(url, {\n method: request.method,\n headers: {\n accept: \"application/json\",\n ...(request.method === \"POST\" && {\n \"content-type\": \"application/json\",\n }),\n },\n ...(request.method === \"POST\" && {\n body: JSON.stringify(request.body),\n }),\n signal: ctrl.signal,\n });\n\n if (res.ok) {\n let json: unknown;\n try {\n json = await res.json();\n } catch (err) {\n throw new IrisParseError(`Invalid JSON from ${url}`, err);\n }\n return json as T;\n }\n\n // A retry inside the block would extend it, so stop asking at once.\n if (res.status === 429) {\n throw new IrisRateLimitedError(host, limiter.standDown(host));\n }\n\n if (res.status >= 400 && res.status < 500 && res.status !== 429) {\n throw new IrisHttpError(res.status, url, await safeText(res));\n }\n\n lastError = new IrisHttpError(res.status, url, await safeText(res));\n } catch (err) {\n // Parse errors and 4xx HTTP errors bypass the retry loop.\n if (err instanceof IrisParseError) throw err;\n if (err instanceof IrisRateLimitedError) throw err;\n if (err instanceof IrisHttpError) {\n if (err.status < 500 && err.status !== 429) throw err;\n }\n // A timeout aborts too, but only the caller's signal stops the retries.\n if (signal?.aborted) throw new IrisAbortedError(\"Aborted by caller\");\n lastError = err;\n } finally {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onCallerAbort);\n }\n\n if (attempt < maxRetries) {\n await sleep(baseDelayMs * (attempt + 1), signal);\n }\n }\n\n if (lastError instanceof IrisHttpError) throw lastError;\n throw new IrisNetworkError(\n `Iris request failed after ${maxRetries + 1} attempts`,\n lastError,\n );\n}\n\nasync function safeText(res: Response): Promise<string> {\n try {\n return await res.text();\n } catch {\n return \"\";\n }\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new IrisAbortedError(\"Aborted by caller\"));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n function onAbort() {\n clearTimeout(timer);\n reject(new IrisAbortedError(\"Aborted by caller\"));\n }\n signal?.addEventListener(\"abort\", onAbort);\n });\n}\n","import type { CctpDomain } from \"../chains/types.js\";\n\n/** Fast Transfer attests after a block or two, before hard finality. */\nexport const FINALITY_FAST = 1000 as const;\n/** Standard Transfer attests after hard finality. */\nexport const FINALITY_STANDARD = 2000 as const;\nexport type FinalityThreshold = typeof FINALITY_FAST | typeof FINALITY_STANDARD;\n\nexport type TransferSpeed = \"fast\" | \"standard\";\n\n/**\n * Forwarder fee levels returned per finality level, in USDC subunits.\n * Circle recommends `med` or higher.\n */\nexport type ForwarderFeeTier = {\n low: bigint;\n med: bigint;\n high: bigint;\n};\n\n/**\n * A Fast or Standard row of the `/v2/burn/USDC/fees/{src}/{dst}` response, parsed.\n *\n * `minimumFee` is in hundredths of a basis point: Iris's `1.3` is `130n`.\n * `forwardFee` is present only when `?forward=true` is set on the request.\n */\nexport type BurnFeeTier = {\n finalityThreshold: FinalityThreshold;\n minimumFee: bigint;\n forwardFee?: ForwarderFeeTier;\n};\n\n/** Iris never reports a failed attestation; a slow one stays pending. */\nexport type IrisAttestationStatus = \"pending_confirmations\" | \"complete\";\n\n/** Why a message is slower than asked. None of these is a failure. */\nexport type IrisDelayReason =\n | \"insufficient_fee\"\n | \"amount_above_max\"\n | \"insufficient_allowance_available\";\n\n/**\n * Circle Orbit forwarder lifecycle status. Present only when the burn\n * was triggered with the forwarder hookData.\n *\n * - `PENDING`: relayer is processing.\n * - `CONFIRMED`: relayer submitted the mint, waiting on finality.\n * - `COMPLETE`: mint finalized.\n * - `FAILED`: relayer rejected; fall back to manual mint.\n */\nexport type ForwardState = \"PENDING\" | \"CONFIRMED\" | \"COMPLETE\" | \"FAILED\";\n\n/**\n * Single message returned by `/v2/messages/{srcDomain}`.\n */\nexport type IrisMessage = {\n /** Raw 0x-prefixed CCTP message bytes; pass to receiveMessage. */\n message: `0x${string}`;\n /** Raw 0x-prefixed attestation bytes; pass to receiveMessage. */\n attestation: `0x${string}`;\n /** Decimal string. */\n eventNonce: string;\n status: IrisAttestationStatus;\n cctpVersion: 2;\n /** Present when burn included forwarder hookData. */\n forwardState?: ForwardState | null;\n /** Destination tx hash when forwardState is CONFIRMED or COMPLETE. */\n forwardTxHash?: string | null;\n delayReason?: IrisDelayReason | null;\n /** Decoded message and message body, if Iris can decode them. */\n decodedMessage?: {\n sourceDomain: string;\n destinationDomain: string;\n nonce: `0x${string}`;\n sender: string | null;\n recipient: string | null;\n destinationCaller: string | null;\n minFinalityThreshold: string;\n finalityThresholdExecuted: string;\n messageBody: `0x${string}`;\n decodedMessageBody?: {\n burnToken: string | null;\n mintRecipient: string | null;\n amount: string;\n messageSender: string | null;\n maxFee: string;\n feeExecuted: string;\n expirationBlock: string;\n hookData: `0x${string}` | null;\n };\n };\n};\n\nexport type IrisMessagesResponse = {\n messages: IrisMessage[];\n};\n\n/**\n * Filters for getMessages. Pass at least one of `transactionHash` or `nonce`.\n */\nexport type GetMessagesQuery = {\n sourceDomain: CctpDomain;\n transactionHash?: string;\n nonce?: string;\n};\n","/**\n * Fee math for CCTP V2 bridges.\n *\n * Two protocol-level fees stack on a Fast Transfer + Forwarder bridge:\n *\n * 1. Burn fee: a rate on the transfer amount, charged by CCTP. Iris\n * returns `minimumFee` in basis points with up to two decimals\n * (`1.3` is 0.013%). Whisk holds it as hundredths of a basis\n * point, so `1.3` becomes `130n`.\n *\n * 2. Forwarder fee: a flat USDC fee that pays for destination gas\n * and the relayer. Iris returns low, med and high levels in USDC\n * subunits. Whisk defaults to `med`.\n *\n * `maxFee` on `depositForBurnWithHook` must cover both. Every step\n * rounds up: a `maxFee` one subunit short turns a Fast transfer into a\n * Standard one.\n */\n\nimport type { BurnFeeTier, ForwarderFeeTier } from \"../iris/types.js\";\nimport { InvalidInputError, IrisParseError, ProtocolError } from \"../errors.js\";\n\nconst CENTI_BPS_PER_UNIT = 1_000_000n;\n\nconst DECIMAL = /^(\\d+)(?:\\.(\\d+))?$/;\n\n// JSON numbers reach us already parsed. String() gives back the shortest\n// decimal that round-trips, which is the literal Iris sent for any value\n// with 15 or fewer significant digits. Exponent forms are refused.\nfunction ceilDecimal(raw: unknown, decimals: number, what: string): bigint {\n const text =\n typeof raw === \"number\" ? String(raw) : typeof raw === \"string\" ? raw : \"\";\n const match = DECIMAL.exec(text);\n if (!match) {\n throw new IrisParseError(`Iris ${what} is invalid: ${String(raw)}`);\n }\n const fraction = match[2] ?? \"\";\n const kept = fraction.slice(0, decimals).padEnd(decimals, \"0\");\n const dropped = /[1-9]/.test(fraction.slice(decimals)) ? 1n : 0n;\n return BigInt((match[1] ?? \"0\") + kept) + dropped;\n}\n\n/** Iris's `minimumFee` as hundredths of a basis point: `1.3` is `130n`. */\nexport function parseFeeBps(raw: unknown): bigint {\n return ceilDecimal(raw, 2, \"minimumFee\");\n}\n\n/** An Iris forwarder fee in USDC subunits, rounded up. */\nexport function parseForwarderFee(raw: unknown): bigint {\n return ceilDecimal(raw, 0, \"forwardFee\");\n}\n\n/**\n * The CCTP burn fee on `amount` subunits at `feeCentiBps` hundredths of\n * a basis point, rounded up.\n */\nexport function computeBurnFee(amount: bigint, feeCentiBps: bigint): bigint {\n if (amount < 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be non-negative, got ${amount}`,\n );\n }\n if (feeCentiBps < 0n) {\n throw new InvalidInputError(\n \"invalid_input\",\n `feeCentiBps must be non-negative, got ${feeCentiBps}`,\n );\n }\n return ceilDiv(amount * feeCentiBps, CENTI_BPS_PER_UNIT);\n}\n\n/** The forwarder fee for a level, in USDC subunits. */\nexport function selectForwarderFee(\n tier: BurnFeeTier,\n level: keyof ForwarderFeeTier = \"med\",\n): bigint {\n if (!tier.forwardFee) {\n throw new ProtocolError(\n \"fee_unavailable\",\n \"Tier has no forwardFee. Fetch burn fees with includeForwarderFee=true\",\n );\n }\n const value = tier.forwardFee[level];\n if (value < 0n) {\n throw new ProtocolError(\n \"fee_unavailable\",\n `Invalid forwardFee.${level}: ${value}`,\n );\n }\n return value;\n}\n\nexport type ComputeMaxFeeInput = {\n /** Transfer amount in USDC subunits. */\n amount: bigint;\n /** Selected tier (Fast or Standard). */\n tier: BurnFeeTier;\n /** Forwarder fee level; defaults to `\"med\"`. */\n forwarderLevel?: keyof ForwarderFeeTier;\n /**\n * Whole basis points added to the forwarder fee (0 to 10000). Iris's\n * `high` level already carries a buffer, so this defaults to 0.\n */\n forwarderBufferBps?: number;\n /** Whether to include the forwarder fee. Defaults to `true`. */\n includeForwarder?: boolean;\n /**\n * Whole basis points added to the protocol fee in `maxFee` only. Circle\n * takes the fee it executes, so the buffer is a ceiling, not a charge.\n */\n burnFeeBufferBps?: number;\n /** The on-chain minimum from `getMinFeeAmount`, in USDC subunits. */\n minBurnFee?: bigint;\n};\n\nexport type ComputeMaxFeeResult = {\n /** The protocol fee, raised to `minBurnFee` if lower, before any buffer. */\n burnFee: bigint;\n forwarderFee: bigint;\n /** Total cap to pass as `maxFee` on `depositForBurnWithHook`. */\n maxFee: bigint;\n};\n\n/**\n * maxFee = burnFee (+ buffer) + forwarderFee (+ buffer)\n *\n * The result is a cap; the actual deducted fee can be less.\n */\nexport function computeMaxFee(input: ComputeMaxFeeInput): ComputeMaxFeeResult {\n const {\n amount,\n tier,\n forwarderLevel = \"med\",\n forwarderBufferBps = 0,\n includeForwarder = true,\n burnFeeBufferBps = 0,\n minBurnFee = 0n,\n } = input;\n\n const irisFee = computeBurnFee(amount, tier.minimumFee);\n const burnFee = irisFee > minBurnFee ? irisFee : minBurnFee;\n const forwarderFee = includeForwarder\n ? applyBufferBps(\n selectForwarderFee(tier, forwarderLevel),\n forwarderBufferBps,\n )\n : 0n;\n\n return {\n burnFee,\n forwarderFee,\n maxFee: applyBufferBps(burnFee, burnFeeBufferBps) + forwarderFee,\n };\n}\n\nfunction applyBufferBps(value: bigint, bps: number): bigint {\n if (!Number.isSafeInteger(bps) || bps < 0) {\n throw new InvalidInputError(\n \"invalid_input\",\n `bufferBps must be a non-negative whole number, got ${bps}`,\n );\n }\n return ceilDiv(value * (10_000n + BigInt(bps)), 10_000n);\n}\n\nfunction ceilDiv(numerator: bigint, denominator: bigint): bigint {\n return (numerator + denominator - 1n) / denominator;\n}\n","/**\n * Iris burn fees endpoint.\n *\n * GET /v2/burn/USDC/fees/{src}/{dst}?forward=true\n *\n * Returns one row per finality threshold (1000 = Fast, 2000 = Standard).\n * Each row has the protocol fee in basis points and, with ?forward=true,\n * the forwarder fee levels low/med/high in USDC subunits.\n */\nimport type { CctpDomain, Network } from \"../chains/types.js\";\nimport { irisBaseUrl } from \"./urls.js\";\nimport { fetchIrisJson, type FetchJsonOptions } from \"./fetch.js\";\nimport type {\n BurnFeeTier,\n FinalityThreshold,\n ForwarderFeeTier,\n TransferSpeed,\n} from \"./types.js\";\nimport { FINALITY_FAST, FINALITY_STANDARD } from \"./types.js\";\nimport { IrisParseError, ProtocolError } from \"../errors.js\";\nimport {\n parseFeeBps,\n parseForwarderFee,\n selectForwarderFee,\n} from \"../fees/math.js\";\n\nexport type GetBurnFeesOptions = FetchJsonOptions & {\n /** Default `true`. Set to `false` if you only need protocol fees. */\n includeForwarderFee?: boolean;\n};\n\n/**\n * Rows for thresholds other than Fast and Standard are dropped. Use\n * `pickFeeTier` to choose one.\n */\nexport async function getBurnFees(\n network: Network,\n sourceDomain: CctpDomain,\n destinationDomain: CctpDomain,\n options: GetBurnFeesOptions = {},\n): Promise<BurnFeeTier[]> {\n const { includeForwarderFee = true, ...fetchOpts } = options;\n const base = irisBaseUrl(network);\n const url = new URL(\n `${base}/v2/burn/USDC/fees/${sourceDomain}/${destinationDomain}`,\n );\n if (includeForwarderFee) url.searchParams.set(\"forward\", \"true\");\n\n const raw = await fetchIrisJson<unknown>(url.toString(), fetchOpts);\n if (!Array.isArray(raw)) {\n throw new IrisParseError(\"Iris burn-fees response is not an array\");\n }\n return raw\n .map((row) => normalizeTier(row))\n .filter((t): t is BurnFeeTier => t !== null);\n}\n\nfunction normalizeTier(row: unknown): BurnFeeTier | null {\n if (!row || typeof row !== \"object\") {\n throw new IrisParseError(\"Iris fee tier is not an object\");\n }\n const r = row as Record<string, unknown>;\n const threshold = r.finalityThreshold;\n if (threshold !== FINALITY_FAST && threshold !== FINALITY_STANDARD) {\n return null;\n }\n const out: BurnFeeTier = {\n finalityThreshold: threshold,\n minimumFee: parseFeeBps(r.minimumFee),\n };\n if (r.forwardFee && typeof r.forwardFee === \"object\") {\n const ff = r.forwardFee as Record<string, unknown>;\n out.forwardFee = {\n low: parseForwarderFee(ff.low),\n med: parseForwarderFee(ff.med),\n high: parseForwarderFee(ff.high),\n };\n }\n return out;\n}\n\n/** The row for `speed`. Throws if Iris returned none for this route. */\nexport function pickFeeTier(\n tiers: readonly BurnFeeTier[],\n speed: TransferSpeed,\n): BurnFeeTier {\n const threshold: FinalityThreshold =\n speed === \"fast\" ? FINALITY_FAST : FINALITY_STANDARD;\n const tier = tiers.find((t) => t.finalityThreshold === threshold);\n if (!tier) {\n throw new ProtocolError(\n \"tier_not_found\",\n `Iris returned no ${speed === \"fast\" ? \"Fast\" : \"Standard\"} Transfer fee for this route.`,\n );\n }\n return tier;\n}\n\n/** The forwarder fee for a level, in USDC subunits. */\nexport function pickForwarderFee(\n tier: BurnFeeTier,\n level: keyof ForwarderFeeTier = \"med\",\n): bigint {\n return selectForwarderFee(tier, level);\n}\n","/**\n * Iris messages endpoint.\n *\n * GET /v2/messages/{srcDomain}?transactionHash=...\n * GET /v2/messages/{srcDomain}?nonce=...\n *\n * Returns the message + attestation + forwarder state in a single\n * call. Use this to drive recovery polling.\n */\nimport type { CctpDomain, Network } from \"../chains/types.js\";\nimport { irisBaseUrl } from \"./urls.js\";\nimport { fetchIrisJson, type FetchJsonOptions } from \"./fetch.js\";\nimport {\n IrisAbortedError,\n IrisHttpError,\n IrisRateLimitedError,\n} from \"../errors.js\";\nimport type { SecondsRange } from \"../chains/attestation.js\";\nimport { defaultIrisLimiter } from \"./limiter.js\";\nimport type {\n GetMessagesQuery,\n IrisMessage,\n IrisMessagesResponse,\n} from \"./types.js\";\n\nexport type GetMessagesOptions = FetchJsonOptions & {\n network: Network;\n /** Defaults to Circle's Iris host for `network`. */\n baseUrl?: string;\n};\n\n/**\n * Single fetch. Returns an empty array when Iris doesn't yet know about\n * the burn, whether it answers `messages: []` or 404.\n */\nexport async function getMessages(\n query: GetMessagesQuery,\n options: GetMessagesOptions,\n): Promise<IrisMessage[]> {\n const { network, baseUrl, ...fetchOpts } = options;\n const base = (baseUrl ?? irisBaseUrl(network)).replace(/\\/+$/, \"\");\n const url = new URL(`${base}/v2/messages/${query.sourceDomain}`);\n if (query.transactionHash) {\n url.searchParams.set(\"transactionHash\", query.transactionHash);\n }\n if (query.nonce) {\n url.searchParams.set(\"nonce\", query.nonce);\n }\n try {\n const json = await fetchIrisJson<IrisMessagesResponse>(\n url.toString(),\n fetchOpts,\n );\n return json.messages ?? [];\n } catch (err) {\n if (err instanceof IrisHttpError && err.status === 404) {\n return [];\n }\n throw err;\n }\n}\n\nexport type PollMessageOptions = GetMessagesOptions & {\n /** Polling interval in ms. Default 3000, or from {@link pollBudget}. */\n intervalMs?: number;\n /** Total timeout in ms. Default 15 minutes, or from {@link pollBudget}. */\n timeoutMs?: number;\n /**\n * Custom predicate to decide when polling is \"done\". Default: a forwarded\n * message once Circle's relayer is done or has failed, otherwise once the\n * attestation is complete.\n */\n isDone?: (message: IrisMessage) => boolean;\n /**\n * Called when a 429 makes the poll stand down, with the time it resumes.\n * The wait does not count against `timeoutMs`.\n */\n onRateLimited?: (retryAt: number) => void;\n};\n\nconst DEFAULT_INTERVAL_MS = 3000;\nconst DEFAULT_TIMEOUT_MS = 15 * 60 * 1000;\nconst TIMEOUT_MARGIN_MS = 5 * 60 * 1000;\n\n/**\n * How often and how long to poll for a route whose attestation takes\n * `eta` seconds. Fast routes poll often so the payer hears at once; hour-long\n * ones poll gently so they do not eat the shared rate limit.\n */\nexport function pollBudget(eta: SecondsRange): {\n intervalMs: number;\n timeoutMs: number;\n} {\n const intervalMs =\n eta.max <= 60 ? 2_000 : eta.max <= 30 * 60 ? 10_000 : 30_000;\n return { intervalMs, timeoutMs: eta.max * 2 * 1000 + TIMEOUT_MARGIN_MS };\n}\n\n/**\n * Circle's relayer has minted once it reports the mint `CONFIRMED` or\n * `COMPLETE` with its tx hash. `PENDING` can carry a hash that is not mined.\n */\nexport function isForwardDone(message: IrisMessage): boolean {\n return (\n (message.forwardState === \"CONFIRMED\" ||\n message.forwardState === \"COMPLETE\") &&\n !!message.forwardTxHash\n );\n}\n\nfunction defaultIsDone(message: IrisMessage): boolean {\n if (message.forwardState != null) {\n return isForwardDone(message) || message.forwardState === \"FAILED\";\n }\n return message.status === \"complete\";\n}\n\n/**\n * Returns the message once `isDone` holds, or on timeout the latest one\n * seen (`null` if none). Throws if Iris keeps failing; a slow attestation\n * only times out.\n */\nexport async function pollMessages(\n query: GetMessagesQuery,\n options: PollMessageOptions,\n): Promise<IrisMessage | null> {\n const {\n intervalMs = DEFAULT_INTERVAL_MS,\n timeoutMs = DEFAULT_TIMEOUT_MS,\n isDone = defaultIsDone,\n onRateLimited,\n signal,\n ...rest\n } = options;\n const limiter = rest.limiter ?? defaultIrisLimiter;\n\n let deadline = limiter.now() + timeoutMs;\n let latest: IrisMessage | null = null;\n\n while (limiter.now() < deadline) {\n if (signal?.aborted) throw new IrisAbortedError(\"Aborted by caller\");\n\n let messages: IrisMessage[];\n try {\n messages = await getMessages(query, { ...rest, signal });\n } catch (err) {\n if (!(err instanceof IrisRateLimitedError)) throw err;\n onRateLimited?.(err.retryAt);\n const waitMs = Math.max(0, err.retryAt - limiter.now());\n deadline += waitMs;\n await limiter.sleep(waitMs);\n continue;\n }\n if (messages.length > 0) {\n const first = messages[0];\n if (first) {\n latest = first;\n if (isDone(first)) return first;\n }\n }\n\n await sleep(intervalMs, signal);\n }\n\n return latest;\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new IrisAbortedError(\"Aborted by caller\"));\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n function onAbort() {\n clearTimeout(timer);\n reject(new IrisAbortedError(\"Aborted by caller\"));\n }\n signal?.addEventListener(\"abort\", onAbort);\n });\n}\n","/**\n * Iris reattest endpoint.\n *\n * POST /v2/reattest/{nonce}\n *\n * Asks Circle to sign an expired or pre-finality message again. Circle only\n * acknowledges the request; the new attestation is then read from\n * `/v2/messages` by nonce.\n */\nimport type { Network } from \"../chains/types.js\";\nimport { irisBaseUrl } from \"./urls.js\";\nimport { fetchIrisJson, type FetchJsonOptions } from \"./fetch.js\";\nimport { IrisHttpError, IrisParseError } from \"../errors.js\";\n\nexport type ReattestOptions = FetchJsonOptions & {\n network: Network;\n};\n\n/** Returns Circle's acknowledgement, or `null` when Iris has no such nonce. */\nexport async function reattest(\n nonce: string,\n options: ReattestOptions,\n): Promise<{ nonce: string } | null> {\n const { network, ...fetchOpts } = options;\n const url = `${irisBaseUrl(network)}/v2/reattest/${nonce}`;\n let json: unknown;\n try {\n json = await fetchIrisJson<unknown>(url, fetchOpts, {\n method: \"POST\",\n body: {},\n });\n } catch (err) {\n if (err instanceof IrisHttpError && err.status === 404) return null;\n throw err;\n }\n const acknowledged =\n typeof json === \"object\" && json !== null && \"nonce\" in json\n ? json.nonce\n : undefined;\n if (typeof acknowledged !== \"string\") {\n throw new IrisParseError(\"Iris reattest reply has no nonce\");\n }\n return { nonce: acknowledged };\n}\n","import type { Address, CctpDomain, Network } from \"../chains/types.js\";\nimport { IrisParseError } from \"../errors.js\";\nimport { fetchIrisJson, type FetchJsonOptions } from \"./fetch.js\";\nimport { irisBaseUrl } from \"./urls.js\";\n\nexport type UpfrontFeeType = \"FORWARD\" | \"PRE_FINALITY\";\n\nexport type SignedBurnQuoteRequest = {\n /** The burn amount in USDC subunits. The quote is bound to it. */\n amount: bigint;\n /** The source chain's USDC: Whisk pays fees in USDC, never native gas. */\n feeToken: Address;\n requests: readonly UpfrontFeeType[];\n};\n\nexport type SignedQuoteExpiry =\n | { mode: \"TIMESTAMP\"; expiresAt: number }\n | { mode: \"BLOCK_NUMBER\"; expiresAtBlock: bigint };\n\nexport type SignedBurnQuote = {\n /** Submitted as-is to `TokenMessengerWithFees`. */\n signedQuote: `0x${string}`;\n /** Circle's clock, in Unix seconds. */\n issuedAt: number;\n expiry: SignedQuoteExpiry;\n feeTotalAmount: bigint;\n feeToken: Address;\n /**\n * Absent from Circle's schema but present in its replies. When it is\n * missing, the contract alone holds the quote to the amount.\n */\n burnAmount?: bigint;\n items: { type: UpfrontFeeType; amount: bigint }[];\n};\n\n/**\n * `POST /v2/quote/burn/usdc/{source}/{destination}`: Circle's signed price\n * for paying the Fast and forwarding fees on the source chain. No API key.\n */\nexport async function getSignedBurnQuote(\n network: Network,\n sourceDomain: CctpDomain,\n destinationDomain: CctpDomain,\n request: SignedBurnQuoteRequest,\n options: FetchJsonOptions = {},\n): Promise<SignedBurnQuote> {\n const url = `${irisBaseUrl(network)}/v2/quote/burn/usdc/${sourceDomain}/${destinationDomain}`;\n const raw = await fetchIrisJson<unknown>(url, options, {\n method: \"POST\",\n body: {\n amount: request.amount.toString(),\n feeToken: request.feeToken,\n requests: request.requests.map((type) => ({ type })),\n },\n });\n const quote = parseQuote(raw);\n if (quote.burnAmount !== undefined && quote.burnAmount !== request.amount) {\n throw new IrisParseError(\n `Iris quoted ${quote.burnAmount} subunits, not the ${request.amount} requested`,\n );\n }\n if (quote.feeToken.toLowerCase() !== request.feeToken.toLowerCase()) {\n throw new IrisParseError(\n `Iris priced the fee in ${quote.feeToken}, not ${request.feeToken}`,\n );\n }\n const types = quote.items.map((i) => i.type).sort();\n if (types.join() !== [...request.requests].sort().join()) {\n throw new IrisParseError(\n `Iris priced ${types.join(\", \")}, not ${request.requests.join(\", \")}`,\n );\n }\n return quote;\n}\n\nfunction parseQuote(raw: unknown): SignedBurnQuote {\n const fail = (what: string): never => {\n throw new IrisParseError(`Iris quote: ${what}`);\n };\n if (typeof raw !== \"object\" || raw === null) return fail(\"not an object\");\n const r = raw as Record<string, unknown>;\n\n const signedQuote = r.signedQuote;\n if (\n typeof signedQuote !== \"string\" ||\n !/^0x([0-9a-fA-F]{2})+$/.test(signedQuote)\n ) {\n return fail(\"signedQuote is not hex bytes\");\n }\n if (!Number.isSafeInteger(r.issuedAt))\n return fail(\"issuedAt is not a timestamp\");\n const feeToken = r.feeToken;\n if (typeof feeToken !== \"string\" || !/^0x[0-9a-fA-F]{40}$/.test(feeToken)) {\n return fail(\"feeToken is not an address\");\n }\n const feeTotalAmount = subunits(r.feeTotalAmount) ?? fail(\"feeTotalAmount\");\n const burnAmount =\n r.burnAmount === undefined\n ? undefined\n : (subunits(r.burnAmount) ?? fail(\"burnAmount\"));\n\n if (!Array.isArray(r.items) || r.items.length === 0) return fail(\"no items\");\n const items = r.items.map(\n (item: unknown): SignedBurnQuote[\"items\"][number] => {\n const i = (item ?? {}) as Record<string, unknown>;\n if (i.type !== \"FORWARD\" && i.type !== \"PRE_FINALITY\") {\n return fail(`unknown item type ${String(i.type)}`);\n }\n return {\n type: i.type,\n amount: subunits(i.amount) ?? fail(\"item amount\"),\n };\n },\n );\n if (items.reduce((sum, i) => sum + i.amount, 0n) !== feeTotalAmount) {\n return fail(\"items do not add up to feeTotalAmount\");\n }\n\n return {\n signedQuote: signedQuote as `0x${string}`,\n issuedAt: r.issuedAt as number,\n expiry: parseExpiry(r.expiry) ?? fail(\"expiry\"),\n feeTotalAmount,\n feeToken: feeToken as Address,\n ...(burnAmount !== undefined && { burnAmount }),\n items,\n };\n}\n\nfunction parseExpiry(raw: unknown): SignedQuoteExpiry | undefined {\n if (typeof raw !== \"object\" || raw === null) return undefined;\n const e = raw as Record<string, unknown>;\n if (e.mode === \"TIMESTAMP\" && Number.isSafeInteger(e.expiresAt)) {\n return { mode: \"TIMESTAMP\", expiresAt: e.expiresAt as number };\n }\n if (e.mode === \"BLOCK_NUMBER\" && Number.isSafeInteger(e.expiresAtBlock)) {\n return {\n mode: \"BLOCK_NUMBER\",\n expiresAtBlock: BigInt(e.expiresAtBlock as number),\n };\n }\n return undefined;\n}\n\nfunction subunits(raw: unknown): bigint | undefined {\n return typeof raw === \"string\" && /^(0|[1-9]\\d*)$/.test(raw)\n ? BigInt(raw)\n : undefined;\n}\n\n/**\n * Circle's remaining Fast Transfer allowance, in USDC subunits rounded down.\n * Iris sends it as a JSON number of whole USDC.\n */\nexport async function getFastBurnAllowance(\n network: Network,\n options: FetchJsonOptions = {},\n): Promise<bigint> {\n const raw = await fetchIrisJson<unknown>(\n `${irisBaseUrl(network)}/v2/fastBurn/USDC/allowance`,\n options,\n );\n const value =\n typeof raw === \"object\" && raw !== null && \"allowance\" in raw\n ? raw.allowance\n : undefined;\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new IrisParseError(\"Iris allowance is not a non-negative number\");\n }\n // The shortest decimal form of a double reads back as the same double,\n // so this is the text Iris sent for any allowance below 2^53.\n const match = /^(\\d+)(?:\\.(\\d+))?$/.exec(String(value));\n if (!match)\n throw new IrisParseError(`Iris allowance ${value} is not decimal`);\n const frac = (match[2] ?? \"\").padEnd(6, \"0\").slice(0, 6);\n return BigInt(match[1]!) * 1_000_000n + BigInt(frac);\n}\n","import type { CctpChain, EvmChain } from \"../chains/types.js\";\nimport { ProtocolError } from \"../errors.js\";\n\nexport type RpcOptions = {\n /** Tried in order before the chain's default RPCs. */\n rpcUrls?: readonly string[];\n fetch?: typeof fetch;\n};\n\n/**\n * One JSON-RPC call, tried on each URL in turn until one returns a result\n * that `parse` accepts. Public RPCs fail often enough that one bad answer is\n * not a verdict. `parseError` turns an error code that is itself an answer,\n * such as \"not found\", into a result.\n */\nexport async function callRpc<T>(\n chain: Pick<CctpChain, \"id\" | \"defaultRpcUrls\">,\n method: string,\n params: readonly unknown[] | Record<string, unknown>,\n parse: (result: unknown) => T | undefined,\n options: RpcOptions = {},\n parseError?: (code: unknown) => T | undefined,\n): Promise<T> {\n const doFetch = options.fetch ?? globalThis.fetch;\n const body = JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params });\n const urls = [...(options.rpcUrls ?? []), ...chain.defaultRpcUrls];\n const failures: string[] = [];\n for (let i = 0, behind = 0; i < urls.length; i++) {\n const url = urls[i]!;\n try {\n const res = await doFetch(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body,\n });\n if (!res.ok) {\n failures.push(`${url}: HTTP ${res.status}`);\n continue;\n }\n const payload: unknown = await res.json();\n const result =\n typeof payload === \"object\" && payload !== null && \"result\" in payload\n ? parse(payload.result)\n : undefined;\n if (result !== undefined) return result;\n const answer = parseError?.(errorCode(payload));\n if (answer !== undefined) return answer;\n failures.push(`${url}: ${JSON.stringify(payload)}`);\n // Arc's primary endpoint is load-balanced, and a backend behind the\n // head answers -32014 until it catches up. Ask the same URL again.\n if (errorCode(payload) === LAGGING_BACKEND && behind < LAG_RETRIES) {\n behind += 1;\n await new Promise((resolve) => setTimeout(resolve, 250 * behind));\n i -= 1;\n continue;\n }\n behind = 0;\n } catch (err) {\n failures.push(\n `${url}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n throw new ProtocolError(\n \"rpc_unavailable\",\n `${method} on ${chain.id} failed: ${failures.join(\"; \")}`,\n );\n}\n\nconst LAGGING_BACKEND = -32014;\nconst LAG_RETRIES = 3;\n\nfunction errorCode(payload: unknown): unknown {\n if (typeof payload !== \"object\" || payload === null) return undefined;\n const error = (payload as { error?: { code?: unknown } }).error;\n return error?.code;\n}\n\n/** `eth_gasPrice`, in wei. */\nexport async function getGasPrice(\n chain: EvmChain,\n options: RpcOptions = {},\n): Promise<bigint> {\n return callRpc(\n chain,\n \"eth_gasPrice\",\n [],\n (r) =>\n typeof r === \"string\" && /^0x[0-9a-fA-F]+$/.test(r)\n ? BigInt(r)\n : undefined,\n options,\n );\n}\n\nexport async function getBlockNumber(\n chain: EvmChain,\n options: RpcOptions = {},\n): Promise<bigint> {\n return callRpc(\n chain,\n \"eth_blockNumber\",\n [],\n (r) =>\n typeof r === \"string\" && /^0x[0-9a-fA-F]+$/.test(r)\n ? BigInt(r)\n : undefined,\n options,\n );\n}\n\nconst USED_NONCES = \"0xfeb61724\";\n\n/**\n * Whether `MessageTransmitterV2.usedNonces(nonce)` is set: the message was\n * already received on this chain and minting it again would revert.\n */\nexport async function isNonceUsed(\n chain: EvmChain,\n nonce: `0x${string}`,\n options: RpcOptions = {},\n): Promise<boolean> {\n if (!/^0x[0-9a-fA-F]{64}$/.test(nonce)) {\n throw new ProtocolError(\"rpc_unavailable\", `nonce ${nonce} is not bytes32`);\n }\n return callRpc(\n chain,\n \"eth_call\",\n [\n { to: chain.messageTransmitter, data: `${USED_NONCES}${nonce.slice(2)}` },\n \"latest\",\n ],\n (r) =>\n typeof r === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(r)\n ? BigInt(r) !== 0n\n : undefined,\n options,\n );\n}\n\nexport type TransactionStatus = \"success\" | \"reverted\" | \"unknown\";\n\n/** `unknown` until the transaction is mined, or if the node never saw it. */\nexport async function getTransactionStatus(\n chain: EvmChain,\n hash: `0x${string}`,\n options: RpcOptions = {},\n): Promise<TransactionStatus> {\n return callRpc(\n chain,\n \"eth_getTransactionReceipt\",\n [hash],\n (r): TransactionStatus | undefined => {\n if (r === null) return \"unknown\";\n if (typeof r !== \"object\") return undefined;\n const status = (r as { status?: unknown }).status;\n if (status === \"0x1\") return \"success\";\n if (status === \"0x0\") return \"reverted\";\n return undefined;\n },\n options,\n );\n}\n\nconst BALANCE_OF = \"0x70a08231\";\n\n/** The USDC ERC-20 balance of `owner`, in subunits. */\nexport async function getUsdcBalance(\n chain: EvmChain,\n owner: `0x${string}`,\n options: RpcOptions = {},\n): Promise<bigint> {\n if (!/^0x[0-9a-fA-F]{40}$/.test(owner)) {\n throw new ProtocolError(\"rpc_unavailable\", `${owner} is not an address`);\n }\n return callRpc(\n chain,\n \"eth_call\",\n [\n {\n to: chain.usdc,\n data: `${BALANCE_OF}${owner.slice(2).padStart(64, \"0\")}`,\n },\n \"latest\",\n ],\n (r) =>\n typeof r === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(r)\n ? BigInt(r)\n : undefined,\n options,\n );\n}\n","import {\n Account,\n BASE_FEE,\n Contract,\n TransactionBuilder,\n nativeToScVal,\n scValToNative,\n xdr,\n} from \"@stellar/stellar-sdk\";\nimport { hash } from \"starknet\";\nimport type { StarknetChain, StellarChain } from \"../chains/types.js\";\nimport { ProtocolError } from \"../errors.js\";\nimport { callRpc, type RpcOptions } from \"./jsonRpc.js\";\n\nconst IS_NONCE_USED_SELECTOR = hash.getSelectorFromName(\"is_nonce_used\");\n\nfunction bytes32(nonce: `0x${string}`): string {\n if (!/^0x[0-9a-fA-F]{64}$/.test(nonce)) {\n throw new ProtocolError(\"rpc_unavailable\", `nonce ${nonce} is not bytes32`);\n }\n return nonce.slice(2).toLowerCase();\n}\n\n/** `MessageTransmitter.is_nonce_used(u256)` on Starknet. */\nexport async function isStarknetNonceUsed(\n chain: StarknetChain,\n nonce: `0x${string}`,\n options: RpcOptions = {},\n): Promise<boolean> {\n const hex = bytes32(nonce);\n return callRpc(\n chain,\n \"starknet_call\",\n {\n request: {\n contract_address: chain.messageTransmitter,\n entry_point_selector: IS_NONCE_USED_SELECTOR,\n // A u256 goes over the wire as its low then high 128 bits.\n calldata: [`0x${hex.slice(32)}`, `0x${hex.slice(0, 32)}`],\n },\n // Public Starknet RPCs reject the \"pending\" tag starknet.js defaults to.\n block_id: \"latest\",\n },\n (r) =>\n Array.isArray(r) && (r[0] === \"0x0\" || r[0] === \"0x1\")\n ? r[0] === \"0x1\"\n : undefined,\n options,\n );\n}\n\n/**\n * `MessageTransmitter.is_nonce_used(BytesN<32>)` on Stellar, read by\n * simulating the call. Simulation needs a source account but no signature,\n * so the USDC issuer, which always exists, stands in.\n */\nexport async function isStellarNonceUsed(\n chain: StellarChain,\n nonce: `0x${string}`,\n options: RpcOptions = {},\n): Promise<boolean> {\n const tx = new TransactionBuilder(new Account(chain.usdcIssuer, \"0\"), {\n fee: BASE_FEE,\n networkPassphrase: chain.networkPassphrase,\n })\n .addOperation(\n new Contract(chain.messageTransmitter).call(\n \"is_nonce_used\",\n nativeToScVal(Buffer.from(bytes32(nonce), \"hex\"), { type: \"bytes\" }),\n ),\n )\n .setTimeout(30)\n .build();\n return callRpc(\n chain,\n \"simulateTransaction\",\n { transaction: tx.toXDR() },\n (r) => {\n const results = (r as { results?: { xdr?: unknown }[] } | null)?.results;\n const value = results?.[0]?.xdr;\n if (typeof value !== \"string\") return undefined;\n const used: unknown = scValToNative(xdr.ScVal.fromXDR(value, \"base64\"));\n return typeof used === \"boolean\" ? used : undefined;\n },\n options,\n );\n}\n","import type { StarknetChain } from \"../chains/types.js\";\nimport { callRpc, type RpcOptions } from \"./jsonRpc.js\";\n\n/** `pending` until the sequencer has accepted the transaction on L2. */\nexport type StarknetTransactionStatus =\n | { state: \"pending\" }\n | { state: \"success\" | \"reverted\"; blockNumber: number };\n\nconst TXN_HASH_NOT_FOUND = 29;\nconst ACCEPTED = new Set([\"ACCEPTED_ON_L2\", \"ACCEPTED_ON_L1\"]);\nconst NOT_YET = new Set([\"RECEIVED\", \"CANDIDATE\", \"PRE_CONFIRMED\"]);\n\n/**\n * Reads the receipt over plain JSON-RPC. starknet.js refuses nodes on a spec\n * version it does not know, and public nodes move ahead of it, so the\n * receipt is read here instead. The fields used are the same from 0.8 to 0.10.\n */\nexport async function getStarknetTransactionStatus(\n chain: StarknetChain,\n hash: string,\n options: RpcOptions = {},\n): Promise<StarknetTransactionStatus> {\n return callRpc(\n chain,\n \"starknet_getTransactionReceipt\",\n { transaction_hash: hash },\n (r): StarknetTransactionStatus | undefined => {\n if (typeof r !== \"object\" || r === null) return undefined;\n const { finality_status, execution_status, block_number } = r as {\n finality_status?: unknown;\n execution_status?: unknown;\n block_number?: unknown;\n };\n if (typeof finality_status !== \"string\") return undefined;\n if (NOT_YET.has(finality_status)) return { state: \"pending\" };\n if (!ACCEPTED.has(finality_status)) return undefined;\n if (typeof block_number !== \"number\") return undefined;\n if (execution_status === \"SUCCEEDED\") {\n return { state: \"success\", blockNumber: block_number };\n }\n if (execution_status === \"REVERTED\") {\n return { state: \"reverted\", blockNumber: block_number };\n }\n return undefined;\n },\n options,\n (code) => (code === TXN_HASH_NOT_FOUND ? { state: \"pending\" } : undefined),\n );\n}\n","/**\n * Forwarder hookData.\n *\n * Including this 32-byte hookData in `depositForBurnWithHook` tells\n * Circle's Orbit relayer to fetch the attestation and submit the\n * destination mint on the user's behalf.\n *\n * Layout:\n * bytes 0..11: ASCII \"cctp-forward\"\n * bytes 12..23: zero pad\n * bytes 24..27: uint32 BE version (0)\n * bytes 28..31: uint32 BE payload length (0 for basic forwarding)\n */\n\n/** Static hex string used for every Whisk bridge with forwarder enabled. */\nexport const CCTP_FORWARD_HOOK_DATA =\n \"0x636374702d666f72776172640000000000000000000000000000000000000000\" as `0x${string}`;\n\nexport const CCTP_FORWARD_HOOK_DATA_LENGTH = 32;\n\nconst MAGIC_PREFIX = \"cctp-forward\";\nconst VERSION = 0;\nconst PAYLOAD_LENGTH = 0;\n\n/**\n * Encodes the same bytes as `CCTP_FORWARD_HOOK_DATA` field by field. Stellar\n * destinations need a payload and use `buildStellarForwarderHookData`.\n */\nexport function buildForwarderHookData(): `0x${string}` {\n const buf = new Uint8Array(CCTP_FORWARD_HOOK_DATA_LENGTH);\n const encoder = new TextEncoder();\n buf.set(encoder.encode(MAGIC_PREFIX), 0);\n const view = new DataView(buf.buffer);\n view.setUint32(24, VERSION, false);\n view.setUint32(28, PAYLOAD_LENGTH, false);\n return bytesToHex(buf);\n}\n\n/** True when `hex` starts with the 32-byte basic forwarder hookData. */\nexport function isForwarderHookData(hex: string): boolean {\n if (!hex.startsWith(\"0x\")) return false;\n return hex\n .toLowerCase()\n .startsWith(\n \"0x636374702d666f72776172640000000000000000000000000000000000000000\",\n );\n}\n\n/** bytes32(0) as `destinationCaller` lets anyone submit the mint. */\nexport const ANY_DESTINATION_CALLER =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as `0x${string}`;\n\nfunction bytesToHex(bytes: Uint8Array): `0x${string}` {\n let out = \"0x\";\n for (let i = 0; i < bytes.length; i++) {\n const byte = bytes[i];\n if (byte === undefined) continue;\n out += byte.toString(16).padStart(2, \"0\");\n }\n return out as `0x${string}`;\n}\n","/**\n * Address encoding for CCTP message fields.\n *\n * CCTP uses 32-byte (`bytes32`) values for `mintRecipient` and\n * `destinationCaller` so it can carry both 20-byte EVM addresses and\n * 32-byte non-EVM addresses. The encoders here are EVM only.\n */\n\nimport type { Address } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\n\nconst ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/;\n\nexport class InvalidAddressError extends InvalidInputError {\n constructor(input: string) {\n super(\"invalid_address\", `Invalid EVM address: ${input}`);\n this.name = \"InvalidAddressError\";\n }\n}\n\nexport class InvalidBytes32Error extends InvalidInputError {\n constructor(input: string) {\n super(\"invalid_bytes32\", `Invalid bytes32 value: ${input}`);\n this.name = \"InvalidBytes32Error\";\n }\n}\n\n/**\n * Left-pad a 20-byte EVM address to 32 bytes for use as a CCTP\n * `bytes32` field.\n *\n * 0xabcd...1234 → 0x000000000000000000000000abcd...1234\n *\n * Output is lowercase; `getAddress(fromBytes32(value))` restores the\n * checksum.\n */\nexport function toBytes32(address: Address | string): `0x${string}` {\n if (!ADDRESS_REGEX.test(address)) {\n throw new InvalidAddressError(address);\n }\n const hex = address.slice(2).toLowerCase();\n return `0x${\"00\".repeat(12)}${hex}` as `0x${string}`;\n}\n\n/**\n * Reverse of `toBytes32`. Strips the 12-byte zero pad and returns a\n * lowercase 20-byte address.\n *\n * Throws if the upper 12 bytes are not zero (i.e. the value isn't an\n * EVM address). Callers can use `tryFromBytes32` for a non-throwing\n * variant.\n */\nexport function fromBytes32(value: `0x${string}` | string): Address {\n const cleaned = value.toLowerCase();\n if (!/^0x[0-9a-f]{64}$/.test(cleaned)) {\n throw new InvalidBytes32Error(value);\n }\n const upper = cleaned.slice(2, 2 + 24);\n if (upper !== \"00\".repeat(12)) {\n throw new InvalidBytes32Error(\n `non-zero upper 12 bytes (not an EVM address): ${value}`,\n );\n }\n return `0x${cleaned.slice(26)}` as Address;\n}\n\nexport function tryFromBytes32(value: string): Address | undefined {\n try {\n return fromBytes32(value);\n } catch {\n return undefined;\n }\n}\n\nexport function isAddress(value: string): value is Address {\n return ADDRESS_REGEX.test(value);\n}\n","import type { EvmChain } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport { callRpc, type RpcOptions } from \"../rpc/jsonRpc.js\";\n\nconst GET_MIN_FEE_AMOUNT = \"0x516990e3\";\n\nexport type GetStandardMinFeeOptions = RpcOptions;\n\n/**\n * `TokenMessengerV2.getMinFeeAmount(amount)`: the least `maxFee` a Standard\n * burn of `amount` may carry on a chain with Circle's fee switch.\n */\nexport async function getStandardMinFee(\n chain: EvmChain,\n amount: bigint,\n options: GetStandardMinFeeOptions = {},\n): Promise<bigint> {\n if (!chain.capabilities.standardFeeSwitch) {\n throw new InvalidInputError(\n \"invalid_chain\",\n `${chain.id} has no getMinFeeAmount; its TokenMessengerV2 reverts the call`,\n );\n }\n if (amount < 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be non-negative, got ${amount}`,\n );\n }\n return callRpc(\n chain,\n \"eth_call\",\n [\n {\n to: chain.tokenMessenger,\n data: `${GET_MIN_FEE_AMOUNT}${amount.toString(16).padStart(64, \"0\")}`,\n },\n \"latest\",\n ],\n (r) =>\n typeof r === \"string\" && /^0x[0-9a-fA-F]{64}$/.test(r)\n ? BigInt(r)\n : undefined,\n options,\n );\n}\n","import { InvalidInputError } from \"../errors.js\";\n\n/** A CCTP V2 message carrying a burn, read from the attested bytes. */\nexport type DecodedBurnMessage = {\n version: number;\n sourceDomain: number;\n destinationDomain: number;\n nonce: `0x${string}`;\n sender: `0x${string}`;\n recipient: `0x${string}`;\n destinationCaller: `0x${string}`;\n minFinalityThreshold: number;\n finalityThresholdExecuted: number;\n body: {\n version: number;\n burnToken: `0x${string}`;\n mintRecipient: `0x${string}`;\n amount: bigint;\n messageSender: `0x${string}`;\n maxFee: bigint;\n feeExecuted: bigint;\n /** In the destination chain's own height; `0n` once finalized. */\n expirationBlock: bigint;\n hookData: `0x${string}`;\n };\n};\n\nconst HEADER_BYTES = 148;\nconst BODY_BYTES = 228;\n\n/**\n * Splits a message into its fields. Every address is the 32-byte form CCTP\n * carries; an EVM address is its last 20 bytes.\n */\nexport function decodeBurnMessage(message: `0x${string}`): DecodedBurnMessage {\n if (!/^0x([0-9a-fA-F]{2})*$/.test(message)) {\n throw new InvalidInputError(\"invalid_input\", \"message is not hex bytes\");\n }\n const hex = message.slice(2).toLowerCase();\n if (hex.length < (HEADER_BYTES + BODY_BYTES) * 2) {\n throw new InvalidInputError(\n \"invalid_input\",\n `a burn message is at least ${HEADER_BYTES + BODY_BYTES} bytes, got ${hex.length / 2}`,\n );\n }\n let at = 0;\n const take = (bytes: number) => {\n const part = hex.slice(at, at + bytes * 2);\n at += bytes * 2;\n return part;\n };\n const uint = (bytes: number) => BigInt(`0x${take(bytes)}`);\n const word = (): `0x${string}` => `0x${take(32)}`;\n const small = (bytes: number) => Number.parseInt(take(bytes), 16);\n\n return {\n version: small(4),\n sourceDomain: small(4),\n destinationDomain: small(4),\n nonce: word(),\n sender: word(),\n recipient: word(),\n destinationCaller: word(),\n minFinalityThreshold: small(4),\n finalityThresholdExecuted: small(4),\n body: {\n version: small(4),\n burnToken: word(),\n mintRecipient: word(),\n amount: uint(32),\n messageSender: word(),\n maxFee: uint(32),\n feeExecuted: uint(32),\n expirationBlock: uint(32),\n hookData: `0x${hex.slice(at)}`,\n },\n };\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport type { Address, CctpChain } from \"../chains/types.js\";\nimport { isAddress, toBytes32 } from \"../encoding/address.js\";\nimport { InvalidInputError } from \"../errors.js\";\n\n/** Validate `mintRecipient` for the destination and encode it as bytes32. */\nexport function encodeMintRecipient(\n destination: CctpChain,\n mintRecipient: Address | string,\n): `0x${string}` {\n // mintRecipient validation depends on the destination ecosystem.\n // EVM → 20-byte 0x-prefixed hex\n // Solana → base58 32-byte pubkey\n // Stellar → 0x-prefixed 32-byte hex (caller pre-encodes the\n // CctpForwarder strkey via `contractStrkeyToBytes32Hex`)\n if (destination.ecosystem === \"solana\") {\n try {\n new PublicKey(mintRecipient);\n } catch {\n throw new InvalidInputError(\n \"invalid_address\",\n `mintRecipient is not a valid Solana pubkey: ${mintRecipient}`,\n );\n }\n } else if (destination.ecosystem === \"stellar\") {\n if (!/^0x[a-fA-F0-9]{64}$/.test(mintRecipient)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `mintRecipient for Stellar must be 0x-prefixed 32-byte hex (the CctpForwarder strkey decoded); got: ${mintRecipient}`,\n );\n }\n } else if (destination.ecosystem === \"starknet\") {\n // Starknet felt zero-padded to 32 bytes.\n if (!/^0x[a-fA-F0-9]{64}$/.test(mintRecipient)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `mintRecipient for Starknet must be 0x-prefixed 32-byte hex; got: ${mintRecipient}`,\n );\n }\n } else if (!isAddress(mintRecipient)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `mintRecipient is not a valid EVM address: ${mintRecipient}`,\n );\n }\n if (destination.ecosystem === \"solana\") {\n const bytes = new PublicKey(mintRecipient).toBytes();\n let hex = \"0x\";\n for (const b of bytes) hex += b.toString(16).padStart(2, \"0\");\n return hex as `0x${string}`;\n }\n if (\n destination.ecosystem === \"stellar\" ||\n destination.ecosystem === \"starknet\"\n ) {\n return mintRecipient as `0x${string}`;\n }\n return toBytes32(mintRecipient);\n}\n","/**\n * Produces ready-to-sign calldata for a CCTP V2 bridge. The engine\n * hands the resulting `BurnIntent.calls` array to its wallet adapter\n * one by one (or batched via EIP-5792 when the wallet supports it).\n *\n * The burn's finality threshold is the fee tier's: 1000 for Fast,\n * 2000 for Standard. A Fast tier on a chain without Fast is refused.\n *\n * Forwarder is on by default: the burn call uses\n * `depositForBurnWithHook` with the canonical `cctp-forward` magic\n * bytes so Circle's Orbit relayer handles the destination mint. To\n * skip the forwarder set `withForwarder: false`; the user will then\n * need to call `receiveMessage` manually on the destination chain.\n */\nimport { encodeFunctionData, type Address as ViemAddress } from \"viem\";\nimport type { Address, CctpChain } from \"../chains/types.js\";\nimport {\n ANY_DESTINATION_CALLER,\n CCTP_FORWARD_HOOK_DATA,\n} from \"../forwarder/hookData.js\";\nimport { tokenMessengerV2Abi } from \"../abi/tokenMessengerV2.js\";\nimport { usdcAbi } from \"../abi/usdc.js\";\nimport { encodeMintRecipient } from \"./recipient.js\";\nimport { FINALITY_FAST } from \"../iris/types.js\";\nimport { computeMaxFee, type ComputeMaxFeeInput } from \"../fees/math.js\";\nimport {\n InvalidInputError,\n ProtocolError,\n UnsupportedError,\n} from \"../errors.js\";\nimport type { BurnIntent, EvmCall } from \"./types.js\";\n\nexport type BuildBurnIntentInput = {\n source: CctpChain;\n destination: CctpChain;\n /** USDC subunits (6 decimals). Must be > 0 and ≤ 10M USDC. */\n amount: bigint;\n /**\n * Recipient in the destination's format: a 20-byte EVM address, a base58\n * Solana pubkey, or 0x-prefixed 32-byte hex for Stellar and Starknet.\n */\n mintRecipient: Address | string;\n /**\n * Restrict who can call `receiveMessage` on the destination. Defaults\n * to `bytes32(0)` (any caller) so the forwarder can mint without\n * extra coordination. Pass a specific 32-byte value if you need to\n * lock the mint down.\n */\n destinationCaller?: `0x${string}`;\n /**\n * Approve allowance to set on USDC. Defaults to `amount`. Set higher\n * to skip the approve call across multiple bridges (allowance\n * caching).\n */\n approveAmount?: bigint;\n /**\n * If `true`, skip the approve call entirely (the wallet already has\n * sufficient allowance). Defaults to `false`.\n */\n skipApprove?: boolean;\n /**\n * Trigger Circle's Orbit forwarder by including the\n * `cctp-forward` hookData. Defaults to `true`. Set to `false` to\n * make the user mint manually on the destination chain.\n */\n withForwarder?: boolean;\n /**\n * Override the hookData. When `withForwarder` is true and this is\n * unset, the EVM-side `cctp-forward` magic bytes are used (Circle's\n * Orbit relayer). For Stellar destinations, pass the Stellar\n * `CctpForwarder` hookData instead. The EVM relayer is irrelevant\n * because the Stellar Forwarder is what reads this field on chain.\n */\n customHookData?: `0x${string}`;\n /** Fee math inputs. See `computeMaxFee`. */\n fee: Pick<\n ComputeMaxFeeInput,\n \"tier\" | \"forwarderLevel\" | \"forwarderBufferBps\"\n > & {\n /**\n * Burn with exactly this cap instead of one computed from the tier. Pass\n * the `maxFee` the payer confirmed.\n */\n maxFee?: bigint;\n };\n};\n\n/** CCTP refuses a single burn above 10M USDC. */\nconst MAX_USDC_AMOUNT = 10_000_000n * 1_000_000n; // 10M × 1e6 subunits\n\nexport function buildBurnIntent(input: BuildBurnIntentInput): BurnIntent {\n // The source must be EVM since this produces EVM calldata.\n // Destination ecosystem is free; the only thing the burn cares about\n // is the destination domain and the bytes32 mintRecipient encoding.\n if (input.source.ecosystem !== \"evm\") {\n throw new UnsupportedError(\n \"unsupported_ecosystem\",\n `Source chain \"${input.source.id}\" is not EVM. Use the Solana burn builder for Solana sources.`,\n );\n }\n if (input.source.cctpDomain === input.destination.cctpDomain) {\n throw new InvalidInputError(\n \"no_route\",\n `Source and destination domains are identical (${input.source.cctpDomain}). Use a same-chain transfer instead of bridge.`,\n );\n }\n if (input.amount <= 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive, got ${input.amount}`,\n );\n }\n if (input.amount > MAX_USDC_AMOUNT) {\n throw new ProtocolError(\n \"amount_too_large\",\n `amount exceeds CCTP per-burn cap of 10,000,000 USDC (got ${input.amount} subunits)`,\n );\n }\n const mintRecipientBytes32 = encodeMintRecipient(\n input.destination,\n input.mintRecipient,\n );\n const finalityThreshold = input.fee.tier.finalityThreshold;\n if (\n finalityThreshold === FINALITY_FAST &&\n !input.source.capabilities.fastSource\n ) {\n throw new ProtocolError(\n \"no_route\",\n `Source chain \"${input.source.id}\" has no Fast Transfer. Use its Standard fee tier.`,\n );\n }\n\n const withForwarder = input.withForwarder ?? true;\n const destinationCaller = input.destinationCaller ?? ANY_DESTINATION_CALLER;\n\n const computed = computeMaxFee({\n amount: input.amount,\n tier: input.fee.tier,\n ...(input.fee.forwarderLevel !== undefined && {\n forwarderLevel: input.fee.forwarderLevel,\n }),\n ...(input.fee.forwarderBufferBps !== undefined && {\n forwarderBufferBps: input.fee.forwarderBufferBps,\n }),\n includeForwarder: withForwarder,\n });\n const { burnFee, forwarderFee } = computed;\n const maxFee = input.fee.maxFee ?? computed.maxFee;\n if (maxFee < 0n || maxFee >= input.amount) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `maxFee must be at least 0 and below amount (TokenMessengerV2 reverts otherwise), got ${maxFee}`,\n );\n }\n\n const calls: EvmCall[] = [];\n\n if (!input.skipApprove) {\n const approveAmount = input.approveAmount ?? input.amount;\n if (approveAmount < input.amount) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `approveAmount (${approveAmount}) must be ≥ amount (${input.amount})`,\n );\n }\n calls.push({\n to: input.source.usdc,\n data: encodeFunctionData({\n abi: usdcAbi,\n functionName: \"approve\",\n args: [input.source.tokenMessenger as ViemAddress, approveAmount],\n }),\n value: 0n,\n });\n }\n\n const burnArgs = [\n input.amount,\n input.destination.cctpDomain,\n mintRecipientBytes32,\n input.source.usdc as ViemAddress,\n destinationCaller,\n maxFee,\n finalityThreshold,\n ] as const;\n\n const effectiveHookData: `0x${string}` =\n input.customHookData ?? CCTP_FORWARD_HOOK_DATA;\n const callWithHook = withForwarder || input.customHookData !== undefined;\n calls.push({\n to: input.source.tokenMessenger,\n data: callWithHook\n ? encodeFunctionData({\n abi: tokenMessengerV2Abi,\n functionName: \"depositForBurnWithHook\",\n args: [...burnArgs, effectiveHookData],\n })\n : encodeFunctionData({\n abi: tokenMessengerV2Abi,\n functionName: \"depositForBurn\",\n args: burnArgs,\n }),\n value: 0n,\n });\n\n return {\n source: input.source,\n destination: input.destination,\n calls,\n amount: input.amount,\n maxFee,\n burnFee,\n forwarderFee,\n mintRecipientBytes32,\n withForwarder,\n finalityThreshold,\n };\n}\n","import { encodeFunctionData, type Address as ViemAddress } from \"viem\";\nimport type { Address, CctpChain } from \"../chains/types.js\";\nimport { ANY_DESTINATION_CALLER } from \"../forwarder/hookData.js\";\nimport { tokenMessengerWithFeesAbi } from \"../abi/tokenMessengerWithFees.js\";\nimport { usdcAbi } from \"../abi/usdc.js\";\nimport { isAddress } from \"../encoding/address.js\";\nimport { InvalidInputError, UnsupportedError } from \"../errors.js\";\nimport { encodeMintRecipient } from \"./recipient.js\";\nimport type { EvmCall } from \"./types.js\";\n\nexport type BuildBurnWithFeesIntentInput = {\n source: CctpChain;\n destination: CctpChain;\n /** Exactly the amount the signed quote was requested for. */\n amount: bigint;\n /** The quote's USDC fee, collected by the contract on top of `amount`. */\n fee: bigint;\n mintRecipient: Address | string;\n signedQuote: `0x${string}`;\n /** Reserved by Circle for refunds it does not make today. */\n refundAddress: Address | string;\n /** Defaults to `amount + fee`. */\n approveAmount?: bigint;\n};\n\nexport type BurnWithFeesIntent = {\n calls: EvmCall[];\n amount: bigint;\n fee: bigint;\n mintRecipientBytes32: `0x${string}`;\n};\n\n/**\n * Approve and `depositForBurnWithFees` calls for a burn whose Fast and\n * forwarding fees were paid upfront from a signed quote. The contract adds\n * Circle's forwarding hook itself when the quote includes a `FORWARD` fee.\n */\nexport function buildBurnWithFeesIntent(\n input: BuildBurnWithFeesIntentInput,\n): BurnWithFeesIntent {\n const { source, destination } = input;\n if (source.ecosystem !== \"evm\" || !source.tokenMessengerWithFees) {\n throw new UnsupportedError(\n \"unsupported_chain\",\n `${source.id} has no TokenMessengerWithFees, so it cannot pay fees upfront`,\n );\n }\n // A Stellar mint needs the CctpForwarder hook, and Circle binds custom hook\n // data only to a FORWARD fee, which Stellar does not offer.\n if (destination.ecosystem === \"stellar\") {\n throw new UnsupportedError(\n \"unsupported_chain\",\n \"burns to Stellar carry custom hook data and cannot pay fees upfront\",\n );\n }\n if (source.cctpDomain === destination.cctpDomain) {\n throw new InvalidInputError(\n \"no_route\",\n `Source and destination domains are identical (${source.cctpDomain})`,\n );\n }\n if (input.amount <= 0n || input.fee < 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive and fee non-negative, got ${input.amount} and ${input.fee}`,\n );\n }\n if (!isAddress(input.refundAddress)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `refundAddress is not a valid EVM address: ${input.refundAddress}`,\n );\n }\n const mintRecipientBytes32 = encodeMintRecipient(\n destination,\n input.mintRecipient,\n );\n const approveAmount = input.approveAmount ?? input.amount + input.fee;\n if (approveAmount < input.amount + input.fee) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `approveAmount (${approveAmount}) must cover amount plus fee (${input.amount + input.fee})`,\n );\n }\n\n const calls: EvmCall[] = [\n {\n to: source.usdc,\n data: encodeFunctionData({\n abi: usdcAbi,\n functionName: \"approve\",\n args: [source.tokenMessengerWithFees as ViemAddress, approveAmount],\n }),\n value: 0n,\n },\n {\n to: source.tokenMessengerWithFees,\n data: encodeFunctionData({\n abi: tokenMessengerWithFeesAbi,\n functionName: \"depositForBurnWithFees\",\n args: [\n input.amount,\n destination.cctpDomain,\n mintRecipientBytes32,\n source.usdc as ViemAddress,\n ANY_DESTINATION_CALLER,\n {\n signedQuote: input.signedQuote,\n refundAddress: input.refundAddress as ViemAddress,\n },\n ],\n }),\n value: 0n,\n },\n ];\n return { calls, amount: input.amount, fee: input.fee, mintRecipientBytes32 };\n}\n","/**\n * In the happy path Circle's Orbit forwarder calls `receiveMessage` on\n * the destination chain. This builder is for the recovery path: when\n * `forwardState` is `FAILED` (or the user opts out of the forwarder),\n * the engine needs the destination-chain calldata so a wallet adapter\n * can submit the mint manually.\n */\nimport { encodeFunctionData } from \"viem\";\nimport type { CctpChain } from \"../chains/types.js\";\nimport { messageTransmitterV2Abi } from \"../abi/messageTransmitterV2.js\";\nimport { InvalidInputError, UnsupportedError } from \"../errors.js\";\nimport type { EvmCall } from \"../burn/types.js\";\n\nexport type MintIntent = {\n destination: CctpChain;\n call: EvmCall;\n};\n\nexport type BuildMintIntentInput = {\n destination: CctpChain;\n /** Raw 0x-prefixed CCTP message bytes from Iris. */\n message: `0x${string}`;\n /** Raw 0x-prefixed attestation bytes from Iris. */\n attestation: `0x${string}`;\n};\n\nconst HEX_PREFIX_REGEX = /^0x[0-9a-fA-F]+$/;\n\nconst NON_EVM_BUILDERS = {\n solana: \"buildSolanaReceiveIntent\",\n stellar: \"buildStellarMintIntent\",\n starknet: \"buildStarknetReceiveIntent\",\n} as const;\n\n/**\n * `receiveMessage` on the destination's `MessageTransmitterV2`. EVM\n * destinations only. Whoever submits the call pays destination gas.\n */\nexport function buildMintIntent(input: BuildMintIntentInput): MintIntent {\n if (input.destination.ecosystem !== \"evm\") {\n throw new UnsupportedError(\n \"unsupported_ecosystem\",\n `buildMintIntent builds EVM mints. Use ${NON_EVM_BUILDERS[input.destination.ecosystem]} for \"${input.destination.id}\".`,\n );\n }\n if (!HEX_PREFIX_REGEX.test(input.message)) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"message must be a 0x-prefixed hex string\",\n );\n }\n if (!HEX_PREFIX_REGEX.test(input.attestation)) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"attestation must be a 0x-prefixed hex string\",\n );\n }\n\n const data = encodeFunctionData({\n abi: messageTransmitterV2Abi,\n functionName: \"receiveMessage\",\n args: [input.message, input.attestation],\n });\n\n return {\n destination: input.destination,\n call: {\n to: input.destination.messageTransmitter,\n data,\n value: 0n,\n },\n };\n}\n","/**\n * Starknet address / mintRecipient helpers.\n *\n * Starknet uses 252-bit field elements, but CCTP messages carry 32-byte\n * `mintRecipient` / `destinationCaller` fields. Whisk normalizes to two\n * forms:\n *\n * - bytes32 hex (`0x` + 64 hex): what other ecosystems pack into the\n * CCTP message envelope.\n * - u256 bigint: what Starknet's `deposit_for_burn` expects in\n * calldata.\n *\n * Conversion is just zero-extending the felt to 32 bytes or reading the\n * bigint back from it.\n */\nimport type { StarknetFelt } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\n\nconst STARKNET_FELT_RE = /^0x[a-fA-F0-9]{1,64}$/;\n\nexport function isValidStarknetFelt(s: string): boolean {\n return STARKNET_FELT_RE.test(s);\n}\n\n/** Throws on a malformed felt. */\nexport function assertStarknetFelt(s: string): StarknetFelt {\n if (!isValidStarknetFelt(s)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `Not a valid Starknet felt: ${s}`,\n );\n }\n return s as StarknetFelt;\n}\n\n/**\n * Zero-pads a felt to 0x-prefixed 32-byte hex. Used for `mintRecipient`\n * when bridging to Starknet from another ecosystem.\n */\nexport function feltToBytes32Hex(felt: StarknetFelt): `0x${string}` {\n if (!isValidStarknetFelt(felt)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `Not a valid Starknet felt: ${felt}`,\n );\n }\n const stripped = felt.slice(2);\n if (stripped.length > 64) {\n throw new InvalidInputError(\n \"invalid_address\",\n `Starknet felt exceeds 32 bytes: ${felt}`,\n );\n }\n return `0x${stripped.padStart(64, \"0\")}` as `0x${string}`;\n}\n\n/** Leading zeros are stripped. */\nexport function bytes32HexToFelt(hex: `0x${string}` | string): StarknetFelt {\n const stripped = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n if (stripped.length > 64) {\n throw new InvalidInputError(\n \"invalid_address\",\n `bytes32 input exceeds 32 bytes (${stripped.length / 2})`,\n );\n }\n const stripped64 = stripped.padStart(64, \"0\").replace(/^0+/, \"\");\n const canonical = stripped64.length === 0 ? \"0\" : stripped64;\n return `0x${canonical}` as StarknetFelt;\n}\n\n/** For packing into u256 calldata args. */\nexport function feltToBigInt(felt: StarknetFelt): bigint {\n if (!isValidStarknetFelt(felt)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `Not a valid Starknet felt: ${felt}`,\n );\n }\n return BigInt(felt);\n}\n","/**\n * Starknet's `Call` envelope is `{ contractAddress, entrypoint, calldata }`\n * where `calldata` is a flat array of felt252 strings. Cairo types serialize\n * as follows:\n *\n * u256 → 2 felts (low, high)\n * u32 / ContractAddress / felt252 → 1 felt\n * ByteArray → variable felts (pending word + data array + len)\n *\n * Whisk uses these helpers to encode CCTP V2 burn / receive calls without\n * pulling starknet.js's full ABI compiler in callers.\n */\nimport { cairo, num } from \"starknet\";\n\n/** Encode a u256 as `[lo, hi]` felt strings (decimal). */\nexport function u256ToFelts(value: bigint): [string, string] {\n if (value < 0n) {\n throw new RangeError(\n `u256ToFelts: value must be non-negative, got ${value}`,\n );\n }\n const u = cairo.uint256(value);\n return [u.low.toString(), u.high.toString()];\n}\n\n/** Encode a u32 / u64 / felt252 as a single felt string (decimal). */\nexport function feltToString(value: number | bigint | string): string {\n return num.toBigInt(value).toString();\n}\n\n/**\n * Encode a `ByteArray` from raw bytes.\n *\n * Cairo `ByteArray` calldata serialization:\n *\n * [ data.length: u32,\n * ...data: felt252 (31 bytes each, big-endian),\n * pending_word: felt252 (< 31 bytes, big-endian),\n * pending_word_len: u32 ]\n *\n * Each 31-byte block becomes one felt whose value is the big-endian\n * integer of those bytes. The trailing (bytes.length % 31) bytes go\n * into `pending_word`, again as a big-endian integer of exactly that\n * many bytes.\n *\n * starknet.js's `byteArray.byteArrayFromString` is no substitute: it\n * treats the input as a UTF-8 string, which mangles raw bytes like\n * CCTP attestation blobs.\n */\nexport function bytesToByteArrayFelts(bytes: Uint8Array): string[] {\n const CHUNK = 31;\n const dataFelts: string[] = [];\n let i = 0;\n while (i + CHUNK <= bytes.length) {\n dataFelts.push(bytesToBigIntBE(bytes.subarray(i, i + CHUNK)).toString());\n i += CHUNK;\n }\n const rest = bytes.subarray(i);\n const pendingWord = bytesToBigIntBE(rest).toString();\n const pendingWordLen = rest.length.toString();\n return [\n dataFelts.length.toString(),\n ...dataFelts,\n pendingWord,\n pendingWordLen,\n ];\n}\n\nfunction bytesToBigIntBE(bytes: Uint8Array): bigint {\n let n = 0n;\n for (const b of bytes) n = (n << 8n) | BigInt(b);\n return n;\n}\n\n/** Encode a 0x-prefixed hex blob (any length) as a Cairo ByteArray. */\nexport function hexToByteArrayFelts(hex: string): string[] {\n const stripped = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n const bytes = new Uint8Array(stripped.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(stripped.slice(i * 2, i * 2 + 2), 16);\n }\n return bytesToByteArrayFelts(bytes);\n}\n","/**\n * Starknet CCTP V2 `deposit_for_burn` / `deposit_for_burn_with_hook`\n * Call builder.\n *\n * Cairo signatures (from `circlefin/starknet-cctp`):\n *\n * fn deposit_for_burn(\n * amount: u256,\n * destination_domain: u32,\n * mint_recipient: u256,\n * burn_token: ContractAddress,\n * destination_caller: u256,\n * max_fee: u256,\n * min_finality_threshold: u32,\n * )\n *\n * fn deposit_for_burn_with_hook(\n * ...same...\n * hook_data: ByteArray,\n * )\n *\n * USDC on Starknet behaves like ERC-20: burn pulls funds via\n * `transferFrom`, so the caller must `approve(TMM, amount)` first with\n * `buildStarknetApproveCall`.\n */\nimport type { StarknetChain, StarknetFelt } from \"../chains/types.js\";\nimport type { FinalityThreshold } from \"../iris/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport {\n bytesToByteArrayFelts,\n feltToString,\n u256ToFelts,\n} from \"./calldata.js\";\nimport { assertStarknetFelt } from \"./address.js\";\n\nexport type StarknetCall = {\n contractAddress: StarknetFelt;\n /** Cairo function name (snake_case). */\n entrypoint: string;\n /** Pre-serialized calldata as a flat felt array (decimal strings). */\n calldata: string[];\n};\n\nexport type BuildStarknetBurnIntentInput = {\n source: StarknetChain;\n destinationDomain: number;\n /** USDC subunits (6 decimals), the canonical CCTP amount. */\n amount: bigint;\n /** `maxFee` cap in 6-decimal subunits. */\n maxFee: bigint;\n /**\n * 32-byte mintRecipient, packed by Starknet into a single u256. The\n * caller is responsible for encoding correctly:\n * - EVM 20-byte address left-padded to 32 bytes\n * - Solana recipient USDC ATA pubkey (32 bytes raw)\n * - Stellar CctpForwarder strkey decoded to 32 bytes\n * - Starknet contract felt\n */\n mintRecipient: bigint;\n /** `destinationCaller` u256. Zero = any caller. */\n destinationCaller: bigint;\n /** Optional hookData; when set, builds `deposit_for_burn_with_hook`. */\n hookData?: Uint8Array;\n /** Take it from the fee tier. */\n minFinalityThreshold: FinalityThreshold;\n};\n\nexport type StarknetBurnIntent = {\n source: StarknetChain;\n destinationDomain: number;\n amount: bigint;\n maxFee: bigint;\n call: StarknetCall;\n withHook: boolean;\n};\n\nexport function buildStarknetBurnIntent(\n input: BuildStarknetBurnIntentInput,\n): StarknetBurnIntent {\n if (input.source.ecosystem !== \"starknet\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `source must be Starknet, got ${input.source.ecosystem}`,\n );\n }\n if (input.amount <= 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive, got ${input.amount}`,\n );\n }\n if (input.maxFee < 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `maxFee must be non-negative, got ${input.maxFee}`,\n );\n }\n if (input.mintRecipient < 0n) {\n throw new InvalidInputError(\n \"invalid_input\",\n `mintRecipient must be non-negative, got ${input.mintRecipient}`,\n );\n }\n\n const withHook = !!input.hookData && input.hookData.length > 0;\n const entrypoint = withHook\n ? \"deposit_for_burn_with_hook\"\n : \"deposit_for_burn\";\n\n const [amountLo, amountHi] = u256ToFelts(input.amount);\n const [recipLo, recipHi] = u256ToFelts(input.mintRecipient);\n const [callerLo, callerHi] = u256ToFelts(input.destinationCaller);\n const [maxFeeLo, maxFeeHi] = u256ToFelts(input.maxFee);\n\n const calldata: string[] = [\n amountLo,\n amountHi,\n feltToString(input.destinationDomain),\n recipLo,\n recipHi,\n assertStarknetFelt(input.source.usdc),\n callerLo,\n callerHi,\n maxFeeLo,\n maxFeeHi,\n feltToString(input.minFinalityThreshold),\n ];\n\n if (withHook) {\n calldata.push(...bytesToByteArrayFelts(input.hookData!));\n }\n\n return {\n source: input.source,\n destinationDomain: input.destinationDomain,\n amount: input.amount,\n maxFee: input.maxFee,\n call: {\n contractAddress: input.source.tokenMessengerMinter,\n entrypoint,\n calldata,\n },\n withHook,\n };\n}\n\n/**\n * Starknet's USDC follows the standard ERC-20 / SNIP-2 interface:\n * `approve(spender, amount: u256)`.\n */\nexport function buildStarknetApproveCall(args: {\n source: StarknetChain;\n spender: StarknetFelt;\n amount: bigint;\n}): StarknetCall {\n if (args.source.ecosystem !== \"starknet\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `source must be Starknet, got ${args.source.ecosystem}`,\n );\n }\n if (args.amount <= 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive, got ${args.amount}`,\n );\n }\n const [lo, hi] = u256ToFelts(args.amount);\n return {\n contractAddress: args.source.usdc,\n entrypoint: \"approve\",\n calldata: [assertStarknetFelt(args.spender), lo, hi],\n };\n}\n","/**\n * Starknet CCTP V2 `receive_message` Call builder.\n *\n * Cairo signature:\n *\n * fn receive_message(message: ByteArray, attestation: ByteArray) -> bool\n *\n * Same two-byte-array shape as EVM's `receiveMessage`. The recipient\n * (or any third party) signs this on the destination side after Iris\n * attests the burn.\n */\nimport type { StarknetChain } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport { hexToByteArrayFelts } from \"./calldata.js\";\nimport type { StarknetCall } from \"./burn.js\";\n\nexport type BuildStarknetReceiveIntentInput = {\n destination: StarknetChain;\n /** 0x-prefixed CCTP message bytes from Iris. */\n message: `0x${string}`;\n /** 0x-prefixed attestation bytes from Iris. */\n attestation: `0x${string}`;\n};\n\nexport type StarknetReceiveIntent = {\n destination: StarknetChain;\n call: StarknetCall;\n};\n\nexport function buildStarknetReceiveIntent(\n input: BuildStarknetReceiveIntentInput,\n): StarknetReceiveIntent {\n if (input.destination.ecosystem !== \"starknet\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `destination must be Starknet, got ${input.destination.ecosystem}`,\n );\n }\n if (!input.message.startsWith(\"0x\") || input.message.length < 90) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"message must be a 0x-prefixed hex blob of at least 44 bytes\",\n );\n }\n if (!input.attestation.startsWith(\"0x\") || input.attestation.length < 4) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"attestation must be a 0x-prefixed hex blob\",\n );\n }\n\n const calldata = [\n ...hexToByteArrayFelts(input.message),\n ...hexToByteArrayFelts(input.attestation),\n ];\n\n return {\n destination: input.destination,\n call: {\n contractAddress: input.destination.messageTransmitter,\n entrypoint: \"receive_message\",\n calldata,\n },\n };\n}\n","/**\n * Stellar strkey helpers.\n *\n * Stellar addresses are Base32 \"strkeys\" with a single-character type\n * marker: `G` = Ed25519 account, `M` = muxed account, `C` = Soroban\n * contract. CCTP messages strip the type marker and carry only the\n * 32-byte payload, so `mintRecipient` is always treated as a contract:\n * Whisk routes Stellar mints through `CctpForwarder` to handle every\n * account type.\n */\nimport { StrKey } from \"@stellar/stellar-sdk\";\nimport { InvalidInputError } from \"../errors.js\";\n\nexport type StellarStrkeyType = \"G\" | \"M\" | \"C\";\n\nexport function isValidStellarStrkey(s: string): boolean {\n return (\n StrKey.isValidEd25519PublicKey(s) ||\n StrKey.isValidMed25519PublicKey(s) ||\n StrKey.isValidContract(s)\n );\n}\n\n/** Throws if `s` is not a valid strkey. */\nexport function strkeyType(s: string): StellarStrkeyType {\n if (StrKey.isValidEd25519PublicKey(s)) return \"G\";\n if (StrKey.isValidMed25519PublicKey(s)) return \"M\";\n if (StrKey.isValidContract(s)) return \"C\";\n throw new InvalidInputError(\n \"invalid_address\",\n `Invalid Stellar strkey: ${s}`,\n );\n}\n\n/** The raw 32-byte payload of a G, M or C strkey, as CCTP carries it. */\nexport function decodeStrkeyToBytes32(s: string): Uint8Array {\n if (StrKey.isValidEd25519PublicKey(s))\n return StrKey.decodeEd25519PublicKey(s);\n if (StrKey.isValidContract(s)) return StrKey.decodeContract(s);\n if (StrKey.isValidMed25519PublicKey(s)) {\n // Muxed accounts embed a 64-bit id; for CCTP we want only the\n // 32-byte Ed25519 payload. Take the first 32 bytes of the underlying.\n return StrKey.decodeMed25519PublicKey(s).slice(0, 32);\n }\n throw new InvalidInputError(\n \"invalid_address\",\n `Invalid Stellar strkey: ${s}`,\n );\n}\n\n/** Encode a 32-byte payload as a contract strkey (C…). */\nexport function encodeContractStrkey(bytes: Uint8Array): string {\n if (bytes.length !== 32) {\n throw new InvalidInputError(\n \"invalid_input\",\n `encodeContractStrkey: bytes must be 32, got ${bytes.length}`,\n );\n }\n return StrKey.encodeContract(Buffer.from(bytes));\n}\n\n/**\n * Convert a Stellar contract strkey (C…) to its 0x-prefixed bytes32\n * hex form. Used when an EVM `depositForBurn` needs to encode a\n * Stellar contract as `mintRecipient` / `destinationCaller`.\n */\nexport function contractStrkeyToBytes32Hex(s: string): `0x${string}` {\n if (!StrKey.isValidContract(s)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `Not a Stellar contract strkey (C…): ${s}`,\n );\n }\n const bytes = StrKey.decodeContract(s);\n let hex = \"0x\";\n for (const b of bytes) hex += b.toString(16).padStart(2, \"0\");\n return hex as `0x${string}`;\n}\n","/**\n * Stellar USDC ↔ CCTP precision conversion.\n *\n * Stellar's USDC asset uses 7 decimals natively; CCTP messages always\n * carry 6-decimal subunits. The protocol drops the 7th decimal on\n * outbound burns (dust stays in the user's account) and multiplies by\n * 10 on inbound mints.\n */\nimport {\n CCTP_USDC_DECIMALS,\n STELLAR_USDC_DECIMALS,\n} from \"../chains/constants.js\";\n\nconst DECIMAL_FACTOR =\n 10n ** BigInt(STELLAR_USDC_DECIMALS - CCTP_USDC_DECIMALS);\n\n/**\n * Convert from Stellar's 7-decimal subunit amount to CCTP's 6-decimal\n * canonical amount. Drops the 7th decimal (rounds toward zero). The\n * dust stays on Stellar; it's not lost in the bridge.\n *\n * @returns 6-decimal subunits (canonical amount for the CCTP message)\n */\nexport function stellarSubunitsToCanonical(stellarSubunits: bigint): bigint {\n if (stellarSubunits < 0n) {\n throw new RangeError(\n `stellarSubunitsToCanonical: amount must be non-negative, got ${stellarSubunits}`,\n );\n }\n return stellarSubunits / DECIMAL_FACTOR;\n}\n\n/**\n * Convert from CCTP's 6-decimal canonical amount to Stellar's 7-decimal\n * subunit amount. Scales by 10, as the inbound mint does.\n *\n * @returns 7-decimal subunits (the on-chain amount minted on Stellar)\n */\nexport function canonicalToStellarSubunits(canonicalSubunits: bigint): bigint {\n if (canonicalSubunits < 0n) {\n throw new RangeError(\n `canonicalToStellarSubunits: amount must be non-negative, got ${canonicalSubunits}`,\n );\n }\n return canonicalSubunits * DECIMAL_FACTOR;\n}\n\n/**\n * The fractional 7th decimal that a burn from Stellar drops and leaves\n * in the sender's account.\n */\nexport function stellarBurnDust(stellarSubunits: bigint): bigint {\n return stellarSubunits % DECIMAL_FACTOR;\n}\n","/**\n * For any CCTP burn whose destination is Stellar, BOTH `mintRecipient`\n * and `destinationCaller` MUST be the `CctpForwarder` contract address.\n * The actual recipient (G/M/C strkey) goes inside `hookData` in the\n * format below; the Forwarder extracts it and forwards the minted USDC\n * atomically.\n *\n * If `mintRecipient` is a user account or muxed address instead, the\n * USDC never reaches the Forwarder and is stuck for good.\n *\n * Layout (per Circle's Stellar CCTP spec):\n *\n * bytes 0..23 reserved (zero-filled magic, Circle uses for versioning)\n * bytes 24..27 hook data version (u32 BE, `0`)\n * bytes 28..31 forwardRecipient length L (u32 BE)\n * bytes 32.. forwardRecipient encoded as UTF-8 of the strkey\n * bytes 32+L.. optional integrator payload (omit if unused)\n */\nimport { isValidStellarStrkey } from \"./strkey.js\";\nimport { InvalidInputError } from \"../errors.js\";\n\nconst RESERVED_MAGIC_LENGTH = 24;\nconst VERSION_OFFSET = 24;\nconst LENGTH_OFFSET = 28;\nconst PAYLOAD_OFFSET = 32;\nconst HOOK_DATA_VERSION = 0;\n\n/**\n * @param forwardRecipientStrkey - Stellar strkey of the final recipient\n * (G…, C…, or M… address). The Forwarder will atomically transfer\n * minted USDC to this address after the on-chain mint.\n * @param integratorPayload - Optional extra bytes appended after the\n * strkey. Whisk doesn't use it.\n * @returns 0x-prefixed hex string ready for the EVM/Solana burn call.\n */\nexport function buildStellarForwarderHookData(\n forwardRecipientStrkey: string,\n integratorPayload?: Uint8Array,\n): `0x${string}` {\n if (!isValidStellarStrkey(forwardRecipientStrkey)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `Stellar forwardRecipient must be a G/M/C strkey, got: ${forwardRecipientStrkey}`,\n );\n }\n\n const recipientBytes = new TextEncoder().encode(forwardRecipientStrkey);\n const payloadLength = integratorPayload?.length ?? 0;\n const total = PAYLOAD_OFFSET + recipientBytes.length + payloadLength;\n const buf = new Uint8Array(total);\n\n // The reserved bytes are left as the zeros Uint8Array starts with.\n void RESERVED_MAGIC_LENGTH;\n\n writeU32BE(buf, VERSION_OFFSET, HOOK_DATA_VERSION);\n\n writeU32BE(buf, LENGTH_OFFSET, recipientBytes.length);\n\n buf.set(recipientBytes, PAYLOAD_OFFSET);\n\n if (integratorPayload && integratorPayload.length > 0) {\n buf.set(integratorPayload, PAYLOAD_OFFSET + recipientBytes.length);\n }\n\n let hex = \"0x\";\n for (const b of buf) hex += b.toString(16).padStart(2, \"0\");\n return hex as `0x${string}`;\n}\n\nfunction writeU32BE(buf: Uint8Array, offset: number, value: number) {\n buf[offset] = (value >>> 24) & 0xff;\n buf[offset + 1] = (value >>> 16) & 0xff;\n buf[offset + 2] = (value >>> 8) & 0xff;\n buf[offset + 3] = value & 0xff;\n}\n","/**\n * Stellar USDC SAC `approve` invocation builder.\n *\n * Stellar's TokenMessengerMinter pulls USDC via `transfer_from`, the\n * allowance-based pattern (same shape as EVM's ERC-20 + TokenMessenger).\n * Before a `deposit_for_burn[_with_hook]` can run, the caller must\n * authorize the TMM contract to spend the burn amount by calling\n * `approve(caller, tmm, amount, expiration_ledger)` on the USDC SAC.\n *\n * SAC `approve` signature (SEP-41):\n * approve(from: Address, spender: Address, amount: i128, expiration_ledger: u32)\n */\nimport { Address, Contract, nativeToScVal, xdr } from \"@stellar/stellar-sdk\";\nimport type { StellarChain } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport type { StellarInvocation } from \"./burn.js\";\n\nexport type BuildStellarApproveInvocationInput = {\n source: StellarChain;\n /** Owner strkey (G/M/C): the wallet authorizing TMM to spend USDC. */\n owner: string;\n /** Usually the chain's TMM contract (C...). */\n spender: string;\n /** Amount in 7-decimal Stellar USDC subunits. */\n amount: bigint;\n /**\n * Ledger sequence at which the allowance expires. The SAC rejects a\n * nonzero allowance that expires before the current ledger, so pass the\n * latest ledger plus a short window.\n */\n expirationLedger: number;\n};\n\nexport function buildStellarApproveInvocation(\n input: BuildStellarApproveInvocationInput,\n): StellarInvocation {\n if (input.source.ecosystem !== \"stellar\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `source must be Stellar, got ${input.source.ecosystem}`,\n );\n }\n if (input.amount <= 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive, got ${input.amount}`,\n );\n }\n if (input.expirationLedger < 0) {\n throw new InvalidInputError(\n \"invalid_input\",\n `expirationLedger must be ≥ 0, got ${input.expirationLedger}`,\n );\n }\n\n const args: xdr.ScVal[] = [\n new Address(input.owner).toScVal(),\n new Address(input.spender).toScVal(),\n nativeToScVal(input.amount, { type: \"i128\" }),\n nativeToScVal(input.expirationLedger, { type: \"u32\" }),\n ];\n\n const operation = new Contract(input.source.usdc).call(\"approve\", ...args);\n\n return {\n ecosystem: \"stellar\",\n contractId: input.source.usdc,\n functionName: \"approve\",\n args,\n operation,\n };\n}\n","/**\n * Stellar CCTP V2 `deposit_for_burn` invocation builder.\n *\n * Soroban contract entry points (from `circlefin/stellar-cctp`):\n *\n * deposit_for_burn(\n * caller: Address,\n * amount: i128, // 7-decimal subunits (local USDC)\n * destination_domain: u32,\n * mint_recipient: BytesN<32>,\n * burn_token: Address, // USDC SAC contract\n * destination_caller: BytesN<32>,\n * max_fee: i128, // 7-decimal subunits\n * min_finality_threshold: u32,\n * )\n *\n * deposit_for_burn_with_hook(\n * ...same as above plus...\n * hook_data: Bytes,\n * )\n *\n * The contract internally normalizes 7-decimal local amounts to\n * 6-decimal canonical for the message. Dust below 0.0000001 USDC stays\n * on the user's Stellar balance.\n *\n * `amount` and `max_fee` here are expressed in Stellar's 7-decimal\n * subunits: multiply 6-decimal CCTP amounts by 10 before passing in.\n */\nimport {\n Address,\n Contract,\n nativeToScVal,\n Operation,\n xdr,\n} from \"@stellar/stellar-sdk\";\nimport type { StellarChain } from \"../chains/types.js\";\nimport type { FinalityThreshold } from \"../iris/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport { decodeStrkeyToBytes32, isValidStellarStrkey } from \"./strkey.js\";\n\nexport type StellarInvocation = {\n ecosystem: \"stellar\";\n contractId: string;\n functionName: string;\n args: xdr.ScVal[];\n /** Pre-built XDR operation the adapter wraps in a Soroban transaction. */\n operation: xdr.Operation;\n};\n\nexport type BuildStellarBurnIntentInput = {\n source: StellarChain;\n destinationDomain: number;\n /**\n * `mintRecipient` 32-byte payload as encoded into the CCTP message.\n * The caller is responsible for encoding it correctly:\n * - EVM 20-byte address left-padded to 32 bytes\n * - Solana recipient USDC ATA pubkey (32 bytes raw)\n * - Starknet felt zero-padded to 32 bytes\n */\n mintRecipientBytes32: Uint8Array;\n /** Amount in 7-decimal Stellar USDC subunits. */\n amount: bigint;\n /** Max fee in 7-decimal Stellar USDC subunits. */\n maxFee: bigint;\n /**\n * `destinationCaller` 32-byte payload. For Stellar destinations this\n * MUST equal the `CctpForwarder` decoded to bytes32; for other\n * destinations this is typically 32 zero bytes (any caller).\n */\n destinationCallerBytes32: Uint8Array;\n /** Caller strkey (G or C). The wallet that authorizes the burn. */\n caller: string;\n /**\n * Optional hookData. When set, the builder targets\n * `deposit_for_burn_with_hook`; when unset, it targets the plain\n * `deposit_for_burn`.\n */\n hookData?: Uint8Array;\n /** 2000 on Stellar, which has no Fast Transfer. Take it from the fee tier. */\n minFinalityThreshold: FinalityThreshold;\n};\n\nexport type StellarBurnIntent = {\n source: StellarChain;\n destinationDomain: number;\n amount: bigint;\n maxFee: bigint;\n invocation: StellarInvocation;\n withHook: boolean;\n};\n\nexport function buildStellarBurnIntent(\n input: BuildStellarBurnIntentInput,\n): StellarBurnIntent {\n if (input.source.ecosystem !== \"stellar\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `source must be a Stellar chain, got ${input.source.ecosystem}`,\n );\n }\n if (!isValidStellarStrkey(input.caller)) {\n throw new InvalidInputError(\n \"invalid_address\",\n `caller is not a valid Stellar strkey: ${input.caller}`,\n );\n }\n if (input.mintRecipientBytes32.length !== 32) {\n throw new InvalidInputError(\n \"invalid_input\",\n `mintRecipientBytes32 must be 32 bytes, got ${input.mintRecipientBytes32.length}`,\n );\n }\n if (input.destinationCallerBytes32.length !== 32) {\n throw new InvalidInputError(\n \"invalid_input\",\n `destinationCallerBytes32 must be 32 bytes, got ${input.destinationCallerBytes32.length}`,\n );\n }\n if (input.amount <= 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive, got ${input.amount}`,\n );\n }\n if (input.maxFee < 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `maxFee must be non-negative, got ${input.maxFee}`,\n );\n }\n\n const withHook = !!input.hookData && input.hookData.length > 0;\n const fn = withHook ? \"deposit_for_burn_with_hook\" : \"deposit_for_burn\";\n\n const tmm = input.source.tokenMessengerMinter;\n const usdcSac = input.source.usdc;\n\n const args: xdr.ScVal[] = [\n new Address(input.caller).toScVal(),\n nativeToScVal(input.amount, { type: \"i128\" }),\n nativeToScVal(input.destinationDomain, { type: \"u32\" }),\n nativeToScVal(Buffer.from(input.mintRecipientBytes32), {\n type: \"bytes\",\n }),\n new Address(usdcSac).toScVal(),\n nativeToScVal(Buffer.from(input.destinationCallerBytes32), {\n type: \"bytes\",\n }),\n nativeToScVal(input.maxFee, { type: \"i128\" }),\n nativeToScVal(input.minFinalityThreshold, { type: \"u32\" }),\n ];\n\n if (withHook) {\n args.push(nativeToScVal(Buffer.from(input.hookData!), { type: \"bytes\" }));\n }\n\n const operation = new Contract(tmm).call(fn, ...args);\n\n return {\n source: input.source,\n destinationDomain: input.destinationDomain,\n amount: input.amount,\n maxFee: input.maxFee,\n invocation: {\n ecosystem: \"stellar\",\n contractId: tmm,\n functionName: fn,\n args,\n operation,\n },\n withHook,\n };\n}\n\n/** The 32-byte payload of a strkey, as CCTP message fields carry it. */\nexport function strkeyTo32Bytes(strkey: string): Uint8Array {\n return decodeStrkeyToBytes32(strkey);\n}\n\n// Keep `Operation` import referenced for the consumer side that builds\n// transaction envelopes from the bare invocation.\nvoid Operation;\n","/**\n * Stellar `CctpForwarder.mint_and_forward` invocation builder.\n *\n * Single Soroban call on the Stellar destination side:\n *\n * mint_and_forward(message: Bytes, attestation: Bytes)\n *\n * Internally the Forwarder:\n * 1. Validates the message\n * 2. Extracts `forward_recipient` from hookData\n * 3. Calls `receive_message` on MessageTransmitter (mints USDC to the\n * Forwarder contract itself)\n * 4. Transfers minted USDC to `forward_recipient`\n *\n * The call is atomic: any failure reverts the entire invocation.\n */\nimport { Contract, nativeToScVal, xdr } from \"@stellar/stellar-sdk\";\nimport type { StellarChain } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport type { StellarInvocation } from \"./burn.js\";\n\nexport type BuildStellarMintIntentInput = {\n destination: StellarChain;\n /** Raw CCTP message bytes from Iris. */\n message: Uint8Array;\n /** Raw attestation bytes from Iris. */\n attestation: Uint8Array;\n};\n\nexport type StellarMintIntent = {\n destination: StellarChain;\n invocation: StellarInvocation;\n};\n\nexport function buildStellarMintIntent(\n input: BuildStellarMintIntentInput,\n): StellarMintIntent {\n if (input.destination.ecosystem !== \"stellar\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `destination must be a Stellar chain, got ${input.destination.ecosystem}`,\n );\n }\n if (input.message.length < 44) {\n throw new InvalidInputError(\n \"invalid_input\",\n `message must be at least 44 bytes, got ${input.message.length}`,\n );\n }\n if (input.attestation.length === 0) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"attestation must not be empty\",\n );\n }\n\n const args: xdr.ScVal[] = [\n nativeToScVal(Buffer.from(input.message), { type: \"bytes\" }),\n nativeToScVal(Buffer.from(input.attestation), { type: \"bytes\" }),\n ];\n\n const operation = new Contract(input.destination.cctpForwarder).call(\n \"mint_and_forward\",\n ...args,\n );\n\n return {\n destination: input.destination,\n invocation: {\n ecosystem: \"stellar\",\n contractId: input.destination.cctpForwarder,\n functionName: \"mint_and_forward\",\n args,\n operation,\n },\n };\n}\n","/**\n * Program-Derived Address (PDA) helpers for CCTP V2 on Solana.\n *\n * Seed conventions verified against Circle's\n * `circlefin/solana-cctp-contracts` (programs/v2). Two key gotchas:\n *\n * - `remote_token_messenger` uses the destination domain encoded as\n * its *decimal string* bytes, NOT u32 LE. So domain 0 →\n * `Buffer.from(\"0\", \"utf8\")`, not `Buffer.from([0, 0, 0, 0])`.\n * - `token_pair` uses the source domain as decimal string too,\n * plus the 32-byte source-token pubkey (left-padded EVM address\n * for non-Solana sources).\n */\nimport { PublicKey } from \"@solana/web3.js\";\n\nconst enc = new TextEncoder();\n\n/** Seed prefix bytes for each PDA we need. */\nconst SEEDS = {\n tokenMessenger: enc.encode(\"token_messenger\"),\n tokenMinter: enc.encode(\"token_minter\"),\n senderAuthority: enc.encode(\"sender_authority\"),\n remoteTokenMessenger: enc.encode(\"remote_token_messenger\"),\n localToken: enc.encode(\"local_token\"),\n tokenPair: enc.encode(\"token_pair\"),\n custody: enc.encode(\"custody\"),\n denylistAccount: enc.encode(\"denylist_account\"),\n messageTransmitter: enc.encode(\"message_transmitter\"),\n messageTransmitterAuthority: enc.encode(\"message_transmitter_authority\"),\n usedNonce: enc.encode(\"used_nonce\"),\n eventAuthority: enc.encode(\"__event_authority\"),\n} as const;\n\n/** `token_messenger` PDA on the TokenMessengerMinter program. */\nexport function deriveTokenMessenger(\n tokenMessengerMinterProgram: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.tokenMessenger],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/** `token_minter` PDA on the TokenMessengerMinter program. */\nexport function deriveTokenMinter(\n tokenMessengerMinterProgram: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.tokenMinter],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/** `sender_authority` PDA on the TokenMessengerMinter program. */\nexport function deriveSenderAuthority(\n tokenMessengerMinterProgram: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.senderAuthority],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/**\n * `remote_token_messenger` PDA, keyed by the **destination domain**\n * as its decimal string representation (Circle's convention).\n */\nexport function deriveRemoteTokenMessenger(\n tokenMessengerMinterProgram: PublicKey,\n domain: number,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.remoteTokenMessenger, enc.encode(domain.toString())],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/** `local_token` PDA, keyed by the local USDC SPL mint. */\nexport function deriveLocalToken(\n tokenMessengerMinterProgram: PublicKey,\n mint: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.localToken, mint.toBytes()],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/**\n * `token_pair` PDA, used on the receive (mint) side to map a\n * (source domain, source token) pair to the local mint. Source token\n * is 32 bytes (left-padded for EVM sources).\n */\nexport function deriveTokenPair(\n tokenMessengerMinterProgram: PublicKey,\n sourceDomain: number,\n sourceTokenBytes32: Uint8Array,\n): PublicKey {\n if (sourceTokenBytes32.length !== 32) {\n throw new Error(\n `deriveTokenPair: sourceTokenBytes32 must be 32 bytes, got ${sourceTokenBytes32.length}`,\n );\n }\n return PublicKey.findProgramAddressSync(\n [SEEDS.tokenPair, enc.encode(sourceDomain.toString()), sourceTokenBytes32],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/** `custody` token account PDA, keyed by the local USDC mint. */\nexport function deriveCustodyTokenAccount(\n tokenMessengerMinterProgram: PublicKey,\n mint: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.custody, mint.toBytes()],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/**\n * `denylist_account` PDA, owner-keyed. Burn fails if this PDA exists\n * with data; the user's denylist record is \"absence of data.\"\n */\nexport function deriveDenylistAccount(\n tokenMessengerMinterProgram: PublicKey,\n owner: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.denylistAccount, owner.toBytes()],\n tokenMessengerMinterProgram,\n )[0];\n}\n\n/** `message_transmitter` config PDA on the MessageTransmitter program. */\nexport function deriveMessageTransmitter(\n messageTransmitterProgram: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.messageTransmitter],\n messageTransmitterProgram,\n )[0];\n}\n\n/**\n * `message_transmitter_authority` PDA, keyed by the *receiver*\n * program. For CCTP burns, the receiver is the TokenMessengerMinter.\n */\nexport function deriveMessageTransmitterAuthority(\n messageTransmitterProgram: PublicKey,\n receiverProgram: PublicKey,\n): PublicKey {\n return PublicKey.findProgramAddressSync(\n [SEEDS.messageTransmitterAuthority, receiverProgram.toBytes()],\n messageTransmitterProgram,\n )[0];\n}\n\n/**\n * `used_nonce` PDA, seeded by the 32-byte nonce in the CCTP message\n * header: `message[12..44]` per Circle's `Message::NONCE_INDEX` /\n * `Message::SENDER_INDEX` layout.\n */\nexport function deriveUsedNonce(\n messageTransmitterProgram: PublicKey,\n messageBytes: Uint8Array,\n): PublicKey {\n if (messageBytes.length < 44) {\n throw new Error(\n `deriveUsedNonce: message must be at least 44 bytes, got ${messageBytes.length}`,\n );\n }\n const nonce = messageBytes.slice(12, 44);\n return PublicKey.findProgramAddressSync(\n [SEEDS.usedNonce, nonce],\n messageTransmitterProgram,\n )[0];\n}\n\n/** `__event_authority` PDA, used by Anchor's `#[event_cpi]`. */\nexport function deriveEventAuthority(programId: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([SEEDS.eventAuthority], programId)[0];\n}\n\nexport { SEEDS as SOLANA_CCTP_PDA_SEEDS };\n","/**\n * Anchor instruction discriminators for CCTP V2's Solana programs.\n *\n * Every Anchor instruction is prefixed with the first 8 bytes of\n * `sha256(\"global:\" + snakeCaseName)`.\n */\nimport { sha256 } from \"@noble/hashes/sha256\";\n\n/**\n * Snake-case the name as the Rust function declares it\n * (`deposit_for_burn`, not `depositForBurn`).\n *\n * Uses `@noble/hashes` because this runs at module load in browser\n * bundles, where `node:crypto` isn't available.\n */\nexport function anchorDiscriminator(snakeCaseName: string): Uint8Array {\n const bytes = new TextEncoder().encode(`global:${snakeCaseName}`);\n return sha256(bytes).slice(0, 8);\n}\n\n/** TokenMessengerMinterV2 `deposit_for_burn` (no hook data). */\nexport const DISCRIMINATOR_DEPOSIT_FOR_BURN: Uint8Array =\n anchorDiscriminator(\"deposit_for_burn\");\n\n/** TokenMessengerMinterV2 `deposit_for_burn_with_hook`. */\nexport const DISCRIMINATOR_DEPOSIT_FOR_BURN_WITH_HOOK: Uint8Array =\n anchorDiscriminator(\"deposit_for_burn_with_hook\");\n\n/** MessageTransmitterV2 `receive_message`. */\nexport const DISCRIMINATOR_RECEIVE_MESSAGE: Uint8Array =\n anchorDiscriminator(\"receive_message\");\n","/**\n * Minimal Borsh encoders for CCTP V2's Solana program params.\n *\n * The handful of primitives we need (u32/u64 little-endian, fixed-32-byte\n * pubkey, length-prefixed `Vec<u8>`) are small enough to hand-roll\n * without a Borsh runtime.\n */\nimport { Buffer } from \"node:buffer\";\n\nexport type BorshWriter = {\n buf: Buffer;\n offset: number;\n};\n\nexport function createWriter(initialSize = 64): BorshWriter {\n return { buf: Buffer.alloc(initialSize), offset: 0 };\n}\n\nfunction ensure(w: BorshWriter, extra: number): void {\n if (w.offset + extra <= w.buf.length) return;\n const next = Buffer.alloc(Math.max(w.buf.length * 2, w.offset + extra));\n w.buf.copy(next, 0, 0, w.offset);\n w.buf = next;\n}\n\nexport function writeU8(w: BorshWriter, value: number): void {\n ensure(w, 1);\n w.buf.writeUInt8(value, w.offset);\n w.offset += 1;\n}\n\nexport function writeU32LE(w: BorshWriter, value: number): void {\n ensure(w, 4);\n w.buf.writeUInt32LE(value >>> 0, w.offset);\n w.offset += 4;\n}\n\nexport function writeU64LE(w: BorshWriter, value: bigint): void {\n if (value < 0n) {\n throw new RangeError(\n `writeU64LE: value must be non-negative, got ${value}`,\n );\n }\n ensure(w, 8);\n w.buf.writeBigUInt64LE(value, w.offset);\n w.offset += 8;\n}\n\n/** Write a fixed 32-byte pubkey or hash. */\nexport function writePubkey(w: BorshWriter, bytes: Uint8Array): void {\n if (bytes.length !== 32) {\n throw new RangeError(`writePubkey: expected 32 bytes, got ${bytes.length}`);\n }\n ensure(w, 32);\n w.buf.set(bytes, w.offset);\n w.offset += 32;\n}\n\n/** `Vec<u8>`: 4-byte LE length prefix, then the raw bytes. */\nexport function writeBytes(w: BorshWriter, bytes: Uint8Array): void {\n writeU32LE(w, bytes.length);\n ensure(w, bytes.length);\n w.buf.set(bytes, w.offset);\n w.offset += bytes.length;\n}\n\n/** Concatenate a discriminator and the writer's buffer. */\nexport function withDiscriminator(\n discriminator: Uint8Array,\n w: BorshWriter,\n): Buffer {\n const out = Buffer.alloc(discriminator.length + w.offset);\n out.set(discriminator, 0);\n w.buf.copy(out, discriminator.length, 0, w.offset);\n return out;\n}\n\n/** Finalize a writer to a `Buffer` of exactly `offset` bytes. */\nexport function finalize(w: BorshWriter): Buffer {\n return Buffer.from(w.buf.buffer, w.buf.byteOffset, w.offset);\n}\n","/**\n * Solana CCTP V2 `deposit_for_burn` / `deposit_for_burn_with_hook`\n * instruction builder.\n *\n * Account list verified against\n * `circlefin/solana-cctp-contracts/programs/v2/token-messenger-minter-v2`:\n *\n * 1. owner (signer, ro)\n * 2. event_rent_payer (signer, writable)\n * 3. sender_authority_pda (ro) PDA[\"sender_authority\"] on TMM\n * 4. burn_token_account (writable) user's USDC ATA\n * 5. denylist_account (ro) PDA[\"denylist_account\", owner] on TMM\n * 6. message_transmitter (writable) PDA[\"message_transmitter\"] on MT\n * 7. token_messenger (ro) PDA[\"token_messenger\"] on TMM\n * 8. remote_token_messenger (ro) PDA[\"remote_token_messenger\", destDomain.toString()] on TMM\n * 9. token_minter (ro) PDA[\"token_minter\"] on TMM\n * 10. local_token (writable) PDA[\"local_token\", burnTokenMint] on TMM\n * 11. burn_token_mint (writable)\n * 12. message_sent_event_data (signer, writable) fresh keypair, generated client-side\n * 13. message_transmitter_program (ro)\n * 14. token_messenger_minter_program (ro)\n * 15. token_program (ro)\n * 16. system_program (ro)\n * 17. event_authority (ro) PDA[\"__event_authority\"] on TMM (added by #[event_cpi])\n * 18. program (ro) TMM program ID (added by #[event_cpi])\n *\n * Encoding (Borsh):\n * amount: u64 LE\n * destination_domain: u32 LE\n * mint_recipient: Pubkey (32 bytes)\n * destination_caller: Pubkey (32 bytes)\n * max_fee: u64 LE\n * min_finality_threshold: u32 LE\n * hook_data: Vec<u8> [only for deposit_for_burn_with_hook]\n */\nimport {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n type AccountMeta,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport type { SolanaChain } from \"../chains/types.js\";\nimport type { FinalityThreshold } from \"../iris/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport {\n deriveDenylistAccount,\n deriveEventAuthority,\n deriveLocalToken,\n deriveMessageTransmitter,\n deriveRemoteTokenMessenger,\n deriveSenderAuthority,\n deriveTokenMessenger,\n deriveTokenMinter,\n} from \"./pda.js\";\nimport {\n DISCRIMINATOR_DEPOSIT_FOR_BURN,\n DISCRIMINATOR_DEPOSIT_FOR_BURN_WITH_HOOK,\n} from \"./discriminators.js\";\nimport {\n createWriter,\n finalize,\n withDiscriminator,\n writeBytes,\n writePubkey,\n writeU32LE,\n writeU64LE,\n} from \"./borsh.js\";\n\nconst ANY_DESTINATION_CALLER = new PublicKey(new Uint8Array(32));\n\nexport type BuildSolanaBurnIntentInput = {\n source: SolanaChain;\n /** Destination chain CCTP domain (0=Eth, 1=Avax, 3=Arb, 6=Base, etc.). */\n destinationDomain: number;\n /** USDC subunits (6 decimals). Must be > 0 and ≤ 10M USDC. */\n amount: bigint;\n /**\n * Recipient on the destination chain, as 32 bytes (bytes32-encoded).\n * EVM addresses are left-padded; Solana addresses pass through.\n */\n mintRecipientBytes32: Uint8Array;\n /** USDC subunits; caps the protocol + forwarder fees. */\n maxFee: bigint;\n owner: PublicKey;\n /** Fresh keypair pubkey for `message_sent_event_data`. */\n messageSentEventDataKey: PublicKey;\n /** User's USDC ATA on the source chain. */\n ownerUsdcAta: PublicKey;\n /** `destinationCaller` as bytes32. Defaults to any caller. */\n destinationCallerBytes32?: Uint8Array;\n /**\n * Non-empty bytes (the `cctp-forward` hookData, or the Stellar\n * Forwarder's) select `deposit_for_burn_with_hook`. Leave unset for\n * the plain burn.\n */\n hookData?: Uint8Array;\n /** Take it from the fee tier. */\n minFinalityThreshold: FinalityThreshold;\n};\n\nexport type SolanaInstruction = {\n programId: PublicKey;\n keys: AccountMeta[];\n data: Buffer;\n ecosystem: \"solana\";\n};\n\nexport type SolanaBurnIntent = {\n source: SolanaChain;\n destinationDomain: number;\n amount: bigint;\n maxFee: bigint;\n instruction: SolanaInstruction;\n /** Pubkey the caller must include as a fresh signer. */\n messageSentEventDataKey: PublicKey;\n withHook: boolean;\n};\n\n/** CCTP per-burn cap: $10M USDC. */\nconst MAX_USDC_AMOUNT = 10_000_000n * 1_000_000n;\n\nexport function buildSolanaBurnIntent(\n input: BuildSolanaBurnIntentInput,\n): SolanaBurnIntent {\n if (input.source.ecosystem !== \"solana\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `source must be a Solana chain, got ${input.source.ecosystem}`,\n );\n }\n if (input.amount <= 0n) {\n throw new InvalidInputError(\n \"invalid_amount\",\n `amount must be positive, got ${input.amount}`,\n );\n }\n if (input.amount > MAX_USDC_AMOUNT) {\n throw new InvalidInputError(\n \"amount_too_large\",\n `amount exceeds CCTP per-burn cap of 10M USDC`,\n );\n }\n if (input.amount <= input.maxFee) {\n throw new InvalidInputError(\n \"invalid_amount\",\n \"amount must exceed maxFee (program would revert MaxFeeMustBeLessThanAmount)\",\n );\n }\n if (input.mintRecipientBytes32.length !== 32) {\n throw new InvalidInputError(\n \"invalid_input\",\n `mintRecipientBytes32 must be 32 bytes, got ${input.mintRecipientBytes32.length}`,\n );\n }\n const destCaller = input.destinationCallerBytes32 ?? new Uint8Array(32);\n if (destCaller.length !== 32) {\n throw new InvalidInputError(\n \"invalid_input\",\n `destinationCallerBytes32 must be 32 bytes, got ${destCaller.length}`,\n );\n }\n // Hook data must be non-empty when used (program reverts\n // InvalidHookData on len == 0). Plain burn uses the no-hook variant.\n if (input.hookData !== undefined && input.hookData.length === 0) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"hookData must be non-empty (use the no-hook builder for plain burns)\",\n );\n }\n\n const tmmProgram = new PublicKey(input.source.tokenMessengerMinter);\n const mtProgram = new PublicKey(input.source.messageTransmitter);\n const burnTokenMint = new PublicKey(input.source.usdc);\n\n const senderAuthorityPda = deriveSenderAuthority(tmmProgram);\n const denylistAccount = deriveDenylistAccount(tmmProgram, input.owner);\n const messageTransmitter = deriveMessageTransmitter(mtProgram);\n const tokenMessenger = deriveTokenMessenger(tmmProgram);\n const remoteTokenMessenger = deriveRemoteTokenMessenger(\n tmmProgram,\n input.destinationDomain,\n );\n const tokenMinter = deriveTokenMinter(tmmProgram);\n const localToken = deriveLocalToken(tmmProgram, burnTokenMint);\n const eventAuthority = deriveEventAuthority(tmmProgram);\n\n const keys: AccountMeta[] = [\n { pubkey: input.owner, isSigner: true, isWritable: false },\n { pubkey: input.owner, isSigner: true, isWritable: true }, // event_rent_payer = owner\n { pubkey: senderAuthorityPda, isSigner: false, isWritable: false },\n { pubkey: input.ownerUsdcAta, isSigner: false, isWritable: true },\n { pubkey: denylistAccount, isSigner: false, isWritable: false },\n { pubkey: messageTransmitter, isSigner: false, isWritable: true },\n { pubkey: tokenMessenger, isSigner: false, isWritable: false },\n { pubkey: remoteTokenMessenger, isSigner: false, isWritable: false },\n { pubkey: tokenMinter, isSigner: false, isWritable: false },\n { pubkey: localToken, isSigner: false, isWritable: true },\n { pubkey: burnTokenMint, isSigner: false, isWritable: true },\n {\n pubkey: input.messageSentEventDataKey,\n isSigner: true,\n isWritable: true,\n },\n { pubkey: mtProgram, isSigner: false, isWritable: false },\n { pubkey: tmmProgram, isSigner: false, isWritable: false },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: eventAuthority, isSigner: false, isWritable: false },\n { pubkey: tmmProgram, isSigner: false, isWritable: false },\n ];\n\n // Field order matches Rust DepositForBurnParams and\n // DepositForBurnWithHookParams; the hook variant only appends hook_data.\n const writer = createWriter(96);\n writeU64LE(writer, input.amount);\n writeU32LE(writer, input.destinationDomain);\n writePubkey(writer, input.mintRecipientBytes32);\n writePubkey(writer, destCaller);\n writeU64LE(writer, input.maxFee);\n writeU32LE(writer, input.minFinalityThreshold);\n if (input.hookData !== undefined) {\n writeBytes(writer, input.hookData);\n }\n\n const discriminator =\n input.hookData !== undefined\n ? DISCRIMINATOR_DEPOSIT_FOR_BURN_WITH_HOOK\n : DISCRIMINATOR_DEPOSIT_FOR_BURN;\n const data = withDiscriminator(discriminator, writer);\n\n return {\n source: input.source,\n destinationDomain: input.destinationDomain,\n amount: input.amount,\n maxFee: input.maxFee,\n messageSentEventDataKey: input.messageSentEventDataKey,\n withHook: input.hookData !== undefined,\n instruction: {\n programId: tmmProgram,\n keys,\n data,\n ecosystem: \"solana\",\n },\n };\n}\n\n/**\n * Convenience: build a `TransactionInstruction` directly from the\n * intent. Most callers will want this; the raw `instruction` shape\n * keeps the type stable across `@solana/web3.js` minor versions.\n */\nexport function burnIntentToTransactionInstruction(\n intent: SolanaBurnIntent,\n): TransactionInstruction {\n return new TransactionInstruction({\n programId: intent.instruction.programId,\n keys: intent.instruction.keys,\n data: intent.instruction.data,\n });\n}\n\nexport { ANY_DESTINATION_CALLER as SOLANA_ANY_DESTINATION_CALLER };\n\nexport { finalize as __finalizeBorshWriter };\n","/**\n * Solana CCTP V2 `receive_message` instruction builder.\n *\n * `receive_message` is dispatched on `MessageTransmitterV2`. It does\n * its own attestation verification, opens a `used_nonce` PDA, then\n * CPIs into the receiver program (TokenMessengerMinterV2) via\n * `handle_receive_finalized_message`. All accounts the receiver needs\n * are appended after MessageTransmitter's own.\n *\n * Account list verified against\n * `circlefin/solana-cctp-contracts/programs/v2`:\n *\n * MessageTransmitterV2 ReceiveMessageContext (with #[event_cpi]):\n * 1. payer (signer, writable)\n * 2. caller (signer, ro)\n * 3. authority_pda (ro)\n * 4. message_transmitter (ro)\n * 5. used_nonce (writable, init)\n * 6. receiver (ro) TMM program\n * 7. system_program (ro)\n * 8. event_authority (MT) (ro)\n * 9. program (MT) (ro)\n *\n * Remaining accounts, from TokenMessengerMinterV2's\n * HandleReceiveMessageContext (with #[event_cpi]):\n * 10. token_messenger (ro)\n * 11. remote_token_messenger (ro)\n * 12. token_minter (writable)\n * 13. local_token (writable)\n * 14. token_pair (ro)\n * 15. fee_recipient_token_account (writable)\n * 16. recipient_token_account (writable)\n * 17. custody_token_account (writable)\n * 18. token_program (ro)\n * 19. event_authority (TMM) (ro)\n * 20. program (TMM) (ro)\n */\nimport {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n type AccountMeta,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport type { SolanaChain } from \"../chains/types.js\";\nimport { InvalidInputError } from \"../errors.js\";\nimport {\n deriveCustodyTokenAccount,\n deriveEventAuthority,\n deriveLocalToken,\n deriveMessageTransmitter,\n deriveMessageTransmitterAuthority,\n deriveRemoteTokenMessenger,\n deriveTokenMessenger,\n deriveTokenMinter,\n deriveTokenPair,\n deriveUsedNonce,\n} from \"./pda.js\";\nimport { DISCRIMINATOR_RECEIVE_MESSAGE } from \"./discriminators.js\";\nimport { createWriter, withDiscriminator, writeBytes } from \"./borsh.js\";\n\nexport type BuildSolanaReceiveIntentInput = {\n destination: SolanaChain;\n /** Raw CCTP message bytes from Iris. */\n message: Uint8Array;\n /** Raw attestation bytes from Iris. */\n attestation: Uint8Array;\n /** Source CCTP domain (the chain the burn came from). */\n sourceDomain: number;\n /** Source-chain USDC token, 32-byte left-padded. */\n sourceTokenBytes32: Uint8Array;\n /** The `fee_recipient` ATA, read from the on-chain TokenMessenger state. */\n feeRecipientUsdcAta: PublicKey;\n /** End-recipient's USDC ATA on Solana. Must be pre-created. */\n recipientUsdcAta: PublicKey;\n /** Pays for and signs the receive. Also passed as `caller`. */\n payer: PublicKey;\n};\n\nexport type SolanaReceiveIntent = {\n destination: SolanaChain;\n instruction: {\n programId: PublicKey;\n keys: AccountMeta[];\n data: Buffer;\n ecosystem: \"solana\";\n };\n};\n\nexport function buildSolanaReceiveIntent(\n input: BuildSolanaReceiveIntentInput,\n): SolanaReceiveIntent {\n if (input.destination.ecosystem !== \"solana\") {\n throw new InvalidInputError(\n \"invalid_chain\",\n `destination must be a Solana chain, got ${input.destination.ecosystem}`,\n );\n }\n if (input.message.length < 44) {\n throw new InvalidInputError(\n \"invalid_input\",\n `message must be at least 44 bytes (Iris messages are much larger), got ${input.message.length}`,\n );\n }\n if (input.attestation.length === 0) {\n throw new InvalidInputError(\n \"invalid_input\",\n \"attestation must not be empty\",\n );\n }\n if (input.sourceTokenBytes32.length !== 32) {\n throw new InvalidInputError(\n \"invalid_input\",\n `sourceTokenBytes32 must be 32 bytes, got ${input.sourceTokenBytes32.length}`,\n );\n }\n\n const tmmProgram = new PublicKey(input.destination.tokenMessengerMinter);\n const mtProgram = new PublicKey(input.destination.messageTransmitter);\n const localMint = new PublicKey(input.destination.usdc);\n\n // MT-side PDAs\n const authorityPda = deriveMessageTransmitterAuthority(mtProgram, tmmProgram);\n const messageTransmitter = deriveMessageTransmitter(mtProgram);\n const usedNonce = deriveUsedNonce(mtProgram, input.message);\n const mtEventAuthority = deriveEventAuthority(mtProgram);\n\n // TMM-side PDAs (CPI accounts)\n const tokenMessenger = deriveTokenMessenger(tmmProgram);\n const remoteTokenMessenger = deriveRemoteTokenMessenger(\n tmmProgram,\n input.sourceDomain,\n );\n const tokenMinter = deriveTokenMinter(tmmProgram);\n const localToken = deriveLocalToken(tmmProgram, localMint);\n const tokenPair = deriveTokenPair(\n tmmProgram,\n input.sourceDomain,\n input.sourceTokenBytes32,\n );\n const custodyTokenAccount = deriveCustodyTokenAccount(tmmProgram, localMint);\n const tmmEventAuthority = deriveEventAuthority(tmmProgram);\n\n const keys: AccountMeta[] = [\n { pubkey: input.payer, isSigner: true, isWritable: true },\n { pubkey: input.payer, isSigner: true, isWritable: false }, // caller = payer\n { pubkey: authorityPda, isSigner: false, isWritable: false },\n { pubkey: messageTransmitter, isSigner: false, isWritable: false },\n { pubkey: usedNonce, isSigner: false, isWritable: true },\n { pubkey: tmmProgram, isSigner: false, isWritable: false }, // receiver\n { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },\n { pubkey: mtEventAuthority, isSigner: false, isWritable: false },\n { pubkey: mtProgram, isSigner: false, isWritable: false },\n // Remaining accounts for TMM handle_receive\n { pubkey: tokenMessenger, isSigner: false, isWritable: false },\n { pubkey: remoteTokenMessenger, isSigner: false, isWritable: false },\n { pubkey: tokenMinter, isSigner: false, isWritable: true },\n { pubkey: localToken, isSigner: false, isWritable: true },\n { pubkey: tokenPair, isSigner: false, isWritable: false },\n { pubkey: input.feeRecipientUsdcAta, isSigner: false, isWritable: true },\n { pubkey: input.recipientUsdcAta, isSigner: false, isWritable: true },\n { pubkey: custodyTokenAccount, isSigner: false, isWritable: true },\n { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: tmmEventAuthority, isSigner: false, isWritable: false },\n { pubkey: tmmProgram, isSigner: false, isWritable: false },\n ];\n\n // ReceiveMessageParams: { message: Vec<u8>, attestation: Vec<u8> }\n const writer = createWriter(\n input.message.length + input.attestation.length + 16,\n );\n writeBytes(writer, input.message);\n writeBytes(writer, input.attestation);\n const data = withDiscriminator(DISCRIMINATOR_RECEIVE_MESSAGE, writer);\n\n return {\n destination: input.destination,\n instruction: {\n programId: mtProgram,\n keys,\n data,\n ecosystem: \"solana\",\n },\n };\n}\n\n/** Convenience: produce a `TransactionInstruction` from the intent. */\nexport function receiveIntentToTransactionInstruction(\n intent: SolanaReceiveIntent,\n): TransactionInstruction {\n return new TransactionInstruction({\n programId: intent.instruction.programId,\n keys: intent.instruction.keys,\n data: intent.instruction.data,\n });\n}\n","/**\n * Solana CCTP on-chain state parsing.\n *\n * The TokenMessenger account holds the `fee_recipient` pubkey that\n * `receive_message` requires as a remaining-account constraint. The\n * account isn't derived: it's an arbitrary owner-configured pubkey\n * stored in state, so the executor must read it from chain.\n *\n * Account layout (Anchor, verified against Circle's\n * `programs/v2/token-messenger-minter/src/token_messenger/state.rs`):\n *\n * 0..8 discriminator\n * 8..40 denylister Pubkey\n * 40..72 owner Pubkey\n * 72..104 pending_owner Pubkey\n * 104..108 message_body_version u32 LE\n * 108..109 authority_bump u8\n * 109..141 fee_recipient Pubkey\n * 141..173 min_fee_controller Pubkey\n * 173..177 min_fee u32 LE\n */\nimport { PublicKey } from \"@solana/web3.js\";\nimport { InvalidInputError } from \"../errors.js\";\n\nconst FEE_RECIPIENT_OFFSET = 109;\nconst FEE_RECIPIENT_END = 141;\n\n/** Throws if the account data ends before `fee_recipient` does. */\nexport function parseTokenMessengerFeeRecipient(\n accountData: Uint8Array,\n): PublicKey {\n if (accountData.length < FEE_RECIPIENT_END) {\n throw new InvalidInputError(\n \"invalid_input\",\n `TokenMessenger account too small (${accountData.length} bytes) — cannot read fee_recipient.`,\n );\n }\n return new PublicKey(\n accountData.slice(FEE_RECIPIENT_OFFSET, FEE_RECIPIENT_END),\n );\n}\n","/**\n * CCTP V2 protocol layer.\n *\n * Owns the direct integration with CCTP V2 contracts and Circle's Iris\n * attestation API. Pure protocol builders and HTTP client; no wallet\n * state, no transaction submission.\n */\n\nexport const VERSION = \"0.1.0\";\n\nexport {\n CctpError,\n InvalidInputError,\n IrisAbortedError,\n IrisError,\n IrisHttpError,\n IrisNetworkError,\n IrisParseError,\n IrisRateLimitedError,\n ProtocolError,\n UnsupportedError,\n isCctpError,\n} from \"./errors.js\";\nexport type { CctpErrorCode } from \"./errors.js\";\n\nexport * from \"./chains/index.js\";\n\nexport {\n tokenMessengerV2Abi,\n tokenMessengerWithFeesAbi,\n messageTransmitterV2Abi,\n usdcAbi,\n} from \"./abi/index.js\";\n\nexport {\n IRIS_MAINNET_URL,\n IRIS_SANDBOX_URL,\n irisBaseUrl,\n FINALITY_FAST,\n FINALITY_STANDARD,\n fetchIrisJson,\n getBurnFees,\n getFastBurnAllowance,\n getSignedBurnQuote,\n pickFeeTier,\n pickForwarderFee,\n getMessages,\n isForwardDone,\n pollBudget,\n pollMessages,\n createIrisLimiter,\n defaultIrisLimiter,\n reattest,\n} from \"./iris/index.js\";\nexport type {\n BurnFeeTier,\n FetchJsonOptions,\n FinalityThreshold,\n TransferSpeed,\n ForwarderFeeTier,\n ForwardState,\n GetBurnFeesOptions,\n GetMessagesOptions,\n GetMessagesQuery,\n IrisAttestationStatus,\n IrisDelayReason,\n IrisLimiter,\n IrisLimiterOptions,\n IrisMessage,\n IrisMessagesResponse,\n PollMessageOptions,\n ReattestOptions,\n SignedBurnQuote,\n SignedBurnQuoteRequest,\n SignedQuoteExpiry,\n UpfrontFeeType,\n} from \"./iris/index.js\";\n\nexport {\n getBlockNumber,\n getGasPrice,\n getStarknetTransactionStatus,\n getTransactionStatus,\n getUsdcBalance,\n isNonceUsed,\n isStarknetNonceUsed,\n isStellarNonceUsed,\n} from \"./rpc/index.js\";\nexport type {\n RpcOptions,\n StarknetTransactionStatus,\n TransactionStatus,\n} from \"./rpc/index.js\";\n\nexport {\n ANY_DESTINATION_CALLER,\n CCTP_FORWARD_HOOK_DATA,\n CCTP_FORWARD_HOOK_DATA_LENGTH,\n buildForwarderHookData,\n isForwarderHookData,\n} from \"./forwarder/index.js\";\n\nexport {\n InvalidAddressError,\n InvalidBytes32Error,\n fromBytes32,\n isAddress,\n toBytes32,\n tryFromBytes32,\n} from \"./encoding/index.js\";\n\nexport {\n computeBurnFee,\n computeMaxFee,\n getStandardMinFee,\n parseFeeBps,\n parseForwarderFee,\n selectForwarderFee,\n} from \"./fees/index.js\";\nexport type {\n ComputeMaxFeeInput,\n ComputeMaxFeeResult,\n GetStandardMinFeeOptions,\n} from \"./fees/index.js\";\n\nexport { decodeBurnMessage } from \"./message/index.js\";\nexport type { DecodedBurnMessage } from \"./message/index.js\";\n\nexport { buildBurnIntent, buildBurnWithFeesIntent } from \"./burn/index.js\";\nexport type {\n BuildBurnIntentInput,\n BuildBurnWithFeesIntentInput,\n BurnIntent,\n BurnWithFeesIntent,\n EvmCall,\n} from \"./burn/index.js\";\n\nexport { buildMintIntent } from \"./mint/index.js\";\nexport type { BuildMintIntentInput, MintIntent } from \"./mint/index.js\";\n\nexport {\n buildStarknetApproveCall,\n buildStarknetBurnIntent,\n buildStarknetReceiveIntent,\n assertStarknetFelt,\n isValidStarknetFelt,\n feltToBytes32Hex,\n bytes32HexToFelt,\n feltToBigInt,\n u256ToFelts,\n feltToString as starknetFeltToString,\n bytesToByteArrayFelts,\n hexToByteArrayFelts,\n} from \"./starknet/index.js\";\nexport type {\n BuildStarknetBurnIntentInput,\n BuildStarknetReceiveIntentInput,\n StarknetBurnIntent,\n StarknetCall,\n StarknetReceiveIntent,\n} from \"./starknet/index.js\";\n\nexport {\n buildStellarApproveInvocation,\n buildStellarBurnIntent,\n buildStellarMintIntent,\n buildStellarForwarderHookData,\n canonicalToStellarSubunits,\n stellarSubunitsToCanonical,\n stellarBurnDust,\n isValidStellarStrkey,\n strkeyType,\n decodeStrkeyToBytes32,\n encodeContractStrkey,\n contractStrkeyToBytes32Hex,\n strkeyTo32Bytes,\n} from \"./stellar/index.js\";\nexport type {\n BuildStellarBurnIntentInput,\n BuildStellarMintIntentInput,\n StellarBurnIntent,\n StellarMintIntent,\n StellarInvocation,\n StellarStrkeyType,\n} from \"./stellar/index.js\";\n\nexport {\n anchorDiscriminator,\n buildSolanaBurnIntent,\n buildSolanaReceiveIntent,\n burnIntentToTransactionInstruction,\n deriveCustodyTokenAccount,\n deriveDenylistAccount,\n deriveEventAuthority,\n deriveLocalToken,\n deriveMessageTransmitter,\n deriveMessageTransmitterAuthority,\n deriveRemoteTokenMessenger,\n deriveSenderAuthority,\n deriveTokenMessenger,\n deriveTokenMinter,\n deriveTokenPair,\n deriveUsedNonce,\n DISCRIMINATOR_DEPOSIT_FOR_BURN,\n DISCRIMINATOR_DEPOSIT_FOR_BURN_WITH_HOOK,\n DISCRIMINATOR_RECEIVE_MESSAGE,\n parseTokenMessengerFeeRecipient,\n receiveIntentToTransactionInstruction,\n SOLANA_ANY_DESTINATION_CALLER,\n SOLANA_CCTP_PDA_SEEDS,\n} from \"./solana/index.js\";\nexport type {\n BuildSolanaBurnIntentInput,\n BuildSolanaReceiveIntentInput,\n SolanaBurnIntent,\n SolanaInstruction,\n SolanaReceiveIntent,\n} from \"./solana/index.js\";\n"]}