@hyperbridge/sdk 2.6.1 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.d.ts +563 -411
- package/dist/browser/index.js +260 -60
- package/dist/browser/index.js.map +1 -1
- package/dist/node/index.cjs +260 -58
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +44 -12
- package/dist/node/index.d.ts +44 -12
- package/dist/node/index.js +260 -60
- package/dist/node/index.js.map +1 -1
- package/dist/node/{IntentGatewayV2-BJUF1dsr.d.cts → intents-helpers-gyGREuyu.d.cts} +1943 -248
- package/dist/node/{IntentGatewayV2-BJUF1dsr.d.ts → intents-helpers-gyGREuyu.d.ts} +1943 -248
- package/dist/node/intents-helpers.cjs +113 -19
- package/dist/node/intents-helpers.cjs.map +1 -1
- package/dist/node/intents-helpers.d.cts +3 -1506
- package/dist/node/intents-helpers.d.ts +3 -1506
- package/dist/node/intents-helpers.js +111 -21
- package/dist/node/intents-helpers.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/abis/erc7281.ts","../../src/protocols/intents/types.ts","../../src/protocols/intents/decode-utils.ts","../../src/abis/IntentGatewayV2.ts","../../src/chains/intentsCoprocessor.ts","../../src/protocols/intents/CryptoUtils.ts","../../src/protocols/intents/phantom-aggregation.ts"],"names":["ABI","encodeAbiParameters","encodeFunctionData","decodeFunctionData","decodeAbiParameters","keccak256"],"mappings":"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","file":"intents-helpers.js","sourcesContent":["const ABI = [\n\t{\n\t\tname: \"execute\",\n\t\ttype: \"function\",\n\t\tinputs: [\n\t\t\t{ name: \"mode\", type: \"bytes32\" },\n\t\t\t{ name: \"executionData\", type: \"bytes\" },\n\t\t],\n\t\toutputs: [],\n\t},\n\t{\n\t\tname: \"Call\",\n\t\ttype: \"tuple\",\n\t\tcomponents: [\n\t\t\t{ name: \"target\", type: \"address\" },\n\t\t\t{ name: \"value\", type: \"uint256\" },\n\t\t\t{ name: \"data\", type: \"bytes\" },\n\t\t],\n\t},\n] as const\n\nexport default { ABI }\n","import type { TransactionReceipt } from \"viem\"\nimport type { HexString } from \"@/types\"\nimport type { IProof } from \"@/chain\"\nimport type { RequestStatusWithMetadata } from \"@/types\"\n\n/**\n * ABI-encoded function selector for the IntentGatewayV2 `placeOrder` function,\n * including the full tuple signature of the OrderV2 struct.\n */\nexport const PLACE_ORDER_SELECTOR =\n\t\"placeOrder((bytes32,bytes,bytes,uint256,uint256,uint256,address,((bytes32,uint256)[],bytes),(bytes32,uint256)[],(bytes32,(bytes32,uint256)[],bytes)),bytes32)\"\n\n/**\n * ABI tuple type string for the OrderV2 struct used when ABI-encoding or\n * decoding order data without a full ABI artifact.\n */\nexport const ORDER_V2_PARAM_TYPE =\n\t\"(bytes32,bytes,bytes,uint256,uint256,uint256,address,((bytes32,uint256)[],bytes),(bytes32,uint256)[],(bytes32,(bytes32,uint256)[],bytes))\"\n\n/**\n * Default graffiti value: a bytes32 zero word.\n *\n * When no graffiti is supplied to `placeOrder`, this value is used,\n * indicating no orderflow attribution or revenue-share tag.\n */\nexport const DEFAULT_GRAFFITI = \"0x0000000000000000000000000000000000000000000000000000000000000000\" as HexString\n\n/**\n * ERC-7821 execution mode selector for single-batch execution.\n *\n * The first byte `0x01` indicates batch mode; all remaining bytes are\n * reserved and set to zero.\n */\nexport const ERC7821_BATCH_MODE = \"0x0100000000000000000000000000000000000000000000000000000000000000\" as HexString\n\n/**\n * Bundler RPC method names for ERC-4337 operations.\n *\n * Values map to JSON-RPC method strings sent to a 4337 bundler endpoint.\n * `PIMLICO_GET_USER_OPERATION_GAS_PRICE` is a Pimlico-specific extension.\n */\nexport const BundlerMethod = {\n\t/** Submits a UserOperation to the bundler mempool. */\n\tETH_SEND_USER_OPERATION: \"eth_sendUserOperation\",\n\t/** Retrieves the receipt for a previously submitted UserOperation by its hash. */\n\tETH_GET_USER_OPERATION_RECEIPT: \"eth_getUserOperationReceipt\",\n\t/** Estimates gas limits for a UserOperation before submission. */\n\tETH_ESTIMATE_USER_OPERATION_GAS: \"eth_estimateUserOperationGas\",\n\t/** Pimlico-specific method to fetch recommended EIP-1559 gas prices for UserOperations. */\n\tPIMLICO_GET_USER_OPERATION_GAS_PRICE: \"pimlico_getUserOperationGasPrice\",\n\t/** Alchemy (Rundler) method to fetch recommended priority fee for UserOperations. */\n\tRUNDLER_MAX_PRIORITY_FEE_PER_GAS: \"rundler_maxPriorityFeePerGas\",\n} as const\n\n/** Union of all valid bundler RPC method name strings. */\nexport type BundlerMethod = (typeof BundlerMethod)[keyof typeof BundlerMethod]\n\n/**\n * Response payload returned by a bundler for\n * `eth_estimateUserOperationGas`.\n *\n * All gas values are returned as hex strings.\n */\nexport interface BundlerGasEstimate {\n\t/** Gas required for pre-verification processing (hex). */\n\tpreVerificationGas: HexString\n\t/** Gas limit for the account verification step (hex). */\n\tverificationGasLimit: HexString\n\t/** Gas limit for the main execution call (hex). */\n\tcallGasLimit: HexString\n\t/** Gas limit for paymaster verification, if a paymaster is used (hex). */\n\tpaymasterVerificationGasLimit?: HexString\n\t/** Gas limit for paymaster post-operation hook, if a paymaster is used (hex). */\n\tpaymasterPostOpGasLimit?: HexString\n}\n\n/**\n * Response payload returned by Pimlico's\n * `pimlico_getUserOperationGasPrice` method.\n *\n * Provides EIP-1559 fee recommendations at three priority tiers.\n * Each field is optional; callers should fall back from `fast` → `standard` → `slow`.\n */\nexport interface PimlicoGasPriceEstimate {\n\t/** Low-priority fee recommendation. */\n\tslow: {\n\t\t/** Maximum total fee per gas (hex). */\n\t\tmaxFeePerGas: HexString\n\t\t/** Maximum miner tip per gas (hex). */\n\t\tmaxPriorityFeePerGas: HexString\n\t}\n\t/** Medium-priority fee recommendation. */\n\tstandard: {\n\t\t/** Maximum total fee per gas (hex). */\n\t\tmaxFeePerGas: HexString\n\t\t/** Maximum miner tip per gas (hex). */\n\t\tmaxPriorityFeePerGas: HexString\n\t}\n\t/** High-priority fee recommendation for fastest inclusion. */\n\tfast: {\n\t\t/** Maximum total fee per gas (hex). */\n\t\tmaxFeePerGas: HexString\n\t\t/** Maximum miner tip per gas (hex). */\n\t\tmaxPriorityFeePerGas: HexString\n\t}\n}\n\n/**\n * Tagged union of all status updates that can be yielded by the cancel-order\n * async generator.\n *\n * The `status` field is the discriminant. Consumers should switch on it to\n * handle each stage of the cancellation lifecycle:\n *\n * - `DESTINATION_FINALIZED` – a state proof from the destination chain is ready.\n * - `AWAITING_CANCEL_TRANSACTION` – the caller must sign and submit the cancel tx.\n * - `CANCEL_STARTED` – the cancel transaction was confirmed on-chain.\n * - `SOURCE_FINALIZED` – the cancel request has been finalised on the source chain.\n\t* - `HYPERBRIDGE_DELIVERED` – the cancel message has been delivered to Hyperbridge.\n\t* - `HYPERBRIDGE_FINALIZED` – the cancel message has been finalised on Hyperbridge.\n\t* - `CANCELLATION_COMPLETE` – the escrow has been refunded; cancellation is done.\n */\nexport type CancelEvent =\n\t| { status: \"DESTINATION_FINALIZED\"; proof: IProof }\n\t| { status: \"AWAITING_CANCEL_TRANSACTION\"; data: HexString; to: HexString; value: bigint }\n\t| { status: \"CANCEL_STARTED\"; receipt: TransactionReceipt }\n\t| {\n\t\t\tstatus: \"SOURCE_FINALIZED\"\n\t\t\tmetadata: Extract<RequestStatusWithMetadata, { status: \"SOURCE_FINALIZED\" }>[\"metadata\"]\n\t }\n\t| {\n\t\t\tstatus: \"HYPERBRIDGE_DELIVERED\"\n\t\t\tmetadata: Extract<RequestStatusWithMetadata, { status: \"HYPERBRIDGE_DELIVERED\" }>[\"metadata\"]\n\t }\n\t| {\n\t\t\tstatus: \"HYPERBRIDGE_FINALIZED\"\n\t\t\tmetadata: Extract<RequestStatusWithMetadata, { status: \"HYPERBRIDGE_FINALIZED\" }>[\"metadata\"]\n\t }\n\t| { status: \"CANCELLATION_COMPLETE\"; blockNumber: number; transactionHash: HexString }\n\nimport type { IEvmChain } from \"@/chain\"\nimport type { IntentsCoprocessor } from \"@/chains/intentsCoprocessor\"\nimport type { Swap } from \"@/utils/swap\"\nimport type { createSessionKeyStorage, createCancellationStorage, createUsedUserOpsStorage } from \"@/storage\"\n\n/**\n * Shared runtime context passed to every IntentsV2 sub-module.\n *\n * All sub-modules (OrderPlacer, OrderExecutor, BidManager, etc.) receive a\n * reference to this object so they can share fee-token caches, storage\n * adapters, and chain clients without duplicating initialisation logic.\n */\nexport interface IntentGatewayContext {\n\t/** EVM chain on which orders are placed and escrowed. */\n\tsource: IEvmChain\n\t/** EVM chain on which solvers fill orders and receive outputs. */\n\tdest: IEvmChain\n\t/** Hyperbridge coprocessor client used to fetch solver bids and submit UserOperations. */\n\tintentsCoprocessor?: IntentsCoprocessor\n\t/** URL of the ERC-4337 bundler endpoint for gas estimation and UserOp submission. */\n\tbundlerUrl?: string\n\t/**\n\t * In-memory TTL cache keyed by state-machine ID.\n\t * Stores fee-token address, decimals, and the timestamp of the last fetch.\n\t */\n\tfeeTokenCache: Map<string, { address: HexString; decimals: number; cachedAt: number }>\n\t/**\n\t * In-memory cache of solver account contract bytecode, keyed by lowercased address.\n\t * Used to inject solver code into state-overrides for gas estimation.\n\t */\n\tsolverCodeCache: Map<string, string>\n\t/** Persistent storage for ephemeral session keys generated per order. */\n\tsessionKeyStorage: ReturnType<typeof createSessionKeyStorage>\n\t/** Persistent storage for intermediate cancellation state (proofs, commitments). */\n\tcancellationStorage: ReturnType<typeof createCancellationStorage>\n\t/** Persistent storage for deduplication of already-submitted UserOperations. */\n\tusedUserOpsStorage: ReturnType<typeof createUsedUserOpsStorage>\n\t/** DEX-quote utility used for token pricing and gas-to-fee-token conversions. */\n\tswap: Swap\n}\n","// Pure ERC-7821 encode/decode utilities — no chain dependency (safe for SubQuery VM2).\nimport { encodeFunctionData, encodeAbiParameters, decodeFunctionData, decodeAbiParameters } from \"viem\"\nimport ERC7821ABI from \"@/abis/erc7281\"\nimport { ERC7821_BATCH_MODE } from \"./types\"\nimport type { HexString, ERC7821Call } from \"@/types\"\n\nexport function encodeERC7821ExecuteBatch(calls: ERC7821Call[]): HexString {\n\tconst executionData = encodeAbiParameters(\n\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t[calls.map((call) => ({ target: call.target, value: call.value, data: call.data }))],\n\t) as HexString\n\n\treturn encodeFunctionData({\n\t\tabi: ERC7821ABI.ABI,\n\t\tfunctionName: \"execute\",\n\t\targs: [ERC7821_BATCH_MODE, executionData],\n\t}) as HexString\n}\n\nexport function decodeERC7821ExecuteBatch(callData: HexString): ERC7821Call[] | null {\n\ttry {\n\t\tconst decoded = decodeFunctionData({ abi: ERC7821ABI.ABI, data: callData })\n\t\tif (decoded.functionName !== \"execute\" || !decoded.args || decoded.args.length < 2) return null\n\t\tconst executionData = decoded.args[1] as HexString\n\t\tconst [calls] = decodeAbiParameters(\n\t\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t\texecutionData,\n\t\t) as [ERC7821Call[]]\n\t\treturn calls.map((call) => ({\n\t\t\ttarget: call.target as HexString,\n\t\t\tvalue: call.value,\n\t\t\tdata: call.data as HexString,\n\t\t}))\n\t} catch {\n\t\treturn null\n\t}\n}\n","export const ABI = [\n\t{\n\t\ttype: \"constructor\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"admin\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"receive\",\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"DOMAIN_SEPARATOR\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"SELECT_SOLVER_TYPEHASH\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_destinationProtocolFees\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_filled\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_instances\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_nonce\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_orders\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_partialFills\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"calculateCommitmentSlotHash\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"cancelOrder\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"session\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"predispatch\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct DispatchInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"output\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct CancelOptions\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayerFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"eip712Domain\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"fields\",\n\t\t\t\ttype: \"bytes1\",\n\t\t\t\tinternalType: \"bytes1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"version\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"chainId\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"verifyingContract\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"salt\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensions\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"fillOrder\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"session\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"predispatch\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct DispatchInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"output\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct FillOptions\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayerFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nativeDispatchFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"outputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"host\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"instance\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"stateMachineId\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onAccept\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IncomingPostRequest\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onGetResponse\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IncomingGetResponse\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct GetResponse\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"values\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct StorageValue[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"key\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onGetTimeout\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct GetRequestTimeout\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onPostRequestTimeout\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct PostRequestTimeout\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"params\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"placeOrder\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"session\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"predispatch\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct DispatchInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"output\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"graffiti\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quote\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct DispatchPost\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quote\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct DispatchGet\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"select\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct SelectOptions\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"commitment\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solver\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"signature\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"init\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"p\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"deployments\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tinternalType: \"struct Deployment[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"chain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"gateway\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DestinationProtocolFeeUpdated\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"chain\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"feeBps\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DustCollected\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DustSwept\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"beneficiary\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"EIP712DomainChanged\",\n\t\tinputs: [],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"EscrowRefunded\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"tokens\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"EscrowReleased\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"tokens\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DeploymentAdded\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"chain\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"gateway\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderFilled\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"filler\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderPlaced\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"user\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"destination\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"nonce\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"fees\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"session\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"beneficiary\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"predispatch\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"ParamsUpdated\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"previous\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"current\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"PartialFill\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"filler\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Cancelled\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnknownInstance\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"ECDSAInvalidSignature\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"ECDSAInvalidSignatureLength\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"length\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"ECDSAInvalidSignatureS\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"s\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Expired\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Filled\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"InsufficientNativeToken\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"InvalidInput\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"InvalidShortString\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"NotExpired\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"SafeERC20FailedOperation\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"StringTooLong\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"str\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Unauthorized\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnauthorizedCall\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnexpectedCall\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnknownOrder\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"WrongChain\",\n\t\tinputs: [],\n\t},\n] as const\n\nexport default { ABI }\n","import { ApiPromise, Keyring, WsProvider } from \"@polkadot/api\"\nimport type { SubmittableExtrinsic } from \"@polkadot/api/types\"\nimport type { KeyringPair } from \"@polkadot/keyring/types\"\nimport { hexToU8a, u8aToHex, u8aConcat } from \"@polkadot/util\"\nimport { decodeAddress, keccakAsU8a } from \"@polkadot/util-crypto\"\nimport { numberToBytes, bytesToBigInt, decodeAbiParameters, hexToBytes } from \"viem\"\nimport { Bytes, Struct, u8, Vector } from \"scale-ts\"\nimport PQueue from \"p-queue\"\nimport type { BidSubmissionResult, HexString, PackedUserOperation, BidStorageEntry, FillerBid, Order } from \"@/types\"\nimport type { SubstrateChain } from \"./substrate\"\nimport IntentGatewayV2 from \"@/abis/IntentGatewayV2\"\n\n/** Offchain storage key prefix for bids */\nconst OFFCHAIN_BID_PREFIX = new TextEncoder().encode(\"intents::bid::\")\n/** Offchain storage key prefix for phantom orders */\nconst OFFCHAIN_PHANTOM_PREFIX = new TextEncoder().encode(\"intents::phantom::order::\")\n\n/** SCALE codec for Bid { filler: AccountId, user_op: Vec<u8> } */\nconst BidCodec = Struct({ filler: Bytes(32), user_op: Vector(u8) })\n\n/**\n * SCALE codec for PackedUserOperation\n * Uses Vec<u8> for all fields to handle hex strings uniformly\n */\nconst PackedUserOperationCodec = Struct({\n\tsender: Bytes(20), // address is 20 bytes\n\tnonce: Bytes(32), // uint256 as 32 bytes\n\tinitCode: Vector(u8), // variable length bytes\n\tcallData: Vector(u8), // variable length bytes\n\taccountGasLimits: Bytes(32), // bytes32\n\tpreVerificationGas: Bytes(32), // uint256 as 32 bytes\n\tgasFees: Bytes(32), // bytes32\n\tpaymasterAndData: Vector(u8), // variable length bytes\n\tsignature: Vector(u8), // variable length bytes\n})\n\n/**\n * Encodes a PackedUserOperation using SCALE codec for submission to Hyperbridge.\n * This is the recommended way to encode UserOps for the intents coprocessor.\n *\n * @param userOp - The PackedUserOperation to encode\n * @returns Hex-encoded SCALE bytes\n */\nexport function encodeUserOpScale(userOp: PackedUserOperation): HexString {\n\tconst encoded = PackedUserOperationCodec.enc({\n\t\tsender: hexToU8a(userOp.sender),\n\t\tnonce: numberToBytes(userOp.nonce, { size: 32 }),\n\t\tinitCode: Array.from(hexToU8a(userOp.initCode)),\n\t\tcallData: Array.from(hexToU8a(userOp.callData)),\n\t\taccountGasLimits: hexToU8a(userOp.accountGasLimits),\n\t\tpreVerificationGas: numberToBytes(userOp.preVerificationGas, { size: 32 }),\n\t\tgasFees: hexToU8a(userOp.gasFees),\n\t\tpaymasterAndData: Array.from(hexToU8a(userOp.paymasterAndData)),\n\t\tsignature: Array.from(hexToU8a(userOp.signature)),\n\t})\n\n\treturn u8aToHex(encoded) as HexString\n}\n\n/**\n * Decodes a SCALE-encoded PackedUserOperation.\n *\n * @param hex - The hex-encoded SCALE bytes\n * @returns The decoded PackedUserOperation\n */\nexport function decodeUserOpScale(hex: HexString): PackedUserOperation {\n\tconst decoded = PackedUserOperationCodec.dec(hexToU8a(hex))\n\n\treturn {\n\t\tsender: u8aToHex(new Uint8Array(decoded.sender)) as HexString,\n\t\tnonce: bytesToBigInt(new Uint8Array(decoded.nonce)),\n\t\tinitCode: u8aToHex(new Uint8Array(decoded.initCode)) as HexString,\n\t\tcallData: u8aToHex(new Uint8Array(decoded.callData)) as HexString,\n\t\taccountGasLimits: u8aToHex(new Uint8Array(decoded.accountGasLimits)) as HexString,\n\t\tpreVerificationGas: bytesToBigInt(new Uint8Array(decoded.preVerificationGas)),\n\t\tgasFees: u8aToHex(new Uint8Array(decoded.gasFees)) as HexString,\n\t\tpaymasterAndData: u8aToHex(new Uint8Array(decoded.paymasterAndData)) as HexString,\n\t\tsignature: u8aToHex(new Uint8Array(decoded.signature)) as HexString,\n\t}\n}\n\n/** RPC response shape from intents_getBidsForOrder */\ninterface RpcBidInfo {\n\tcommitment: HexString\n\tfiller: HexString\n\tuser_op: HexString\n}\n\nexport interface PhantomOrderEvent {\n\tcommitment: HexString\n\tchain: string\n\tcreatedAt: number\n\ttokenA: HexString\n\ttokenB: HexString\n\tstandardAmount: bigint\n}\n\nexport interface PollPhantomOrdersOptions {\n\t/** How often to check for a new head. Defaults to 6s, roughly one block. */\n\tintervalMs?: number\n\t/**\n\t * Most blocks scanned in a single poll, so a long outage catches up over several ticks instead of\n\t * one unbounded scan. Defaults to 500.\n\t */\n\tmaxBlocksPerPoll?: number\n\t/**\n\t * How many blocks before the current head to start from on the first poll. Defaults to 0 (start\n\t * at the head). Set this to the runtime's bid window to have a restarting process pick up orders\n\t * whose window is still open.\n\t */\n\tlookbackBlocks?: number\n\t/** Notified when a poll fails; polling continues regardless. */\n\tonError?: (err: unknown) => void\n}\n\n/**\n * Service for interacting with Hyperbridge's pallet-intents coprocessor.\n * Handles bid submission and retrieval for the IntentGatewayV2 protocol.\n *\n * Can be created from an existing SubstrateChain instance to share the connection.\n */\nexport class IntentsCoprocessor {\n\t/** Cached result of whether the node exposes intents_* RPC methods */\n\tprivate hasIntentsRpc: boolean | null = null\n\n\t// Serialises every extrinsic submission on this instance's substrate account. All submit/retract\n\t// methods funnel through signAndSendExtrinsic, each using the API's auto-nonce; fired in parallel\n\t// (bids for orders on different chains, or several phantom orders in one interval) they would grab\n\t// the same nonce and all but one would fail. Concurrency 1 sequences them.\n\tprivate submissionQueue = new PQueue({ concurrency: 1 })\n\n\t/**\n\t * Creates and connects an IntentsCoprocessor to a Hyperbridge node.\n\t * This creates and manages its own API connection.\n\t *\n\t * @param wsUrl - WebSocket URL of the Hyperbridge node\n\t * @param substratePrivateKey - Private key for signing extrinsics (optional for read-only operations)\n\t * @returns Promise resolving to a connected IntentsCoprocessor\n\t */\n\tstatic async connect(wsUrl: string, substratePrivateKey?: string): Promise<IntentsCoprocessor> {\n\t\tconst api = await ApiPromise.create({\n\t\t\tprovider: new WsProvider(wsUrl),\n\t\t\ttypesBundle: {\n\t\t\t\tspec: {\n\t\t\t\t\tnexus: { hasher: keccakAsU8a },\n\t\t\t\t\tgargantua: { hasher: keccakAsU8a },\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\treturn new IntentsCoprocessor(api, substratePrivateKey, true)\n\t}\n\n\t/**\n\t * Creates an IntentsCoprocessor from an existing SubstrateChain instance.\n\t * This shares the connection - the SubstrateChain must already be connected.\n\t *\n\t * @param chain - Connected SubstrateChain instance (typically Hyperbridge)\n\t * @param substratePrivateKey - Private key for signing extrinsics (optional for read-only operations)\n\t */\n\tstatic fromSubstrateChain(chain: SubstrateChain, substratePrivateKey?: string): IntentsCoprocessor {\n\t\tif (!chain.api) {\n\t\t\tthrow new Error(\"SubstrateChain must be connected before creating IntentsCoprocessor\")\n\t\t}\n\t\treturn new IntentsCoprocessor(chain.api, substratePrivateKey, false)\n\t}\n\n\t/**\n\t * Creates an IntentsCoprocessor from an existing ApiPromise instance.\n\t *\n\t * @param api - Connected ApiPromise instance\n\t * @param substratePrivateKey - Private key for signing extrinsics (optional for read-only operations)\n\t */\n\tstatic fromApi(api: ApiPromise, substratePrivateKey?: string): IntentsCoprocessor {\n\t\treturn new IntentsCoprocessor(api, substratePrivateKey, false)\n\t}\n\n\tprivate constructor(\n\t\tprivate api: ApiPromise,\n\t\tprivate substratePrivateKey?: string,\n\t\tprivate ownsConnection: boolean = false,\n\t) {}\n\n\t/**\n\t * Disconnects the underlying API connection if this instance owns it.\n\t * Only disconnects if created via `connect()`, not when using shared connections.\n\t */\n\tasync disconnect(): Promise<void> {\n\t\tif (this.ownsConnection) {\n\t\t\tawait this.api.disconnect()\n\t\t}\n\t}\n\n\t/**\n\t * Creates a Substrate keypair from the configured private key.\n\t * Supports hex seed (with or without 0x), mnemonic phrases, and URI derivation paths (//Alice).\n\t */\n\tpublic getKeyPair(): KeyringPair {\n\t\tif (!this.substratePrivateKey) {\n\t\t\tthrow new Error(\"Substrate PrivateKey Required\")\n\t\t}\n\n\t\tconst keyring = new Keyring({ type: \"sr25519\" })\n\n\t\tif (this.substratePrivateKey.startsWith(\"//\")) {\n\t\t\treturn keyring.addFromUri(this.substratePrivateKey)\n\t\t}\n\t\tif (this.substratePrivateKey.includes(\" \")) {\n\t\t\treturn keyring.addFromMnemonic(this.substratePrivateKey)\n\t\t}\n\t\tconst hex = this.substratePrivateKey.startsWith(\"0x\")\n\t\t\t? this.substratePrivateKey.slice(2)\n\t\t\t: this.substratePrivateKey\n\t\tconst seedBytes = Buffer.from(hex, \"hex\")\n\t\treturn keyring.addFromSeed(seedBytes)\n\t}\n\n\t/**\n\t * Signs and sends an extrinsic. Submissions are serialised through {@link submissionQueue} so\n\t * concurrent calls never collide on the substrate account nonce — each extrinsic reaches a block\n\t * before the next is signed.\n\t */\n\tprivate async signAndSendExtrinsic(\n\t\textrinsic: SubmittableExtrinsic<\"promise\">,\n\t\tmaxRetries: number = 3,\n\t\ttimeoutMs: number = 30_000,\n\t): Promise<BidSubmissionResult> {\n\t\tconst result = await this.submissionQueue.add(() => this.sendExtrinsicWithRetries(extrinsic, maxRetries, timeoutMs))\n\t\treturn result ?? { success: false, error: \"Submission queue returned no result\" }\n\t}\n\n\t/**\n\t * Signs and sends an extrinsic, handling status updates and errors.\n\t * Implements retry logic with progressive tip increases for stuck transactions.\n\t */\n\tprivate async sendExtrinsicWithRetries(\n\t\textrinsic: SubmittableExtrinsic<\"promise\">,\n\t\tmaxRetries: number,\n\t\ttimeoutMs: number,\n\t): Promise<BidSubmissionResult> {\n\t\tconst keyPair = this.getKeyPair()\n\t\tconst baseTip = 1_000_000_000n // 0.001 BRIDGE tip to increase priority\n\t\tlet attempt = 0\n\n\t\twhile (attempt < maxRetries) {\n\t\t\tconst currentTip = baseTip * BigInt(2 ** attempt) // Double tip on each retry\n\t\t\tattempt++\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.sendWithTimeout(extrinsic, keyPair, currentTip, timeoutMs)\n\t\t\t\tif (result.success || result.error?.includes(\"Dispatch error\")) {\n\t\t\t\t\t// Return immediately on success or dispatch errors (non-recoverable)\n\t\t\t\t\treturn result\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Unexpected error, return immediately\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: err instanceof Error ? err.message : \"Unknown error\",\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: `Transaction failed after ${maxRetries} attempts`,\n\t\t}\n\t}\n\n\t/**\n\t * Sends an extrinsic with a timeout\n\t */\n\tprivate async sendWithTimeout(\n\t\textrinsic: SubmittableExtrinsic<\"promise\">,\n\t\tkeyPair: KeyringPair,\n\t\ttip: bigint,\n\t\ttimeoutMs: number,\n\t): Promise<BidSubmissionResult> {\n\t\treturn new Promise<BidSubmissionResult>((resolve) => {\n\t\t\tlet resolved = false\n\t\t\tlet unsubscribe: (() => void) | null = null\n\n\t\t\t// Set timeout to detect stuck transactions\n\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true\n\t\t\t\t\tif (unsubscribe) {\n\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t}\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: `Transaction timed out after ${timeoutMs}ms`,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}, timeoutMs)\n\n\t\t\textrinsic\n\t\t\t\t.signAndSend(keyPair, { tip }, (result) => {\n\t\t\t\t\tif (resolved) return\n\n\t\t\t\t\tif (result.dispatchError && (result.status.isInBlock || result.status.isFinalized)) {\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\t\t\t\t\t\tlet errorMsg: string\n\t\t\t\t\t\tif (result.dispatchError.isModule) {\n\t\t\t\t\t\t\tconst decoded = this.api.registry.findMetaError(result.dispatchError.asModule)\n\t\t\t\t\t\t\terrorMsg = `Dispatch error: ${decoded.section}::${decoded.name}`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\terrorMsg = `Dispatch error: ${result.dispatchError.toString()}`\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: errorMsg,\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tresult.status.isDropped ||\n\t\t\t\t\t\tresult.status.isInvalid ||\n\t\t\t\t\t\tresult.status.isUsurped ||\n\t\t\t\t\t\tresult.status.isFinalityTimeout\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Pool-level terminal statuses — don't retry, let caller decide\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: `Transaction ${result.status.type.toLowerCase()}`,\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if (result.status.isInBlock || result.status.isFinalized) {\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\n\t\t\t\t\t\t// A utility.batch extrinsic is itself `Ok` even when one of its calls fails: the\n\t\t\t\t\t\t// failure surfaces as a BatchInterrupted event, NOT a top-level dispatchError.\n\t\t\t\t\t\t// BatchInterrupted { index, error } means calls [0, index) succeeded and the call\n\t\t\t\t\t\t// at `index` failed (the rest are skipped). We order batches so the primary call\n\t\t\t\t\t\t// is first, so an interruption at index 0 means nothing meaningful landed -> report\n\t\t\t\t\t\t// failure. A later index means the primary call succeeded and only a trailing\n\t\t\t\t\t\t// best-effort call (e.g. a deposit retraction) was skipped, which is still success.\n\t\t\t\t\t\tconst interrupted = result.events.find(\n\t\t\t\t\t\t\t({ event }) => event.section === \"utility\" && event.method === \"BatchInterrupted\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif (interrupted) {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\t\tconst [indexCodec, dispatchError] = interrupted.event.data as any\n\t\t\t\t\t\t\tif (Number(indexCodec.toString()) === 0) {\n\t\t\t\t\t\t\t\tlet errorMsg: string\n\t\t\t\t\t\t\t\tif (dispatchError?.isModule) {\n\t\t\t\t\t\t\t\t\tconst decoded = this.api.registry.findMetaError(dispatchError.asModule)\n\t\t\t\t\t\t\t\t\terrorMsg = `Dispatch error: ${decoded.section}::${decoded.name}`\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\terrorMsg = `Dispatch error: batch interrupted (${dispatchError?.toString()})`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresolve({ success: false, error: errorMsg })\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\tblockHash: (result.status.isInBlock\n\t\t\t\t\t\t\t\t? result.status.asInBlock\n\t\t\t\t\t\t\t\t: result.status.asFinalized\n\t\t\t\t\t\t\t).toHex() as HexString,\n\t\t\t\t\t\t\textrinsicHash: extrinsic.hash.toHex() as HexString,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then((unsub) => {\n\t\t\t\t\tif (resolved) {\n\t\t\t\t\t\tunsub()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunsubscribe = unsub\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((err: Error) => {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\t\t\t\t\t\tresolve({ success: false, error: err.message })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Submits a bid to Hyperbridge's pallet-intents\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @param userOp - The encoded PackedUserOperation as hex string\n\t * @returns BidSubmissionResult with success status and block/extrinsic hash\n\t */\n\tasync submitBid(commitment: HexString, userOp: HexString): Promise<BidSubmissionResult> {\n\t\ttry {\n\t\t\tconst extrinsic = this.api.tx.intentsCoprocessor.placeBid(commitment, userOp)\n\t\t\treturn await this.signAndSendExtrinsic(extrinsic)\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Retracts a bid from Hyperbridge and reclaims the deposit\n\t *\n\t * Use this to remove unused quotes and claim back deposited BRIDGE tokens.\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @returns BidSubmissionResult with success status and block/extrinsic hash\n\t */\n\tasync retractBid(commitment: HexString): Promise<BidSubmissionResult> {\n\t\ttry {\n\t\t\tconst extrinsic = this.api.tx.intentsCoprocessor.retractBid(commitment)\n\t\t\treturn await this.signAndSendExtrinsic(extrinsic)\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Places a new bid and retracts a previous one in a single transaction via utility.batch.\n\t *\n\t * The new bid is the primary operation, so `placeBid` MUST run first. `utility.batch` is\n\t * non-atomic: a failing call interrupts the batch (via a BatchInterrupted event) without\n\t * reverting the calls that already succeeded. Placing first guarantees the new bid lands even\n\t * when the retraction then fails — which it routinely does, because a previous commitment's bid\n\t * may already be gone (or was itself never placed), making `retractBid` return `BidNotFound`.\n\t *\n\t * Ordering retraction first (the previous behaviour) caused a self-sustaining cascade: a\n\t * `BidNotFound` on the leading retract skipped the trailing `placeBid`, so the current bid never\n\t * landed, so the *next* interval's retract of that never-placed commitment also failed, and so\n\t * on — silently, because the batch extrinsic itself reports success. The deposit reclaim is\n\t * best-effort; landing the bid is not.\n\t *\n\t * @param retractCommitment - The order commitment of the bid to retract (bytes32)\n\t * @param bidCommitment - The order commitment of the new bid (bytes32)\n\t * @param userOp - The encoded PackedUserOperation as hex string\n\t * @returns BidSubmissionResult with success status and block/extrinsic hash\n\t */\n\tasync submitBidWithRetraction(\n\t\tretractCommitment: HexString,\n\t\tbidCommitment: HexString,\n\t\tuserOp: HexString,\n\t): Promise<BidSubmissionResult> {\n\t\ttry {\n\t\t\tconst batch = this.api.tx.utility.batch([\n\t\t\t\tthis.api.tx.intentsCoprocessor.placeBid(bidCommitment, userOp),\n\t\t\t\tthis.api.tx.intentsCoprocessor.retractBid(retractCommitment),\n\t\t\t])\n\t\t\treturn await this.signAndSendExtrinsic(batch)\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetches all bid storage entries for a given order commitment.\n\t * Returns the on-chain data only (filler addresses and deposits).\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @returns Array of BidStorageEntry objects\n\t */\n\tasync getBidStorageEntries(commitment: HexString): Promise<BidStorageEntry[]> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst entries = await (this.api.query.intentsCoprocessor.bids as any).entries(commitment)\n\n\t\treturn entries.map(([storageKey, depositValue]: [any, any]) => ({\n\t\t\tcommitment,\n\t\t\tfiller: storageKey.args[1].toString() as string,\n\t\t\tdeposit: BigInt(depositValue.toString()),\n\t\t}))\n\t}\n\n\t/**\n\t * Fetches all bids for a given order commitment from Hyperbridge.\n\t *\n\t * Uses the custom intents_getBidsForOrder RPC if available on the node\n\t * for a single round-trip. Falls back to parallel storage + offchain\n\t * lookups otherwise.\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @returns Array of FillerBid objects containing filler address, userOp, and deposit\n\t */\n\tasync getBidsForOrder(commitment: HexString): Promise<FillerBid[]> {\n\t\ttry {\n\t\t\treturn await this.getBidsViaRpc(commitment)\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"intents RPC failed, falling back to storage queries:\", err)\n\t\t}\n\n\t\treturn await this.getBidsViaStorage(commitment)\n\t}\n\n\t/**\n\t * Fetches bids using the custom intents_getBidsForOrder RPC.\n\t * Single round-trip but does not include deposit amounts.\n\t */\n\tprivate async getBidsViaRpc(commitment: HexString): Promise<FillerBid[]> {\n\t\tconst result: RpcBidInfo[] = await (this.api as any)._rpcCore.provider.send(\"intents_getBidsForOrder\", [\n\t\t\tcommitment,\n\t\t])\n\n\t\treturn result.map((entry) => {\n\t\t\tconst userOp = decodeUserOpScale(entry.user_op as HexString)\n\t\t\tconst filler = new Keyring({ type: \"sr25519\" }).encodeAddress(hexToU8a(entry.filler))\n\t\t\treturn { filler, userOp, deposit: 0n }\n\t\t})\n\t}\n\n\t/**\n\t * Fetches bids using on-chain storage entries + parallel offchain lookups.\n\t * Slower but works on all nodes and includes deposit amounts.\n\t */\n\tprivate async getBidsViaStorage(commitment: HexString): Promise<FillerBid[]> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst entries = await (this.api.query.intentsCoprocessor.bids as any).entries(commitment)\n\n\t\tif (entries.length === 0) return []\n\n\t\tconst bidPromises = entries.map(async ([storageKey, depositValue]: [any, any]) => {\n\t\t\ttry {\n\t\t\t\tconst filler = storageKey.args[1].toString()\n\t\t\t\tconst deposit = BigInt(depositValue.toString())\n\n\t\t\t\tconst offchainKey = this.buildOffchainBidKey(commitment, filler)\n\t\t\t\tconst offchainKeyHex = u8aToHex(offchainKey)\n\n\t\t\t\tconst offchainResult = await this.api.rpc.offchain.localStorageGet(\"PERSISTENT\", offchainKeyHex)\n\n\t\t\t\tif (!offchainResult || offchainResult.isNone) return null\n\n\t\t\t\tconst bidData = offchainResult.unwrap().toHex() as HexString\n\t\t\t\tconst decoded = this.decodeBid(bidData)\n\n\t\t\t\treturn { filler: decoded.filler, userOp: decoded.userOp, deposit }\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\n\t\tconst results = await Promise.all(bidPromises)\n\t\treturn results.filter((b): b is FillerBid => b !== null)\n\t}\n\n\t/** Decodes SCALE-encoded Bid struct and SCALE-encoded PackedUserOperation */\n\tprivate decodeBid(hex: HexString): { filler: string; userOp: PackedUserOperation } {\n\t\tconst decoded = BidCodec.dec(hexToU8a(hex))\n\t\tconst filler = new Keyring({ type: \"sr25519\" }).encodeAddress(new Uint8Array(decoded.filler))\n\t\tconst userOpHex = u8aToHex(new Uint8Array(decoded.user_op)) as HexString\n\n\t\t// Decode UserOp using SCALE codec\n\t\tconst userOp = decodeUserOpScale(userOpHex)\n\n\t\treturn { filler, userOp }\n\t}\n\n\t/** Builds offchain storage key: \"intents::bid::\" + commitment + filler */\n\tprivate buildOffchainBidKey(commitment: HexString, filler: string): Uint8Array {\n\t\treturn u8aConcat(OFFCHAIN_BID_PREFIX, hexToU8a(commitment), decodeAddress(filler))\n\t}\n\n\t/**\n\t * Fetches the ABI-encoded phantom order from offchain storage and decodes it\n\t * into an `Order` object. The pallet writes the order bytes under the key\n\t * `intents::phantom::order::<commitment>` when it calls `on_initialize`.\n\t *\n\t * Returns `null` if the key is absent (e.g. the node is not an offchain worker\n\t * or the commitment has expired and been cleared).\n\t */\n\tasync fetchPhantomOrder(commitment: HexString): Promise<Order | null> {\n\t\tconst key = u8aConcat(OFFCHAIN_PHANTOM_PREFIX, hexToU8a(commitment))\n\t\tconst result = await this.api.rpc.offchain.localStorageGet(\"PERSISTENT\", u8aToHex(key))\n\t\tif (!result || result.isNone) return null\n\n\t\tconst rawHex = result.unwrap().toHex() as HexString\n\t\tif (rawHex === \"0x\" || rawHex === \"0x00\") return null\n\n\t\tconst placeOrderAbi = (IntentGatewayV2.ABI as readonly { type: string; name?: string; inputs?: unknown[] }[]).find(\n\t\t\t(item) => item.type === \"function\" && item.name === \"placeOrder\",\n\t\t)\n\t\tconst orderType = placeOrderAbi?.inputs?.[0]\n\t\tif (!orderType) return null\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst [decoded] = decodeAbiParameters([orderType as any], rawHex)\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst d = decoded as any\n\t\tconst textDecoder = new TextDecoder()\n\n\t\treturn {\n\t\t\tid: commitment,\n\t\t\tuser: d.user as HexString,\n\t\t\tsource: textDecoder.decode(hexToBytes(d.source as HexString)),\n\t\t\tdestination: textDecoder.decode(hexToBytes(d.destination as HexString)),\n\t\t\tdeadline: d.deadline as bigint,\n\t\t\tnonce: d.nonce as bigint,\n\t\t\tfees: d.fees as bigint,\n\t\t\tsession: d.session as HexString,\n\t\t\tpredispatch: {\n\t\t\t\tassets: (d.predispatch.assets as { token: HexString; amount: bigint }[]).map((a) => ({\n\t\t\t\t\ttoken: a.token,\n\t\t\t\t\tamount: a.amount,\n\t\t\t\t})),\n\t\t\t\tcall: d.predispatch.call as HexString,\n\t\t\t},\n\t\t\tinputs: (d.inputs as { token: HexString; amount: bigint }[]).map((i) => ({\n\t\t\t\ttoken: i.token,\n\t\t\t\tamount: i.amount,\n\t\t\t})),\n\t\t\toutput: {\n\t\t\t\tbeneficiary: d.output.beneficiary as HexString,\n\t\t\t\tassets: (d.output.assets as { token: HexString; amount: bigint }[]).map((a) => ({\n\t\t\t\t\ttoken: a.token,\n\t\t\t\t\tamount: a.amount,\n\t\t\t\t})),\n\t\t\t\tcall: d.output.call as HexString,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Reads the PhantomOrderRegistered events emitted in a single block.\n\t */\n\tasync getPhantomOrdersInBlock(blockNumber: number): Promise<PhantomOrderEvent[]> {\n\t\tconst blockHash = await this.api.rpc.chain.getBlockHash(blockNumber)\n\t\tconst apiAt = await this.api.at(blockHash)\n\t\tconst records = await apiAt.query.system.events()\n\n\t\tconst orders: PhantomOrderEvent[] = []\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tfor (const { event } of records as unknown as Array<{ event: any }>) {\n\t\t\tif (event.section !== \"intentsCoprocessor\" || event.method !== \"PhantomOrderRegistered\") continue\n\t\t\tconst [commitment, chain, createdAt, tokenA, tokenB, standardAmount] = event.data\n\t\t\torders.push({\n\t\t\t\tcommitment: commitment.toHex() as HexString,\n\t\t\t\tchain: new TextDecoder().decode(hexToU8a(chain.toHex())),\n\t\t\t\tcreatedAt: createdAt.toNumber(),\n\t\t\t\ttokenA: tokenA.toHex() as HexString,\n\t\t\t\ttokenB: tokenB.toHex() as HexString,\n\t\t\t\tstandardAmount: BigInt(standardAmount.toString()),\n\t\t\t})\n\t\t}\n\t\treturn orders\n\t}\n\n\t/**\n\t * Polls for newly registered phantom orders, invoking the callback once per order.\n\t *\n\t * Each tick reads the current head and scans every block between the last one processed and that\n\t * head, so the block cursor — not the connection — determines what has been seen. This replaced a\n\t * system.events subscription, which was only as reliable as its socket: polkadot-js reconnects\n\t * the transport but does not reliably re-establish storage subscriptions, and anything emitted\n\t * while disconnected was lost silently. With a bid window measured in a handful of blocks, that\n\t * meant silently missed bids.\n\t *\n\t * Scanning a block range is gap-free rather than merely self-healing: an outage delays orders but\n\t * cannot drop them, because the cursor only advances past a block whose events were actually\n\t * read. Recovery replays the backlog.\n\t *\n\t * Returns a function that stops polling.\n\t */\n\tpollPhantomOrders(callback: (event: PhantomOrderEvent) => void, options: PollPhantomOrdersOptions = {}): () => void {\n\t\tconst { intervalMs = 6_000, maxBlocksPerPoll = 500, lookbackBlocks = 0, onError } = options\n\n\t\t// Last block whose events have been delivered. Null until the first successful head read.\n\t\tlet cursor: number | null = null\n\t\tlet inFlight = false\n\t\tlet stopped = false\n\n\t\tconst tick = async (): Promise<void> => {\n\t\t\t// A scan slower than the interval must not stack up behind itself.\n\t\t\tif (inFlight || stopped) return\n\t\t\tinFlight = true\n\t\t\ttry {\n\t\t\t\tconst head = (await this.api.rpc.chain.getHeader()).number.toNumber()\n\n\t\t\t\tif (cursor === null) {\n\t\t\t\t\t// Start just below the head so the head itself is scanned, less any lookback.\n\t\t\t\t\tcursor = Math.max(head - 1 - lookbackBlocks, -1)\n\t\t\t\t}\n\t\t\t\tif (head <= cursor) return\n\n\t\t\t\tconst to = Math.min(head, cursor + maxBlocksPerPoll)\n\t\t\t\tfor (let blockNumber = cursor + 1; blockNumber <= to; blockNumber++) {\n\t\t\t\t\tif (stopped) return\n\t\t\t\t\tconst orders = await this.getPhantomOrdersInBlock(blockNumber)\n\t\t\t\t\tfor (const order of orders) callback(order)\n\t\t\t\t\t// Advance per block, not per range: a failure partway through re-scans only the\n\t\t\t\t\t// blocks that were never read, and never re-delivers ones that were.\n\t\t\t\t\tcursor = blockNumber\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tonError?.(err)\n\t\t\t} finally {\n\t\t\t\tinFlight = false\n\t\t\t}\n\t\t}\n\n\t\tvoid tick()\n\t\tconst timer = setInterval(() => void tick(), intervalMs)\n\n\t\treturn () => {\n\t\t\tstopped = true\n\t\t\tclearInterval(timer)\n\t\t}\n\t}\n}\n","import {\n\tkeccak256,\n\ttoHex,\n\tencodeAbiParameters,\n\tdecodeAbiParameters,\n\tdecodeFunctionData,\n\tencodeFunctionData,\n\tconcat,\n\tpad,\n\tencodePacked,\n\tparseAbiParameters,\n\ttype Hex,\n} from \"viem\"\nimport { privateKeyToAccount } from \"viem/accounts\"\nimport type { HexString, PackedUserOperation } from \"@/types\"\nimport type { ERC7821Call } from \"@/types\"\nimport ERC7821ABI from \"@/abis/erc7281\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { ERC7821_BATCH_MODE } from \"./types\"\nimport type { BundlerMethod } from \"./types\"\n\n/**\n * EIP-712 type hash for the `SelectSolver` struct.\n *\n * Computed as `keccak256(\"SelectSolver(bytes32 commitment,address solver)\")`.\n * Used when the session key signs a solver-selection message so that the\n * IntentGatewayV2 contract can verify the choice on-chain.\n */\nexport const SELECT_SOLVER_TYPEHASH = keccak256(toHex(\"SelectSolver(bytes32 commitment,address solver)\"))\n\n/**\n * EIP-712 type hash for the `PackedUserOperation` struct.\n *\n * Matches the ERC-4337 v0.8 `PackedUserOperation` type definition used by\n * EntryPoint v0.8. Used when computing the UserOperation hash that solvers\n * must sign before submitting bids.\n */\nexport const PACKED_USEROP_TYPEHASH = keccak256(\n\ttoHex(\n\t\t\"PackedUserOperation(address sender,uint256 nonce,bytes initCode,bytes callData,bytes32 accountGasLimits,uint256 preVerificationGas,bytes32 gasFees,bytes paymasterAndData)\",\n\t),\n)\n\n/**\n * EIP-712 type hash for the `EIP712Domain` struct.\n *\n * Computed as `keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\")`.\n * Used to construct domain separators for all EIP-712 messages in the\n * IntentGatewayV2 protocol.\n */\nexport const DOMAIN_TYPEHASH = keccak256(\n\ttoHex(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n)\n\n/**\n * Crypto and encoding utilities for IntentGatewayV2.\n *\n * Provides helpers for EIP-712 domain separation, UserOperation hashing,\n * gas-limit packing/unpacking, bundler JSON-RPC calls, and ERC-7821\n * batch-execute encoding and decoding. All methods are stateless with respect\n * to the protocol but require the shared {@link IntentGatewayContext} for the\n * bundler URL.\n */\nexport class CryptoUtils {\n\t/**\n\t * @param ctx - Shared IntentsV2 context; used to access the bundler URL for\n\t * JSON-RPC calls.\n\t */\n\tconstructor(private readonly ctx: IntentGatewayContext) {}\n\n\t/**\n\t * Computes an EIP-712 domain separator for a given contract.\n\t *\n\t * @param contractName - Human-readable name of the contract (e.g. `\"IntentGateway\"`).\n\t * @param version - Version string (e.g. `\"2\"`).\n\t * @param chainId - Chain ID of the network the contract is deployed on.\n\t * @param contractAddress - Address of the verifying contract.\n\t * @returns The 32-byte domain separator as a hex string.\n\t */\n\tstatic getDomainSeparator(contractName: string, version: string, chainId: bigint, contractAddress: HexString): HexString {\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters(parseAbiParameters(\"bytes32, bytes32, bytes32, uint256, address\"), [\n\t\t\t\tDOMAIN_TYPEHASH,\n\t\t\t\tkeccak256(toHex(contractName)),\n\t\t\t\tkeccak256(toHex(version)),\n\t\t\t\tchainId,\n\t\t\t\tcontractAddress,\n\t\t\t]),\n\t\t)\n\t}\n\n\t/**\n\t * Signs a `SelectSolver` EIP-712 message with a session key.\n\t *\n\t * The session key authorises the selection of a specific solver for the\n\t * given order commitment. The resulting signature is appended to the\n\t * solver's UserOperation signature before bundle submission.\n\t *\n\t * @param commitment - The order commitment (bytes32) being fulfilled.\n\t * @param solverAddress - Address of the solver account selected to fill the order.\n\t * @param domainSeparator - EIP-712 domain separator for the IntentGatewayV2 contract.\n\t * @param privateKey - Hex-encoded private key of the session key that signs the message.\n\t * @returns The ECDSA signature as a hex string, or `null` if signing fails.\n\t */\n\tstatic async signSolverSelection(\n\t\tcommitment: HexString,\n\t\tsolverAddress: HexString,\n\t\tdomainSeparator: HexString,\n\t\tprivateKey: HexString,\n\t): Promise<HexString | null> {\n\t\tconst account = privateKeyToAccount(privateKey as Hex)\n\n\t\tconst structHash = keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[{ type: \"bytes32\" }, { type: \"bytes32\" }, { type: \"address\" }],\n\t\t\t\t[SELECT_SOLVER_TYPEHASH, commitment, solverAddress],\n\t\t\t),\n\t\t)\n\n\t\tconst digest = keccak256(concat([\"0x1901\" as Hex, domainSeparator as Hex, structHash]))\n\t\tconst signature = await account.sign({ hash: digest })\n\n\t\treturn signature as HexString\n\t}\n\n\t/**\n\t * Computes the EIP-712 hash of a `PackedUserOperation` as defined by\n\t * ERC-4337 EntryPoint v0.8.\n\t *\n\t * @param userOp - The packed UserOperation to hash.\n\t * @param entryPoint - Address of the EntryPoint v0.8 contract.\n\t * @param chainId - Chain ID of the network on which the operation will execute.\n\t * @returns The UserOperation hash as a hex string.\n\t */\n\tstatic computeUserOpHash(userOp: PackedUserOperation, entryPoint: Hex, chainId: bigint): Hex {\n\t\tconst structHash = CryptoUtils.getPackedUserStructHash(userOp)\n\t\tconst domainSeparator = CryptoUtils.getDomainSeparator(\"ERC4337\", \"1\", chainId, entryPoint as HexString)\n\n\t\treturn keccak256(\n\t\t\tencodePacked([\"bytes1\", \"bytes1\", \"bytes32\", \"bytes32\"], [\"0x19\", \"0x01\", domainSeparator, structHash]),\n\t\t)\n\t}\n\n\t/**\n\t * Derives the ERC-4337 nonce key that binds a bid UserOperation to its\n\t * order and session key: the lower 192 bits of\n\t * `keccak256(commitment ‖ sessionKey)`. `SolverAccount` rejects bid\n\t * operations whose nonce key differs — this is what lets the solver sign\n\t * the plain userOpHash while staying committed to the order and to the\n\t * session key it bid against.\n\t *\n\t * @param commitment - The order commitment (`order.id`).\n\t * @param sessionKey - The order's session key address (`order.session`).\n\t * @returns The 192-bit nonce key as a bigint (pass to `EntryPoint.getNonce`).\n\t */\n\tstatic bidNonceKey(commitment: HexString, sessionKey: HexString): bigint {\n\t\treturn BigInt(keccak256(encodePacked([\"bytes32\", \"address\"], [commitment, sessionKey]))) & ((1n << 192n) - 1n)\n\t}\n\n\t/**\n\t * Builds the EIP-712 typed-data payload whose digest is the EntryPoint v0.8\n\t * `userOpHash` (i.e. `hashTypedData(packedUserOpTypedData(...)) ===\n\t * computeUserOpHash(...)`). Signing this typed data is bit-identical to\n\t * signing the raw userOpHash, but keeps the full operation visible to\n\t * signing infrastructure (hardware wallets, MPC/TEE policy engines) instead\n\t * of an opaque 32-byte digest.\n\t *\n\t * @param userOp - The packed UserOperation to sign (signature field ignored).\n\t * @param entryPoint - Address of the EntryPoint v0.8 contract.\n\t * @param chainId - Chain ID of the network on which the operation will execute.\n\t * @returns A viem `TypedDataDefinition` for the operation.\n\t */\n\tstatic packedUserOpTypedData(userOp: PackedUserOperation, entryPoint: Hex, chainId: bigint) {\n\t\treturn {\n\t\t\tdomain: {\n\t\t\t\tname: \"ERC4337\",\n\t\t\t\tversion: \"1\",\n\t\t\t\tchainId,\n\t\t\t\tverifyingContract: entryPoint,\n\t\t\t},\n\t\t\ttypes: {\n\t\t\t\tPackedUserOperation: [\n\t\t\t\t\t{ name: \"sender\", type: \"address\" },\n\t\t\t\t\t{ name: \"nonce\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"initCode\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"callData\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"accountGasLimits\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preVerificationGas\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"gasFees\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"paymasterAndData\", type: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t\tprimaryType: \"PackedUserOperation\" as const,\n\t\t\tmessage: {\n\t\t\t\tsender: userOp.sender,\n\t\t\t\tnonce: userOp.nonce,\n\t\t\t\tinitCode: userOp.initCode,\n\t\t\t\tcallData: userOp.callData,\n\t\t\t\taccountGasLimits: userOp.accountGasLimits,\n\t\t\t\tpreVerificationGas: userOp.preVerificationGas,\n\t\t\t\tgasFees: userOp.gasFees,\n\t\t\t\tpaymasterAndData: userOp.paymasterAndData,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Computes the EIP-712 struct hash of a `PackedUserOperation`.\n\t *\n\t * Hashes dynamic fields (`initCode`, `callData`, `paymasterAndData`) before\n\t * ABI-encoding so the final hash is a fixed-length 32-byte value.\n\t *\n\t * @param userOp - The packed UserOperation to hash.\n\t * @returns The struct hash as a 32-byte hex string.\n\t */\n\tstatic getPackedUserStructHash(userOp: PackedUserOperation): HexString {\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\tparseAbiParameters(\"bytes32, address, uint256, bytes32, bytes32, bytes32, uint256, bytes32, bytes32\"),\n\t\t\t\t[\n\t\t\t\t\tPACKED_USEROP_TYPEHASH,\n\t\t\t\t\tuserOp.sender,\n\t\t\t\t\tuserOp.nonce,\n\t\t\t\t\tkeccak256(userOp.initCode),\n\t\t\t\t\tkeccak256(userOp.callData),\n\t\t\t\t\tuserOp.accountGasLimits as Hex,\n\t\t\t\t\tuserOp.preVerificationGas,\n\t\t\t\t\tuserOp.gasFees as Hex,\n\t\t\t\t\tkeccak256(userOp.paymasterAndData),\n\t\t\t\t],\n\t\t\t),\n\t\t) as HexString\n\t}\n\n\t/**\n\t * Packs `verificationGasLimit` and `callGasLimit` into the ERC-4337\n\t * `accountGasLimits` bytes32 field.\n\t *\n\t * The high 16 bytes hold `verificationGasLimit` and the low 16 bytes hold\n\t * `callGasLimit`, matching the EntryPoint v0.8 packed representation.\n\t *\n\t * @param verificationGasLimit - Gas limit for the account verification step.\n\t * @param callGasLimit - Gas limit for the main execution call.\n\t * @returns A 32-byte hex string with both limits packed.\n\t */\n\tstatic packGasLimits(verificationGasLimit: bigint, callGasLimit: bigint): HexString {\n\t\tconst verificationGasHex = pad(toHex(verificationGasLimit), { size: 16 })\n\t\tconst callGasHex = pad(toHex(callGasLimit), { size: 16 })\n\t\treturn concat([verificationGasHex, callGasHex]) as HexString\n\t}\n\n\t/**\n\t * Packs `maxPriorityFeePerGas` and `maxFeePerGas` into the ERC-4337\n\t * `gasFees` bytes32 field.\n\t *\n\t * The high 16 bytes hold `maxPriorityFeePerGas` and the low 16 bytes hold\n\t * `maxFeePerGas`, matching the EntryPoint v0.8 packed representation.\n\t *\n\t * @param maxPriorityFeePerGas - Maximum tip per gas (EIP-1559).\n\t * @param maxFeePerGas - Maximum total fee per gas (EIP-1559).\n\t * @returns A 32-byte hex string with both fee values packed.\n\t */\n\tstatic packGasFees(maxPriorityFeePerGas: bigint, maxFeePerGas: bigint): HexString {\n\t\tconst priorityFeeHex = pad(toHex(maxPriorityFeePerGas), { size: 16 })\n\t\tconst maxFeeHex = pad(toHex(maxFeePerGas), { size: 16 })\n\t\treturn concat([priorityFeeHex, maxFeeHex]) as HexString\n\t}\n\n\t/**\n\t * Unpacks the `accountGasLimits` bytes32 field back into its constituent\n\t * gas limits.\n\t *\n\t * @param accountGasLimits - The packed 32-byte gas limits field from a `PackedUserOperation`.\n\t * @returns Object with `verificationGasLimit` and `callGasLimit` as bigints.\n\t */\n\tstatic unpackGasLimits(accountGasLimits: HexString): { verificationGasLimit: bigint; callGasLimit: bigint } {\n\t\tconst hex = accountGasLimits.slice(2)\n\t\tconst verificationGasLimit = BigInt(`0x${hex.slice(0, 32)}`)\n\t\tconst callGasLimit = BigInt(`0x${hex.slice(32, 64)}`)\n\t\treturn { verificationGasLimit, callGasLimit }\n\t}\n\n\t/**\n\t * Unpacks the `gasFees` bytes32 field back into its constituent fee values.\n\t *\n\t * @param gasFees - The packed 32-byte gas fees field from a `PackedUserOperation`.\n\t * @returns Object with `maxPriorityFeePerGas` and `maxFeePerGas` as bigints.\n\t */\n\tstatic unpackGasFees(gasFees: HexString): { maxPriorityFeePerGas: bigint; maxFeePerGas: bigint } {\n\t\tconst hex = gasFees.slice(2)\n\t\tconst maxPriorityFeePerGas = BigInt(`0x${hex.slice(0, 32)}`)\n\t\tconst maxFeePerGas = BigInt(`0x${hex.slice(32, 64)}`)\n\t\treturn { maxPriorityFeePerGas, maxFeePerGas }\n\t}\n\n\t/**\n\t * Converts a packed `PackedUserOperation` into the JSON object format\n\t * expected by ERC-4337 bundler JSON-RPC endpoints.\n\t *\n\t * Unpacks `accountGasLimits` and `gasFees`, separates optional factory and\n\t * paymaster fields, and converts all numeric fields to hex strings.\n\t *\n\t * @param userOp - The packed UserOperation to convert.\n\t * @returns A plain object safe to pass as the first element of bundler RPC params.\n\t */\n\tstatic prepareBundlerCall(userOp: PackedUserOperation): Record<string, unknown> {\n\t\tconst { verificationGasLimit, callGasLimit } = CryptoUtils.unpackGasLimits(userOp.accountGasLimits)\n\t\tconst { maxPriorityFeePerGas, maxFeePerGas } = CryptoUtils.unpackGasFees(userOp.gasFees)\n\n\t\tconst hasFactory = userOp.initCode && userOp.initCode !== \"0x\" && userOp.initCode.length > 2\n\t\tconst factory = hasFactory ? (`0x${userOp.initCode.slice(2, 42)}` as HexString) : undefined\n\t\tconst factoryData = hasFactory ? (`0x${userOp.initCode.slice(42)}` as HexString) : undefined\n\n\t\t// EntryPoint v0.8 packed paymasterAndData layout:\n\t\t// paymaster (20 bytes) || paymasterVerificationGasLimit (uint128, 16 bytes)\n\t\t// || paymasterPostOpGasLimit (uint128, 16 bytes) || paymasterData (variable)\n\t\tconst hasPaymaster =\n\t\t\tuserOp.paymasterAndData && userOp.paymasterAndData !== \"0x\" && userOp.paymasterAndData.length > 2\n\t\tconst pmHex = hasPaymaster ? userOp.paymasterAndData.slice(2) : \"\"\n\t\tconst paymaster = hasPaymaster ? (`0x${pmHex.slice(0, 40)}` as HexString) : undefined\n\t\tconst paymasterVerificationGasLimit = hasPaymaster ? BigInt(`0x${pmHex.slice(40, 72)}`) : undefined\n\t\tconst paymasterPostOpGasLimit = hasPaymaster ? BigInt(`0x${pmHex.slice(72, 104)}`) : undefined\n\t\tconst paymasterData = hasPaymaster ? (`0x${pmHex.slice(104)}` as HexString) : undefined\n\n\t\tconst userOpBundler: Record<string, unknown> = {\n\t\t\tsender: userOp.sender,\n\t\t\tnonce: toHex(userOp.nonce),\n\t\t\tcallData: userOp.callData,\n\t\t\tcallGasLimit: toHex(callGasLimit),\n\t\t\tverificationGasLimit: toHex(verificationGasLimit),\n\t\t\tpreVerificationGas: toHex(userOp.preVerificationGas),\n\t\t\tmaxFeePerGas: toHex(maxFeePerGas),\n\t\t\tmaxPriorityFeePerGas: toHex(maxPriorityFeePerGas),\n\t\t\tsignature: userOp.signature,\n\t\t}\n\n\t\tif (factory) {\n\t\t\tuserOpBundler.factory = factory\n\t\t\tuserOpBundler.factoryData = factoryData || \"0x\"\n\t\t}\n\n\t\tif (paymaster) {\n\t\t\tuserOpBundler.paymaster = paymaster\n\t\t\tuserOpBundler.paymasterData = paymasterData || \"0x\"\n\t\t\tuserOpBundler.paymasterVerificationGasLimit = toHex(paymasterVerificationGasLimit!)\n\t\t\tuserOpBundler.paymasterPostOpGasLimit = toHex(paymasterPostOpGasLimit!)\n\t\t}\n\n\t\treturn userOpBundler\n\t}\n\n\t/**\n\t * Sends a JSON-RPC request to the configured ERC-4337 bundler endpoint.\n\t *\n\t * @param method - The JSON-RPC method name (one of {@link BundlerMethod}).\n\t * @param params - Array of parameters for the RPC call.\n\t * @returns Resolves with the `result` field of the bundler's JSON-RPC response,\n\t * typed as `T`.\n\t * @throws If the bundler URL is not configured or the bundler returns an error.\n\t */\n\tasync sendBundler<T = unknown>(method: BundlerMethod, params: unknown[] = []): Promise<T> {\n\t\tif (!this.ctx.bundlerUrl) {\n\t\t\tthrow new Error(\"Bundler URL not configured\")\n\t\t}\n\n\t\tconst response = await fetch(this.ctx.bundlerUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params }),\n\t\t})\n\n\t\tconst result = await response.json()\n\n\t\tif (result.error) {\n\t\t\tthrow new Error(`Bundler error: ${result.error.message || JSON.stringify(result.error)}`)\n\t\t}\n\n\t\treturn result.result\n\t}\n\n\t/**\n\t * Sends multiple JSON-RPC requests to the bundler in a single HTTP call\n\t * using JSON-RPC 2.0 batch syntax. Results are returned in the same order\n\t * as the input `requests` array.\n\t *\n\t * @throws If the bundler URL is not configured, the HTTP call fails, or any\n\t * individual response contains an error.\n\t */\n\tasync sendBundlerBatch<T extends unknown[]>(requests: { method: BundlerMethod; params: unknown[] }[]): Promise<T> {\n\t\tif (!this.ctx.bundlerUrl) {\n\t\t\tthrow new Error(\"Bundler URL not configured\")\n\t\t}\n\n\t\tconst body = requests.map((r, i) => ({\n\t\t\tjsonrpc: \"2.0\" as const,\n\t\t\tid: i + 1,\n\t\t\tmethod: r.method,\n\t\t\tparams: r.params,\n\t\t}))\n\n\t\tconst response = await fetch(this.ctx.bundlerUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(body),\n\t\t})\n\n\t\tconst results = (await response.json()) as { id: number; result?: unknown; error?: { message?: string } }[]\n\t\tresults.sort((a, b) => a.id - b.id)\n\n\t\treturn results.map((r) => {\n\t\t\tif (r.error) {\n\t\t\t\tthrow new Error(`Bundler error: ${r.error.message || JSON.stringify(r.error)}`)\n\t\t\t}\n\t\t\treturn r.result\n\t\t}) as T\n\t}\n\n\t/**\n\t * Encodes a list of calls into ERC-7821 `execute` calldata using\n\t * single-batch mode (`ERC7821_BATCH_MODE`).\n\t *\n\t * @param calls - Ordered list of calls to batch; each specifies a `target`\n\t * address, ETH `value`, and `data`.\n\t * @returns ABI-encoded calldata for the ERC-7821 `execute(bytes32,bytes)` function.\n\t */\n\tencodeERC7821Execute(calls: ERC7821Call[]): HexString {\n\t\tconst executionData = encodeAbiParameters(\n\t\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t\t[calls.map((call) => ({ target: call.target, value: call.value, data: call.data }))],\n\t\t) as HexString\n\n\t\treturn encodeFunctionData({\n\t\t\tabi: ERC7821ABI.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [ERC7821_BATCH_MODE, executionData],\n\t\t}) as HexString\n\t}\n\n\t/**\n\t * Decodes ERC-7821 `execute` calldata back into its constituent calls.\n\t *\n\t * Returns `null` if the calldata does not match the expected `execute`\n\t * function signature or cannot be decoded.\n\t *\n\t * @param callData - Hex-encoded calldata previously produced by\n\t * {@link encodeERC7821Execute} or an equivalent encoder.\n\t * @returns Array of decoded {@link ERC7821Call} objects, or `null` on failure.\n\t */\n\tdecodeERC7821Execute(callData: HexString): ERC7821Call[] | null {\n\t\ttry {\n\t\t\tconst decoded = decodeFunctionData({\n\t\t\t\tabi: ERC7821ABI.ABI,\n\t\t\t\tdata: callData,\n\t\t\t})\n\n\t\t\tif (decoded?.functionName !== \"execute\" || !decoded.args || decoded.args.length < 2) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst executionData = decoded.args[1] as HexString\n\n\t\t\tconst [calls] = decodeAbiParameters(\n\t\t\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t\t\texecutionData,\n\t\t\t) as [ERC7821Call[]]\n\n\t\t\treturn calls.map((call) => ({\n\t\t\t\ttarget: call.target as HexString,\n\t\t\t\tvalue: call.value,\n\t\t\t\tdata: call.data as HexString,\n\t\t\t}))\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t}\n}\n","// Phantom-order price/liquidity aggregation. Lives in the SDK so the indexer (which persists the\n// result as entities) and the simplex E2E test share one implementation. Bid decoding (extractFill)\n// and signature recovery (recoverSigner) are injectable because the indexer must do both without\n// viem — viem's @noble/hashes keccak throws \"Uint8Array expected\" in the SubQuery VM2 sandbox — so\n// it passes VM2-safe implementations; the viem-based defaults are fine for Node consumers (tests,\n// simplex).\nimport { decodeFunctionData, encodeAbiParameters, keccak256, recoverAddress } from \"viem\"\nimport { decodeERC7821ExecuteBatch } from \"@/protocols/intents/decode-utils\"\nimport { decodeUserOpScale } from \"@/chains/intentsCoprocessor\"\nimport { CryptoUtils } from \"@/protocols/intents/CryptoUtils\"\nimport type { PackedUserOperation } from \"@/types\"\nimport IntentGatewayV2 from \"@/abis/IntentGatewayV2\"\n\nexport type HexString = `0x${string}`\n\n/**\n * ERC-4337 v0.8 EntryPoint, the contract whose userOpHash a bid's solver signature is taken over.\n * Canonical across every EVM chain we support, which is why it is a constant here rather than\n * something callers pass in (chain.ts carries the same address per chain as `EntryPointV08`).\n */\nexport const ENTRY_POINT_V08_ADDRESS = \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\" as const\n\n/** Minimal fetch shape used by the JSON-RPC POSTs below. */\nexport type FetchLike = (url: string, init: any) => Promise<{ json(): Promise<any> }>\n\n// The aggregation talks to RPCs over HTTP. In browsers/Node/tests the global `fetch` is used, but\n// the SubQuery VM2 sandbox the indexer runs in does NOT expose a global `fetch` (and node-fetch\n// crashes there), so the indexer injects a sandbox-safe implementation via setAggregationFetch().\nlet injectedFetch: FetchLike | undefined\nexport function setAggregationFetch(fetchImpl: FetchLike): void {\n\tinjectedFetch = fetchImpl\n}\nfunction rpcFetch(): FetchLike {\n\tconst f = injectedFetch ?? (globalThis as { fetch?: FetchLike }).fetch\n\tif (typeof f !== \"function\") {\n\t\tthrow new Error(\"No fetch available; call setAggregationFetch() before using the aggregation helpers\")\n\t}\n\treturn f\n}\n\n// POSTs a JSON-RPC payload and returns the parsed response, retrying with a short backoff. The node\n// intermittently returns an empty body under concurrent load (a 200 with no payload), which makes\n// response.json() throw; without a retry a single blip would silently drop a bid's quote or a whole\n// window (fetchBids throws). Throws if every attempt fails.\nasync function rpcCall(url: string, payload: object): Promise<any> {\n\tlet lastErr: unknown\n\tfor (let attempt = 0; attempt < 4; attempt++) {\n\t\tif (attempt > 0) await new Promise((resolve) => setTimeout(resolve, 150 * attempt))\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined\n\t\ttry {\n\t\t\t// Bound each attempt: the injected fetch (Node http) has no socket timeout, so a stalled\n\t\t\t// connection would otherwise hang forever and block the whole handler. Race it against a\n\t\t\t// deadline; on timeout we reject, retry, and ultimately throw so callers degrade instead.\n\t\t\tconst timeout = new Promise<never>((_, reject) => {\n\t\t\t\ttimer = setTimeout(() => reject(new Error(`rpc timeout: ${url}`)), 12_000)\n\t\t\t})\n\t\t\tconst response = await Promise.race([\n\t\t\t\trpcFetch()(url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: { accept: \"application/json\", \"content-type\": \"application/json\" },\n\t\t\t\t\tbody: JSON.stringify(payload),\n\t\t\t\t}),\n\t\t\t\ttimeout,\n\t\t\t])\n\t\t\treturn await response.json()\n\t\t} catch (err) {\n\t\t\tlastErr = err\n\t\t} finally {\n\t\t\tif (timer) clearTimeout(timer)\n\t\t}\n\t}\n\tthrow lastErr\n}\n\nexport const FILL_ORDER_ABI = IntentGatewayV2.ABI\n\n/** ERC-4626 vaults per chain, keyed by chain id then lowercase underlying token address. */\nexport type YieldVaultMap = Record<string, Record<string, string[]>>\n\nexport interface FillData {\n\torder: Record<string, unknown>\n\toptions: Record<string, unknown>\n\toutputToken: HexString\n\tsolverAmount: bigint\n}\n\nexport interface RpcBidInfo {\n\tcommitment: string\n\tfiller: string\n\tuser_op: string\n}\n\n/** One solver's measured liquidity for a configured token on one chain at this snapshot. */\nexport interface LpBalance {\n\tsolver: string\n\t/** State machine id of the chain the balance was measured on (e.g. EVM-8453). */\n\tchain: string\n\ttokenAddress: HexString\n\tbalance: bigint\n}\n\n/** The aggregated result for a single phantom order's bid window. */\nexport interface PhantomAggregation {\n\tlowestPrice: bigint\n\thighestPrice: bigint\n\tmedianPrice: bigint\n\tbidCount: number\n\tlpBalances: LpBalance[]\n}\n\nexport interface AggregationLogger {\n\twarn: (payload: unknown, message: string) => void\n}\n\n// Liquidity-weighted median of solver quotes. Each quote's influence is proportional to `weight` —\n// the solver's total balance for the output token across native + vault venues — so a solver that\n// can actually deliver size moves the price more than one quoting on thin liquidity. Returns the\n// lower weighted median: the smallest price whose cumulative weight reaches half of the total.\n// Zero-weight quotes contribute nothing; if every weight is zero it falls back to the unweighted\n// median so a price is still reported.\nexport function weightedMedian(entries: { price: bigint; weight: bigint }[]): bigint {\n\tconst sorted = [...entries].sort((a, b) => (a.price < b.price ? -1 : a.price > b.price ? 1 : 0))\n\tconst totalWeight = sorted.reduce((acc, e) => (e.weight > 0n ? acc + e.weight : acc), 0n)\n\n\tif (totalWeight === 0n) {\n\t\treturn sorted[Math.floor(sorted.length / 2)].price\n\t}\n\n\tlet cumulative = 0n\n\tfor (const entry of sorted) {\n\t\tif (entry.weight <= 0n) continue\n\t\tcumulative += entry.weight\n\t\tif (cumulative * 2n >= totalWeight) return entry.price\n\t}\n\treturn sorted[sorted.length - 1].price\n}\n\n// Pulls the inner fillOrder call out of the bid's ERC-7821 execute batch and decodes the order, the\n// offered output token, and the solver's quoted amount. Returns null when no matching call targets\n// the gateway or the calldata cannot be decoded.\nexport function extractFillData(callData: HexString, gatewayAddress: string): FillData | null {\n\tconst calls = decodeERC7821ExecuteBatch(callData)\n\tif (!calls) return null\n\n\tconst normalized = gatewayAddress.toLowerCase()\n\tfor (const call of calls) {\n\t\tif (call.target.toLowerCase() !== normalized) continue\n\t\ttry {\n\t\t\tconst decoded = decodeFunctionData({ abi: FILL_ORDER_ABI, data: call.data as HexString })\n\t\t\tif (decoded.functionName !== \"fillOrder\" || !decoded.args || decoded.args.length < 2) continue\n\t\t\tconst order = decoded.args[0] as Record<string, unknown>\n\t\t\tconst options = decoded.args[1] as Record<string, unknown>\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst outputToken = (order as any)?.output?.assets?.[0]?.token as HexString | undefined\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst outputs = (options as any)?.outputs as { amount: bigint }[] | undefined\n\t\t\tif (!outputToken || !outputs?.length) continue\n\t\t\treturn { order, options, outputToken, solverAmount: outputs[0].amount }\n\t\t} catch {\n\t\t\tcontinue\n\t\t}\n\t}\n\treturn null\n}\n\n/** Derives the 192-bit bid nonce key binding a bid to an (order, sessionKey) pair. */\nexport type BidNonceKeyFn = (commitment: HexString, sessionKey: HexString) => bigint\n\n/** Recomputes an order's commitment from the contract-shaped order decoded out of a bid's calldata. */\nexport type OrderCommitmentFn = (order: Record<string, unknown>) => HexString | null\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FILL_ORDER_INPUT = (FILL_ORDER_ABI as readonly any[]).find(\n\t(item) => item?.type === \"function\" && item?.name === \"fillOrder\",\n)?.inputs?.[0]\n\n/**\n * Default (viem) {@link OrderCommitmentFn}. The order comes straight out of `fillOrder`'s ABI\n * decode, so it is already contract-shaped and re-encoding it reproduces `keccak256(abi.encode(order))`\n * — the same commitment IntentGatewayV2 computes on-chain. Returns null when it cannot be computed,\n * which callers treat as unverifiable (fail closed).\n */\nexport function orderCommitmentFromDecoded(order: Record<string, unknown>): HexString | null {\n\ttry {\n\t\tif (!FILL_ORDER_INPUT) return null\n\t\treturn keccak256(encodeAbiParameters([FILL_ORDER_INPUT], [order as never]))\n\t} catch {\n\t\treturn null\n\t}\n}\n\n// A bid's userOp.signature is `commitment (32) ‖ solverSignature (65)`. SolverAccount.validateUserOp\n// expects 162 bytes on-chain, but the trailing 65-byte session-key signature is only appended at fill\n// time, so a bid is stored and read back in this 97-byte form.\nconst BID_COMMITMENT_BYTES = 32\nconst SOLVER_SIGNATURE_BYTES = 65\n\nexport interface BidSignature {\n\t/** The order commitment the solver signature is bound to. */\n\tcommitment: HexString\n\t/** The solver's 65-byte ECDSA signature over the userOpHash. */\n\tsolverSignature: HexString\n}\n\n/** Splits a bid userOp's signature into its commitment and solver signature; null if malformed. */\nexport function splitBidSignature(signature: HexString): BidSignature | null {\n\tconst raw = signature.replace(/^0x/, \"\")\n\tconst commitmentChars = BID_COMMITMENT_BYTES * 2\n\tconst end = commitmentChars + SOLVER_SIGNATURE_BYTES * 2\n\tif (raw.length < end) return null\n\n\treturn {\n\t\tcommitment: `0x${raw.slice(0, commitmentChars)}` as HexString,\n\t\tsolverSignature: `0x${raw.slice(commitmentChars, end)}` as HexString,\n\t}\n}\n\n/** Recovers the address that produced a bid's solver signature, or null if it cannot be recovered. */\nexport type RecoverBidSigner = (\n\tuserOp: PackedUserOperation,\n\tentryPoint: HexString,\n\tchainId: bigint,\n\tsolverSignature: HexString,\n) => Promise<HexString | null>\n\n/**\n * Default {@link RecoverBidSigner}: recovers over the EntryPoint v0.8 userOpHash, the digest\n * SolverAccount itself validates against. viem-based, so Node consumers get it for free while the\n * indexer injects an ethers equivalent (see the note at the top of this file).\n */\nexport const recoverBidSignerViem: RecoverBidSigner = async (userOp, entryPoint, chainId, solverSignature) => {\n\ttry {\n\t\tconst userOpHash = CryptoUtils.computeUserOpHash(userOp, entryPoint, chainId)\n\t\treturn (await recoverAddress({ hash: userOpHash, signature: solverSignature })) as HexString\n\t} catch {\n\t\treturn null\n\t}\n}\n\n// An EOA that has delegated with EIP-7702 has code `0xef0100 ‖ delegate`.\nconst DELEGATION_INDICATOR_PREFIX = \"0xef0100\"\n\n/** Whether `account` is an EOA EIP-7702-delegated to `solverAccount` on the given chain. */\nasync function isDelegatedToSolverAccount(evmRpcUrl: string, account: string, solverAccount: string): Promise<boolean> {\n\tconst response = await rpcCall(evmRpcUrl, {\n\t\tid: 1,\n\t\tjsonrpc: \"2.0\",\n\t\tmethod: \"eth_getCode\",\n\t\tparams: [account, \"latest\"],\n\t})\n\tconst code = typeof response.result === \"string\" ? response.result.toLowerCase() : \"\"\n\tif (!code.startsWith(DELEGATION_INDICATOR_PREFIX)) return false\n\n\treturn `0x${code.slice(DELEGATION_INDICATOR_PREFIX.length)}` === solverAccount.toLowerCase()\n}\n\n/** Chain id out of an EVM state machine id (\"EVM-8453\" -> 8453n); null for any other format. */\nfunction evmChainId(chain: string): bigint | null {\n\tconst [prefix, id] = chain.split(\"-\")\n\tif (prefix !== \"EVM\" || !id || !/^\\d+$/.test(id)) return null\n\treturn BigInt(id)\n}\n\n/**\n * Whether a bid genuinely came from one of our solvers, and so may influence the snapshot.\n *\n * Anyone can submit a bid to the coprocessor, and every accepted quote moves the weighted median the\n * rest of the protocol prices intents against, so a bid is only counted if it clears both of the\n * checks SolverAccount would apply on-chain: the userOp carries a solver signature over this order's\n * userOpHash that recovers to the sender, and the sender is EIP-7702-delegated to the chain's\n * SolverAccount. Fails closed — a bid that cannot be read or verified is not counted.\n */\nasync function isVerifiedSolverBid(params: {\n\tuserOp: PackedUserOperation\n\tcommitment: string\n\tsessionKey: HexString\n\tchainId: bigint\n\tsolverAccount: string\n\tevmRpcUrl: string\n\trecoverSigner: RecoverBidSigner\n\tbidNonceKey: BidNonceKeyFn\n\tlogger?: AggregationLogger\n}): Promise<boolean> {\n\tconst { userOp, commitment, sessionKey, chainId, solverAccount, evmRpcUrl, recoverSigner, bidNonceKey, logger } =\n\t\tparams\n\tconst solver = userOp.sender\n\n\tconst parsed = splitBidSignature(userOp.signature)\n\tif (!parsed) {\n\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: malformed userOp signature\")\n\t\treturn false\n\t}\n\n\t// Cheap early-out ONLY. The prefix sits inside userOp.signature, which userOpHash excludes, so it\n\t// is attacker-mutable and must never be what binds a bid to an order — the nonce key below is.\n\tif (parsed.commitment.toLowerCase() !== commitment.toLowerCase()) {\n\t\tlogger?.warn(\n\t\t\t{ solver, commitment, signedFor: parsed.commitment },\n\t\t\t\"Rejecting phantom bid: signed for another order\",\n\t\t)\n\t\treturn false\n\t}\n\n\t// The authoritative binding, mirroring SolverAccount.validateUserOp on-chain. The nonce IS\n\t// covered by userOpHash, so a solver signature stays valid only for the (order, sessionKey) pair\n\t// its nonce key was derived from. `sessionKey` is read from the bid's own calldata, which is also\n\t// covered by userOpHash — so every operand here is signed, leaving nothing for a replay to swap.\n\tif (BigInt(userOp.nonce) >> 64n !== bidNonceKey(commitment as HexString, sessionKey)) {\n\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: nonce does not bind order and session key\")\n\t\treturn false\n\t}\n\n\t// SolverAccount._rawSignatureValidation recovers over the bare userOpHash and requires the signer\n\t// to be the account itself, which under EIP-7702 is the sender EOA.\n\tconst signer = await recoverSigner(userOp, ENTRY_POINT_V08_ADDRESS, chainId, parsed.solverSignature)\n\tif (!signer || signer.toLowerCase() !== solver.toLowerCase()) {\n\t\tlogger?.warn({ solver, commitment, signer }, \"Rejecting phantom bid: signature does not recover to the sender\")\n\t\treturn false\n\t}\n\n\tif (!(await isDelegatedToSolverAccount(evmRpcUrl, solver, solverAccount))) {\n\t\tlogger?.warn({ solver, commitment, solverAccount }, \"Rejecting phantom bid: sender is not a delegated solver\")\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nexport async function fetchBidsForOrder(nodeUrl: string, commitment: string): Promise<RpcBidInfo[]> {\n\tconst data = await rpcCall(nodeUrl, {\n\t\tid: 1,\n\t\tjsonrpc: \"2.0\",\n\t\tmethod: \"intents_getBidsForOrder\",\n\t\tparams: [commitment],\n\t})\n\treturn Array.isArray(data.result) ? (data.result as RpcBidInfo[]) : []\n}\n\nasync function ethCallUint(evmRpcUrl: string, to: string, data: string): Promise<bigint> {\n\ttry {\n\t\tconst result = await rpcCall(evmRpcUrl, {\n\t\t\tid: 1,\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tmethod: \"eth_call\",\n\t\t\tparams: [{ to, data }, \"latest\"],\n\t\t})\n\t\tif (result.error || !result.result || result.result === \"0x\") return 0n\n\t\treturn BigInt(result.result)\n\t} catch {\n\t\treturn 0n\n\t}\n}\n\n// Sums the solver's redeemable balance of a single token on its destination chain: the raw ERC-20\n// balance plus any ERC-4626 vault positions wrapping it.\nasync function getTotalSolverBalance(\n\tevmRpcUrl: string,\n\tchain: string,\n\ttoken: string,\n\tsolver: string,\n\tyieldVaults: YieldVaultMap,\n): Promise<bigint> {\n\tconst padded = solver.replace(\"0x\", \"\").padStart(64, \"0\")\n\tconst raw = await ethCallUint(evmRpcUrl, token, `0x70a08231${padded}`) // balanceOf(address)\n\tconst vaults = yieldVaults[chain]?.[token.toLowerCase()] ?? []\n\tconst vaultBalances = await Promise.all(\n\t\tvaults.map((v) => ethCallUint(evmRpcUrl, v, `0xce96cb77${padded}`)), // maxWithdraw(address)\n\t)\n\treturn vaultBalances.reduce((acc, b) => acc + b, raw)\n}\n\n// Sweeps a solver's liquidity for every configured yield-vault token on every supported chain: for\n// each chain that has both an RPC (in evmRpcUrls) and configured tokens (in yieldVaults), the\n// solver's balance (raw ERC-20 + ERC-4626 vault positions) for each token. Captures the LP's whole\n// liquidity picture, not just the token of the bid being priced. Zero balances are skipped so the\n// snapshot only records tokens the solver actually holds.\nasync function sweepSolverLiquidity(\n\tevmRpcUrls: Record<string, string>,\n\tyieldVaults: YieldVaultMap,\n\tsolver: string,\n): Promise<LpBalance[]> {\n\tconst balances: LpBalance[] = []\n\tfor (const [chain, tokens] of Object.entries(yieldVaults)) {\n\t\tconst url = evmRpcUrls[chain]\n\t\tif (!url) continue\n\t\tfor (const token of Object.keys(tokens)) {\n\t\t\tconst balance = await getTotalSolverBalance(url, chain, token, solver, yieldVaults)\n\t\t\tif (balance === 0n) continue\n\t\t\tbalances.push({ solver, chain, tokenAddress: token as HexString, balance })\n\t\t}\n\t}\n\treturn balances\n}\n\n// Strips a bytes32 token field to a 20-byte lowercase address (or normalises an address as-is).\nfunction toAddress(token: string): HexString {\n\tconst hex = token.toLowerCase().replace(/^0x/, \"\")\n\tconst addr = hex.length > 40 ? hex.slice(-40) : hex.padStart(40, \"0\")\n\treturn `0x${addr}` as HexString\n}\n\n/**\n * Aggregates every bid for a phantom order into a single price/liquidity snapshot.\n *\n * Fetches the live bids via `intents_getBidsForOrder` and reads each filler's quoted output amount.\n * Only bids that {@link isVerifiedSolverBid} accepts are counted — a bid from anyone who is not one\n * of our delegated solvers, or whose signature was not produced for this order, is dropped rather\n * than allowed to move the price. The liquidity-weighted median then weights every surviving quote by\n * the solver's balance of the output token on the destination chain, so a solver that can't actually\n * deliver size carries little or no weight — which is why no fill simulation is needed to filter\n * unfillable quotes. For each bidding solver it also records a full liquidity sweep — every\n * configured yield-vault token on every supported chain (raw ERC-20 + vault positions). Returns\n * `null` when no bid survives verification.\n *\n * `extractFill` decodes a bid's ERC-7821 calldata into the fill's order/output and `recoverSigner`\n * recovers its solver signature; both default to the viem implementations, but the indexer injects\n * VM2-safe variants (viem's keccak throws in the SubQuery sandbox).\n */\nexport async function aggregatePhantomBids(params: {\n\tnodeUrl: string\n\t/** RPC URL per supported EVM chain (stateMachineId -> url); must include the destination chain. */\n\tevmRpcUrls: Record<string, string>\n\tchain: string\n\tgatewayAddress: string\n\tcommitment: string\n\tyieldVaults: YieldVaultMap\n\t/** SolverAccount on `chain` that our solvers delegate to; bids from anyone else are dropped. */\n\tsolverAccount: string\n\textractFill?: (callData: HexString, gatewayAddress: string) => FillData | null\n\trecoverSigner?: RecoverBidSigner\n\tbidNonceKey?: BidNonceKeyFn\n\torderCommitment?: OrderCommitmentFn\n\tlogger?: AggregationLogger\n}): Promise<PhantomAggregation | null> {\n\tconst { nodeUrl, evmRpcUrls, chain, gatewayAddress, commitment, yieldVaults, solverAccount, logger } = params\n\tconst extractFill = params.extractFill ?? extractFillData\n\tconst recoverSigner = params.recoverSigner ?? recoverBidSignerViem\n\tconst bidNonceKey = params.bidNonceKey ?? CryptoUtils.bidNonceKey\n\tconst orderCommitment = params.orderCommitment ?? orderCommitmentFromDecoded\n\n\tconst destUrl = evmRpcUrls[chain]\n\tif (!destUrl) return null\n\n\t// Both bid checks need these, and neither can be skipped without letting an unverified quote into\n\t// the price, so a chain we can't resolve them for produces no snapshot at all. solverAccount is\n\t// typed as required but comes from a config lookup that can miss, so it is re-checked here.\n\tconst chainId = evmChainId(chain)\n\tif (!solverAccount || chainId === null) {\n\t\tlogger?.warn({ chain, commitment }, \"Cannot verify phantom bids: no SolverAccount or chain id for chain\")\n\t\treturn null\n\t}\n\n\tconst bids = await fetchBidsForOrder(nodeUrl, commitment)\n\tif (bids.length === 0) return null\n\n\tconst quotes: { price: bigint; weight: bigint }[] = []\n\tconst lpBalances: LpBalance[] = []\n\t// Bids are stored per substrate filler, but weight is a property of the EVM solver. Without this\n\t// one solver's bid, copied under N funded fillers, would count N times in the weighted median.\n\tconst countedSolvers = new Set<string>()\n\n\tfor (const bid of bids) {\n\t\tif (!bid.user_op) continue\n\t\ttry {\n\t\t\tconst decoded = decodeUserOpScale(bid.user_op as HexString)\n\t\t\tconst solver = decoded.sender\n\n\t\t\tconst fillData = extractFill(decoded.callData as HexString, gatewayAddress)\n\t\t\tif (!fillData) continue\n\n\t\t\t// The quoted price is read out of this order, so it must be the order being priced.\n\t\t\tconst decodedCommitment = orderCommitment(fillData.order)\n\t\t\tif (!decodedCommitment || decodedCommitment.toLowerCase() !== commitment.toLowerCase()) {\n\t\t\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: calldata order is not the indexed order\")\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst sessionKey = (fillData.order as any)?.session as HexString | undefined\n\t\t\tif (!sessionKey) {\n\t\t\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: order carries no session key\")\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst verified = await isVerifiedSolverBid({\n\t\t\t\tuserOp: decoded,\n\t\t\t\tcommitment,\n\t\t\t\tsessionKey,\n\t\t\t\tchainId,\n\t\t\t\tsolverAccount,\n\t\t\t\tevmRpcUrl: destUrl,\n\t\t\t\trecoverSigner,\n\t\t\t\tbidNonceKey,\n\t\t\t\tlogger,\n\t\t\t})\n\t\t\tif (!verified) continue\n\n\t\t\tconst normalizedSolver = solver.toLowerCase()\n\t\t\tif (countedSolvers.has(normalizedSolver)) {\n\t\t\t\tlogger?.warn({ solver, commitment }, \"Skipping phantom bid: solver already counted for this order\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcountedSolvers.add(normalizedSolver)\n\n\t\t\t// Price influence: the solver's liquidity in the output token on the destination chain.\n\t\t\tconst outputTokenAddress = toAddress(fillData.outputToken)\n\t\t\tconst weight = await getTotalSolverBalance(destUrl, chain, outputTokenAddress, solver, yieldVaults)\n\t\t\tquotes.push({ price: fillData.solverAmount, weight })\n\n\t\t\t// Full liquidity picture: every configured token on every supported chain.\n\t\t\tlpBalances.push(...(await sweepSolverLiquidity(evmRpcUrls, yieldVaults, solver)))\n\t\t} catch (err) {\n\t\t\tlogger?.warn({ err, filler: bid.filler }, \"Failed to process bid for price snapshot\")\n\t\t}\n\t}\n\n\tif (quotes.length === 0) return null\n\n\t// The snapshot reports a single price: the liquidity-weighted median. lowestPrice and\n\t// highestPrice carry that same value rather than the raw min/max of the bid set, so consumers\n\t// cannot read an outlier bid as if it were a tradeable bound.\n\tconst medianPrice = weightedMedian(quotes)\n\n\treturn {\n\t\tlowestPrice: medianPrice,\n\t\thighestPrice: medianPrice,\n\t\tmedianPrice,\n\t\tbidCount: quotes.length,\n\t\tlpBalances,\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/abis/erc7281.ts","../../src/protocols/intents/types.ts","../../src/protocols/intents/decode-utils.ts","../../src/abis/IntentGatewayV2.ts","../../src/chains/intentsCoprocessor.ts","../../src/protocols/intents/CryptoUtils.ts","../../src/protocols/intents/phantom-aggregation.ts"],"names":["ABI","encodeAbiParameters","encodeFunctionData","decodeFunctionData","decodeAbiParameters","u8aToHex","hexToU8a","keccak256"],"mappings":"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","file":"intents-helpers.js","sourcesContent":["const ABI = [\n\t{\n\t\tname: \"execute\",\n\t\ttype: \"function\",\n\t\tinputs: [\n\t\t\t{ name: \"mode\", type: \"bytes32\" },\n\t\t\t{ name: \"executionData\", type: \"bytes\" },\n\t\t],\n\t\toutputs: [],\n\t},\n\t{\n\t\tname: \"Call\",\n\t\ttype: \"tuple\",\n\t\tcomponents: [\n\t\t\t{ name: \"target\", type: \"address\" },\n\t\t\t{ name: \"value\", type: \"uint256\" },\n\t\t\t{ name: \"data\", type: \"bytes\" },\n\t\t],\n\t},\n] as const\n\nexport default { ABI }\n","import type { TransactionReceipt } from \"viem\"\nimport type { HexString } from \"@/types\"\nimport type { IProof } from \"@/chain\"\nimport type { RequestStatusWithMetadata } from \"@/types\"\n\n/**\n * ABI-encoded function selector for the IntentGatewayV2 `placeOrder` function,\n * including the full tuple signature of the OrderV2 struct.\n */\nexport const PLACE_ORDER_SELECTOR =\n\t\"placeOrder((bytes32,bytes,bytes,uint256,uint256,uint256,address,((bytes32,uint256)[],bytes),(bytes32,uint256)[],(bytes32,(bytes32,uint256)[],bytes)),bytes32)\"\n\n/**\n * ABI tuple type string for the OrderV2 struct used when ABI-encoding or\n * decoding order data without a full ABI artifact.\n */\nexport const ORDER_V2_PARAM_TYPE =\n\t\"(bytes32,bytes,bytes,uint256,uint256,uint256,address,((bytes32,uint256)[],bytes),(bytes32,uint256)[],(bytes32,(bytes32,uint256)[],bytes))\"\n\n/**\n * Default graffiti value: a bytes32 zero word.\n *\n * When no graffiti is supplied to `placeOrder`, this value is used,\n * indicating no orderflow attribution or revenue-share tag.\n */\nexport const DEFAULT_GRAFFITI = \"0x0000000000000000000000000000000000000000000000000000000000000000\" as HexString\n\n/**\n * ERC-7821 execution mode selector for single-batch execution.\n *\n * The first byte `0x01` indicates batch mode; all remaining bytes are\n * reserved and set to zero.\n */\nexport const ERC7821_BATCH_MODE = \"0x0100000000000000000000000000000000000000000000000000000000000000\" as HexString\n\n/**\n * Bundler RPC method names for ERC-4337 operations.\n *\n * Values map to JSON-RPC method strings sent to a 4337 bundler endpoint.\n * `PIMLICO_GET_USER_OPERATION_GAS_PRICE` is a Pimlico-specific extension.\n */\nexport const BundlerMethod = {\n\t/** Submits a UserOperation to the bundler mempool. */\n\tETH_SEND_USER_OPERATION: \"eth_sendUserOperation\",\n\t/** Retrieves the receipt for a previously submitted UserOperation by its hash. */\n\tETH_GET_USER_OPERATION_RECEIPT: \"eth_getUserOperationReceipt\",\n\t/** Estimates gas limits for a UserOperation before submission. */\n\tETH_ESTIMATE_USER_OPERATION_GAS: \"eth_estimateUserOperationGas\",\n\t/** Pimlico-specific method to fetch recommended EIP-1559 gas prices for UserOperations. */\n\tPIMLICO_GET_USER_OPERATION_GAS_PRICE: \"pimlico_getUserOperationGasPrice\",\n\t/** Alchemy (Rundler) method to fetch recommended priority fee for UserOperations. */\n\tRUNDLER_MAX_PRIORITY_FEE_PER_GAS: \"rundler_maxPriorityFeePerGas\",\n} as const\n\n/** Union of all valid bundler RPC method name strings. */\nexport type BundlerMethod = (typeof BundlerMethod)[keyof typeof BundlerMethod]\n\n/**\n * Response payload returned by a bundler for\n * `eth_estimateUserOperationGas`.\n *\n * All gas values are returned as hex strings.\n */\nexport interface BundlerGasEstimate {\n\t/** Gas required for pre-verification processing (hex). */\n\tpreVerificationGas: HexString\n\t/** Gas limit for the account verification step (hex). */\n\tverificationGasLimit: HexString\n\t/** Gas limit for the main execution call (hex). */\n\tcallGasLimit: HexString\n\t/** Gas limit for paymaster verification, if a paymaster is used (hex). */\n\tpaymasterVerificationGasLimit?: HexString\n\t/** Gas limit for paymaster post-operation hook, if a paymaster is used (hex). */\n\tpaymasterPostOpGasLimit?: HexString\n}\n\n/**\n * Response payload returned by Pimlico's\n * `pimlico_getUserOperationGasPrice` method.\n *\n * Provides EIP-1559 fee recommendations at three priority tiers.\n * Each field is optional; callers should fall back from `fast` → `standard` → `slow`.\n */\nexport interface PimlicoGasPriceEstimate {\n\t/** Low-priority fee recommendation. */\n\tslow: {\n\t\t/** Maximum total fee per gas (hex). */\n\t\tmaxFeePerGas: HexString\n\t\t/** Maximum miner tip per gas (hex). */\n\t\tmaxPriorityFeePerGas: HexString\n\t}\n\t/** Medium-priority fee recommendation. */\n\tstandard: {\n\t\t/** Maximum total fee per gas (hex). */\n\t\tmaxFeePerGas: HexString\n\t\t/** Maximum miner tip per gas (hex). */\n\t\tmaxPriorityFeePerGas: HexString\n\t}\n\t/** High-priority fee recommendation for fastest inclusion. */\n\tfast: {\n\t\t/** Maximum total fee per gas (hex). */\n\t\tmaxFeePerGas: HexString\n\t\t/** Maximum miner tip per gas (hex). */\n\t\tmaxPriorityFeePerGas: HexString\n\t}\n}\n\n/**\n * Tagged union of all status updates that can be yielded by the cancel-order\n * async generator.\n *\n * The `status` field is the discriminant. Consumers should switch on it to\n * handle each stage of the cancellation lifecycle:\n *\n * - `DESTINATION_FINALIZED` – a state proof from the destination chain is ready.\n * - `AWAITING_CANCEL_TRANSACTION` – the caller must sign and submit the cancel tx.\n * - `CANCEL_STARTED` – the cancel transaction was confirmed on-chain.\n * - `SOURCE_FINALIZED` – the cancel request has been finalised on the source chain.\n\t* - `HYPERBRIDGE_DELIVERED` – the cancel message has been delivered to Hyperbridge.\n\t* - `HYPERBRIDGE_FINALIZED` – the cancel message has been finalised on Hyperbridge.\n\t* - `CANCELLATION_COMPLETE` – the escrow has been refunded; cancellation is done.\n */\nexport type CancelEvent =\n\t| { status: \"DESTINATION_FINALIZED\"; proof: IProof }\n\t| { status: \"AWAITING_CANCEL_TRANSACTION\"; data: HexString; to: HexString; value: bigint }\n\t| { status: \"CANCEL_STARTED\"; receipt: TransactionReceipt }\n\t| {\n\t\t\tstatus: \"SOURCE_FINALIZED\"\n\t\t\tmetadata: Extract<RequestStatusWithMetadata, { status: \"SOURCE_FINALIZED\" }>[\"metadata\"]\n\t }\n\t| {\n\t\t\tstatus: \"HYPERBRIDGE_DELIVERED\"\n\t\t\tmetadata: Extract<RequestStatusWithMetadata, { status: \"HYPERBRIDGE_DELIVERED\" }>[\"metadata\"]\n\t }\n\t| {\n\t\t\tstatus: \"HYPERBRIDGE_FINALIZED\"\n\t\t\tmetadata: Extract<RequestStatusWithMetadata, { status: \"HYPERBRIDGE_FINALIZED\" }>[\"metadata\"]\n\t }\n\t| { status: \"CANCELLATION_COMPLETE\"; blockNumber: number; transactionHash: HexString }\n\nimport type { IEvmChain } from \"@/chain\"\nimport type { IntentsCoprocessor } from \"@/chains/intentsCoprocessor\"\nimport type { Swap } from \"@/utils/swap\"\nimport type { createSessionKeyStorage, createCancellationStorage, createUsedUserOpsStorage } from \"@/storage\"\n\n/**\n * Shared runtime context passed to every IntentsV2 sub-module.\n *\n * All sub-modules (OrderPlacer, OrderExecutor, BidManager, etc.) receive a\n * reference to this object so they can share fee-token caches, storage\n * adapters, and chain clients without duplicating initialisation logic.\n */\nexport interface IntentGatewayContext {\n\t/** EVM chain on which orders are placed and escrowed. */\n\tsource: IEvmChain\n\t/** EVM chain on which solvers fill orders and receive outputs. */\n\tdest: IEvmChain\n\t/** Hyperbridge coprocessor client used to fetch solver bids and submit UserOperations. */\n\tintentsCoprocessor?: IntentsCoprocessor\n\t/** URL of the ERC-4337 bundler endpoint for gas estimation and UserOp submission. */\n\tbundlerUrl?: string\n\t/**\n\t * In-memory TTL cache keyed by state-machine ID.\n\t * Stores fee-token address, decimals, and the timestamp of the last fetch.\n\t */\n\tfeeTokenCache: Map<string, { address: HexString; decimals: number; cachedAt: number }>\n\t/**\n\t * In-memory cache of solver account contract bytecode, keyed by lowercased address.\n\t * Used to inject solver code into state-overrides for gas estimation.\n\t */\n\tsolverCodeCache: Map<string, string>\n\t/** Persistent storage for ephemeral session keys generated per order. */\n\tsessionKeyStorage: ReturnType<typeof createSessionKeyStorage>\n\t/** Persistent storage for intermediate cancellation state (proofs, commitments). */\n\tcancellationStorage: ReturnType<typeof createCancellationStorage>\n\t/** Persistent storage for deduplication of already-submitted UserOperations. */\n\tusedUserOpsStorage: ReturnType<typeof createUsedUserOpsStorage>\n\t/** DEX-quote utility used for token pricing and gas-to-fee-token conversions. */\n\tswap: Swap\n}\n","// Pure ERC-7821 encode/decode utilities — no chain dependency (safe for SubQuery VM2).\nimport { encodeFunctionData, encodeAbiParameters, decodeFunctionData, decodeAbiParameters } from \"viem\"\nimport ERC7821ABI from \"@/abis/erc7281\"\nimport { ERC7821_BATCH_MODE } from \"./types\"\nimport type { HexString, ERC7821Call } from \"@/types\"\n\nexport function encodeERC7821ExecuteBatch(calls: ERC7821Call[]): HexString {\n\tconst executionData = encodeAbiParameters(\n\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t[calls.map((call) => ({ target: call.target, value: call.value, data: call.data }))],\n\t) as HexString\n\n\treturn encodeFunctionData({\n\t\tabi: ERC7821ABI.ABI,\n\t\tfunctionName: \"execute\",\n\t\targs: [ERC7821_BATCH_MODE, executionData],\n\t}) as HexString\n}\n\nexport function decodeERC7821ExecuteBatch(callData: HexString): ERC7821Call[] | null {\n\ttry {\n\t\tconst decoded = decodeFunctionData({ abi: ERC7821ABI.ABI, data: callData })\n\t\tif (decoded.functionName !== \"execute\" || !decoded.args || decoded.args.length < 2) return null\n\t\tconst executionData = decoded.args[1] as HexString\n\t\tconst [calls] = decodeAbiParameters(\n\t\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t\texecutionData,\n\t\t) as [ERC7821Call[]]\n\t\treturn calls.map((call) => ({\n\t\t\ttarget: call.target as HexString,\n\t\t\tvalue: call.value,\n\t\t\tdata: call.data as HexString,\n\t\t}))\n\t} catch {\n\t\treturn null\n\t}\n}\n","export const ABI = [\n\t{\n\t\ttype: \"constructor\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"admin\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"receive\",\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"DOMAIN_SEPARATOR\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"SELECT_SOLVER_TYPEHASH\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_destinationProtocolFees\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_filled\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_instances\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_nonce\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_orders\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_partialFills\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"calculateCommitmentSlotHash\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"cancelOrder\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"session\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"predispatch\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct DispatchInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"output\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct CancelOptions\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayerFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"eip712Domain\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"fields\",\n\t\t\t\ttype: \"bytes1\",\n\t\t\t\tinternalType: \"bytes1\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"name\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"version\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"chainId\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"verifyingContract\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"salt\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"extensions\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"fillOrder\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"session\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"predispatch\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct DispatchInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"output\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct FillOptions\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayerFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nativeDispatchFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"outputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"host\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"instance\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"stateMachineId\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onAccept\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IncomingPostRequest\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onGetResponse\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IncomingGetResponse\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct GetResponse\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"values\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct StorageValue[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"key\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onGetTimeout\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct GetRequestTimeout\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"onPostRequestTimeout\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct PostRequestTimeout\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"params\",\n\t\tinputs: [],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"placeOrder\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"destination\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"session\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"predispatch\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct DispatchInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"output\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"assets\",\n\t\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: \"call\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"graffiti\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quote\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct DispatchPost\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quote\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct DispatchGet\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"select\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct SelectOptions\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"commitment\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solver\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"signature\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"init\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"p\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"deployments\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tinternalType: \"struct Deployment[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"chain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"gateway\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DestinationProtocolFeeUpdated\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"chain\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"feeBps\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DustCollected\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DustSwept\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"beneficiary\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"EIP712DomainChanged\",\n\t\tinputs: [],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"EscrowRefunded\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"tokens\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"EscrowReleased\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"tokens\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"DeploymentAdded\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"chain\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"gateway\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderFilled\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"filler\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"OrderPlaced\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"user\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"destination\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"nonce\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"fees\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"session\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"beneficiary\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"predispatch\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"predispatchCall\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputCall\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"graffiti\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"ParamsUpdated\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"previous\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"current\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"solverSelection\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"surplusShareBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"protocolFeeBps\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"priceOracle\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"PartialFill\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"filler\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Cancelled\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnknownInstance\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"ECDSAInvalidSignature\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"ECDSAInvalidSignatureLength\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"length\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"ECDSAInvalidSignatureS\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"s\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Expired\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Filled\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"InsufficientNativeToken\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"InvalidInput\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"InvalidShortString\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"NotExpired\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"SafeERC20FailedOperation\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t\tinternalType: \"address\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"StringTooLong\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"str\",\n\t\t\t\ttype: \"string\",\n\t\t\t\tinternalType: \"string\",\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"Unauthorized\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnauthorizedCall\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnexpectedCall\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnknownOrder\",\n\t\tinputs: [],\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"WrongChain\",\n\t\tinputs: [],\n\t},\n] as const\n\nexport default { ABI }\n","import { ApiPromise, Keyring, WsProvider } from \"@polkadot/api\"\nimport type { SubmittableExtrinsic } from \"@polkadot/api/types\"\nimport type { KeyringPair } from \"@polkadot/keyring/types\"\nimport { hexToU8a, u8aToHex, u8aConcat } from \"@polkadot/util\"\nimport { decodeAddress, keccakAsU8a } from \"@polkadot/util-crypto\"\nimport { numberToBytes, bytesToBigInt, decodeAbiParameters, hexToBytes } from \"viem\"\nimport { Bytes, Struct, u8, Vector } from \"scale-ts\"\nimport PQueue from \"p-queue\"\nimport type { BidSubmissionResult, HexString, PackedUserOperation, BidStorageEntry, FillerBid, Order } from \"@/types\"\nimport type { SubstrateChain } from \"./substrate\"\nimport IntentGatewayV2 from \"@/abis/IntentGatewayV2\"\n\n/** Offchain storage key prefix for bids */\nconst OFFCHAIN_BID_PREFIX = new TextEncoder().encode(\"intents::bid::\")\n/** Offchain storage key prefix for phantom orders */\nconst OFFCHAIN_PHANTOM_PREFIX = new TextEncoder().encode(\"intents::phantom::order::\")\n\n/** SCALE codec for Bid { filler: AccountId, user_op: Vec<u8> } */\nconst BidCodec = Struct({ filler: Bytes(32), user_op: Vector(u8) })\n\n/**\n * SCALE codec for PackedUserOperation\n * Uses Vec<u8> for all fields to handle hex strings uniformly\n */\nconst PackedUserOperationCodec = Struct({\n\tsender: Bytes(20), // address is 20 bytes\n\tnonce: Bytes(32), // uint256 as 32 bytes\n\tinitCode: Vector(u8), // variable length bytes\n\tcallData: Vector(u8), // variable length bytes\n\taccountGasLimits: Bytes(32), // bytes32\n\tpreVerificationGas: Bytes(32), // uint256 as 32 bytes\n\tgasFees: Bytes(32), // bytes32\n\tpaymasterAndData: Vector(u8), // variable length bytes\n\tsignature: Vector(u8), // variable length bytes\n})\n\n/**\n * Encodes a PackedUserOperation using SCALE codec for submission to Hyperbridge.\n * This is the recommended way to encode UserOps for the intents coprocessor.\n *\n * @param userOp - The PackedUserOperation to encode\n * @returns Hex-encoded SCALE bytes\n */\nexport function encodeUserOpScale(userOp: PackedUserOperation): HexString {\n\tconst encoded = PackedUserOperationCodec.enc({\n\t\tsender: hexToU8a(userOp.sender),\n\t\tnonce: numberToBytes(userOp.nonce, { size: 32 }),\n\t\tinitCode: Array.from(hexToU8a(userOp.initCode)),\n\t\tcallData: Array.from(hexToU8a(userOp.callData)),\n\t\taccountGasLimits: hexToU8a(userOp.accountGasLimits),\n\t\tpreVerificationGas: numberToBytes(userOp.preVerificationGas, { size: 32 }),\n\t\tgasFees: hexToU8a(userOp.gasFees),\n\t\tpaymasterAndData: Array.from(hexToU8a(userOp.paymasterAndData)),\n\t\tsignature: Array.from(hexToU8a(userOp.signature)),\n\t})\n\n\treturn u8aToHex(encoded) as HexString\n}\n\n/**\n * Decodes a SCALE-encoded PackedUserOperation.\n *\n * @param hex - The hex-encoded SCALE bytes\n * @returns The decoded PackedUserOperation\n */\nexport function decodeUserOpScale(hex: HexString): PackedUserOperation {\n\tconst decoded = PackedUserOperationCodec.dec(hexToU8a(hex))\n\n\treturn {\n\t\tsender: u8aToHex(new Uint8Array(decoded.sender)) as HexString,\n\t\tnonce: bytesToBigInt(new Uint8Array(decoded.nonce)),\n\t\tinitCode: u8aToHex(new Uint8Array(decoded.initCode)) as HexString,\n\t\tcallData: u8aToHex(new Uint8Array(decoded.callData)) as HexString,\n\t\taccountGasLimits: u8aToHex(new Uint8Array(decoded.accountGasLimits)) as HexString,\n\t\tpreVerificationGas: bytesToBigInt(new Uint8Array(decoded.preVerificationGas)),\n\t\tgasFees: u8aToHex(new Uint8Array(decoded.gasFees)) as HexString,\n\t\tpaymasterAndData: u8aToHex(new Uint8Array(decoded.paymasterAndData)) as HexString,\n\t\tsignature: u8aToHex(new Uint8Array(decoded.signature)) as HexString,\n\t}\n}\n\n/** RPC response shape from intents_getBidsForOrder */\ninterface RpcBidInfo {\n\tcommitment: HexString\n\tfiller: HexString\n\tuser_op: HexString\n}\n\n/** One directed leg of a phantom order: `standardAmount` of `tokenA` quoted in `tokenB`. */\nexport interface PhantomOrderLeg {\n\ttokenA: HexString\n\ttokenB: HexString\n\tstandardAmount: bigint\n}\n\nexport interface PhantomOrderEvent {\n\tcommitment: HexString\n\tchain: string\n\tcreatedAt: number\n\t/**\n\t * Every configured pair expands into its configured direction plus the reverse. Listed in\n\t * the same order as the order's asset lists, so index `i` here is the order's leg `i`.\n\t */\n\tlegs: PhantomOrderLeg[]\n}\n\nexport interface PollPhantomOrdersOptions {\n\t/** How often to check for a new head. Defaults to 6s, roughly one block. */\n\tintervalMs?: number\n\t/**\n\t * Most blocks scanned in a single poll, so a long outage catches up over several ticks instead of\n\t * one unbounded scan. Defaults to 500.\n\t */\n\tmaxBlocksPerPoll?: number\n\t/**\n\t * How many blocks before the current head to start from on the first poll. Defaults to 0 (start\n\t * at the head). Set this to the runtime's bid window to have a restarting process pick up orders\n\t * whose window is still open.\n\t */\n\tlookbackBlocks?: number\n\t/** Notified when a poll fails; polling continues regardless. */\n\tonError?: (err: unknown) => void\n}\n\n/**\n * Service for interacting with Hyperbridge's pallet-intents coprocessor.\n * Handles bid submission and retrieval for the IntentGatewayV2 protocol.\n *\n * Can be created from an existing SubstrateChain instance to share the connection.\n */\nexport class IntentsCoprocessor {\n\t/** Cached result of whether the node exposes intents_* RPC methods */\n\tprivate hasIntentsRpc: boolean | null = null\n\n\t// Serialises every extrinsic submission on this instance's substrate account. All submit/retract\n\t// methods funnel through signAndSendExtrinsic, each using the API's auto-nonce; fired in parallel\n\t// (bids for orders on different chains, or several phantom orders in one interval) they would grab\n\t// the same nonce and all but one would fail. Concurrency 1 sequences them.\n\tprivate submissionQueue = new PQueue({ concurrency: 1 })\n\n\t/**\n\t * Creates and connects an IntentsCoprocessor to a Hyperbridge node.\n\t * This creates and manages its own API connection.\n\t *\n\t * @param wsUrl - WebSocket URL of the Hyperbridge node\n\t * @param substratePrivateKey - Private key for signing extrinsics (optional for read-only operations)\n\t * @returns Promise resolving to a connected IntentsCoprocessor\n\t */\n\tstatic async connect(wsUrl: string, substratePrivateKey?: string): Promise<IntentsCoprocessor> {\n\t\tconst api = await ApiPromise.create({\n\t\t\tprovider: new WsProvider(wsUrl),\n\t\t\ttypesBundle: {\n\t\t\t\tspec: {\n\t\t\t\t\tnexus: { hasher: keccakAsU8a },\n\t\t\t\t\tgargantua: { hasher: keccakAsU8a },\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\treturn new IntentsCoprocessor(api, substratePrivateKey, true)\n\t}\n\n\t/**\n\t * Creates an IntentsCoprocessor from an existing SubstrateChain instance.\n\t * This shares the connection - the SubstrateChain must already be connected.\n\t *\n\t * @param chain - Connected SubstrateChain instance (typically Hyperbridge)\n\t * @param substratePrivateKey - Private key for signing extrinsics (optional for read-only operations)\n\t */\n\tstatic fromSubstrateChain(chain: SubstrateChain, substratePrivateKey?: string): IntentsCoprocessor {\n\t\tif (!chain.api) {\n\t\t\tthrow new Error(\"SubstrateChain must be connected before creating IntentsCoprocessor\")\n\t\t}\n\t\treturn new IntentsCoprocessor(chain.api, substratePrivateKey, false)\n\t}\n\n\t/**\n\t * Creates an IntentsCoprocessor from an existing ApiPromise instance.\n\t *\n\t * @param api - Connected ApiPromise instance\n\t * @param substratePrivateKey - Private key for signing extrinsics (optional for read-only operations)\n\t */\n\tstatic fromApi(api: ApiPromise, substratePrivateKey?: string): IntentsCoprocessor {\n\t\treturn new IntentsCoprocessor(api, substratePrivateKey, false)\n\t}\n\n\tprivate constructor(\n\t\tprivate api: ApiPromise,\n\t\tprivate substratePrivateKey?: string,\n\t\tprivate ownsConnection: boolean = false,\n\t) {}\n\n\t/**\n\t * Disconnects the underlying API connection if this instance owns it.\n\t * Only disconnects if created via `connect()`, not when using shared connections.\n\t */\n\tasync disconnect(): Promise<void> {\n\t\tif (this.ownsConnection) {\n\t\t\tawait this.api.disconnect()\n\t\t}\n\t}\n\n\t/**\n\t * Creates a Substrate keypair from the configured private key.\n\t * Supports hex seed (with or without 0x), mnemonic phrases, and URI derivation paths (//Alice).\n\t */\n\tpublic getKeyPair(): KeyringPair {\n\t\tif (!this.substratePrivateKey) {\n\t\t\tthrow new Error(\"Substrate PrivateKey Required\")\n\t\t}\n\n\t\tconst keyring = new Keyring({ type: \"sr25519\" })\n\n\t\tif (this.substratePrivateKey.startsWith(\"//\")) {\n\t\t\treturn keyring.addFromUri(this.substratePrivateKey)\n\t\t}\n\t\tif (this.substratePrivateKey.includes(\" \")) {\n\t\t\treturn keyring.addFromMnemonic(this.substratePrivateKey)\n\t\t}\n\t\tconst hex = this.substratePrivateKey.startsWith(\"0x\")\n\t\t\t? this.substratePrivateKey.slice(2)\n\t\t\t: this.substratePrivateKey\n\t\tconst seedBytes = Buffer.from(hex, \"hex\")\n\t\treturn keyring.addFromSeed(seedBytes)\n\t}\n\n\t/**\n\t * Signs and sends an extrinsic. Submissions are serialised through {@link submissionQueue} so\n\t * concurrent calls never collide on the substrate account nonce — each extrinsic reaches a block\n\t * before the next is signed.\n\t */\n\tprivate async signAndSendExtrinsic(\n\t\textrinsic: SubmittableExtrinsic<\"promise\">,\n\t\tmaxRetries: number = 3,\n\t\ttimeoutMs: number = 30_000,\n\t): Promise<BidSubmissionResult> {\n\t\tconst result = await this.submissionQueue.add(() => this.sendExtrinsicWithRetries(extrinsic, maxRetries, timeoutMs))\n\t\treturn result ?? { success: false, error: \"Submission queue returned no result\" }\n\t}\n\n\t/**\n\t * Signs and sends an extrinsic, handling status updates and errors.\n\t * Implements retry logic with progressive tip increases for stuck transactions.\n\t */\n\tprivate async sendExtrinsicWithRetries(\n\t\textrinsic: SubmittableExtrinsic<\"promise\">,\n\t\tmaxRetries: number,\n\t\ttimeoutMs: number,\n\t): Promise<BidSubmissionResult> {\n\t\tconst keyPair = this.getKeyPair()\n\t\tconst baseTip = 1_000_000_000n // 0.001 BRIDGE tip to increase priority\n\t\tlet attempt = 0\n\n\t\twhile (attempt < maxRetries) {\n\t\t\tconst currentTip = baseTip * BigInt(2 ** attempt) // Double tip on each retry\n\t\t\tattempt++\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.sendWithTimeout(extrinsic, keyPair, currentTip, timeoutMs)\n\t\t\t\tif (result.success || result.error?.includes(\"Dispatch error\")) {\n\t\t\t\t\t// Return immediately on success or dispatch errors (non-recoverable)\n\t\t\t\t\treturn result\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\t// Unexpected error, return immediately\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: err instanceof Error ? err.message : \"Unknown error\",\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: `Transaction failed after ${maxRetries} attempts`,\n\t\t}\n\t}\n\n\t/**\n\t * Sends an extrinsic with a timeout\n\t */\n\tprivate async sendWithTimeout(\n\t\textrinsic: SubmittableExtrinsic<\"promise\">,\n\t\tkeyPair: KeyringPair,\n\t\ttip: bigint,\n\t\ttimeoutMs: number,\n\t): Promise<BidSubmissionResult> {\n\t\treturn new Promise<BidSubmissionResult>((resolve) => {\n\t\t\tlet resolved = false\n\t\t\tlet unsubscribe: (() => void) | null = null\n\n\t\t\t// Set timeout to detect stuck transactions\n\t\t\tconst timeoutId = setTimeout(() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true\n\t\t\t\t\tif (unsubscribe) {\n\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t}\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\terror: `Transaction timed out after ${timeoutMs}ms`,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}, timeoutMs)\n\n\t\t\textrinsic\n\t\t\t\t.signAndSend(keyPair, { tip }, (result) => {\n\t\t\t\t\tif (resolved) return\n\n\t\t\t\t\tif (result.dispatchError && (result.status.isInBlock || result.status.isFinalized)) {\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\t\t\t\t\t\tlet errorMsg: string\n\t\t\t\t\t\tif (result.dispatchError.isModule) {\n\t\t\t\t\t\t\tconst decoded = this.api.registry.findMetaError(result.dispatchError.asModule)\n\t\t\t\t\t\t\terrorMsg = `Dispatch error: ${decoded.section}::${decoded.name}`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\terrorMsg = `Dispatch error: ${result.dispatchError.toString()}`\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: errorMsg,\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tresult.status.isDropped ||\n\t\t\t\t\t\tresult.status.isInvalid ||\n\t\t\t\t\t\tresult.status.isUsurped ||\n\t\t\t\t\t\tresult.status.isFinalityTimeout\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Pool-level terminal statuses — don't retry, let caller decide\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\t\terror: `Transaction ${result.status.type.toLowerCase()}`,\n\t\t\t\t\t\t})\n\t\t\t\t\t} else if (result.status.isInBlock || result.status.isFinalized) {\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\n\t\t\t\t\t\t// A utility.batch extrinsic is itself `Ok` even when one of its calls fails: the\n\t\t\t\t\t\t// failure surfaces as a BatchInterrupted event, NOT a top-level dispatchError.\n\t\t\t\t\t\t// BatchInterrupted { index, error } means calls [0, index) succeeded and the call\n\t\t\t\t\t\t// at `index` failed (the rest are skipped). We order batches so the primary call\n\t\t\t\t\t\t// is first, so an interruption at index 0 means nothing meaningful landed -> report\n\t\t\t\t\t\t// failure. A later index means the primary call succeeded and only a trailing\n\t\t\t\t\t\t// best-effort call (e.g. a deposit retraction) was skipped, which is still success.\n\t\t\t\t\t\tconst interrupted = result.events.find(\n\t\t\t\t\t\t\t({ event }) => event.section === \"utility\" && event.method === \"BatchInterrupted\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif (interrupted) {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\t\tconst [indexCodec, dispatchError] = interrupted.event.data as any\n\t\t\t\t\t\t\tif (Number(indexCodec.toString()) === 0) {\n\t\t\t\t\t\t\t\tlet errorMsg: string\n\t\t\t\t\t\t\t\tif (dispatchError?.isModule) {\n\t\t\t\t\t\t\t\t\tconst decoded = this.api.registry.findMetaError(dispatchError.asModule)\n\t\t\t\t\t\t\t\t\terrorMsg = `Dispatch error: ${decoded.section}::${decoded.name}`\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\terrorMsg = `Dispatch error: batch interrupted (${dispatchError?.toString()})`\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tresolve({ success: false, error: errorMsg })\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\tblockHash: (result.status.isInBlock\n\t\t\t\t\t\t\t\t? result.status.asInBlock\n\t\t\t\t\t\t\t\t: result.status.asFinalized\n\t\t\t\t\t\t\t).toHex() as HexString,\n\t\t\t\t\t\t\textrinsicHash: extrinsic.hash.toHex() as HexString,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then((unsub) => {\n\t\t\t\t\tif (resolved) {\n\t\t\t\t\t\tunsub()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunsubscribe = unsub\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((err: Error) => {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolved = true\n\t\t\t\t\t\tclearTimeout(timeoutId)\n\t\t\t\t\t\tresolve({ success: false, error: err.message })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Submits a bid to Hyperbridge's pallet-intents\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @param userOp - The encoded PackedUserOperation as hex string\n\t * @returns BidSubmissionResult with success status and block/extrinsic hash\n\t */\n\tasync submitBid(commitment: HexString, userOp: HexString): Promise<BidSubmissionResult> {\n\t\ttry {\n\t\t\tconst extrinsic = this.api.tx.intentsCoprocessor.placeBid(commitment, userOp)\n\t\t\treturn await this.signAndSendExtrinsic(extrinsic)\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Retracts a bid from Hyperbridge and reclaims the deposit\n\t *\n\t * Use this to remove unused quotes and claim back deposited BRIDGE tokens.\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @returns BidSubmissionResult with success status and block/extrinsic hash\n\t */\n\tasync retractBid(commitment: HexString): Promise<BidSubmissionResult> {\n\t\ttry {\n\t\t\tconst extrinsic = this.api.tx.intentsCoprocessor.retractBid(commitment)\n\t\t\treturn await this.signAndSendExtrinsic(extrinsic)\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Places a new bid and retracts a previous one in a single transaction via utility.batch.\n\t *\n\t * The new bid is the primary operation, so `placeBid` MUST run first. `utility.batch` is\n\t * non-atomic: a failing call interrupts the batch (via a BatchInterrupted event) without\n\t * reverting the calls that already succeeded. Placing first guarantees the new bid lands even\n\t * when the retraction then fails — which it routinely does, because a previous commitment's bid\n\t * may already be gone (or was itself never placed), making `retractBid` return `BidNotFound`.\n\t *\n\t * Ordering retraction first (the previous behaviour) caused a self-sustaining cascade: a\n\t * `BidNotFound` on the leading retract skipped the trailing `placeBid`, so the current bid never\n\t * landed, so the *next* interval's retract of that never-placed commitment also failed, and so\n\t * on — silently, because the batch extrinsic itself reports success. The deposit reclaim is\n\t * best-effort; landing the bid is not.\n\t *\n\t * @param retractCommitment - The order commitment of the bid to retract (bytes32)\n\t * @param bidCommitment - The order commitment of the new bid (bytes32)\n\t * @param userOp - The encoded PackedUserOperation as hex string\n\t * @returns BidSubmissionResult with success status and block/extrinsic hash\n\t */\n\tasync submitBidWithRetraction(\n\t\tretractCommitment: HexString,\n\t\tbidCommitment: HexString,\n\t\tuserOp: HexString,\n\t): Promise<BidSubmissionResult> {\n\t\ttry {\n\t\t\tconst batch = this.api.tx.utility.batch([\n\t\t\t\tthis.api.tx.intentsCoprocessor.placeBid(bidCommitment, userOp),\n\t\t\t\tthis.api.tx.intentsCoprocessor.retractBid(retractCommitment),\n\t\t\t])\n\t\t\treturn await this.signAndSendExtrinsic(batch)\n\t\t} catch (error) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: error instanceof Error ? error.message : \"Unknown error\",\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetches all bid storage entries for a given order commitment.\n\t * Returns the on-chain data only (filler addresses and deposits).\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @returns Array of BidStorageEntry objects\n\t */\n\tasync getBidStorageEntries(commitment: HexString): Promise<BidStorageEntry[]> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst entries = await (this.api.query.intentsCoprocessor.bids as any).entries(commitment)\n\n\t\treturn entries.map(([storageKey, depositValue]: [any, any]) => ({\n\t\t\tcommitment,\n\t\t\tfiller: storageKey.args[1].toString() as string,\n\t\t\tdeposit: BigInt(depositValue.toString()),\n\t\t}))\n\t}\n\n\t/**\n\t * Fetches all bids for a given order commitment from Hyperbridge.\n\t *\n\t * Uses the custom intents_getBidsForOrder RPC if available on the node\n\t * for a single round-trip. Falls back to parallel storage + offchain\n\t * lookups otherwise.\n\t *\n\t * @param commitment - The order commitment hash (bytes32)\n\t * @returns Array of FillerBid objects containing filler address, userOp, and deposit\n\t */\n\tasync getBidsForOrder(commitment: HexString): Promise<FillerBid[]> {\n\t\ttry {\n\t\t\treturn await this.getBidsViaRpc(commitment)\n\t\t} catch (err) {\n\t\t\tconsole.warn(\"intents RPC failed, falling back to storage queries:\", err)\n\t\t}\n\n\t\treturn await this.getBidsViaStorage(commitment)\n\t}\n\n\t/**\n\t * Fetches bids using the custom intents_getBidsForOrder RPC.\n\t * Single round-trip but does not include deposit amounts.\n\t */\n\tprivate async getBidsViaRpc(commitment: HexString): Promise<FillerBid[]> {\n\t\tconst result: RpcBidInfo[] = await (this.api as any)._rpcCore.provider.send(\"intents_getBidsForOrder\", [\n\t\t\tcommitment,\n\t\t])\n\n\t\treturn result.map((entry) => {\n\t\t\tconst userOp = decodeUserOpScale(entry.user_op as HexString)\n\t\t\tconst filler = new Keyring({ type: \"sr25519\" }).encodeAddress(hexToU8a(entry.filler))\n\t\t\treturn { filler, userOp, deposit: 0n }\n\t\t})\n\t}\n\n\t/**\n\t * Fetches bids using on-chain storage entries + parallel offchain lookups.\n\t * Slower but works on all nodes and includes deposit amounts.\n\t */\n\tprivate async getBidsViaStorage(commitment: HexString): Promise<FillerBid[]> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst entries = await (this.api.query.intentsCoprocessor.bids as any).entries(commitment)\n\n\t\tif (entries.length === 0) return []\n\n\t\tconst bidPromises = entries.map(async ([storageKey, depositValue]: [any, any]) => {\n\t\t\ttry {\n\t\t\t\tconst filler = storageKey.args[1].toString()\n\t\t\t\tconst deposit = BigInt(depositValue.toString())\n\n\t\t\t\tconst offchainKey = this.buildOffchainBidKey(commitment, filler)\n\t\t\t\tconst offchainKeyHex = u8aToHex(offchainKey)\n\n\t\t\t\tconst offchainResult = await this.api.rpc.offchain.localStorageGet(\"PERSISTENT\", offchainKeyHex)\n\n\t\t\t\tif (!offchainResult || offchainResult.isNone) return null\n\n\t\t\t\tconst bidData = offchainResult.unwrap().toHex() as HexString\n\t\t\t\tconst decoded = this.decodeBid(bidData)\n\n\t\t\t\treturn { filler: decoded.filler, userOp: decoded.userOp, deposit }\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t})\n\n\t\tconst results = await Promise.all(bidPromises)\n\t\treturn results.filter((b): b is FillerBid => b !== null)\n\t}\n\n\t/** Decodes SCALE-encoded Bid struct and SCALE-encoded PackedUserOperation */\n\tprivate decodeBid(hex: HexString): { filler: string; userOp: PackedUserOperation } {\n\t\tconst decoded = BidCodec.dec(hexToU8a(hex))\n\t\tconst filler = new Keyring({ type: \"sr25519\" }).encodeAddress(new Uint8Array(decoded.filler))\n\t\tconst userOpHex = u8aToHex(new Uint8Array(decoded.user_op)) as HexString\n\n\t\t// Decode UserOp using SCALE codec\n\t\tconst userOp = decodeUserOpScale(userOpHex)\n\n\t\treturn { filler, userOp }\n\t}\n\n\t/** Builds offchain storage key: \"intents::bid::\" + commitment + filler */\n\tprivate buildOffchainBidKey(commitment: HexString, filler: string): Uint8Array {\n\t\treturn u8aConcat(OFFCHAIN_BID_PREFIX, hexToU8a(commitment), decodeAddress(filler))\n\t}\n\n\t/**\n\t * Fetches the ABI-encoded phantom order from offchain storage and decodes it\n\t * into an `Order` object. The pallet writes the order bytes under the key\n\t * `intents::phantom::order::<commitment>` when it calls `on_initialize`.\n\t *\n\t * Returns `null` if the key is absent (e.g. the node is not an offchain worker\n\t * or the commitment has expired and been cleared).\n\t */\n\tasync fetchPhantomOrder(commitment: HexString): Promise<Order | null> {\n\t\tconst key = u8aConcat(OFFCHAIN_PHANTOM_PREFIX, hexToU8a(commitment))\n\t\tconst result = await this.api.rpc.offchain.localStorageGet(\"PERSISTENT\", u8aToHex(key))\n\t\tif (!result || result.isNone) return null\n\n\t\tconst rawHex = result.unwrap().toHex() as HexString\n\t\tif (rawHex === \"0x\" || rawHex === \"0x00\") return null\n\n\t\tconst placeOrderAbi = (IntentGatewayV2.ABI as readonly { type: string; name?: string; inputs?: unknown[] }[]).find(\n\t\t\t(item) => item.type === \"function\" && item.name === \"placeOrder\",\n\t\t)\n\t\tconst orderType = placeOrderAbi?.inputs?.[0]\n\t\tif (!orderType) return null\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst [decoded] = decodeAbiParameters([orderType as any], rawHex)\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst d = decoded as any\n\t\tconst textDecoder = new TextDecoder()\n\n\t\treturn {\n\t\t\tid: commitment,\n\t\t\tuser: d.user as HexString,\n\t\t\tsource: textDecoder.decode(hexToBytes(d.source as HexString)),\n\t\t\tdestination: textDecoder.decode(hexToBytes(d.destination as HexString)),\n\t\t\tdeadline: d.deadline as bigint,\n\t\t\tnonce: d.nonce as bigint,\n\t\t\tfees: d.fees as bigint,\n\t\t\tsession: d.session as HexString,\n\t\t\tpredispatch: {\n\t\t\t\tassets: (d.predispatch.assets as { token: HexString; amount: bigint }[]).map((a) => ({\n\t\t\t\t\ttoken: a.token,\n\t\t\t\t\tamount: a.amount,\n\t\t\t\t})),\n\t\t\t\tcall: d.predispatch.call as HexString,\n\t\t\t},\n\t\t\tinputs: (d.inputs as { token: HexString; amount: bigint }[]).map((i) => ({\n\t\t\t\ttoken: i.token,\n\t\t\t\tamount: i.amount,\n\t\t\t})),\n\t\t\toutput: {\n\t\t\t\tbeneficiary: d.output.beneficiary as HexString,\n\t\t\t\tassets: (d.output.assets as { token: HexString; amount: bigint }[]).map((a) => ({\n\t\t\t\t\ttoken: a.token,\n\t\t\t\t\tamount: a.amount,\n\t\t\t\t})),\n\t\t\t\tcall: d.output.call as HexString,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Reads the PhantomOrderRegistered events emitted in a single block.\n\t */\n\tasync getPhantomOrdersInBlock(blockNumber: number): Promise<PhantomOrderEvent[]> {\n\t\tconst blockHash = await this.api.rpc.chain.getBlockHash(blockNumber)\n\t\tconst apiAt = await this.api.at(blockHash)\n\t\tconst records = await apiAt.query.system.events()\n\n\t\tconst orders: PhantomOrderEvent[] = []\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tfor (const { event } of records as unknown as Array<{ event: any }>) {\n\t\t\tif (event.section !== \"intentsCoprocessor\" || event.method !== \"PhantomOrderRegistered\") continue\n\t\t\tconst [commitment, chain, createdAt, legs] = event.data\n\t\t\torders.push({\n\t\t\t\tcommitment: commitment.toHex() as HexString,\n\t\t\t\tchain: new TextDecoder().decode(hexToU8a(chain.toHex())),\n\t\t\t\tcreatedAt: createdAt.toNumber(),\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tlegs: (legs as any[]).map((leg: any) => ({\n\t\t\t\t\ttokenA: leg.tokenA.toHex() as HexString,\n\t\t\t\t\ttokenB: leg.tokenB.toHex() as HexString,\n\t\t\t\t\tstandardAmount: BigInt(leg.standardAmount.toString()),\n\t\t\t\t})),\n\t\t\t})\n\t\t}\n\t\treturn orders\n\t}\n\n\t/**\n\t * Polls for newly registered phantom orders, invoking the callback once per order.\n\t *\n\t * Each tick reads the current head and scans every block between the last one processed and that\n\t * head, so the block cursor — not the connection — determines what has been seen. This replaced a\n\t * system.events subscription, which was only as reliable as its socket: polkadot-js reconnects\n\t * the transport but does not reliably re-establish storage subscriptions, and anything emitted\n\t * while disconnected was lost silently. With a bid window measured in a handful of blocks, that\n\t * meant silently missed bids.\n\t *\n\t * Scanning a block range is gap-free rather than merely self-healing: an outage delays orders but\n\t * cannot drop them, because the cursor only advances past a block whose events were actually\n\t * read. Recovery replays the backlog.\n\t *\n\t * Returns a function that stops polling.\n\t */\n\tpollPhantomOrders(callback: (event: PhantomOrderEvent) => void, options: PollPhantomOrdersOptions = {}): () => void {\n\t\tconst { intervalMs = 6_000, maxBlocksPerPoll = 500, lookbackBlocks = 0, onError } = options\n\n\t\t// Last block whose events have been delivered. Null until the first successful head read.\n\t\tlet cursor: number | null = null\n\t\tlet inFlight = false\n\t\tlet stopped = false\n\n\t\tconst tick = async (): Promise<void> => {\n\t\t\t// A scan slower than the interval must not stack up behind itself.\n\t\t\tif (inFlight || stopped) return\n\t\t\tinFlight = true\n\t\t\ttry {\n\t\t\t\tconst head = (await this.api.rpc.chain.getHeader()).number.toNumber()\n\n\t\t\t\tif (cursor === null) {\n\t\t\t\t\t// Start just below the head so the head itself is scanned, less any lookback.\n\t\t\t\t\tcursor = Math.max(head - 1 - lookbackBlocks, -1)\n\t\t\t\t}\n\t\t\t\tif (head <= cursor) return\n\n\t\t\t\tconst to = Math.min(head, cursor + maxBlocksPerPoll)\n\t\t\t\tfor (let blockNumber = cursor + 1; blockNumber <= to; blockNumber++) {\n\t\t\t\t\tif (stopped) return\n\t\t\t\t\tconst orders = await this.getPhantomOrdersInBlock(blockNumber)\n\t\t\t\t\tfor (const order of orders) callback(order)\n\t\t\t\t\t// Advance per block, not per range: a failure partway through re-scans only the\n\t\t\t\t\t// blocks that were never read, and never re-delivers ones that were.\n\t\t\t\t\tcursor = blockNumber\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tonError?.(err)\n\t\t\t} finally {\n\t\t\t\tinFlight = false\n\t\t\t}\n\t\t}\n\n\t\tvoid tick()\n\t\tconst timer = setInterval(() => void tick(), intervalMs)\n\n\t\treturn () => {\n\t\t\tstopped = true\n\t\t\tclearInterval(timer)\n\t\t}\n\t}\n}\n","import {\n\tkeccak256,\n\ttoHex,\n\tencodeAbiParameters,\n\tdecodeAbiParameters,\n\tdecodeFunctionData,\n\tencodeFunctionData,\n\tconcat,\n\tpad,\n\tencodePacked,\n\tparseAbiParameters,\n\ttype Hex,\n} from \"viem\"\nimport { privateKeyToAccount } from \"viem/accounts\"\nimport type { HexString, PackedUserOperation } from \"@/types\"\nimport type { ERC7821Call } from \"@/types\"\nimport ERC7821ABI from \"@/abis/erc7281\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { ERC7821_BATCH_MODE } from \"./types\"\nimport type { BundlerMethod } from \"./types\"\n\n/**\n * EIP-712 type hash for the `SelectSolver` struct.\n *\n * Computed as `keccak256(\"SelectSolver(bytes32 commitment,address solver)\")`.\n * Used when the session key signs a solver-selection message so that the\n * IntentGatewayV2 contract can verify the choice on-chain.\n */\nexport const SELECT_SOLVER_TYPEHASH = keccak256(toHex(\"SelectSolver(bytes32 commitment,address solver)\"))\n\n/**\n * EIP-712 type hash for the `PackedUserOperation` struct.\n *\n * Matches the ERC-4337 v0.8 `PackedUserOperation` type definition used by\n * EntryPoint v0.8. Used when computing the UserOperation hash that solvers\n * must sign before submitting bids.\n */\nexport const PACKED_USEROP_TYPEHASH = keccak256(\n\ttoHex(\n\t\t\"PackedUserOperation(address sender,uint256 nonce,bytes initCode,bytes callData,bytes32 accountGasLimits,uint256 preVerificationGas,bytes32 gasFees,bytes paymasterAndData)\",\n\t),\n)\n\n/**\n * EIP-712 type hash for the `EIP712Domain` struct.\n *\n * Computed as `keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\")`.\n * Used to construct domain separators for all EIP-712 messages in the\n * IntentGatewayV2 protocol.\n */\nexport const DOMAIN_TYPEHASH = keccak256(\n\ttoHex(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n)\n\n/**\n * Crypto and encoding utilities for IntentGatewayV2.\n *\n * Provides helpers for EIP-712 domain separation, UserOperation hashing,\n * gas-limit packing/unpacking, bundler JSON-RPC calls, and ERC-7821\n * batch-execute encoding and decoding. All methods are stateless with respect\n * to the protocol but require the shared {@link IntentGatewayContext} for the\n * bundler URL.\n */\nexport class CryptoUtils {\n\t/**\n\t * @param ctx - Shared IntentsV2 context; used to access the bundler URL for\n\t * JSON-RPC calls.\n\t */\n\tconstructor(private readonly ctx: IntentGatewayContext) {}\n\n\t/**\n\t * Computes an EIP-712 domain separator for a given contract.\n\t *\n\t * @param contractName - Human-readable name of the contract (e.g. `\"IntentGateway\"`).\n\t * @param version - Version string (e.g. `\"2\"`).\n\t * @param chainId - Chain ID of the network the contract is deployed on.\n\t * @param contractAddress - Address of the verifying contract.\n\t * @returns The 32-byte domain separator as a hex string.\n\t */\n\tstatic getDomainSeparator(contractName: string, version: string, chainId: bigint, contractAddress: HexString): HexString {\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters(parseAbiParameters(\"bytes32, bytes32, bytes32, uint256, address\"), [\n\t\t\t\tDOMAIN_TYPEHASH,\n\t\t\t\tkeccak256(toHex(contractName)),\n\t\t\t\tkeccak256(toHex(version)),\n\t\t\t\tchainId,\n\t\t\t\tcontractAddress,\n\t\t\t]),\n\t\t)\n\t}\n\n\t/**\n\t * Signs a `SelectSolver` EIP-712 message with a session key.\n\t *\n\t * The session key authorises the selection of a specific solver for the\n\t * given order commitment. The resulting signature is appended to the\n\t * solver's UserOperation signature before bundle submission.\n\t *\n\t * @param commitment - The order commitment (bytes32) being fulfilled.\n\t * @param solverAddress - Address of the solver account selected to fill the order.\n\t * @param domainSeparator - EIP-712 domain separator for the IntentGatewayV2 contract.\n\t * @param privateKey - Hex-encoded private key of the session key that signs the message.\n\t * @returns The ECDSA signature as a hex string, or `null` if signing fails.\n\t */\n\tstatic async signSolverSelection(\n\t\tcommitment: HexString,\n\t\tsolverAddress: HexString,\n\t\tdomainSeparator: HexString,\n\t\tprivateKey: HexString,\n\t): Promise<HexString | null> {\n\t\tconst account = privateKeyToAccount(privateKey as Hex)\n\n\t\tconst structHash = keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[{ type: \"bytes32\" }, { type: \"bytes32\" }, { type: \"address\" }],\n\t\t\t\t[SELECT_SOLVER_TYPEHASH, commitment, solverAddress],\n\t\t\t),\n\t\t)\n\n\t\tconst digest = keccak256(concat([\"0x1901\" as Hex, domainSeparator as Hex, structHash]))\n\t\tconst signature = await account.sign({ hash: digest })\n\n\t\treturn signature as HexString\n\t}\n\n\t/**\n\t * Computes the EIP-712 hash of a `PackedUserOperation` as defined by\n\t * ERC-4337 EntryPoint v0.8.\n\t *\n\t * @param userOp - The packed UserOperation to hash.\n\t * @param entryPoint - Address of the EntryPoint v0.8 contract.\n\t * @param chainId - Chain ID of the network on which the operation will execute.\n\t * @returns The UserOperation hash as a hex string.\n\t */\n\tstatic computeUserOpHash(userOp: PackedUserOperation, entryPoint: Hex, chainId: bigint): Hex {\n\t\tconst structHash = CryptoUtils.getPackedUserStructHash(userOp)\n\t\tconst domainSeparator = CryptoUtils.getDomainSeparator(\"ERC4337\", \"1\", chainId, entryPoint as HexString)\n\n\t\treturn keccak256(\n\t\t\tencodePacked([\"bytes1\", \"bytes1\", \"bytes32\", \"bytes32\"], [\"0x19\", \"0x01\", domainSeparator, structHash]),\n\t\t)\n\t}\n\n\t/**\n\t * Derives the ERC-4337 nonce key that binds a bid UserOperation to its\n\t * order and session key: the lower 192 bits of\n\t * `keccak256(commitment ‖ sessionKey)`. `SolverAccount` rejects bid\n\t * operations whose nonce key differs — this is what lets the solver sign\n\t * the plain userOpHash while staying committed to the order and to the\n\t * session key it bid against.\n\t *\n\t * @param commitment - The order commitment (`order.id`).\n\t * @param sessionKey - The order's session key address (`order.session`).\n\t * @returns The 192-bit nonce key as a bigint (pass to `EntryPoint.getNonce`).\n\t */\n\tstatic bidNonceKey(commitment: HexString, sessionKey: HexString): bigint {\n\t\treturn BigInt(keccak256(encodePacked([\"bytes32\", \"address\"], [commitment, sessionKey]))) & ((1n << 192n) - 1n)\n\t}\n\n\t/**\n\t * Builds the EIP-712 typed-data payload whose digest is the EntryPoint v0.8\n\t * `userOpHash` (i.e. `hashTypedData(packedUserOpTypedData(...)) ===\n\t * computeUserOpHash(...)`). Signing this typed data is bit-identical to\n\t * signing the raw userOpHash, but keeps the full operation visible to\n\t * signing infrastructure (hardware wallets, MPC/TEE policy engines) instead\n\t * of an opaque 32-byte digest.\n\t *\n\t * @param userOp - The packed UserOperation to sign (signature field ignored).\n\t * @param entryPoint - Address of the EntryPoint v0.8 contract.\n\t * @param chainId - Chain ID of the network on which the operation will execute.\n\t * @returns A viem `TypedDataDefinition` for the operation.\n\t */\n\tstatic packedUserOpTypedData(userOp: PackedUserOperation, entryPoint: Hex, chainId: bigint) {\n\t\treturn {\n\t\t\tdomain: {\n\t\t\t\tname: \"ERC4337\",\n\t\t\t\tversion: \"1\",\n\t\t\t\tchainId,\n\t\t\t\tverifyingContract: entryPoint,\n\t\t\t},\n\t\t\ttypes: {\n\t\t\t\tPackedUserOperation: [\n\t\t\t\t\t{ name: \"sender\", type: \"address\" },\n\t\t\t\t\t{ name: \"nonce\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"initCode\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"callData\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"accountGasLimits\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"preVerificationGas\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"gasFees\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"paymasterAndData\", type: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t\tprimaryType: \"PackedUserOperation\" as const,\n\t\t\tmessage: {\n\t\t\t\tsender: userOp.sender,\n\t\t\t\tnonce: userOp.nonce,\n\t\t\t\tinitCode: userOp.initCode,\n\t\t\t\tcallData: userOp.callData,\n\t\t\t\taccountGasLimits: userOp.accountGasLimits,\n\t\t\t\tpreVerificationGas: userOp.preVerificationGas,\n\t\t\t\tgasFees: userOp.gasFees,\n\t\t\t\tpaymasterAndData: userOp.paymasterAndData,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Computes the EIP-712 struct hash of a `PackedUserOperation`.\n\t *\n\t * Hashes dynamic fields (`initCode`, `callData`, `paymasterAndData`) before\n\t * ABI-encoding so the final hash is a fixed-length 32-byte value.\n\t *\n\t * @param userOp - The packed UserOperation to hash.\n\t * @returns The struct hash as a 32-byte hex string.\n\t */\n\tstatic getPackedUserStructHash(userOp: PackedUserOperation): HexString {\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\tparseAbiParameters(\"bytes32, address, uint256, bytes32, bytes32, bytes32, uint256, bytes32, bytes32\"),\n\t\t\t\t[\n\t\t\t\t\tPACKED_USEROP_TYPEHASH,\n\t\t\t\t\tuserOp.sender,\n\t\t\t\t\tuserOp.nonce,\n\t\t\t\t\tkeccak256(userOp.initCode),\n\t\t\t\t\tkeccak256(userOp.callData),\n\t\t\t\t\tuserOp.accountGasLimits as Hex,\n\t\t\t\t\tuserOp.preVerificationGas,\n\t\t\t\t\tuserOp.gasFees as Hex,\n\t\t\t\t\tkeccak256(userOp.paymasterAndData),\n\t\t\t\t],\n\t\t\t),\n\t\t) as HexString\n\t}\n\n\t/**\n\t * Packs `verificationGasLimit` and `callGasLimit` into the ERC-4337\n\t * `accountGasLimits` bytes32 field.\n\t *\n\t * The high 16 bytes hold `verificationGasLimit` and the low 16 bytes hold\n\t * `callGasLimit`, matching the EntryPoint v0.8 packed representation.\n\t *\n\t * @param verificationGasLimit - Gas limit for the account verification step.\n\t * @param callGasLimit - Gas limit for the main execution call.\n\t * @returns A 32-byte hex string with both limits packed.\n\t */\n\tstatic packGasLimits(verificationGasLimit: bigint, callGasLimit: bigint): HexString {\n\t\tconst verificationGasHex = pad(toHex(verificationGasLimit), { size: 16 })\n\t\tconst callGasHex = pad(toHex(callGasLimit), { size: 16 })\n\t\treturn concat([verificationGasHex, callGasHex]) as HexString\n\t}\n\n\t/**\n\t * Packs `maxPriorityFeePerGas` and `maxFeePerGas` into the ERC-4337\n\t * `gasFees` bytes32 field.\n\t *\n\t * The high 16 bytes hold `maxPriorityFeePerGas` and the low 16 bytes hold\n\t * `maxFeePerGas`, matching the EntryPoint v0.8 packed representation.\n\t *\n\t * @param maxPriorityFeePerGas - Maximum tip per gas (EIP-1559).\n\t * @param maxFeePerGas - Maximum total fee per gas (EIP-1559).\n\t * @returns A 32-byte hex string with both fee values packed.\n\t */\n\tstatic packGasFees(maxPriorityFeePerGas: bigint, maxFeePerGas: bigint): HexString {\n\t\tconst priorityFeeHex = pad(toHex(maxPriorityFeePerGas), { size: 16 })\n\t\tconst maxFeeHex = pad(toHex(maxFeePerGas), { size: 16 })\n\t\treturn concat([priorityFeeHex, maxFeeHex]) as HexString\n\t}\n\n\t/**\n\t * Unpacks the `accountGasLimits` bytes32 field back into its constituent\n\t * gas limits.\n\t *\n\t * @param accountGasLimits - The packed 32-byte gas limits field from a `PackedUserOperation`.\n\t * @returns Object with `verificationGasLimit` and `callGasLimit` as bigints.\n\t */\n\tstatic unpackGasLimits(accountGasLimits: HexString): { verificationGasLimit: bigint; callGasLimit: bigint } {\n\t\tconst hex = accountGasLimits.slice(2)\n\t\tconst verificationGasLimit = BigInt(`0x${hex.slice(0, 32)}`)\n\t\tconst callGasLimit = BigInt(`0x${hex.slice(32, 64)}`)\n\t\treturn { verificationGasLimit, callGasLimit }\n\t}\n\n\t/**\n\t * Unpacks the `gasFees` bytes32 field back into its constituent fee values.\n\t *\n\t * @param gasFees - The packed 32-byte gas fees field from a `PackedUserOperation`.\n\t * @returns Object with `maxPriorityFeePerGas` and `maxFeePerGas` as bigints.\n\t */\n\tstatic unpackGasFees(gasFees: HexString): { maxPriorityFeePerGas: bigint; maxFeePerGas: bigint } {\n\t\tconst hex = gasFees.slice(2)\n\t\tconst maxPriorityFeePerGas = BigInt(`0x${hex.slice(0, 32)}`)\n\t\tconst maxFeePerGas = BigInt(`0x${hex.slice(32, 64)}`)\n\t\treturn { maxPriorityFeePerGas, maxFeePerGas }\n\t}\n\n\t/**\n\t * Converts a packed `PackedUserOperation` into the JSON object format\n\t * expected by ERC-4337 bundler JSON-RPC endpoints.\n\t *\n\t * Unpacks `accountGasLimits` and `gasFees`, separates optional factory and\n\t * paymaster fields, and converts all numeric fields to hex strings.\n\t *\n\t * @param userOp - The packed UserOperation to convert.\n\t * @returns A plain object safe to pass as the first element of bundler RPC params.\n\t */\n\tstatic prepareBundlerCall(userOp: PackedUserOperation): Record<string, unknown> {\n\t\tconst { verificationGasLimit, callGasLimit } = CryptoUtils.unpackGasLimits(userOp.accountGasLimits)\n\t\tconst { maxPriorityFeePerGas, maxFeePerGas } = CryptoUtils.unpackGasFees(userOp.gasFees)\n\n\t\tconst hasFactory = userOp.initCode && userOp.initCode !== \"0x\" && userOp.initCode.length > 2\n\t\tconst factory = hasFactory ? (`0x${userOp.initCode.slice(2, 42)}` as HexString) : undefined\n\t\tconst factoryData = hasFactory ? (`0x${userOp.initCode.slice(42)}` as HexString) : undefined\n\n\t\t// EntryPoint v0.8 packed paymasterAndData layout:\n\t\t// paymaster (20 bytes) || paymasterVerificationGasLimit (uint128, 16 bytes)\n\t\t// || paymasterPostOpGasLimit (uint128, 16 bytes) || paymasterData (variable)\n\t\tconst hasPaymaster =\n\t\t\tuserOp.paymasterAndData && userOp.paymasterAndData !== \"0x\" && userOp.paymasterAndData.length > 2\n\t\tconst pmHex = hasPaymaster ? userOp.paymasterAndData.slice(2) : \"\"\n\t\tconst paymaster = hasPaymaster ? (`0x${pmHex.slice(0, 40)}` as HexString) : undefined\n\t\tconst paymasterVerificationGasLimit = hasPaymaster ? BigInt(`0x${pmHex.slice(40, 72)}`) : undefined\n\t\tconst paymasterPostOpGasLimit = hasPaymaster ? BigInt(`0x${pmHex.slice(72, 104)}`) : undefined\n\t\tconst paymasterData = hasPaymaster ? (`0x${pmHex.slice(104)}` as HexString) : undefined\n\n\t\tconst userOpBundler: Record<string, unknown> = {\n\t\t\tsender: userOp.sender,\n\t\t\tnonce: toHex(userOp.nonce),\n\t\t\tcallData: userOp.callData,\n\t\t\tcallGasLimit: toHex(callGasLimit),\n\t\t\tverificationGasLimit: toHex(verificationGasLimit),\n\t\t\tpreVerificationGas: toHex(userOp.preVerificationGas),\n\t\t\tmaxFeePerGas: toHex(maxFeePerGas),\n\t\t\tmaxPriorityFeePerGas: toHex(maxPriorityFeePerGas),\n\t\t\tsignature: userOp.signature,\n\t\t}\n\n\t\tif (factory) {\n\t\t\tuserOpBundler.factory = factory\n\t\t\tuserOpBundler.factoryData = factoryData || \"0x\"\n\t\t}\n\n\t\tif (paymaster) {\n\t\t\tuserOpBundler.paymaster = paymaster\n\t\t\tuserOpBundler.paymasterData = paymasterData || \"0x\"\n\t\t\tuserOpBundler.paymasterVerificationGasLimit = toHex(paymasterVerificationGasLimit!)\n\t\t\tuserOpBundler.paymasterPostOpGasLimit = toHex(paymasterPostOpGasLimit!)\n\t\t}\n\n\t\treturn userOpBundler\n\t}\n\n\t/**\n\t * Sends a JSON-RPC request to the configured ERC-4337 bundler endpoint.\n\t *\n\t * @param method - The JSON-RPC method name (one of {@link BundlerMethod}).\n\t * @param params - Array of parameters for the RPC call.\n\t * @returns Resolves with the `result` field of the bundler's JSON-RPC response,\n\t * typed as `T`.\n\t * @throws If the bundler URL is not configured or the bundler returns an error.\n\t */\n\tasync sendBundler<T = unknown>(method: BundlerMethod, params: unknown[] = []): Promise<T> {\n\t\tif (!this.ctx.bundlerUrl) {\n\t\t\tthrow new Error(\"Bundler URL not configured\")\n\t\t}\n\n\t\tconst response = await fetch(this.ctx.bundlerUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ jsonrpc: \"2.0\", id: 1, method, params }),\n\t\t})\n\n\t\tconst result = await response.json()\n\n\t\tif (result.error) {\n\t\t\tthrow new Error(`Bundler error: ${result.error.message || JSON.stringify(result.error)}`)\n\t\t}\n\n\t\treturn result.result\n\t}\n\n\t/**\n\t * Sends multiple JSON-RPC requests to the bundler in a single HTTP call\n\t * using JSON-RPC 2.0 batch syntax. Results are returned in the same order\n\t * as the input `requests` array.\n\t *\n\t * @throws If the bundler URL is not configured, the HTTP call fails, or any\n\t * individual response contains an error.\n\t */\n\tasync sendBundlerBatch<T extends unknown[]>(requests: { method: BundlerMethod; params: unknown[] }[]): Promise<T> {\n\t\tif (!this.ctx.bundlerUrl) {\n\t\t\tthrow new Error(\"Bundler URL not configured\")\n\t\t}\n\n\t\tconst body = requests.map((r, i) => ({\n\t\t\tjsonrpc: \"2.0\" as const,\n\t\t\tid: i + 1,\n\t\t\tmethod: r.method,\n\t\t\tparams: r.params,\n\t\t}))\n\n\t\tconst response = await fetch(this.ctx.bundlerUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify(body),\n\t\t})\n\n\t\tconst results = (await response.json()) as { id: number; result?: unknown; error?: { message?: string } }[]\n\t\tresults.sort((a, b) => a.id - b.id)\n\n\t\treturn results.map((r) => {\n\t\t\tif (r.error) {\n\t\t\t\tthrow new Error(`Bundler error: ${r.error.message || JSON.stringify(r.error)}`)\n\t\t\t}\n\t\t\treturn r.result\n\t\t}) as T\n\t}\n\n\t/**\n\t * Encodes a list of calls into ERC-7821 `execute` calldata using\n\t * single-batch mode (`ERC7821_BATCH_MODE`).\n\t *\n\t * @param calls - Ordered list of calls to batch; each specifies a `target`\n\t * address, ETH `value`, and `data`.\n\t * @returns ABI-encoded calldata for the ERC-7821 `execute(bytes32,bytes)` function.\n\t */\n\tencodeERC7821Execute(calls: ERC7821Call[]): HexString {\n\t\tconst executionData = encodeAbiParameters(\n\t\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t\t[calls.map((call) => ({ target: call.target, value: call.value, data: call.data }))],\n\t\t) as HexString\n\n\t\treturn encodeFunctionData({\n\t\t\tabi: ERC7821ABI.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [ERC7821_BATCH_MODE, executionData],\n\t\t}) as HexString\n\t}\n\n\t/**\n\t * Decodes ERC-7821 `execute` calldata back into its constituent calls.\n\t *\n\t * Returns `null` if the calldata does not match the expected `execute`\n\t * function signature or cannot be decoded.\n\t *\n\t * @param callData - Hex-encoded calldata previously produced by\n\t * {@link encodeERC7821Execute} or an equivalent encoder.\n\t * @returns Array of decoded {@link ERC7821Call} objects, or `null` on failure.\n\t */\n\tdecodeERC7821Execute(callData: HexString): ERC7821Call[] | null {\n\t\ttry {\n\t\t\tconst decoded = decodeFunctionData({\n\t\t\t\tabi: ERC7821ABI.ABI,\n\t\t\t\tdata: callData,\n\t\t\t})\n\n\t\t\tif (decoded?.functionName !== \"execute\" || !decoded.args || decoded.args.length < 2) {\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\tconst executionData = decoded.args[1] as HexString\n\n\t\t\tconst [calls] = decodeAbiParameters(\n\t\t\t\t[{ type: \"tuple[]\", components: ERC7821ABI.ABI[1].components }],\n\t\t\t\texecutionData,\n\t\t\t) as [ERC7821Call[]]\n\n\t\t\treturn calls.map((call) => ({\n\t\t\t\ttarget: call.target as HexString,\n\t\t\t\tvalue: call.value,\n\t\t\t\tdata: call.data as HexString,\n\t\t\t}))\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t}\n}\n","// Phantom-order price/liquidity aggregation. Lives in the SDK so the indexer (which persists the\n// result as entities) and the simplex E2E test share one implementation. Bid decoding (extractFill)\n// and signature recovery (recoverSigner) are injectable because the indexer must do both without\n// viem — viem's @noble/hashes keccak throws \"Uint8Array expected\" in the SubQuery VM2 sandbox — so\n// it passes VM2-safe implementations; the viem-based defaults are fine for Node consumers (tests,\n// simplex).\nimport { decodeFunctionData, encodeAbiParameters, keccak256, recoverAddress } from \"viem\"\nimport { hexToU8a, isHex, stringToU8a, u8aToHex, u8aToString } from \"@polkadot/util\"\nimport { decodeERC7821ExecuteBatch } from \"@/protocols/intents/decode-utils\"\nimport { decodeUserOpScale } from \"@/chains/intentsCoprocessor\"\nimport { CryptoUtils } from \"@/protocols/intents/CryptoUtils\"\nimport type { PackedUserOperation } from \"@/types\"\nimport IntentGatewayV2 from \"@/abis/IntentGatewayV2\"\n\nexport type HexString = `0x${string}`\n\n/**\n * ERC-4337 v0.8 EntryPoint, the contract whose userOpHash a bid's solver signature is taken over.\n * Canonical across every EVM chain we support, which is why it is a constant here rather than\n * something callers pass in (chain.ts carries the same address per chain as `EntryPointV08`).\n */\nexport const ENTRY_POINT_V08_ADDRESS = \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\" as const\n\n/** Minimal fetch shape used by the JSON-RPC POSTs below. */\nexport type FetchLike = (url: string, init: any) => Promise<{ json(): Promise<any> }>\n\n// The aggregation talks to RPCs over HTTP. In browsers/Node/tests the global `fetch` is used, but\n// the SubQuery VM2 sandbox the indexer runs in does NOT expose a global `fetch` (and node-fetch\n// crashes there), so the indexer injects a sandbox-safe implementation via setAggregationFetch().\nlet injectedFetch: FetchLike | undefined\nexport function setAggregationFetch(fetchImpl: FetchLike): void {\n\tinjectedFetch = fetchImpl\n}\nfunction rpcFetch(): FetchLike {\n\tconst f = injectedFetch ?? (globalThis as { fetch?: FetchLike }).fetch\n\tif (typeof f !== \"function\") {\n\t\tthrow new Error(\"No fetch available; call setAggregationFetch() before using the aggregation helpers\")\n\t}\n\treturn f\n}\n\n// POSTs a JSON-RPC payload and returns the parsed response, retrying with a short backoff. The node\n// intermittently returns an empty body under concurrent load (a 200 with no payload), which makes\n// response.json() throw; without a retry a single blip would silently drop a bid's quote or a whole\n// window (fetchBids throws). Throws if every attempt fails.\nasync function rpcCall(url: string, payload: object): Promise<any> {\n\tlet lastErr: unknown\n\tfor (let attempt = 0; attempt < 4; attempt++) {\n\t\tif (attempt > 0) await new Promise((resolve) => setTimeout(resolve, 150 * attempt))\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined\n\t\ttry {\n\t\t\t// Bound each attempt: the injected fetch (Node http) has no socket timeout, so a stalled\n\t\t\t// connection would otherwise hang forever and block the whole handler. Race it against a\n\t\t\t// deadline; on timeout we reject, retry, and ultimately throw so callers degrade instead.\n\t\t\tconst timeout = new Promise<never>((_, reject) => {\n\t\t\t\ttimer = setTimeout(() => reject(new Error(`rpc timeout: ${url}`)), 12_000)\n\t\t\t})\n\t\t\tconst response = await Promise.race([\n\t\t\t\trpcFetch()(url, {\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: { accept: \"application/json\", \"content-type\": \"application/json\" },\n\t\t\t\t\tbody: JSON.stringify(payload),\n\t\t\t\t}),\n\t\t\t\ttimeout,\n\t\t\t])\n\t\t\treturn await response.json()\n\t\t} catch (err) {\n\t\t\tlastErr = err\n\t\t} finally {\n\t\t\tif (timer) clearTimeout(timer)\n\t\t}\n\t}\n\tthrow lastErr\n}\n\nexport const FILL_ORDER_ABI = IntentGatewayV2.ABI\n\n// ─── accepted-source-chains declaration ─────────────────────────────────────────────────────────\n//\n// A same-chain phantom bid proves a solver operates on a chain, not which chains it will accept\n// payment FROM when filling a cross-chain order. Bids declare that set inside paymasterAndData,\n// which the userOpHash covers, so the declaration is authenticated by the solver's existing bid\n// signature (the `signature` field is excluded from the hash and therefore unusable). The\n// overload applies to phantom bids only: a real fill's paymasterAndData keeps its functional\n// EntryPoint semantics, and nothing on the real-fill path ever parses this format.\n//\n// Layout: version(1) ‖ count(1) ‖ count × (length(1) ‖ utf8 state machine id). A declaration\n// with no entries is a deliberate \"accepts no source chains\" and is distinct from an absent\n// declaration (\"0x\"), which means the legacy default: all CCTP/USDT0-covered chains.\n\nconst DECLARATION_VERSION = 0x01\n\n/** Upper bound on declared chains; one byte of count, and far beyond any real deployment. */\nconst MAX_DECLARED_CHAINS = 255\n\n/**\n * Encodes the accepted source chains (state machine ids, e.g. \"EVM-8453\") into the\n * paymasterAndData declaration blob.\n */\nexport function encodeAcceptedSourceChains(chains: string[]): HexString {\n\tif (chains.length > MAX_DECLARED_CHAINS) {\n\t\tthrow new Error(`Cannot declare more than ${MAX_DECLARED_CHAINS} source chains`)\n\t}\n\n\tconst bytes: number[] = [DECLARATION_VERSION, chains.length]\n\tfor (const chain of chains) {\n\t\tconst encoded = stringToU8a(chain)\n\t\tif (encoded.length === 0 || encoded.length > 255) {\n\t\t\tthrow new Error(`Invalid state machine id in source chain declaration: ${chain}`)\n\t\t}\n\t\tbytes.push(encoded.length, ...encoded)\n\t}\n\treturn u8aToHex(new Uint8Array(bytes)) as HexString\n}\n\n/**\n * Decodes a phantom bid's paymasterAndData into its declared source chains. Returns null for an\n * absent, unversioned or malformed blob — the legacy default — and an empty array only for an\n * explicit zero-entry declaration. Callers must preserve that distinction.\n */\nexport function decodeAcceptedSourceChains(paymasterAndData: string | undefined | null): string[] | null {\n\tif (!paymasterAndData || !isHex(paymasterAndData)) return null\n\tconst bytes = hexToU8a(paymasterAndData)\n\tif (bytes.length < 2 || bytes[0] !== DECLARATION_VERSION) return null\n\n\tconst count = bytes[1]\n\tconst chains: string[] = []\n\tlet offset = 2\n\tfor (let entry = 0; entry < count; entry++) {\n\t\tif (offset >= bytes.length) return null\n\t\tconst length = bytes[offset]\n\t\toffset += 1\n\t\tif (length === 0 || offset + length > bytes.length) return null\n\t\tchains.push(u8aToString(bytes.subarray(offset, offset + length)))\n\t\toffset += length\n\t}\n\t// Trailing bytes mean this is not a declaration but something that happens to share the\n\t// version byte, so treat the whole blob as unparseable rather than half-reading it.\n\tif (offset !== bytes.length) return null\n\n\treturn chains\n}\n\n/** ERC-4626 vaults per chain, keyed by chain id then lowercase underlying token address. */\nexport type YieldVaultMap = Record<string, Record<string, string[]>>\n\n/** One leg of a fill: the token the solver pays out and the amount it quoted for that leg. */\nexport interface FillLeg {\n\toutputToken: HexString\n\tsolverAmount: bigint\n}\n\nexport interface FillData {\n\torder: Record<string, unknown>\n\toptions: Record<string, unknown>\n\t/** Positional, matching the order's asset lists. A zero amount means the solver did not quote that leg. */\n\tlegs: FillLeg[]\n}\n\n/**\n * Zips an order's output assets with the bid's quoted amounts into positional legs. A missing or\n * null amount is the \"solver declined this leg\" sentinel and becomes a zero quote. Shared by the\n * viem extractor below and the indexer's VM2-safe one, so the declined-leg convention has a\n * single home while only the ABI decode differs per environment.\n */\nexport function zipFillLegs(assets: { token: HexString }[], outputs: { amount: unknown }[]): FillLeg[] {\n\treturn assets.map((asset, index) => {\n\t\tconst rawAmount = outputs[index]?.amount\n\t\treturn {\n\t\t\toutputToken: asset.token,\n\t\t\tsolverAmount: rawAmount === undefined || rawAmount === null ? 0n : BigInt(rawAmount.toString()),\n\t\t}\n\t})\n}\n\nexport interface RpcBidInfo {\n\tcommitment: string\n\tfiller: string\n\tuser_op: string\n}\n\n/** One solver's measured liquidity for a configured token on one chain at this snapshot. */\nexport interface LpBalance {\n\tsolver: string\n\t/** State machine id of the chain the balance was measured on (e.g. EVM-8453). */\n\tchain: string\n\ttokenAddress: HexString\n\tbalance: bigint\n}\n\n/** One verified solver behind a leg's quote. */\nexport interface PhantomLegBidder {\n\tsolver: HexString\n\t/** The solver's output-token inventory on the destination chain — its weight in the median. */\n\tweight: bigint\n\t/**\n\t * Source chains the solver's signed paymasterAndData declaration accepts payment from. Null\n\t * when the bid carries no declaration (legacy default: all CCTP/USDT0-covered chains); an\n\t * empty array is an explicit accepts-nothing declaration.\n\t */\n\tacceptedSources: string[] | null\n}\n\n/** The aggregated price for one leg of a phantom order. */\nexport interface PhantomLegAggregation {\n\t/** Position of the leg in the order's asset lists. */\n\tlegIndex: number\n\toutputToken: HexString\n\tlowestPrice: bigint\n\thighestPrice: bigint\n\tmedianPrice: bigint\n\tbidCount: number\n\t/** The verified solvers quoting this leg; bidCount === bidders.length. */\n\tbidders: PhantomLegBidder[]\n}\n\n/** The aggregated result for a single phantom order's bid window. */\nexport interface PhantomAggregation {\n\t/** One entry per leg that at least one solver quoted; legs nobody quoted are absent. */\n\tlegs: PhantomLegAggregation[]\n\tlpBalances: LpBalance[]\n}\n\nexport interface AggregationLogger {\n\twarn: (payload: unknown, message: string) => void\n}\n\n// Liquidity-weighted median of solver quotes. Each quote's influence is proportional to `weight` —\n// the solver's total balance for the output token across native + vault venues — so a solver that\n// can actually deliver size moves the price more than one quoting on thin liquidity. Returns the\n// lower weighted median: the smallest price whose cumulative weight reaches half of the total.\n// Zero-weight quotes contribute nothing; if every weight is zero it falls back to the unweighted\n// median so a price is still reported.\nexport function weightedMedian(entries: { price: bigint; weight: bigint }[]): bigint {\n\tconst sorted = [...entries].sort((a, b) => (a.price < b.price ? -1 : a.price > b.price ? 1 : 0))\n\tconst totalWeight = sorted.reduce((acc, e) => (e.weight > 0n ? acc + e.weight : acc), 0n)\n\n\tif (totalWeight === 0n) {\n\t\treturn sorted[Math.floor(sorted.length / 2)].price\n\t}\n\n\tlet cumulative = 0n\n\tfor (const entry of sorted) {\n\t\tif (entry.weight <= 0n) continue\n\t\tcumulative += entry.weight\n\t\tif (cumulative * 2n >= totalWeight) return entry.price\n\t}\n\treturn sorted[sorted.length - 1].price\n}\n\n// Pulls the inner fillOrder call out of the bid's ERC-7821 execute batch and decodes the order, the\n// offered output token, and the solver's quoted amount. Returns null when no matching call targets\n// the gateway or the calldata cannot be decoded.\nexport function extractFillData(callData: HexString, gatewayAddress: string): FillData | null {\n\tconst calls = decodeERC7821ExecuteBatch(callData)\n\tif (!calls) return null\n\n\tconst normalized = gatewayAddress.toLowerCase()\n\tfor (const call of calls) {\n\t\tif (call.target.toLowerCase() !== normalized) continue\n\t\ttry {\n\t\t\tconst decoded = decodeFunctionData({ abi: FILL_ORDER_ABI, data: call.data as HexString })\n\t\t\tif (decoded.functionName !== \"fillOrder\" || !decoded.args || decoded.args.length < 2) continue\n\t\t\tconst order = decoded.args[0] as Record<string, unknown>\n\t\t\tconst options = decoded.args[1] as Record<string, unknown>\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst assets = (order as any)?.output?.assets as { token: HexString }[] | undefined\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst outputs = (options as any)?.outputs as { amount: bigint }[] | undefined\n\t\t\tif (!assets?.length || !outputs?.length) continue\n\t\t\treturn { order, options, legs: zipFillLegs(assets, outputs) }\n\t\t} catch {\n\t\t\tcontinue\n\t\t}\n\t}\n\treturn null\n}\n\n/** Derives the 192-bit bid nonce key binding a bid to an (order, sessionKey) pair. */\nexport type BidNonceKeyFn = (commitment: HexString, sessionKey: HexString) => bigint\n\n/** Recomputes an order's commitment from the contract-shaped order decoded out of a bid's calldata. */\nexport type OrderCommitmentFn = (order: Record<string, unknown>) => HexString | null\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst FILL_ORDER_INPUT = (FILL_ORDER_ABI as readonly any[]).find(\n\t(item) => item?.type === \"function\" && item?.name === \"fillOrder\",\n)?.inputs?.[0]\n\n/**\n * Default (viem) {@link OrderCommitmentFn}. The order comes straight out of `fillOrder`'s ABI\n * decode, so it is already contract-shaped and re-encoding it reproduces `keccak256(abi.encode(order))`\n * — the same commitment IntentGatewayV2 computes on-chain. Returns null when it cannot be computed,\n * which callers treat as unverifiable (fail closed).\n */\nexport function orderCommitmentFromDecoded(order: Record<string, unknown>): HexString | null {\n\ttry {\n\t\tif (!FILL_ORDER_INPUT) return null\n\t\treturn keccak256(encodeAbiParameters([FILL_ORDER_INPUT], [order as never]))\n\t} catch {\n\t\treturn null\n\t}\n}\n\n// A bid's userOp.signature is `commitment (32) ‖ solverSignature (65)`. SolverAccount.validateUserOp\n// expects 162 bytes on-chain, but the trailing 65-byte session-key signature is only appended at fill\n// time, so a bid is stored and read back in this 97-byte form.\nconst BID_COMMITMENT_BYTES = 32\nconst SOLVER_SIGNATURE_BYTES = 65\n\nexport interface BidSignature {\n\t/** The order commitment the solver signature is bound to. */\n\tcommitment: HexString\n\t/** The solver's 65-byte ECDSA signature over the userOpHash. */\n\tsolverSignature: HexString\n}\n\n/** Splits a bid userOp's signature into its commitment and solver signature; null if malformed. */\nexport function splitBidSignature(signature: HexString): BidSignature | null {\n\tconst raw = signature.replace(/^0x/, \"\")\n\tconst commitmentChars = BID_COMMITMENT_BYTES * 2\n\tconst end = commitmentChars + SOLVER_SIGNATURE_BYTES * 2\n\tif (raw.length < end) return null\n\n\treturn {\n\t\tcommitment: `0x${raw.slice(0, commitmentChars)}` as HexString,\n\t\tsolverSignature: `0x${raw.slice(commitmentChars, end)}` as HexString,\n\t}\n}\n\n/** Recovers the address that produced a bid's solver signature, or null if it cannot be recovered. */\nexport type RecoverBidSigner = (\n\tuserOp: PackedUserOperation,\n\tentryPoint: HexString,\n\tchainId: bigint,\n\tsolverSignature: HexString,\n) => Promise<HexString | null>\n\n/**\n * Default {@link RecoverBidSigner}: recovers over the EntryPoint v0.8 userOpHash, the digest\n * SolverAccount itself validates against. viem-based, so Node consumers get it for free while the\n * indexer injects an ethers equivalent (see the note at the top of this file).\n */\nexport const recoverBidSignerViem: RecoverBidSigner = async (userOp, entryPoint, chainId, solverSignature) => {\n\ttry {\n\t\tconst userOpHash = CryptoUtils.computeUserOpHash(userOp, entryPoint, chainId)\n\t\treturn (await recoverAddress({ hash: userOpHash, signature: solverSignature })) as HexString\n\t} catch {\n\t\treturn null\n\t}\n}\n\n// An EOA that has delegated with EIP-7702 has code `0xef0100 ‖ delegate`.\nconst DELEGATION_INDICATOR_PREFIX = \"0xef0100\"\n\n/** Whether `account` is an EOA EIP-7702-delegated to `solverAccount` on the given chain. */\nasync function isDelegatedToSolverAccount(evmRpcUrl: string, account: string, solverAccount: string): Promise<boolean> {\n\tconst response = await rpcCall(evmRpcUrl, {\n\t\tid: 1,\n\t\tjsonrpc: \"2.0\",\n\t\tmethod: \"eth_getCode\",\n\t\tparams: [account, \"latest\"],\n\t})\n\tconst code = typeof response.result === \"string\" ? response.result.toLowerCase() : \"\"\n\tif (!code.startsWith(DELEGATION_INDICATOR_PREFIX)) return false\n\n\treturn `0x${code.slice(DELEGATION_INDICATOR_PREFIX.length)}` === solverAccount.toLowerCase()\n}\n\n/** Chain id out of an EVM state machine id (\"EVM-8453\" -> 8453n); null for any other format. */\nfunction evmChainId(chain: string): bigint | null {\n\tconst [prefix, id] = chain.split(\"-\")\n\tif (prefix !== \"EVM\" || !id || !/^\\d+$/.test(id)) return null\n\treturn BigInt(id)\n}\n\n/**\n * Whether a bid genuinely came from one of our solvers, and so may influence the snapshot.\n *\n * Anyone can submit a bid to the coprocessor, and every accepted quote moves the weighted median the\n * rest of the protocol prices intents against, so a bid is only counted if it clears both of the\n * checks SolverAccount would apply on-chain: the userOp carries a solver signature over this order's\n * userOpHash that recovers to the sender, and the sender is EIP-7702-delegated to the chain's\n * SolverAccount. Fails closed — a bid that cannot be read or verified is not counted.\n */\nasync function isVerifiedSolverBid(params: {\n\tuserOp: PackedUserOperation\n\tcommitment: string\n\tsessionKey: HexString\n\tchainId: bigint\n\tsolverAccount: string\n\tevmRpcUrl: string\n\trecoverSigner: RecoverBidSigner\n\tbidNonceKey: BidNonceKeyFn\n\tlogger?: AggregationLogger\n}): Promise<boolean> {\n\tconst { userOp, commitment, sessionKey, chainId, solverAccount, evmRpcUrl, recoverSigner, bidNonceKey, logger } =\n\t\tparams\n\tconst solver = userOp.sender\n\n\tconst parsed = splitBidSignature(userOp.signature)\n\tif (!parsed) {\n\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: malformed userOp signature\")\n\t\treturn false\n\t}\n\n\t// Cheap early-out ONLY. The prefix sits inside userOp.signature, which userOpHash excludes, so it\n\t// is attacker-mutable and must never be what binds a bid to an order — the nonce key below is.\n\tif (parsed.commitment.toLowerCase() !== commitment.toLowerCase()) {\n\t\tlogger?.warn(\n\t\t\t{ solver, commitment, signedFor: parsed.commitment },\n\t\t\t\"Rejecting phantom bid: signed for another order\",\n\t\t)\n\t\treturn false\n\t}\n\n\t// The authoritative binding, mirroring SolverAccount.validateUserOp on-chain. The nonce IS\n\t// covered by userOpHash, so a solver signature stays valid only for the (order, sessionKey) pair\n\t// its nonce key was derived from. `sessionKey` is read from the bid's own calldata, which is also\n\t// covered by userOpHash — so every operand here is signed, leaving nothing for a replay to swap.\n\tif (BigInt(userOp.nonce) >> 64n !== bidNonceKey(commitment as HexString, sessionKey)) {\n\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: nonce does not bind order and session key\")\n\t\treturn false\n\t}\n\n\t// SolverAccount._rawSignatureValidation recovers over the bare userOpHash and requires the signer\n\t// to be the account itself, which under EIP-7702 is the sender EOA.\n\tconst signer = await recoverSigner(userOp, ENTRY_POINT_V08_ADDRESS, chainId, parsed.solverSignature)\n\tif (!signer || signer.toLowerCase() !== solver.toLowerCase()) {\n\t\tlogger?.warn({ solver, commitment, signer }, \"Rejecting phantom bid: signature does not recover to the sender\")\n\t\treturn false\n\t}\n\n\tif (!(await isDelegatedToSolverAccount(evmRpcUrl, solver, solverAccount))) {\n\t\tlogger?.warn({ solver, commitment, solverAccount }, \"Rejecting phantom bid: sender is not a delegated solver\")\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nexport async function fetchBidsForOrder(nodeUrl: string, commitment: string): Promise<RpcBidInfo[]> {\n\tconst data = await rpcCall(nodeUrl, {\n\t\tid: 1,\n\t\tjsonrpc: \"2.0\",\n\t\tmethod: \"intents_getBidsForOrder\",\n\t\tparams: [commitment],\n\t})\n\treturn Array.isArray(data.result) ? (data.result as RpcBidInfo[]) : []\n}\n\nasync function ethCallUint(evmRpcUrl: string, to: string, data: string): Promise<bigint> {\n\ttry {\n\t\tconst result = await rpcCall(evmRpcUrl, {\n\t\t\tid: 1,\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tmethod: \"eth_call\",\n\t\t\tparams: [{ to, data }, \"latest\"],\n\t\t})\n\t\tif (result.error || !result.result || result.result === \"0x\") return 0n\n\t\treturn BigInt(result.result)\n\t} catch {\n\t\treturn 0n\n\t}\n}\n\n// Sums the solver's redeemable balance of a single token on its destination chain: the raw ERC-20\n// balance plus any ERC-4626 vault positions wrapping it.\nasync function getTotalSolverBalance(\n\tevmRpcUrl: string,\n\tchain: string,\n\ttoken: string,\n\tsolver: string,\n\tyieldVaults: YieldVaultMap,\n): Promise<bigint> {\n\tconst padded = solver.replace(\"0x\", \"\").padStart(64, \"0\")\n\tconst raw = await ethCallUint(evmRpcUrl, token, `0x70a08231${padded}`) // balanceOf(address)\n\tconst vaults = yieldVaults[chain]?.[token.toLowerCase()] ?? []\n\tconst vaultBalances = await Promise.all(\n\t\tvaults.map((v) => ethCallUint(evmRpcUrl, v, `0xce96cb77${padded}`)), // maxWithdraw(address)\n\t)\n\treturn vaultBalances.reduce((acc, b) => acc + b, raw)\n}\n\n/** Promise-caching balance reader produced by [`memoizedSolverBalance`]. */\nexport type SolverBalanceReader = (\n\tevmRpcUrl: string,\n\tchain: string,\n\ttoken: string,\n\tsolver: string,\n) => Promise<bigint>\n\n// One aggregation run reads the same (chain, token, solver) balance from several places — once\n// per leg the solver quoted in that token, and again in the liquidity sweep — and a bundled order\n// can carry up to 128 legs. Memoizing for the life of the run collapses that to one RPC round\n// trip per distinct triple, at the cost of ignoring balance changes within the run (the snapshot\n// is a point-in-time read either way). Exported so a caller aggregating several orders whose bid\n// windows close on the same block (one bundled order per configured chain) can share one memo\n// across the runs instead of re-reading identical balances per order.\nexport function memoizedSolverBalance(yieldVaults: YieldVaultMap): SolverBalanceReader {\n\tconst cache = new Map<string, Promise<bigint>>()\n\treturn (evmRpcUrl: string, chain: string, token: string, solver: string): Promise<bigint> => {\n\t\tconst key = `${chain}|${token.toLowerCase()}|${solver.toLowerCase()}`\n\t\tlet pending = cache.get(key)\n\t\tif (!pending) {\n\t\t\tpending = getTotalSolverBalance(evmRpcUrl, chain, token, solver, yieldVaults)\n\t\t\tcache.set(key, pending)\n\t\t}\n\t\treturn pending\n\t}\n}\n\n// Sweeps a solver's liquidity for every configured yield-vault token on every supported chain: for\n// each chain that has both an RPC (in evmRpcUrls) and configured tokens (in yieldVaults), the\n// solver's balance (raw ERC-20 + ERC-4626 vault positions) for each token. Captures the LP's whole\n// liquidity picture, not just the token of the bid being priced. Zero balances are skipped so the\n// snapshot only records tokens the solver actually holds.\nasync function sweepSolverLiquidity(\n\tevmRpcUrls: Record<string, string>,\n\tyieldVaults: YieldVaultMap,\n\tsolver: string,\n\tgetBalance: ReturnType<typeof memoizedSolverBalance>,\n): Promise<LpBalance[]> {\n\tconst balances: LpBalance[] = []\n\tfor (const [chain, tokens] of Object.entries(yieldVaults)) {\n\t\tconst url = evmRpcUrls[chain]\n\t\tif (!url) continue\n\t\tfor (const token of Object.keys(tokens)) {\n\t\t\tconst balance = await getBalance(url, chain, token, solver)\n\t\t\tif (balance === 0n) continue\n\t\t\tbalances.push({ solver, chain, tokenAddress: token as HexString, balance })\n\t\t}\n\t}\n\treturn balances\n}\n\n// Strips a bytes32 token field to a 20-byte lowercase address (or normalises an address as-is).\nfunction toAddress(token: string): HexString {\n\tconst hex = token.toLowerCase().replace(/^0x/, \"\")\n\tconst addr = hex.length > 40 ? hex.slice(-40) : hex.padStart(40, \"0\")\n\treturn `0x${addr}` as HexString\n}\n\n/**\n * Aggregates every bid for a phantom order into a single price/liquidity snapshot.\n *\n * Fetches the live bids via `intents_getBidsForOrder` and reads each filler's quoted output amount.\n * Only bids that {@link isVerifiedSolverBid} accepts are counted — a bid from anyone who is not one\n * of our delegated solvers, or whose signature was not produced for this order, is dropped rather\n * than allowed to move the price. The liquidity-weighted median then weights every surviving quote by\n * the solver's balance of the output token on the destination chain, so a solver that can't actually\n * deliver size carries little or no weight — which is why no fill simulation is needed to filter\n * unfillable quotes. For each bidding solver it also records a full liquidity sweep — every\n * configured yield-vault token on every supported chain (raw ERC-20 + vault positions). Returns\n * `null` when no bid survives verification.\n *\n * `extractFill` decodes a bid's ERC-7821 calldata into the fill's order/output and `recoverSigner`\n * recovers its solver signature; both default to the viem implementations, but the indexer injects\n * VM2-safe variants (viem's keccak throws in the SubQuery sandbox).\n */\nexport async function aggregatePhantomBids(params: {\n\tnodeUrl: string\n\t/** RPC URL per supported EVM chain (stateMachineId -> url); must include the destination chain. */\n\tevmRpcUrls: Record<string, string>\n\tchain: string\n\tgatewayAddress: string\n\tcommitment: string\n\tyieldVaults: YieldVaultMap\n\t/** SolverAccount on `chain` that our solvers delegate to; bids from anyone else are dropped. */\n\tsolverAccount: string\n\textractFill?: (callData: HexString, gatewayAddress: string) => FillData | null\n\trecoverSigner?: RecoverBidSigner\n\tbidNonceKey?: BidNonceKeyFn\n\torderCommitment?: OrderCommitmentFn\n\t/**\n\t * Balance reader shared across runs; defaults to a fresh per-run memo. Pass one built with\n\t * `memoizedSolverBalance` when aggregating several same-block orders, and build it from the\n\t * same `yieldVaults` passed here — the memo bakes in the vault map its balances include.\n\t */\n\tgetBalance?: SolverBalanceReader\n\tlogger?: AggregationLogger\n}): Promise<PhantomAggregation | null> {\n\tconst { nodeUrl, evmRpcUrls, chain, gatewayAddress, commitment, yieldVaults, solverAccount, logger } = params\n\tconst extractFill = params.extractFill ?? extractFillData\n\tconst recoverSigner = params.recoverSigner ?? recoverBidSignerViem\n\tconst bidNonceKey = params.bidNonceKey ?? CryptoUtils.bidNonceKey\n\tconst orderCommitment = params.orderCommitment ?? orderCommitmentFromDecoded\n\n\tconst destUrl = evmRpcUrls[chain]\n\tif (!destUrl) return null\n\n\t// Both bid checks need these, and neither can be skipped without letting an unverified quote into\n\t// the price, so a chain we can't resolve them for produces no snapshot at all. solverAccount is\n\t// typed as required but comes from a config lookup that can miss, so it is re-checked here.\n\tconst chainId = evmChainId(chain)\n\tif (!solverAccount || chainId === null) {\n\t\tlogger?.warn({ chain, commitment }, \"Cannot verify phantom bids: no SolverAccount or chain id for chain\")\n\t\treturn null\n\t}\n\n\tconst bids = await fetchBidsForOrder(nodeUrl, commitment)\n\tif (bids.length === 0) return null\n\n\t// Balances repeat across legs and the sweep; one memo serves the whole run.\n\tconst getBalance = params.getBalance ?? memoizedSolverBalance(yieldVaults)\n\n\t// Quotes per leg, keyed by the leg's position in the order's asset lists. One bid carries a quote\n\t// for every leg its solver priced, so a solver that only handles some of the pairs still counts\n\t// towards those, and legs it skipped are left to the solvers that do handle them.\n\tconst quotesByLeg = new Map<\n\t\tnumber,\n\t\t{\n\t\t\toutputToken: HexString\n\t\t\tquotes: { price: bigint; weight: bigint }[]\n\t\t\tbidders: PhantomLegBidder[]\n\t\t}\n\t>()\n\tconst lpBalances: LpBalance[] = []\n\t// Bids are stored per substrate filler, but weight is a property of the EVM solver. Without this\n\t// one solver's bid, copied under N funded fillers, would count N times in the weighted median.\n\tconst countedSolvers = new Set<string>()\n\n\tfor (const bid of bids) {\n\t\tif (!bid.user_op) continue\n\t\ttry {\n\t\t\tconst decoded = decodeUserOpScale(bid.user_op as HexString)\n\t\t\tconst solver = decoded.sender\n\n\t\t\tconst fillData = extractFill(decoded.callData as HexString, gatewayAddress)\n\t\t\tif (!fillData) continue\n\n\t\t\t// The quoted price is read out of this order, so it must be the order being priced.\n\t\t\tconst decodedCommitment = orderCommitment(fillData.order)\n\t\t\tif (!decodedCommitment || decodedCommitment.toLowerCase() !== commitment.toLowerCase()) {\n\t\t\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: calldata order is not the indexed order\")\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst sessionKey = (fillData.order as any)?.session as HexString | undefined\n\t\t\tif (!sessionKey) {\n\t\t\t\tlogger?.warn({ solver, commitment }, \"Rejecting phantom bid: order carries no session key\")\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst verified = await isVerifiedSolverBid({\n\t\t\t\tuserOp: decoded,\n\t\t\t\tcommitment,\n\t\t\t\tsessionKey,\n\t\t\t\tchainId,\n\t\t\t\tsolverAccount,\n\t\t\t\tevmRpcUrl: destUrl,\n\t\t\t\trecoverSigner,\n\t\t\t\tbidNonceKey,\n\t\t\t\tlogger,\n\t\t\t})\n\t\t\tif (!verified) continue\n\n\t\t\tconst normalizedSolver = solver.toLowerCase()\n\t\t\tif (countedSolvers.has(normalizedSolver)) {\n\t\t\t\tlogger?.warn({ solver, commitment }, \"Skipping phantom bid: solver already counted for this order\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcountedSolvers.add(normalizedSolver)\n\n\t\t\t// The declaration rides in paymasterAndData, which the userOpHash covers, so it carries\n\t\t\t// the same authenticity as the quote itself.\n\t\t\tconst acceptedSources = decodeAcceptedSourceChains(decoded.paymasterAndData)\n\n\t\t\t// A zero amount is how a solver declines a leg it does not price, so it is not a quote.\n\t\t\t// Weights are fetched concurrently: the memo caches promises, so identical output tokens\n\t\t\t// across legs still collapse to a single RPC round trip.\n\t\t\tconst quotedLegs = [...fillData.legs.entries()].filter(([, leg]) => leg.solverAmount !== 0n)\n\t\t\tconst weights = await Promise.all(\n\t\t\t\t// Price influence: the solver's liquidity in THIS leg's output token on the destination\n\t\t\t\t// chain, so a leg is weighted by the inventory that actually backs it.\n\t\t\t\tquotedLegs.map(([, leg]) => getBalance(destUrl, chain, toAddress(leg.outputToken), solver)),\n\t\t\t)\n\t\t\tfor (const [position, [legIndex, leg]] of quotedLegs.entries()) {\n\t\t\t\tconst weight = weights[position]\n\t\t\t\tconst entry = quotesByLeg.get(legIndex) ?? { outputToken: leg.outputToken, quotes: [], bidders: [] }\n\t\t\t\tentry.quotes.push({ price: leg.solverAmount, weight })\n\t\t\t\tentry.bidders.push({ solver: normalizedSolver as HexString, weight, acceptedSources })\n\t\t\t\tquotesByLeg.set(legIndex, entry)\n\t\t\t}\n\n\t\t\t// Full liquidity picture: every configured token on every supported chain. Swept once per\n\t\t\t// bid rather than per leg, since it measures the solver's whole inventory either way.\n\t\t\tlpBalances.push(...(await sweepSolverLiquidity(evmRpcUrls, yieldVaults, solver, getBalance)))\n\t\t} catch (err) {\n\t\t\tlogger?.warn({ err, filler: bid.filler }, \"Failed to process bid for price snapshot\")\n\t\t}\n\t}\n\n\tif (quotesByLeg.size === 0) return null\n\n\t// Each leg reports a single price: the liquidity-weighted median of the quotes for that leg.\n\t// lowestPrice and highestPrice carry that same value rather than the raw min/max of the bid set,\n\t// so consumers cannot read an outlier bid as if it were a tradeable bound.\n\tconst legs = [...quotesByLeg.entries()]\n\t\t.sort(([a], [b]) => a - b)\n\t\t.map(([legIndex, { outputToken, quotes, bidders }]) => {\n\t\t\tconst medianPrice = weightedMedian(quotes)\n\t\t\treturn {\n\t\t\t\tlegIndex,\n\t\t\t\toutputToken,\n\t\t\t\tlowestPrice: medianPrice,\n\t\t\t\thighestPrice: medianPrice,\n\t\t\t\tmedianPrice,\n\t\t\t\tbidCount: quotes.length,\n\t\t\t\tbidders,\n\t\t\t}\n\t\t})\n\n\treturn { legs, lpBalances }\n}\n"]}
|