@hyperbridge/sdk 1.9.6 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/ckb-mmr-wasm/dist/node/node.js","../../src/types/index.ts","../../src/abis/evmHost.ts","../../src/abis/handlerV2.ts","../../src/configs/chain.ts","../../src/configs/ChainConfigService.ts","../../src/abis/uniswapRouterV2.ts","../../src/chains/evm.ts","../../src/utils/exceptions.ts","../../src/chains/substrate.ts","../../src/chains/intentsCoprocessor.ts","../../src/chains/tron.ts","../../src/utils/reviveAccount.ts","../../src/utils/substrate.ts","../../src/chains/polkadotHub.ts","../../src/utils/pharos.ts","../../src/chains/pharos.ts","../../src/utils/mmr.ts","../../src/utils.ts","../../src/client/utils.ts","../../src/client/GetRequestClient.ts","../../src/client/PostRequestClient.ts","../../src/queries.ts","../../src/queryClient.ts","../../src/client/Queries.ts","../../src/client/index.ts","../../src/storage/drivers/node.ts","../../src/storage/index.ts","../../src/abis/uniswapV3Quoter.ts","../../src/abis/uniswapV4Quoter.ts","../../src/abis/universalRouter.ts","../../src/abis/permit2.ts","../../src/utils/uniswapQuote.ts","../../src/utils/swap.ts","../../src/abis/erc7281.ts","../../src/protocols/intents/types.ts","../../src/protocols/intents/CryptoUtils.ts","../../src/abis/IntentGatewayV2.ts","../../src/protocols/intents/utils.ts","../../src/protocols/intents/OrderPlacer.ts","../../src/protocols/intents/OrderExecutor.ts","../../src/protocols/intents/OrderCanceller.ts","../../src/protocols/intents/BidManager.ts","../../src/abis/IntentGateway.ts","../../src/protocols/intents/GasEstimator.ts","../../src/protocols/intents/OrderStatusChecker.ts","../../src/protocols/intents/IntentGateway.ts","../../src/protocols/tokenGateway.ts","../../src/utils/txEvents.ts","../../src/utils/tokenGateway.ts","../../src/utils/xcmGateway.ts"],"names":["ptr","__dirname","TextDecoder","TextEncoder","join","readFileSync","HyperClientStatus","OrderStatus","TeleportStatus","RequestKind","ABI","TronWeb","Chains","defineChain","bscTestnet","gnosisChiado","sepolia","mainnet","bsc","arbitrum","base","polygon","unichain","polygonAmoy","optimism","gnosis","soneium","arbitrumSepolia","optimismSepolia","baseSepolia","env","tron","createPublicClient","http","hexToBytes","flatten","toHex","match","zip","bytesToHex","encoded","encodeFunctionData","message","proof","erc20Abi","bytesToBigInt","pad","toBytes","keccak256","WsProvider","keccakAsU8a","ApiPromise","Vector","u8","capitalize","Struct","Bytes","hexToU8a","numberToBytes","u8aToHex","api","Keyring","u8aConcat","decodeAddress","Enum","Tuple","_void","u64","u32","Option","xxhashAsU8a","blake2AsU8a","getAddress","hexKey","generate_root_with_proof","encodePacked","hasWindow","wasm","isNode","ADDRESS_ZERO","isHex","createConsola","LogLevels","encodeAbiParameters","concatHex","ERC20Method","EvmLanguage","client","isNil","mergeRace","maxBy","calldata","fetch","result","GraphQLClient","fsDriver","inMemoryDriver","createStorage","key","maxUint256","parseAbiParameters","amountInV2","transactions","amountInV3","bestV3Fee","amountInV4","bestV4Fee","amountOutV2","amountOutV3","amountOutV4","parseAbiItem","DEFAULT_GRAFFITI","privateKeyToAccount","concat","decodeFunctionData","decodeAbiParameters","Decimal","formatUnits","parseUnits","generatePrivateKey","parseEventLogs","solverAddress","privateKeyToAddress","hexToString","teleport","u128","bool","assetId","keccakAsHex"],"mappings":"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","file":"index.cjs","sourcesContent":["import { readFileSync } from \"node:fs\"\nimport { join } from \"node:path\"\nimport { TextDecoder, TextEncoder } from \"node:util\"\n\nlet wasm\n\n// new URL('.', import.meta.url).pathname doesn't work fine with Nextjs\n// so I switched to this method of resolving the directory\nconst full_path = import.meta.url.split(\"/\").slice(1)\nconst __dirname = `${full_path.slice(0, full_path.length - 1).join(\"/\")}/`\n\nlet cachedTextDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true, fatal: true })\n\ncachedTextDecoder.decode()\n\nlet cachedUint8ArrayMemory0 = null\n\nfunction getUint8ArrayMemory0() {\n\tif (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n\t\tcachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer)\n\t}\n\treturn cachedUint8ArrayMemory0\n}\n\nfunction getStringFromWasm0(ptr, len) {\n\tptr = ptr >>> 0\n\treturn cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len))\n}\n\nlet WASM_VECTOR_LEN = 0\n\nlet cachedTextEncoder = new TextEncoder(\"utf-8\")\n\nconst encodeString =\n\ttypeof cachedTextEncoder.encodeInto === \"function\"\n\t\t? function (arg, view) {\n\t\t\t\treturn cachedTextEncoder.encodeInto(arg, view)\n\t\t\t}\n\t\t: function (arg, view) {\n\t\t\t\tconst buf = cachedTextEncoder.encode(arg)\n\t\t\t\tview.set(buf)\n\t\t\t\treturn {\n\t\t\t\t\tread: arg.length,\n\t\t\t\t\twritten: buf.length,\n\t\t\t\t}\n\t\t\t}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\tif (realloc === undefined) {\n\t\tconst buf = cachedTextEncoder.encode(arg)\n\t\tconst ptr = malloc(buf.length, 1) >>> 0\n\t\tgetUint8ArrayMemory0()\n\t\t\t.subarray(ptr, ptr + buf.length)\n\t\t\t.set(buf)\n\t\tWASM_VECTOR_LEN = buf.length\n\t\treturn ptr\n\t}\n\n\tlet len = arg.length\n\tlet ptr = malloc(len, 1) >>> 0\n\n\tconst mem = getUint8ArrayMemory0()\n\n\tlet offset = 0\n\n\tfor (; offset < len; offset++) {\n\t\tconst code = arg.charCodeAt(offset)\n\t\tif (code > 0x7f) break\n\t\tmem[ptr + offset] = code\n\t}\n\n\tif (offset !== len) {\n\t\tif (offset !== 0) {\n\t\t\targ = arg.slice(offset)\n\t\t}\n\t\tptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0\n\t\tconst view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len)\n\t\tconst ret = encodeString(arg, view)\n\n\t\toffset += ret.written\n\t\tptr = realloc(ptr, len, offset, 1) >>> 0\n\t}\n\n\tWASM_VECTOR_LEN = offset\n\treturn ptr\n}\n\nfunction isLikeNone(x) {\n\treturn x === undefined || x === null\n}\n\nlet cachedDataViewMemory0 = null\n\nfunction getDataViewMemory0() {\n\tif (\n\t\tcachedDataViewMemory0 === null ||\n\t\tcachedDataViewMemory0.buffer.detached === true ||\n\t\t(cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)\n\t) {\n\t\tcachedDataViewMemory0 = new DataView(wasm.memory.buffer)\n\t}\n\treturn cachedDataViewMemory0\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n\tconst ptr = malloc(arg.length * 1, 1) >>> 0\n\tgetUint8ArrayMemory0().set(arg, ptr / 1)\n\tWASM_VECTOR_LEN = arg.length\n\treturn ptr\n}\n\nfunction takeFromExternrefTable0(idx) {\n\tconst value = wasm.__wbindgen_export_0.get(idx)\n\twasm.__externref_table_dealloc(idx)\n\treturn value\n}\n\n/**\n * @param {Uint8Array} calldata_bytes\n * @param {bigint} tree_size\n * @returns {string}\n */\nexport function generate_root_with_proof(calldata_bytes, tree_size) {\n\tlet deferred3_0\n\tlet deferred3_1\n\ttry {\n\t\tconst ptr0 = passArray8ToWasm0(calldata_bytes, wasm.__wbindgen_malloc)\n\t\tconst len0 = WASM_VECTOR_LEN\n\t\tconst ret = wasm.generate_root_with_proof(ptr0, len0, tree_size)\n\t\tvar ptr2 = ret[0]\n\t\tvar len2 = ret[1]\n\t\tif (ret[3]) {\n\t\t\tptr2 = 0\n\t\t\tlen2 = 0\n\t\t\tthrow takeFromExternrefTable0(ret[2])\n\t\t}\n\t\tdeferred3_0 = ptr2\n\t\tdeferred3_1 = len2\n\t\treturn getStringFromWasm0(ptr2, len2)\n\t} finally {\n\t\twasm.__wbindgen_free(deferred3_0, deferred3_1, 1)\n\t}\n}\n\nfunction addToExternrefTable0(obj) {\n\tconst idx = wasm.__externref_table_alloc()\n\twasm.__wbindgen_export_0.set(idx, obj)\n\treturn idx\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n\tconst ptr = malloc(array.length * 4, 4) >>> 0\n\tfor (let i = 0; i < array.length; i++) {\n\t\tconst add = addToExternrefTable0(array[i])\n\t\tgetDataViewMemory0().setUint32(ptr + 4 * i, add, true)\n\t}\n\tWASM_VECTOR_LEN = array.length\n\treturn ptr\n}\n\n/**\n * @param {string} root_hex\n * @param {string[]} proof_hex\n * @param {bigint} mmr_size\n * @param {bigint} leaf_position\n * @param {Uint8Array} calldata_bytes\n * @returns {boolean}\n */\nexport function verify_proof(root_hex, proof_hex, mmr_size, leaf_position, calldata_bytes) {\n\tconst ptr0 = passStringToWasm0(root_hex, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)\n\tconst len0 = WASM_VECTOR_LEN\n\tconst ptr1 = passArrayJsValueToWasm0(proof_hex, wasm.__wbindgen_malloc)\n\tconst len1 = WASM_VECTOR_LEN\n\tconst ptr2 = passArray8ToWasm0(calldata_bytes, wasm.__wbindgen_malloc)\n\tconst len2 = WASM_VECTOR_LEN\n\tconst ret = wasm.verify_proof(ptr0, len0, ptr1, len1, mmr_size, leaf_position, ptr2, len2)\n\tif (ret[2]) {\n\t\tthrow takeFromExternrefTable0(ret[1])\n\t}\n\treturn ret[0] !== 0\n}\n\nconst KeccakMergeFinalization =\n\ttypeof FinalizationRegistry === \"undefined\"\n\t\t? { register: () => {}, unregister: () => {} }\n\t\t: new FinalizationRegistry((ptr) => wasm.__wbg_keccakmerge_free(ptr >>> 0, 1))\n\nexport class KeccakMerge {\n\t__destroy_into_raw() {\n\t\tconst ptr = this.__wbg_ptr\n\t\tthis.__wbg_ptr = 0\n\t\tKeccakMergeFinalization.unregister(this)\n\t\treturn ptr\n\t}\n\n\tfree() {\n\t\tconst ptr = this.__destroy_into_raw()\n\t\twasm.__wbg_keccakmerge_free(ptr, 0)\n\t}\n}\n\nexport function __wbindgen_error_new(arg0, arg1) {\n\tconst ret = new Error(getStringFromWasm0(arg0, arg1))\n\treturn ret\n}\n\nexport function __wbindgen_init_externref_table() {\n\tconst table = wasm.__wbindgen_export_0\n\tconst offset = table.grow(4)\n\ttable.set(0, undefined)\n\ttable.set(offset + 0, undefined)\n\ttable.set(offset + 1, null)\n\ttable.set(offset + 2, true)\n\ttable.set(offset + 3, false)\n}\n\nexport function __wbindgen_string_get(arg0, arg1) {\n\tconst obj = arg1\n\tconst ret = typeof obj === \"string\" ? obj : undefined\n\tvar ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)\n\tvar len1 = WASM_VECTOR_LEN\n\tgetDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true)\n\tgetDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true)\n}\n\nexport function __wbindgen_throw(arg0, arg1) {\n\tthrow new Error(getStringFromWasm0(arg0, arg1))\n}\n\n// Load and initialize the WebAssembly module\nconst wasmPath = join(__dirname, \"./node_bg.wasm\")\nconst wasmBytes = readFileSync(wasmPath)\n\nconst bindings = {\n\tgenerate_root_with_proof,\n\tverify_proof,\n\tKeccakMerge,\n\t__wbindgen_error_new,\n\t__wbindgen_init_externref_table,\n\t__wbindgen_string_get,\n\t__wbindgen_throw,\n}\n\nconst wasmModule = new WebAssembly.Module(wasmBytes)\nconst wasmInstance = new WebAssembly.Instance(wasmModule, {\n\t__wbindgen_placeholder__: bindings,\n})\nwasm = wasmInstance.exports\nexport const __wasm = wasm\n\nwasm.__wbindgen_start()\n\nexport default function init() {\n\tconsole.log(\"CKB MMR WASM initialized\")\n}\n","import type { ConsolaInstance } from \"consola\"\nimport type { GraphQLClient } from \"graphql-request\"\nimport type { ContractFunctionArgs, Hex, Log, PublicClient, TransactionReceipt } from \"viem\"\nimport type { Account } from \"viem/accounts\"\n\n/** Re-export: use this type when wiring a viem `Account` next to `SigningAccount` so you stay aligned with the SDK’s viem resolution. */\nexport type { Account as ViemAccount } from \"viem/accounts\"\nimport type HandlerV2 from \"@/abis/handlerV2\"\nimport type { IChain } from \"@/chain\"\nimport { Struct, Vector, Bytes, u8 } from \"scale-ts\"\n\nexport type EstimateGasCallData = ContractFunctionArgs<\n\ttypeof HandlerV2.ABI,\n\t\"nonpayable\" | \"payable\",\n\t\"handlePostRequests\"\n>\n\nexport type HexString = `0x${string}`\nexport type StateMachineId = string\nexport type BytesLikeHex = HexString\n\nexport interface IConfig {\n\t// confuration object for the source chain\n\tsource: IEvmConfig | ISubstrateConfig | IPolkadotHubConfig | IPharosConfig\n\t// confuration object for the destination chain\n\tdest: IEvmConfig | ISubstrateConfig | IPolkadotHubConfig | IPharosConfig\n\t// confuration object for hyperbridge\n\thyperbridge: IHyperbridgeConfig\n\t// Flag to enable tracing console logs\n\ttracing?: boolean\n}\n\nexport interface IEvmConfig {\n\t// rpc url of the chain\n\trpcUrl: string\n\t// state machine identifier as a string\n\tstateMachineId: string\n\t// contract address of the `IsmpHost` on this chain\n\thost: HexString\n\t// consensus state identifier of this chain on hyperbridge\n\tconsensusStateId: string\n}\n\n/**\n * EVM-on-Substrate (e.g. Polkadot Hub) — same as {@link IEvmConfig} plus a Substrate node RPC URL\n * used for `state_getReadProof` / `state_getChildReadProof` (Revive child trie proofs).\n */\nexport interface IPolkadotHubConfig extends IEvmConfig {\n\tsubstrateRpcUrl: string\n}\n\n/**\n * Pharos EVM chain — same as {@link IEvmConfig}. Pharos uses a non-standard\n * `eth_getProof` response format (hexary hash tree proof nodes with offsets plus\n * SHA-256 hashing), so proof fetching is handled by the Pharos-specific chain\n * client rather than viem's standard `getProof`.\n */\nexport interface IPharosConfig extends IEvmConfig {}\n\nexport interface ISubstrateConfig {\n\t// rpc url of the chain\n\twsUrl: string\n\t// consensus state identifier of this chain on hyperbridge\n\tconsensusStateId: string\n\t// consensus state identifier of this chain on hyperbridge\n\thasher: \"Keccak\" | \"Blake2\"\n\t// state machine identifier as a string\n\tstateMachineId: string\n}\n\nexport interface IHyperbridgeConfig {\n\t// websocket rpc endpoint for hyperbridge\n\twsUrl: string\n\t// state machine identifier as a string\n\tstateMachineId: string\n\t// consensus state identifier of hyperbridge on the destination chain\n\tconsensusStateId: string\n}\n\nexport interface IPostRequest {\n\t// The source state machine of this request.\n\tsource: string\n\t// The destination state machine of this request.\n\tdest: string\n\t// Module Id of the sending module\n\tfrom: HexString\n\t// Module ID of the receiving module\n\tto: HexString\n\t// The nonce of this request on the source chain\n\tnonce: bigint\n\t// Encoded request body.\n\tbody: HexString\n\t// Timestamp which this request expires in seconds.\n\ttimeoutTimestamp: bigint\n}\n\nexport interface IGetRequest {\n\t// The source state machine of this request.\n\tsource: string\n\t// The destination state machine of this request.\n\tdest: string\n\t// Module Id of the sending module\n\tfrom: HexString\n\t// The nonce of this request on the source chain\n\tnonce: bigint\n\t// Height at which to read the state machine.\n\theight: bigint\n\t/// Raw Storage keys that would be used to fetch the values from the counterparty\n\t/// For deriving storage keys for ink contract fields follow the guide in the link below\n\t/// `<https://use.ink/datastructures/storage-in-metadata#a-full-example>`\n\t/// The algorithms for calculating raw storage keys for different substrate pallet storage\n\t/// types are described in the following links\n\t/// `<https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/map.rs#L34-L42>`\n\t/// `<https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/double_map.rs#L34-L44>`\n\t/// `<https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/nmap.rs#L39-L48>`\n\t/// `<https://github.com/paritytech/substrate/blob/master/frame/support/src/storage/types/value.rs#L37>`\n\t/// For fetching keys from EVM contracts each key should be 52 bytes\n\t/// This should be a concatenation of contract address and slot hash\n\tkeys: HexString[]\n\t// Timestamp which this request expires in seconds.\n\ttimeoutTimestamp: bigint\n\tcontext: HexString\n}\n\nexport interface GetResponseStorageValues {\n\tkey: HexString\n\tvalue: HexString\n}\n\nexport interface IPostResponse {\n\t// The request that triggered this response.\n\tpost: IPostRequest\n\t// The response message.\n\tresponse: string\n\t// Timestamp at which this response expires in seconds.\n\ttimeoutTimestamp: bigint\n}\n\nexport type IMessage = { Requests: HexString[] } | { Responses: HexString[] }\n\nexport type IndexerQueryClient = GraphQLClient\n\nexport interface ClientConfig {\n\tpollInterval: number\n\tqueryClient: IndexerQueryClient\n\ttracing?: boolean\n\tsource: IChain\n\tdest: IChain\n\thyperbridge: IChain\n}\n\nexport interface RetryConfig {\n\tmaxRetries: number\n\t/**\n\t * @description The initial backoff time in milliseconds before the first retry attempt.\n\t */\n\tbackoffMs: number\n\tlogMessage?: string\n\tlogger?: ConsolaInstance\n}\n\nexport interface IsmpRequest {\n\tsource: string\n\tdest: string\n\tfrom: string\n\tto: string\n\tnonce: bigint\n\tbody: string\n\ttimeoutTimestamp: bigint\n\tstorage_key?: string\n}\n\nexport const RequestStatus = Object.freeze({\n\tSOURCE: \"SOURCE\",\n\tSOURCE_FINALIZED: \"SOURCE_FINALIZED\",\n\tHYPERBRIDGE_DELIVERED: \"HYPERBRIDGE_DELIVERED\",\n\tHYPERBRIDGE_FINALIZED: \"HYPERBRIDGE_FINALIZED\",\n\tDESTINATION: \"DESTINATION\",\n\tTIMED_OUT: \"TIMED_OUT\",\n\tHYPERBRIDGE_TIMED_OUT: \"HYPERBRIDGE_TIMED_OUT\",\n})\nexport type RequestStatus = typeof RequestStatus\nexport type RequestStatusKey = keyof typeof RequestStatus\n\nexport const TimeoutStatus = Object.freeze({\n\tPENDING_TIMEOUT: \"PENDING_TIMEOUT\",\n\tDESTINATION_FINALIZED_TIMEOUT: \"DESTINATION_FINALIZED_TIMEOUT\",\n\tHYPERBRIDGE_TIMED_OUT: \"HYPERBRIDGE_TIMED_OUT\",\n\tHYPERBRIDGE_FINALIZED_TIMEOUT: \"HYPERBRIDGE_FINALIZED_TIMEOUT\",\n\tTIMED_OUT: \"TIMED_OUT\",\n})\n\nexport type TimeoutStatus = typeof TimeoutStatus\nexport type TimeoutStatusKey = keyof typeof TimeoutStatus\n\nexport type AllStatusKey = RequestStatusKey | TimeoutStatusKey\n\nexport enum HyperClientStatus {\n\tPENDING = \"PENDING\",\n\tSOURCE_FINALIZED = \"SOURCE_FINALIZED\",\n\tHYPERBRIDGE_FINALIZED = \"HYPERBRIDGE_FINALIZED\",\n\tHYPERBRIDGE_VERIFIED = \"HYPERBRIDGE_VERIFIED\",\n\tDESTINATION = \"DESTINATION\",\n\tTIMED_OUT = \"TIMED_OUT\",\n\tHYPERBRIDGE_TIMED_OUT = \"HYPERBRIDGE_TIMED_OUT\",\n\tERROR = \"ERROR\",\n}\n\nexport enum OrderStatus {\n\tPLACED = \"PLACED\",\n\tFILLED = \"FILLED\",\n\tREDEEMED = \"REDEEMED\",\n\tREFUNDED = \"REFUNDED\",\n}\n\nexport enum TeleportStatus {\n\tTELEPORTED = \"TELEPORTED\",\n\tRECEIVED = \"RECEIVED\",\n\tREFUNDED = \"REFUNDED\",\n}\n\nexport interface CancelQuote {\n\tnativeValue: bigint\n\trelayerFee: bigint\n}\n\nexport interface TokenGatewayAssetTeleportedResponse {\n\ttokenGatewayAssetTeleportedV2s: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tfrom: string\n\t\t\tto: string\n\t\t\tsourceChain: string\n\t\t\tdestChain: string\n\t\t\tcommitment: string\n\t\t\tamount: string\n\t\t\tusdValue: string\n\t\t\tassetId: string\n\t\t\tredeem: boolean\n\t\t\tstatus: TeleportStatus\n\t\t\tcreatedAt: string\n\t\t\tblockNumber: string\n\t\t\tblockTimestamp: string\n\t\t\ttransactionHash: string\n\t\t\tstatusMetadata: {\n\t\t\t\tnodes: Array<{\n\t\t\t\t\tstatus: TeleportStatus\n\t\t\t\t\tchain: string\n\t\t\t\t\ttimestamp: string\n\t\t\t\t\tblockNumber: string\n\t\t\t\t\tblockHash: string\n\t\t\t\t\ttransactionHash: string\n\t\t\t\t}>\n\t\t\t}\n\t\t}>\n\t}\n}\n\nexport interface TokenGatewayAssetTeleportedWithStatus {\n\tid: string\n\tfrom: string\n\tto: string\n\tsourceChain: string\n\tdestChain: string\n\tcommitment: string\n\tamount: bigint\n\tusdValue: string\n\tassetId: string\n\tredeem: boolean\n\tstatus: TeleportStatus\n\tcreatedAt: Date\n\tblockNumber: bigint\n\tblockTimestamp: bigint\n\ttransactionHash: string\n\tstatuses: Array<{\n\t\tstatus: TeleportStatus\n\t\tmetadata: {\n\t\t\tblockHash: string\n\t\t\tblockNumber: number\n\t\t\ttransactionHash: string\n\t\t\ttimestamp: bigint\n\t\t}\n\t}>\n}\n\nexport interface BlockMetadata {\n\tblockHash: string\n\tblockNumber: number\n\ttransactionHash: string\n\tcalldata?: string\n\ttimestamp?: number\n}\n\nexport interface PostRequestStatus {\n\tstatus: RequestStatusKey\n\tmetadata: Partial<BlockMetadata>\n}\n\nexport interface PostRequestTimeoutStatus {\n\tstatus: TimeoutStatusKey\n\tmetadata?: Partial<BlockMetadata>\n}\n\nexport interface StateMachineUpdate {\n\theight: number\n\tchain: string\n\tblockHash: string\n\tblockNumber: number\n\ttransactionHash: string\n\ttransactionIndex: number\n\tstateMachineId: string\n\ttimestamp: number\n}\n\nexport interface RequestResponse {\n\trequestV2s: {\n\t\tnodes: Array<{\n\t\t\tsource: string\n\t\t\tdest: string\n\t\t\tto: HexString\n\t\t\tfrom: HexString\n\t\t\tnonce: bigint\n\t\t\tbody: HexString\n\t\t\ttimeoutTimestamp: bigint\n\t\t\tstatusMetadata: {\n\t\t\t\tnodes: Array<{\n\t\t\t\t\tblockHash: string\n\t\t\t\t\tblockNumber: string\n\t\t\t\t\ttimestamp: string\n\t\t\t\t\tchain: string\n\t\t\t\t\tstatus: string\n\t\t\t\t\ttransactionHash: string\n\t\t\t\t}>\n\t\t\t}\n\t\t}>\n\t}\n}\n\nexport interface GetRequestResponse {\n\tgetRequestV2s: {\n\t\tnodes: Array<{\n\t\t\tsource: string\n\t\t\tdest: string\n\t\t\tto: HexString\n\t\t\tfrom: HexString\n\t\t\tnonce: bigint\n\t\t\theight: bigint\n\t\t\tkeys: HexString[]\n\t\t\tcontext: HexString\n\t\t\ttimeoutTimestamp: bigint\n\t\t\tstatusMetadata: {\n\t\t\t\tnodes: Array<{\n\t\t\t\t\tblockHash: string\n\t\t\t\t\tblockNumber: string\n\t\t\t\t\ttimestamp: string\n\t\t\t\t\tchain: string\n\t\t\t\t\tstatus: string\n\t\t\t\t\ttransactionHash: string\n\t\t\t\t}>\n\t\t\t}\n\t\t}>\n\t}\n}\n\nexport type RequestStatusWithMetadata =\n\t| {\n\t\t\tstatus: RequestStatus[\"SOURCE\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: RequestStatus[\"SOURCE_FINALIZED\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: RequestStatus[\"HYPERBRIDGE_DELIVERED\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: RequestStatus[\"HYPERBRIDGE_FINALIZED\"]\n\t\t\tmetadata: {\n\t\t\t\tcalldata: Hex\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: RequestStatus[\"DESTINATION\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: TimeoutStatus[\"PENDING_TIMEOUT\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: TimeoutStatus[\"DESTINATION_FINALIZED_TIMEOUT\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: TimeoutStatus[\"HYPERBRIDGE_TIMED_OUT\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: TimeoutStatus[\"HYPERBRIDGE_FINALIZED_TIMEOUT\"]\n\t\t\tmetadata: {\n\t\t\t\tcalldata: Hex\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\t| {\n\t\t\tstatus: TimeoutStatus[\"TIMED_OUT\"]\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp?: number\n\t\t\t}\n\t }\n\ninterface GenericRequestWithStatuses {\n\tsource: string\n\tdest: string\n\tfrom: HexString\n\tnonce: bigint\n\ttimeoutTimestamp: bigint\n\tstatuses: Array<RequestStatusWithMetadata>\n}\n\nexport interface PostRequestWithStatus extends GenericRequestWithStatuses {\n\tto: HexString\n\tbody: HexString\n}\n\nexport interface GetRequestWithStatus extends GenericRequestWithStatuses {\n\theight: bigint\n\tkeys: HexString[]\n\tcontext: HexString\n\tcommitment: HexString\n}\n\nexport interface GetResponseByRequestIdResponse {\n\tgetResponses: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tcommitment: string\n\t\t\tresponseMessage: string[]\n\t\t}>\n\t}\n}\n\nexport interface ResponseCommitmentWithValues {\n\tcommitment: string\n\tvalues: string[]\n}\n\nexport interface RequestCommitment {\n\trequestV2s: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tcommitment: string\n\t\t}>\n\t}\n}\n\nexport interface StateMachineResponse {\n\tstateMachineUpdateEvents: {\n\t\tnodes: {\n\t\t\theight: number\n\t\t\tchain: string\n\t\t\tblockHash: string\n\t\t\tblockNumber: number\n\t\t\ttransactionHash: string\n\t\t\ttransactionIndex: number\n\t\t\tstateMachineId: string\n\t\t\tcreatedAt: string\n\t\t}[]\n\t}\n}\n\nexport interface AssetTeleported {\n\tid: string\n\tfrom: string\n\tto: string\n\tamount: bigint\n\tdest: string\n\tcommitment: HexString\n\tcreatedAt: Date\n\tblockNumber: number\n}\n\nexport interface AssetTeleportedResponse {\n\tassetTeleportedV2: AssetTeleported\n}\n\nexport interface StateMachineIdParams {\n\tstateId: { Evm?: number; Substrate?: HexString; Polkadot?: number; Kusama?: number }\n\tconsensusStateId: string\n}\n\n/**\n * Configuration for a blockchain chain\n */\nexport interface ChainConfig {\n\t/**\n\t * The unique identifier for the chain\n\t */\n\tchainId: number\n\n\t/**\n\t * The RPC URL to connect to the chain\n\t */\n\trpcUrl: string\n\n\t/**\n\t * The address of the IntentGateway contract on this chain\n\t */\n\tintentGatewayAddress: string\n}\n\n/**\n * Represents token information for an order\n */\nexport interface TokenInfo {\n\t/**\n\t * The token identifier as either:\n\t * - a standard 20-byte EVM address (`0xabc...`)\n\t * - an already padded 32-byte value (`0x000...abc...`)\n\t *\n\t * `address(0)` / `bytes32(0)` is used as a sentinel for the native token.\n\t */\n\ttoken: BytesLikeHex\n\n\t/**\n\t * The amount of the token\n\t */\n\tamount: bigint\n}\n\nexport interface DecodedOrderPlacedLog extends Log {\n\teventName: string\n\targs: {\n\t\tuser: HexString\n\t\tsource: Hex\n\t\tdestination: Hex\n\t\tdeadline: bigint\n\t\tnonce: bigint\n\t\tfees: bigint\n\t\tsession: HexString\n\t\tbeneficiary: HexString\n\t\tpredispatch: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t}>\n\t\tinputs: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t}>\n\t\toutputs: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t}>\n\t}\n\ttransactionHash: HexString\n}\n\nexport interface DecodedPostRequestEvent extends Log {\n\teventName: string\n\targs: {\n\t\tsource: string\n\t\tdest: string\n\t\tfrom: HexString\n\t\tto: HexString\n\t\tnonce: bigint\n\t\ttimeoutTimestamp: bigint\n\t\tbody: HexString\n\t\tfee: bigint\n\t}\n\ttransactionHash: HexString\n}\n\nexport interface DecodedPostResponseEvent extends Log {\n\teventName: string\n\targs: {\n\t\tsource: string\n\t\tdest: string\n\t\tfrom: HexString\n\t\tto: HexString\n\t\tnonce: bigint\n\t\ttimeoutTimestamp: bigint\n\t\tbody: HexString\n\t\tresponse: HexString\n\t\tresponseTimeoutTimestamp: bigint\n\t\tfee: bigint\n\t}\n\ttransactionHash: HexString\n}\n\n/**\n * Options for canceling an order\n */\nexport interface CancelOptions {\n\t/**\n\t * The fee paid to the relayer for processing transactions\n\t */\n\trelayerFee: string\n\n\t/**\n\t * Stores the height value\n\t */\n\theight: string\n}\n\n/**\n * Represents a new deployment of IntentGateway\n */\nexport interface NewDeployment {\n\t/**\n\t * Identifier for the state machine\n\t */\n\tstateMachineId: HexString\n\n\t/**\n\t * The gateway identifier\n\t */\n\tgateway: HexString\n}\n\n/**\n * Represents the body of a request\n */\nexport interface RequestBody {\n\t/**\n\t * Represents the commitment of an order\n\t */\n\tcommitment: HexString\n\n\t/**\n\t * Stores the identifier for the beneficiary\n\t */\n\tbeneficiary: HexString\n\n\t/**\n\t * An array of token identifiers\n\t */\n\ttokens: TokenInfo[]\n}\n\n/**\n * Represents the parameters for the IntentGateway module\n */\nexport interface IntentGatewayParams {\n\t/**\n\t * The address of the host contract\n\t */\n\thost: string\n\n\t/**\n\t * Address of the dispatcher contract responsible for handling intents\n\t */\n\tdispatcher: string\n}\n\n/**\n * Enum representing the different kinds of incoming requests\n */\nexport enum RequestKind {\n\t/**\n\t * Identifies a request for redeeming an escrow\n\t */\n\tRedeemEscrow = 0,\n\n\t/**\n\t * Identifies a request for recording new contract deployments\n\t */\n\tNewDeployment = 1,\n\n\t/**\n\t * Identifies a request for updating parameters\n\t */\n\tUpdateParams = 2,\n\n\t/**\n\t * Identifies a request for sweeping accumulated protocol dust\n\t */\n\tSweepDust = 3,\n\n\t/**\n\t * Identifies a request for refunding escrowed tokens after cancellation\n\t */\n\tRefundEscrow = 4,\n}\n\n/**\n * Configuration for the IntentFiller\n */\nexport interface FillerConfig {\n\t/**\n\t * Maximum number of orders to process concurrently\n\t */\n\tmaxConcurrentOrders?: number\n\n\t/**\n\t * Minimum profitability threshold to consider filling an order\n\t * Expressed as a percentage (e.g., 0.5 = 0.5%)\n\t */\n\tminProfitabilityThreshold?: number\n\n\t/**\n\t * Gas price strategy for each chain\n\t * Maps chainId to a gas price strategy function\n\t */\n\tgasPriceStrategy?: Record<string, () => Promise<string>>\n\n\t/**\n\t * Maximum gas price willing to pay for each chain\n\t * Maps chainId to maximum gas price in wei\n\t */\n\tmaxGasPrice?: Record<string, string>\n\n\t/**\n\t * Retry configuration for failed transactions\n\t */\n\tretryConfig?: {\n\t\t/**\n\t\t * Maximum number of retry attempts\n\t\t */\n\t\tmaxAttempts: number\n\n\t\t/**\n\t\t * Initial delay between retries in ms\n\t\t */\n\t\tinitialDelayMs: number\n\t}\n\n\t/**\n\t * Configuration for the pending queue\n\t */\n\tpendingQueueConfig?: {\n\t\t/**\n\t\t * Delay in milliseconds before rechecking an order for confirmations\n\t\t * Default: 30000 (30 seconds)\n\t\t */\n\t\trecheckDelayMs?: number\n\n\t\t/**\n\t\t * Maximum number of times to recheck an order before giving up\n\t\t * Default: 10\n\t\t */\n\t\tmaxRechecks?: number\n\t}\n\n\t/**\n\t * Watch-only mode: per-chain configuration to monitor and log orders without executing fills\n\t * Maps chainId to boolean. If a chain is not in this map, defaults to false (normal execution)\n\t * Example: { 1: true, 56: false } - watch-only on Ethereum, normal execution on BSC\n\t */\n\twatchOnly?: Record<number, boolean>\n}\n\n/**\n * Result of an order execution attempt\n */\nexport interface ExecutionResult {\n\t/**\n\t * Whether the execution was successful\n\t */\n\tsuccess: boolean\n\n\t/**\n\t * The transaction hash if successful\n\t */\n\ttxHash?: string\n\n\t/**\n\t * Error message if unsuccessful\n\t */\n\terror?: string\n\n\t/**\n\t * Gas used by the transaction\n\t */\n\tgasUsed?: string\n\n\t/**\n\t * Gas price used for the transaction\n\t */\n\tgasPrice?: string\n\n\t/**\n\t * Total transaction cost in wei\n\t */\n\ttxCost?: string\n\n\t/**\n\t * Block number when the transaction was confirmed\n\t */\n\tconfirmedAtBlock?: number\n\n\t/**\n\t * Timestamp when the transaction was confirmed\n\t */\n\tconfirmedAt?: Date\n\n\t/**\n\t * Actual profitability achieved\n\t */\n\tactualProfitability?: number\n\n\t/**\n\t * Strategy used to fill the order\n\t */\n\tstrategyUsed?: string\n\n\t/**\n\t * Any tokens exchanged during the fill process\n\t */\n\texchanges?: Array<{\n\t\tfromToken: HexString\n\t\ttoToken: HexString\n\t\tfromAmount: string\n\t\ttoAmount: string\n\t\texchangeRate: string\n\t}>\n\n\t/**\n\t * The time it took to fill the order\n\t */\n\tprocessingTimeMs?: number\n\n\t/**\n\t * The order commitment hash, returned when a bid is submitted via Hyperbridge.\n\t * Used for subsequent bid retraction after the order is filled on-chain.\n\t */\n\tcommitment?: string\n}\n\n/**\n * Represents a dispatch post for cross-chain communication\n */\nexport interface DispatchPost {\n\t/**\n\t * Bytes representation of the destination state machine\n\t */\n\tdest: HexString\n\n\t/**\n\t * The destination module\n\t */\n\tto: HexString\n\n\t/**\n\t * The request body\n\t */\n\tbody: HexString\n\n\t/**\n\t * Timeout for this request in seconds\n\t */\n\ttimeout: bigint\n\n\t/**\n\t * The amount put up to be paid to the relayer,\n\t * this is charged in `IIsmpHost.feeToken` to `msg.sender`\n\t */\n\tfee: bigint\n\n\t/**\n\t * Who pays for this request?\n\t */\n\tpayer: HexString\n}\n\nexport interface DispatchGet {\n\t/**\n\t * Bytes representation of the destination state machine\n\t */\n\tdest: HexString\n\n\t/**\n\t * Height at which to read the state machine\n\t */\n\theight: bigint\n\n\t/**\n\t * Raw storage keys to fetch values from the counterparty\n\t */\n\tkeys: HexString[]\n\n\t/**\n\t * Timeout for this request in seconds\n\t */\n\ttimeout: bigint\n\n\t/**\n\t * The amount put up to be paid to the relayer\n\t */\n\tfee: bigint\n\n\t/**\n\t * Context for the request\n\t */\n\tcontext: HexString\n}\n\nexport interface StateMachineHeight {\n\tid: {\n\t\tstateId: { Evm?: number; Substrate?: HexString; Polkadot?: number; Kusama?: number }\n\t\tconsensusStateId: string\n\t}\n\theight: bigint\n}\n\n/**\n * The EvmHost protocol parameters\n */\nexport interface HostParams {\n\t/**\n\t * The default timeout in seconds for messages. If messages are dispatched\n\t * with a timeout value lower than this this value will be used instead\n\t */\n\tdefaultTimeout: bigint\n\t/**\n\t * The default per byte fee\n\t */\n\tperByteFee: bigint\n\t/**\n\t * The cost for applications to access the hyperbridge state commitment.\n\t * They might do so because the hyperbridge state contains the verified state commitments\n\t * for all chains and they want to directly read the state of these chains state bypassing\n\t * the ISMP protocol entirely.\n\t */\n\tstateCommitmentFee: bigint\n\t/**\n\t * The fee token contract address. This will typically be DAI.\n\t * but we allow it to be configurable to prevent future regrets.\n\t */\n\tfeeToken: HexString\n\t/**\n\t * The admin account, this only has the rights to freeze, or unfreeze the bridge\n\t */\n\tadmin: HexString\n\t/**\n\t * Ismp message handler contract. This performs all verification logic\n\t * needed to validate cross-chain messages before they are dispatched to local modules\n\t */\n\thandler: HexString\n\t/**\n\t * The authorized host manager contract, is itself an `IIsmpModule`\n\t * which receives governance requests from the Hyperbridge chain to either\n\t * withdraw revenue from the host or update its protocol parameters\n\t */\n\thostManager: HexString\n\t/**\n\t * The local UniswapV2Router02 contract, used for swapping the native token to the feeToken.\n\t */\n\tuniswapV2: HexString\n\t/**\n\t * The unstaking period of Polkadot's validators. In order to prevent long-range attacks\n\t */\n\tunStakingPeriod: bigint\n\t/**\n\t * Minimum challenge period for state commitments in seconds\n\t */\n\tchallengePeriod: bigint\n\t/**\n\t * The consensus client contract which handles consensus proof verification\n\t */\n\tconsensusClient: HexString\n\t/**\n\t * State machines whose state commitments are accepted\n\t */\n\treadonly stateMachines: readonly bigint[]\n\t/**\n\t * The state machine identifier for hyperbridge\n\t */\n\thyperbridge: HexString\n}\n\nexport interface OrderStatusMetadata {\n\tstatus: OrderStatus\n\tchain: string\n\ttimestamp: bigint\n\tblockNumber: string\n\ttransactionHash: string\n\tfiller?: string\n}\n\nexport interface OrderWithStatus {\n\tid: string\n\tuser: string\n\tsourceChain: string\n\tdestChain: string\n\tcommitment: string\n\tdeadline: bigint\n\tnonce: bigint\n\tfees: bigint\n\tinputTokens: string[]\n\tinputAmounts: bigint[]\n\tinputValuesUSD: string[]\n\tinputUSD: string\n\toutputTokens: string[]\n\toutputAmounts: bigint[]\n\toutputBeneficiaries: string[]\n\tcalldata: string\n\tstatus: OrderStatus\n\tcreatedAt: Date\n\tblockNumber: bigint\n\tblockTimestamp: bigint\n\ttransactionHash: string\n\tstatuses: Array<{\n\t\tstatus: OrderStatus\n\t\tmetadata: {\n\t\t\tblockHash: string\n\t\t\tblockNumber: number\n\t\t\ttransactionHash: string\n\t\t\ttimestamp: bigint\n\t\t\tfiller?: string\n\t\t}\n\t}>\n}\n\nexport interface OrderResponse {\n\torderPlaceds: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tuser: string\n\t\t\tsourceChain: string\n\t\t\tdestChain: string\n\t\t\tcommitment: string\n\t\t\tdeadline: string\n\t\t\tnonce: string\n\t\t\tfees: string\n\t\t\tinputTokens: string[]\n\t\t\tinputAmounts: string[]\n\t\t\tinputValuesUSD: string[]\n\t\t\tinputUSD: string\n\t\t\toutputTokens: string[]\n\t\t\toutputAmounts: string[]\n\t\t\toutputBeneficiaries: string[]\n\t\t\tcalldata: string\n\t\t\tstatus: OrderStatus\n\t\t\tcreatedAt: string\n\t\t\tblockNumber: string\n\t\t\tblockTimestamp: string\n\t\t\ttransactionHash: string\n\t\t\tstatusMetadata: {\n\t\t\t\tnodes: Array<{\n\t\t\t\t\tstatus: OrderStatus\n\t\t\t\t\tchain: string\n\t\t\t\t\ttimestamp: string\n\t\t\t\t\tblockNumber: string\n\t\t\t\t\tblockHash: string\n\t\t\t\t\ttransactionHash: string\n\t\t\t\t\tfiller?: string\n\t\t\t\t}>\n\t\t\t}\n\t\t}>\n\t}\n}\n\nexport interface TokenPrice {\n\tsymbol: string\n\taddress?: string\n\tcurrency: string\n\tprice: string\n\tlastUpdatedAt: bigint\n}\n\nexport interface TokenPricesResponse {\n\ttokenPrices: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tsymbol: string\n\t\t\taddress: string\n\t\t\tcurrency: string\n\t\t\tprice: string\n\t\t\tlastUpdatedAt: bigint\n\t\t}>\n\t}\n}\n\n/**\n * Represents a complete transaction structure for swap operations\n */\nexport interface Transaction {\n\t/**\n\t * The address to send the transaction to (typically the Universal Router address)\n\t */\n\tto: HexString\n\n\t/**\n\t * The value to send with the transaction (in wei)\n\t */\n\tvalue: bigint\n\n\t/**\n\t * The calldata for the transaction\n\t */\n\tdata: HexString\n}\n\nexport interface StorageFacade {\n\tget<T>(key: string): Promise<T | undefined>\n\tset<T>(key: string, value: T): Promise<void>\n\tdelete(key: string): Promise<void>\n}\n\n// =============================================================================\n// IntentGatewayV2 Types\n// =============================================================================\n\nexport interface PaymentInfo {\n\t/** Accepts a standard 20-byte address; the SDK pads to bytes32 internally when needed. */\n\tbeneficiary: BytesLikeHex\n\tassets: TokenInfo[]\n\tcall: HexString\n}\n\nexport interface DispatchInfo {\n\tassets: TokenInfo[]\n\tcall: HexString\n}\n\nexport interface Order {\n\tid?: string\n\tuser: HexString\n\t/** Accepts either `\"EVM-1\"` style IDs or their hex-encoded form. */\n\tsource: StateMachineId\n\t/** Accepts either `\"EVM-42161\"` style IDs or their hex-encoded form. */\n\tdestination: StateMachineId\n\tdeadline: bigint\n\tnonce: bigint\n\tfees: bigint\n\tsession: HexString\n\tpredispatch: DispatchInfo\n\tinputs: TokenInfo[]\n\toutput: PaymentInfo\n}\n\nexport interface CancelOrderOptions {\n\t/** Where to initiate the cancel from. Defaults to `\"source\"`. */\n\tfrom?: \"source\" | \"destination\"\n}\n\nexport interface FillOptions {\n\trelayerFee: bigint\n\tnativeDispatchFee: bigint\n\toutputs: TokenInfo[]\n}\n\n// =============================================================================\n// ERC-4337 Types (v0.7 PackedUserOperation)\n// =============================================================================\n\nexport interface PackedUserOperation {\n\tsender: HexString\n\tnonce: bigint\n\tinitCode: HexString\n\tcallData: HexString\n\taccountGasLimits: HexString\n\tpreVerificationGas: bigint\n\tgasFees: HexString\n\tpaymasterAndData: HexString\n\tsignature: HexString\n}\n\nexport interface SigningAccount {\n\t/** Signs a bid message hash for a given chain. Returns a 65-byte ECDSA signature. */\n\tsignMessage: (messageHash: HexString, chainId: number) => Promise<HexString>\n\t/** Signs a raw 32-byte hash, returning split signature components for EIP-7702 etc. */\n\tsignRawHash: (hash: HexString) => Promise<{ r: HexString; s: HexString; yParity: number }>\n\t/**\n\t * Signs an EIP-712 typed-data payload (e.g. an EIP-2612 USDC permit for the Circle Paymaster).\n\t * The shape of `typedData` matches viem's `TypedDataDefinition` (domain + types + message).\n\t */\n\tsignTypedData: (typedData: unknown, chainId?: number) => Promise<HexString>\n}\n\nexport interface SubmitBidOptions {\n\torder: Order\n\tfillOptions: FillOptions\n\tsolverAccount: HexString\n\t/** Canonical signer used for bid message signing and raw-hash operations. */\n\tsolverSigner: SigningAccount\n\tnonce: bigint\n\tentryPointAddress: HexString\n\t// Estimated gas for executing fillOrder calldata\n\tcallGasLimit: bigint\n\t// Estimated gas for validateUserOp\n\tverificationGasLimit: bigint\n\t// Overhead gas for bundler\n\tpreVerificationGas: bigint\n\t// Max gas price willing to pay\n\tmaxFeePerGas: bigint\n\t// Priority fee (tip)\n\tmaxPriorityFeePerGas: bigint\n\t/** Pre-built ERC-7821 calldata encoding the UserOp execution (approvals + fillOrder). */\n\tcallData: HexString\n\t/**\n\t * Optional packed paymasterAndData for EntryPoint v0.8.\n\t * Must be built BEFORE calling prepareSubmitBid so the hash covers paymaster bytes.\n\t * Defaults to \"0x\" (EntryPoint deposit pays gas).\n\t */\n\tpaymasterAndData?: HexString\n}\n\nexport interface EstimateFillOrderParams {\n\torder: Order\n\t/**\n\t * Optional ERC-7821 calls to prepend before the fillOrder call in the\n\t * simulated UserOp. Used for funding calls (e.g. LP withdrawal) so the\n\t * bundler estimates gas for the complete atomic batch.\n\t */\n\tprependCalls?: ERC7821Call[]\n\t/**\n\t * Optional percentage to bump maxPriorityFeePerGas.\n\t * This is added on top of the base gasPrice.\n\t * Default: 8 (8%)\n\t */\n\tmaxPriorityFeePerGasBumpPercent?: number\n\t/**\n\t * Optional percentage to bump maxFeePerGas.\n\t * This is added on top of the base gasPrice.\n\t * Default: 10 (10%)\n\t */\n\tmaxFeePerGasBumpPercent?: number\n}\n\nexport interface FillOrderEstimate {\n\tfillOptions: FillOptions\n\tcallGasLimit: bigint\n\tverificationGasLimit: bigint\n\tpreVerificationGas: bigint\n\t/** Paymaster verification gas limit from bundler estimate. 0n when no paymaster. */\n\tpaymasterVerificationGasLimit: bigint\n\t/** Paymaster postOp gas limit from bundler estimate. 0n when no paymaster. */\n\tpaymasterPostOpGasLimit: bigint\n\tmaxFeePerGas: bigint\n\tmaxPriorityFeePerGas: bigint\n\ttotalGasCostWei: bigint\n\ttotalGasInFeeToken: bigint\n}\n\n/**\n * Result of submitting a bid to Hyperbridge\n */\nexport interface BidSubmissionResult {\n\t/**\n\t * Whether the bid submission was successful\n\t */\n\tsuccess: boolean\n\n\t/**\n\t * Block hash where the bid was included\n\t */\n\tblockHash?: HexString\n\n\t/**\n\t * Extrinsic hash of the bid transaction\n\t */\n\textrinsicHash?: HexString\n\n\t/**\n\t * Error message if submission failed\n\t */\n\terror?: string\n}\n\n/**\n * Represents a storage entry from pallet-intents Bids storage\n * StorageDoubleMap<_, Blake2_128Concat, H256, Blake2_128Concat, AccountId, Balance>\n */\nexport interface BidStorageEntry {\n\t/** The order commitment hash (H256) */\n\tcommitment: HexString\n\t/** The filler's Substrate account ID (SS58 encoded) */\n\tfiller: string\n\t/** The deposit amount stored on-chain (BalanceOf<T> = u128) */\n\tdeposit: bigint\n}\n\n/**\n * Represents a bid placed by a filler for an order\n * Matches the Rust struct: Bid<AccountId> { filler: AccountId, user_op: Vec<u8> }\n */\nexport interface FillerBid {\n\t/** The filler's Substrate account ID (SS58 encoded) */\n\tfiller: string\n\t/** The decoded PackedUserOperation */\n\tuserOp: PackedUserOperation\n\t/** The deposit amount stored on-chain (in plancks) */\n\tdeposit: bigint\n}\n\n/**\n * Options for selecting a solver in IntentGatewayV2\n */\nexport interface SelectOptions {\n\t/** The order commitment hash (bytes32) */\n\tcommitment: HexString\n\t/** The solver address to select */\n\tsolver: HexString\n\t/** The EIP-712 signature from the session key */\n\tsignature: HexString\n}\n\n// =============================================================================\n// Intent Order Flow Types\n// =============================================================================\n\n/** Status stages for the intent order execution flow */\nexport const IntentOrderStatus = Object.freeze({\n\tAWAITING_PLACE_ORDER: \"AWAITING_PLACE_ORDER\",\n\tORDER_PLACED: \"ORDER_PLACED\",\n\tORDER_CONFIRMED: \"ORDER_CONFIRMED\",\n\tAWAITING_BIDS: \"AWAITING_BIDS\",\n\tNEW_BID: \"NEW_BID\",\n\tBIDS_RECEIVED: \"BIDS_RECEIVED\",\n\tBID_SELECTED: \"BID_SELECTED\",\n\tFILLED: \"FILLED\",\n\tPARTIAL_FILL: \"PARTIAL_FILL\",\n\tEXPIRED: \"EXPIRED\",\n\tFAILED: \"FAILED\",\n})\n\nexport type IntentOrderStatus = typeof IntentOrderStatus\nexport type IntentOrderStatusKey = keyof typeof IntentOrderStatus\n\n/** Tagged union of all possible status updates yielded by the intent order execution stream */\nexport type IntentOrderStatusUpdate =\n\t| { status: \"AWAITING_PLACE_ORDER\"; to: HexString; data: HexString; value?: bigint; sessionPrivateKey: HexString }\n\t| { status: \"ORDER_PLACED\"; order: Order; receipt: TransactionReceipt }\n\t| { status: \"AWAITING_BIDS\"; commitment: HexString; totalFilledAssets: TokenInfo[]; remainingAssets: TokenInfo[] }\n\t| { status: \"NEW_BID\"; commitment: HexString; bidCount: number; bids: FillerBid[] }\n\t| { status: \"BIDS_RECEIVED\"; commitment: HexString; bidCount: number; bids: FillerBid[] }\n\t| {\n\t\t\tstatus: \"BID_SELECTED\"\n\t\t\tcommitment: HexString\n\t\t\tselectedSolver: HexString\n\t\t\tuserOpHash: HexString\n\t\t\tuserOp: PackedUserOperation\n\t\t\ttransactionHash?: HexString\n\t }\n\t| {\n\t\t\tstatus: \"FILLED\"\n\t\t\tcommitment: HexString\n\t\t\tuserOpHash: HexString\n\t\t\tselectedSolver: HexString\n\t\t\ttransactionHash?: HexString\n\t\t\ttotalFilledAssets: TokenInfo[]\n\t\t\tremainingAssets: TokenInfo[]\n\t }\n\t| {\n\t\t\tstatus: \"PARTIAL_FILL\"\n\t\t\tcommitment: HexString\n\t\t\tuserOpHash: HexString\n\t\t\tselectedSolver: HexString\n\t\t\ttransactionHash?: HexString\n\t\t\tfilledAssets: TokenInfo[]\n\t\t\ttotalFilledAssets: TokenInfo[]\n\t\t\tremainingAssets: TokenInfo[]\n\t }\n\t| {\n\t\t\tstatus: \"EXPIRED\"\n\t\t\tcommitment: HexString\n\t\t\ttotalFilledAssets?: TokenInfo[]\n\t\t\tremainingAssets?: TokenInfo[]\n\t\t\terror: string\n\t }\n\t| {\n\t\t\tstatus: \"FAILED\"\n\t\t\tcommitment?: HexString\n\t\t\ttotalFilledAssets?: TokenInfo[]\n\t\t\tremainingAssets?: TokenInfo[]\n\t\t\terror: string\n\t }\n\n/** Result of selecting a bid and submitting to the bundler */\nexport interface SelectBidResult {\n\tuserOp: PackedUserOperation\n\tuserOpHash: HexString\n\tsolverAddress: HexString\n\tcommitment: HexString\n\ttxnHash?: HexString\n\tfillStatus?: \"full\" | \"partial\"\n\t/** Assets filled in this user operation (best-effort, based on on-chain PartialFill logs) */\n\tfilledAssets?: TokenInfo[]\n}\n\n/** Options for executing an intent order */\nexport interface ExecuteIntentOrderOptions {\n\torder: Order\n\tsessionPrivateKey?: HexString\n\t/** Duration in ms to collect bids before selecting the best one. */\n\tauctionTimeMs: number\n\tpollIntervalMs?: number\n\t/**\n\t * If set, bids are restricted to the given solver until `timeoutMs` elapses,\n\t * after which any solver is accepted.\n\t */\n\tsolver?: {\n\t\t/** Only bids from this address (matched against userOp.sender) will be considered */\n\t\taddress: HexString\n\t\t/** After this many ms without a matching bid, execution falls back to any solver */\n\t\ttimeoutMs: number\n\t}\n}\n\n/** Options for resuming execution of a previously placed intent order */\nexport interface ResumeIntentOrderOptions {\n\tsessionPrivateKey?: HexString\n\t/** Duration in ms to collect bids before selecting the best one. */\n\tauctionTimeMs: number\n\tpollIntervalMs?: number\n\tsolver?: {\n\t\taddress: HexString\n\t\ttimeoutMs: number\n\t}\n}\n\n/** Type for ERC-7821 Call struct */\nexport type ERC7821Call = {\n\ttarget: `0x${string}`\n\tvalue: bigint\n\tdata: `0x${string}`\n}\n","export const ABI = [\n\t{\n\t\tinputs: [],\n\t\tname: \"CannotChangeFeeToken\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"DuplicateResponse\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"FrozenHost\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidAddressLength\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidConsensusClient\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidHandler\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidHostManager\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidHyperbridgeId\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidStateMachinesLength\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidUnstakingPeriod\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnauthorizedAccount\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnauthorizedAction\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnauthorizedResponse\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnknownRequest\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnknownResponse\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"WithdrawalFailed\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"dest\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"from\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\tname: \"keys\",\n\t\t\t\ttype: \"bytes[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"nonce\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"context\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"fee\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"GetRequestEvent\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"GetRequestHandled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"dest\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t],\n\t\tname: \"GetRequestTimeoutHandled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"enum FrozenStatus\",\n\t\t\t\tname: \"status\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t},\n\t\t],\n\t\tname: \"HostFrozen\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultTimeout\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultPerByteFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateCommitmentFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"feeToken\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"admin\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"handler\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"hostManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"uniswapV2\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"unStakingPeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"challengePeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"consensusClient\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\t\t\tname: \"stateMachines\",\n\t\t\t\t\t\ttype: \"uint256[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\tname: \"stateIdHash\",\n\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"perByteFee\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PerByteFee[]\",\n\t\t\t\t\t\tname: \"perByteFees\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"hyperbridge\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct HostParams\",\n\t\t\t\tname: \"oldParams\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultTimeout\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultPerByteFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateCommitmentFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"feeToken\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"admin\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"handler\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"hostManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"uniswapV2\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"unStakingPeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"challengePeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"consensusClient\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\t\t\tname: \"stateMachines\",\n\t\t\t\t\t\ttype: \"uint256[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\tname: \"stateIdHash\",\n\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"perByteFee\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PerByteFee[]\",\n\t\t\t\t\t\tname: \"perByteFees\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"hyperbridge\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct HostParams\",\n\t\t\t\tname: \"newParams\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"HostParamsUpdated\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"beneficiary\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"native\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t],\n\t\tname: \"HostWithdrawal\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"dest\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"from\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"nonce\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"body\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"fee\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostRequestEvent\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostRequestHandled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"dest\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostRequestTimeoutHandled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"source\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"dest\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"from\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"nonce\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"body\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"response\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"responseTimeoutTimestamp\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"fee\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostResponseEvent\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"newFee\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostResponseFunded\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostResponseHandled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"dest\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t],\n\t\tname: \"PostResponseTimeoutHandled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"newFee\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"RequestFunded\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"caller\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"fee\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"StateCommitmentRead\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"stateMachineId\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"timestamp\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"overlayRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"stateRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct StateCommitment\",\n\t\t\t\tname: \"stateCommitment\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"fisherman\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"StateCommitmentVetoed\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"stateMachineId\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"StateMachineUpdated\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"admin\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"chainId\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"challengePeriod\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"consensusClient\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"consensusState\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"consensusUpdateTime\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"fisherman\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"deleteStateMachineCommitment\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchPostResponse\",\n\t\t\t\tname: \"post\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatch\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchPost\",\n\t\t\t\tname: \"post\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatch\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchGet\",\n\t\t\t\tname: \"get\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatch\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostResponse\",\n\t\t\t\tname: \"response\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatchIncoming\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatchIncoming\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\tname: \"key\",\n\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct StorageValue[]\",\n\t\t\t\t\t\tname: \"values\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct GetResponse\",\n\t\t\t\tname: \"response\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatchIncoming\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostResponse\",\n\t\t\t\tname: \"response\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"sender\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct FeeMetadata\",\n\t\t\t\tname: \"meta\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatchTimeOut\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"sender\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct FeeMetadata\",\n\t\t\t\tname: \"meta\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatchTimeOut\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"sender\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct FeeMetadata\",\n\t\t\t\tname: \"meta\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"dispatchTimeOut\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"feeToken\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"frozen\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"enum FrozenStatus\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"fundRequest\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amount\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"fundResponse\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"host\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"hostParams\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultTimeout\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultPerByteFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateCommitmentFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"feeToken\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"admin\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"handler\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"hostManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"uniswapV2\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"unStakingPeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"challengePeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"consensusClient\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\t\t\tname: \"stateMachines\",\n\t\t\t\t\t\ttype: \"uint256[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\tname: \"stateIdHash\",\n\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"perByteFee\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PerByteFee[]\",\n\t\t\t\t\t\tname: \"perByteFees\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"hyperbridge\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct HostParams\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"hyperbridge\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"id\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"latestStateMachineHeight\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"nonce\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"stateId\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"perByteFee\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"requestCommitments\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"sender\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct FeeMetadata\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"requestReceipts\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"responded\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"responseCommitments\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"sender\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct FeeMetadata\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"responseReceipts\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"responseCommitment\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct ResponseReceipt\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"state\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"timestamp\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"overlayRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"stateRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateCommitment\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"setConsensusState\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"enum FrozenStatus\",\n\t\t\t\tname: \"newState\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t},\n\t\t],\n\t\tname: \"setFrozenState\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"stateCommitmentFee\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"stateMachineCommitment\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"timestamp\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"overlayRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"stateRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateCommitment\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"stateMachineCommitmentUpdateTime\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"parachainId\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"id\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"stateMachineId\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"string\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"string\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"state\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"storeConsensusState\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"timestamp\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"overlayRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"stateRoot\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct StateCommitment\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"storeStateMachineCommitment\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"timestamp\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"unStakingPeriod\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"uniswapV2Router\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultTimeout\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"defaultPerByteFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"stateCommitmentFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"feeToken\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"admin\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"handler\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"hostManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"uniswapV2\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"unStakingPeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"challengePeriod\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"consensusClient\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\t\t\tname: \"stateMachines\",\n\t\t\t\t\t\ttype: \"uint256[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\t\t\tname: \"stateIdHash\",\n\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"perByteFee\",\n\t\t\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PerByteFee[]\",\n\t\t\t\t\t\tname: \"perByteFees\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"hyperbridge\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct HostParams\",\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"updateHostParams\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"paraId\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"height\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"vetoes\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bool\",\n\t\t\t\t\t\tname: \"native\",\n\t\t\t\t\t\ttype: \"bool\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct WithdrawParams\",\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"withdraw\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tstateMutability: \"payable\",\n\t\ttype: \"receive\",\n\t},\n] as const\n\nexport default { ABI }\n","const ABI = [\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\tname: \"calls\",\n\t\t\t\ttype: \"bytes[]\",\n\t\t\t},\n\t\t],\n\t\tname: \"batchCall\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"currentEpoch\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"proof\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"handleConsensus\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"source\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"dest\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n\t\t\t\t\t\t\t{ internalType: \"address\", name: \"from\", type: \"address\" },\n\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes[]\", name: \"keys\", type: \"bytes[]\" },\n\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"height\", type: \"uint64\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"context\", type: \"bytes\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct GetRequest[]\",\n\t\t\t\t\t\tname: \"timeouts\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"stateMachineId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"height\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{ internalType: \"bytes[]\", name: \"proof\", type: \"bytes[]\" },\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct GetTimeoutMessage\",\n\t\t\t\tname: \"message\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"handleGetRequestTimeouts\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"stateMachineId\", type: \"uint256\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"height\", type: \"uint256\" },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ internalType: \"bytes32[]\", name: \"multiproof\", type: \"bytes32[]\" },\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"leafCount\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct Proof\",\n\t\t\t\t\t\tname: \"proof\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\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\tcomponents: [\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"source\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"dest\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"address\", name: \"from\", type: \"address\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes[]\", name: \"keys\", type: \"bytes[]\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"height\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"context\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\t\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\t\t\t\t\ttype: \"tuple\",\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\tcomponents: [\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"key\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"value\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tinternalType: \"struct MerklePatricia.StorageValue[]\",\n\t\t\t\t\t\t\t\t\t\tname: \"values\",\n\t\t\t\t\t\t\t\t\t\ttype: \"tuple[]\",\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\tinternalType: \"struct GetResponse\",\n\t\t\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"index\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct GetResponseLeaf[]\",\n\t\t\t\t\t\tname: \"responses\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct GetResponseMessage\",\n\t\t\t\tname: \"message\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"handleGetResponses\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"source\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"dest\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"from\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"to\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"body\", type: \"bytes\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest[]\",\n\t\t\t\t\t\tname: \"timeouts\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"stateMachineId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"height\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{ internalType: \"bytes[]\", name: \"proof\", type: \"bytes[]\" },\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostRequestTimeoutMessage\",\n\t\t\t\tname: \"message\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"handlePostRequestTimeouts\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"stateMachineId\", type: \"uint256\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"height\", type: \"uint256\" },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ internalType: \"bytes32[]\", name: \"multiproof\", type: \"bytes32[]\" },\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"leafCount\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct Proof\",\n\t\t\t\t\t\tname: \"proof\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"source\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"dest\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"from\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"to\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"body\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct PostRequest\",\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},\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"index\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequestLeaf[]\",\n\t\t\t\t\t\tname: \"requests\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostRequestMessage\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"handlePostRequests\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"source\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"dest\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"from\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"to\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"body\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct PostRequest\",\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},\n\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"response\", type: \"bytes\" },\n\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostResponse[]\",\n\t\t\t\t\t\tname: \"timeouts\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"stateMachineId\", type: \"uint256\" },\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"height\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{ internalType: \"bytes[]\", name: \"proof\", type: \"bytes[]\" },\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostResponseTimeoutMessage\",\n\t\t\t\tname: \"message\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"handlePostResponseTimeouts\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IHost\",\n\t\t\t\tname: \"host\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"stateMachineId\", type: \"uint256\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"height\", type: \"uint256\" },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct StateMachineHeight\",\n\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ internalType: \"bytes32[]\", name: \"multiproof\", type: \"bytes32[]\" },\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"leafCount\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct Proof\",\n\t\t\t\t\t\tname: \"proof\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\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\tcomponents: [\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"source\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"dest\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"from\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"to\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"body\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t{ internalType: \"bytes\", name: \"response\", type: \"bytes\" },\n\t\t\t\t\t\t\t\t\t{ internalType: \"uint64\", name: \"timeoutTimestamp\", type: \"uint64\" },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct PostResponse\",\n\t\t\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ internalType: \"uint256\", name: \"index\", type: \"uint256\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostResponseLeaf[]\",\n\t\t\t\t\t\tname: \"responses\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostResponseMessage\",\n\t\t\t\tname: \"response\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"handlePostResponses\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"authoritySetId\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"relayerOf\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes4\",\n\t\t\t\tname: \"interfaceId\",\n\t\t\t\ttype: \"bytes4\",\n\t\t\t},\n\t\t],\n\t\tname: \"supportsInterface\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"authoritySetId\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"relayer\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"NewEpoch\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"uint256\", name: \"index\", type: \"uint256\" },\n\t\t\t{ internalType: \"bytes\", name: \"reason\", type: \"bytes\" },\n\t\t],\n\t\tname: \"BatchCallFailed\",\n\t\ttype: \"error\",\n\t},\n\t{ inputs: [], name: \"ChallengePeriodNotElapsed\", type: \"error\" },\n\t{ inputs: [], name: \"ConsensusClientExpired\", type: \"error\" },\n\t{ inputs: [], name: \"DuplicateMessage\", type: \"error\" },\n\t{ inputs: [], name: \"EmptyTree\", type: \"error\" },\n\t{ inputs: [], name: \"HostFrozen\", type: \"error\" },\n\t{ inputs: [], name: \"InvalidMessageDestination\", type: \"error\" },\n\t{ inputs: [], name: \"InvalidProof\", type: \"error\" },\n\t{ inputs: [], name: \"MessageNotTimedOut\", type: \"error\" },\n\t{ inputs: [], name: \"MessageTimedOut\", type: \"error\" },\n\t{ inputs: [], name: \"OutOfBoundsLeaves\", type: \"error\" },\n\t{ inputs: [], name: \"ProofExhausted\", type: \"error\" },\n\t{ inputs: [], name: \"StateCommitmentNotFound\", type: \"error\" },\n\t{ inputs: [], name: \"UnknownMessage\", type: \"error\" },\n] as const\n\nexport default { ABI }\n","import {\n\tChain,\n\tarbitrumSepolia,\n\tbaseSepolia,\n\tbscTestnet,\n\tgnosis,\n\tgnosisChiado,\n\toptimism,\n\toptimismSepolia,\n\tsepolia,\n\tsoneium,\n\tmainnet,\n\tbsc,\n\tbase,\n\tarbitrum,\n\tpolygon,\n\tunichain,\n\tpolygonAmoy,\n\ttron,\n} from \"viem/chains\"\nimport { defineChain } from \"viem\"\nimport { TronWeb } from \"tronweb\"\nimport { HexString } from \"@/types\"\n\n/** Convert a Tron base58 address to a 0x-prefixed 20-byte EVM hex address */\nfunction tronAddress(base58: string): HexString {\n\treturn `0x${TronWeb.address.toHex(base58).slice(2)}` as HexString\n}\n\nexport enum Chains {\n\tBSC_CHAPEL = \"EVM-97\",\n\tGNOSIS_CHIADO = \"EVM-10200\",\n\tHYPERBRIDGE_GARGANTUA = \"KUSAMA-4009\",\n\tSEPOLIA = \"EVM-11155111\",\n\tMAINNET = \"EVM-1\",\n\tBSC_MAINNET = \"EVM-56\",\n\tARBITRUM_MAINNET = \"EVM-42161\",\n\tARBITRUM_SEPOLIA = \"EVM-421614\",\n\tBASE_MAINNET = \"EVM-8453\",\n\tBASE_SEPOLIA = \"EVM-84532\",\n\tOPTIMISM_MAINNET = \"EVM-10\",\n\tOPTIMISM_SEPOLIA = \"EVM-11155420\",\n\tGNOSIS_MAINNET = \"EVM-100\",\n\tSONEIUM_MAINNET = \"EVM-1868\",\n\tPOLYGON_MAINNET = \"EVM-137\",\n\tUNICHAIN_MAINNET = \"EVM-130\",\n\tPOLYGON_AMOY = \"EVM-80002\",\n\tPOLKADOT_ASSET_HUB_PASEO = \"EVM-420420417\",\n\tTRON_MAINNET = \"EVM-728126428\",\n\tTRON_NILE = \"EVM-3448148188\",\n\tPHAROS_MAINNET = \"EVM-688600\",\n\tPHAROS_ATLANTIC = \"EVM-688689\",\n}\n\n/** Polkadot Asset Hub Paseo testnet (chain ID 420420417) — not in viem/chains */\nexport const polkadotAssetHubPaseo = defineChain({\n\tid: 420420417,\n\tname: \"Polkadot Asset Hub (Paseo)\",\n\tnativeCurrency: { name: \"PAS\", symbol: \"PAS\", decimals: 10 },\n\trpcUrls: {\n\t\tdefault: { http: [\"https://testnet-asset-hub-eth-rpc.polkadot.io\"] },\n\t},\n\tblockExplorers: {\n\t\tdefault: { name: \"Routescan\", url: \"https://polkadot.testnet.routescan.io\" },\n\t},\n})\n\n/** Pharos Mainnet (chain ID 688600) — not in viem/chains */\nexport const pharosMainnet = defineChain({\n\tid: 688600,\n\tname: \"Pharos Mainnet\",\n\tnativeCurrency: { name: \"PHRS\", symbol: \"PHRS\", decimals: 18 },\n\trpcUrls: {\n\t\tdefault: { http: [\"https://atlantic.dplabs-internal.com\"] },\n\t},\n})\n\n/** Pharos Atlantic Testnet (chain ID 688689) — not in viem/chains */\nexport const pharosAtlantic = defineChain({\n\tid: 688689,\n\tname: \"Pharos Atlantic Testnet\",\n\tnativeCurrency: { name: \"PHRS\", symbol: \"PHRS\", decimals: 18 },\n\trpcUrls: {\n\t\tdefault: { http: [\"https://atlantic.dplabs-internal.com\"] },\n\t},\n})\n\n/** Tron Nile Testnet (chain ID 3448148188) — not in viem/chains */\nexport const tronNile = defineChain({\n\tid: 3448148188,\n\tname: \"TRON Nile Testnet\",\n\tnativeCurrency: { name: \"TRX\", symbol: \"TRX\", decimals: 6 },\n\trpcUrls: {\n\t\tdefault: { http: [\"https://nile.trongrid.io/jsonrpc\"] },\n\t},\n\tblockExplorers: {\n\t\tdefault: { name: \"Nile Tronscan\", url: \"https://nile.tronscan.org\" },\n\t},\n})\n\n// Known Tron chain IDs (mainnet + Nile testnet)\nexport const tronChainIds = new Set([728126428, 3448148188])\n\nexport interface ChainConfigData {\n\tchainId: number\n\tstateMachineId: Chains\n\tviemChain?: Chain\n\twrappedNativeDecimals?: number\n\tassets?: {\n\t\tWETH: string\n\t\tDAI: string\n\t\tUSDC: string\n\t\tUSDT: string\n\t\tcNGN?: string\n\t\tEXT?: string\n\t}\n\ttokenDecimals?: {\n\t\tUSDC: number\n\t\tUSDT: number\n\t\tcNGN?: number\n\t\tEXT?: number\n\t}\n\ttokenStorageSlots?: {\n\t\tUSDT?: { balanceSlot: number; allowanceSlot: number }\n\t\tUSDC?: { balanceSlot: number; allowanceSlot: number }\n\t\tWETH?: { balanceSlot: number; allowanceSlot: number }\n\t\tDAI?: { balanceSlot: number; allowanceSlot: number }\n\t}\n\taddresses: {\n\t\tIntentGateway?: `0x${string}`\n\t\tIntentGatewayV2?: `0x${string}`\n\t\tTokenGateway?: `0x${string}`\n\t\tHost?: `0x${string}`\n\t\tUniswapRouter02?: `0x${string}`\n\t\tUniswapV2Factory?: `0x${string}`\n\t\tUniswapV3Factory?: `0x${string}`\n\t\tUniversalRouter?: `0x${string}`\n\t\tUniswapV3Quoter?: `0x${string}`\n\t\tUniswapV4Quoter?: `0x${string}`\n\t\tCalldispatcher?: `0x${string}`\n\t\tPermit2?: `0x${string}`\n\t\t/** ERC-4337 v0.8 EntryPoint address (canonical across all EVM chains) */\n\t\tEntryPointV08?: `0x${string}`\n\t\t/** USDT0 OFT contract address (OFT Adapter on Ethereum, OFT on other chains) */\n\t\tUsdt0Oft?: `0x${string}`\n\t\t/** SolverAccount contract address used for EIP-7702 delegation */\n\t\tSolverAccount?: `0x${string}`\n\t\t/** Aerodrome (Solidly-style) router for LP removal / swaps on chains where Aerodrome is deployed */\n\t\tAerodromeRouter?: `0x${string}`\n\t\t/** Uniswap V4 PositionManager (canonical CREATE2 address) for LP position management */\n\t\tUniswapV4PositionManager?: `0x${string}`\n\t\t/** Uniswap V4 PoolManager (canonical CREATE2 address) for pool state reads via extsload */\n\t\tUniswapV4PoolManager?: `0x${string}`\n\t\t/** Uniswap V4 StateView (canonical CREATE2 address) for pool state reads via extsload */\n\t\tUniswapV4StateView?: `0x${string}`\n\t\t/** Circle Paymaster contract address (USDC-based ERC-4337 paymaster) */\n\t\tCirclePaymaster?: `0x${string}`\n\t}\n\trpcEnvKey?: string\n\tdefaultRpcUrl?: string\n\tconsensusStateId: string\n\tcoingeckoId: string\n\tpopularTokens?: string[]\n\t/** LayerZero Endpoint ID for cross-chain messaging */\n\tlayerZeroEid?: number\n}\n\n// All chain configuration in one place - add new chains here\nexport const chainConfigs: Record<number, ChainConfigData> = {\n\t97: {\n\t\tchainId: 97,\n\t\tstateMachineId: Chains.BSC_CHAPEL,\n\t\tviemChain: bscTestnet,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0xae13d989dac2f0debff460ac112a837c89baa7cd\",\n\t\t\tDAI: \"0x1938165569a5463327fb206be06d8d9253aa06b7\",\n\t\t\tUSDC: \"0xA801da100bF16D07F668F4A49E1f71fc54D05177\",\n\t\t\tUSDT: \"0xc043f483373072f7f27420d6e7d7ad269c018e18\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 18,\n\t\t\tUSDT: 18,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDC: { balanceSlot: 1, allowanceSlot: 2 },\n\t\t\tUSDT: { balanceSlot: 151, allowanceSlot: 152 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t\tIntentGatewayV2: \"0xFbF50B2b32768127603cC9eF4b871574b881b8eD\",\n\t\t\tTokenGateway: \"0xFcDa26cA021d5535C3059547390E6cCd8De7acA6\",\n\t\t\tHost: \"0x8Aa0Dea6D675d785A882967Bf38183f6117C09b7\",\n\t\t\tUniswapRouter02: \"0x9639379819420704457B07A0C33B678D9E0F8Df0\",\n\t\t\tUniswapV2Factory: \"0x12e036669DA18F4A2777853d6e2136b32AceEC86\",\n\t\t\tUniswapV3Factory: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUniversalRouter: \"0xcc6d5ece3d4a57245bf5a2f64f3ed9179b81f714\",\n\t\t\tUniswapV3Quoter: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUniswapV4Quoter: \"0x0000000000000000000000000000000000000000\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tSolverAccount: \"0xCDFcFeD7A14154846808FddC8Ba971A2f8a830a3\",\n\t\t},\n\t\trpcEnvKey: \"BSC_CHAPEL\",\n\t\tdefaultRpcUrl: \"https://bnb-testnet.api.onfinality.io/public\",\n\t\tconsensusStateId: \"BSC0\",\n\t\tcoingeckoId: \"binance-smart-chain\",\n\t\tpopularTokens: [\n\t\t\t\"0xae13d989dac2f0debff460ac112a837c89baa7cd\",\n\t\t\t\"0xC625ec7D30A4b1AAEfb1304610CdAcD0d606aC92\",\n\t\t\t\"0xc043f483373072f7f27420d6e7d7ad269c018e18\",\n\t\t\t\"0x1938165569A5463327fb206bE06d8D9253aa06b7\",\n\t\t],\n\t},\n\t10200: {\n\t\tchainId: 10200,\n\t\tstateMachineId: Chains.GNOSIS_CHIADO,\n\t\tviemChain: gnosisChiado,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x50b1d3c7c073c9caa1ef207365a2c9c976bd70b9\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t\tTokenGateway: \"0xFcDa26cA021d5535C3059547390E6cCd8De7acA6\",\n\t\t\tHost: \"0x58a41b89f4871725e5d898d98ef4bf917601c5eb\",\n\t\t\tUniswapRouter02: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUniswapV2Factory: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUniswapV3Factory: \"0x0000000000000000000000000000000000000000\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\trpcEnvKey: \"GNOSIS_CHIADO\",\n\t\tdefaultRpcUrl: \"https://gnosis-chiado-rpc.publicnode.com\",\n\t\tconsensusStateId: \"GNO0\",\n\t\tcoingeckoId: \"gnosis\",\n\t\tpopularTokens: [\"0x50B1d3c7c073c9caa1Ef207365A2c9C976bD70b9\"],\n\t},\n\t4009: {\n\t\tchainId: 4009,\n\t\tstateMachineId: Chains.HYPERBRIDGE_GARGANTUA,\n\t\taddresses: {},\n\t\trpcEnvKey: \"HYPERBRIDGE_GARGANTUA\",\n\t\tdefaultRpcUrl: \"\",\n\t\tconsensusStateId: \"PAS0\",\n\t\tcoingeckoId: \"hyperbridge\",\n\t},\n\t11155111: {\n\t\tchainId: 11155111,\n\t\tstateMachineId: Chains.SEPOLIA,\n\t\tviemChain: sepolia,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x7b79995e5f793a07bc00c21412e50ecae098e7f9\",\n\t\t\tUSDC: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t\tTokenGateway: \"0xFcDa26cA021d5535C3059547390E6cCd8De7acA6\",\n\t\t\tHost: \"0x2EdB74C269948b60ec1000040E104cef0eABaae8\",\n\t\t\tUniswapRouter02: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUniswapV2Factory: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUniswapV3Factory: \"0x0000000000000000000000000000000000000000\",\n\t\t\tCalldispatcher: \"0xC7f13b6D03A0A7F3239d38897503E90553ABe155\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\trpcEnvKey: \"SEPOLIA\",\n\t\tdefaultRpcUrl: \"https://1rpc.io/sepolia\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"ethereum\",\n\t\tpopularTokens: [\"0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9\"],\n\t},\n\t1: {\n\t\tchainId: 1,\n\t\tstateMachineId: Chains.MAINNET,\n\t\tviemChain: mainnet,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\n\t\t\tDAI: \"0x6b175474e89094c44da98b954eedeac495271d0f\",\n\t\t\tUSDC: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n\t\t\tUSDT: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n\t\t\tcNGN: \"0x17CDB2a01e7a34CbB3DD4b83260B05d0274C8dab\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t\tcNGN: 6,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 2, allowanceSlot: 5 },\n\t\t\tUSDC: { balanceSlot: 9, allowanceSlot: 10 },\n\t\t\tWETH: { balanceSlot: 3, allowanceSlot: 4 },\n\t\t\tDAI: { balanceSlot: 0, allowanceSlot: 0 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0xFd413e3AFe560182C4471F4d143A96d3e259B6dE\",\n\t\t\tHost: \"0x792A6236AF69787C40cF76b69B4c8c7B28c4cA20\",\n\t\t\tUniswapRouter02: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n\t\t\tUniswapV2Factory: \"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f\",\n\t\t\tUniswapV3Factory: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t\tUniversalRouter: \"0x66a9893cc07d91d95644aedd05d03f95e1dba8af\",\n\t\t\tUniswapV3Quoter: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t\tUniswapV4Quoter: \"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203\",\n\t\t\tUniswapV4PositionManager: \"0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e\",\n\t\t\tUniswapV4PoolManager: \"0x000000000004444c5dc75cB358380D2e3dE08A90\",\n\t\t\tUniswapV4StateView: \"0x7ffe42c4a5deea5b0fec41c94c136cf115597227\",\n\t\t\tCalldispatcher: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tCirclePaymaster: \"0x0578cFB241215b77442a541325d6A4E6dFE700Ec\",\n\t\t\tUsdt0Oft: \"0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee\",\n\t\t},\n\t\trpcEnvKey: \"ETH_MAINNET\",\n\t\tdefaultRpcUrl: \"https://eth-mainnet.g.alchemy.com/v2/demo\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"ethereum\",\n\t\tlayerZeroEid: 30101,\n\t\tpopularTokens: [\n\t\t\t\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n\t\t\t\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n\t\t\t\"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n\t\t\t\"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n\t\t],\n\t},\n\t56: {\n\t\tchainId: 56,\n\t\tstateMachineId: Chains.BSC_MAINNET,\n\t\tviemChain: bsc,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c\",\n\t\t\tDAI: \"0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3\",\n\t\t\tUSDC: \"0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d\",\n\t\t\tUSDT: \"0x55d398326f99059ff775485246999027b3197955\",\n\t\t\tEXT: \"0x7C8c11ADb8EF7cd3CFa718008Ea048445C6E7209\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 18,\n\t\t\tUSDT: 18,\n\t\t\tEXT: 18,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 1, allowanceSlot: 2 },\n\t\t\tUSDC: { balanceSlot: 1, allowanceSlot: 2 },\n\t\t\tWETH: { balanceSlot: 3, allowanceSlot: 4 },\n\t\t\tDAI: { balanceSlot: 0, allowanceSlot: 0 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0xFd413e3AFe560182C4471F4d143A96d3e259B6dE\",\n\t\t\tHost: \"0x24B5d421Ec373FcA57325dd2F0C074009Af021F7\",\n\t\t\tUniswapRouter02: \"0x10ED43C718714eb63d5aA57B78B54704E256024E\",\n\t\t\tUniswapV2Factory: \"0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73\",\n\t\t\tUniswapV3Factory: \"0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865\",\n\t\t\tUniversalRouter: \"0xd9C500DfF816a1Da21A48A732d3498Bf09dc9AEB\",\n\t\t\tUniswapV3Quoter: \"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997\",\n\t\t\tUniswapV4Quoter: \"0xd0737C9762912dD34c3271197E362Aa736Df0926\",\n\t\t\tUniswapV4PositionManager: \"0x7a4a5c919ae2541aed11041a1aeee68f1287f95b\",\n\t\t\tUniswapV4PoolManager: \"0x28e2ea090877bf75740558f6bfb36a5ffee9e9df\",\n\t\t\tUniswapV4StateView: \"0xd13dd3d6e93f276fafc9db9e6bb47c1180aee0c4\",\n\t\t\tCalldispatcher: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\t// \"Usdt0Oft\": Not available on BSC\n\t\t},\n\t\trpcEnvKey: \"BSC_MAINNET\",\n\t\tdefaultRpcUrl: \"https://binance.llamarpc.com\",\n\t\tconsensusStateId: \"BSC0\",\n\t\tcoingeckoId: \"binance-smart-chain\",\n\t\tpopularTokens: [\n\t\t\t\"0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82\",\n\t\t\t\"0x000Ae314E2A2172a039B26378814C252734f556A\",\n\t\t\t\"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d\",\n\t\t\t\"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\",\n\t\t\t\"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d\",\n\t\t\t\"0x55d398326f99059fF775485246999027B3197955\",\n\t\t\t\"0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3\",\n\t\t],\n\t},\n\t42161: {\n\t\tchainId: 42161,\n\t\tstateMachineId: Chains.ARBITRUM_MAINNET,\n\t\tviemChain: arbitrum,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x82af49447d8a07e3bd95bd0d56f35241523fbab1\",\n\t\t\tDAI: \"0xda10009cbd5d07dd0cecc66161fc93d7c9000da1\",\n\t\t\tUSDC: \"0xaf88d065e77c8cc2239327c5edb3a432268e5831\",\n\t\t\tUSDT: \"0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9\",\n\t\t\tEXT: \"0x0e668E5127087e236578893a0e01E41837A28469\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t\tEXT: 18,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 51, allowanceSlot: 52 },\n\t\t\tUSDC: { balanceSlot: 9, allowanceSlot: 10 },\n\t\t\tWETH: { balanceSlot: 51, allowanceSlot: 52 },\n\t\t\tDAI: { balanceSlot: 0, allowanceSlot: 0 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0xFd413e3AFe560182C4471F4d143A96d3e259B6dE\",\n\t\t\tHost: \"0xE05AFD4Eb2ce6d65c40e1048381BD0Ef8b4B299e\",\n\t\t\tUniswapRouter02: \"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24\",\n\t\t\tUniswapV2Factory: \"0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9\",\n\t\t\tUniswapV3Factory: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t\tUniversalRouter: \"0xa51afafe0263b40edaef0df8781ea9aa03e381a3\",\n\t\t\tUniswapV3Quoter: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t\tUniswapV4Quoter: \"0x3972c00f7ed4885e145823eb7c655375d275a1c5\",\n\t\t\tUniswapV4PositionManager: \"0xd88f38f930b7952f2db2432cb002e7abbf3dd869\",\n\t\t\tUniswapV4PoolManager: \"0x360e68faccca8ca495c1b759fd9eee466db9fb32\",\n\t\t\tUniswapV4StateView: \"0x76fd297e2d437cd7f76d50f01afe6160f86e9990\",\n\t\t\tCalldispatcher: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tCirclePaymaster: \"0x0578cFB241215b77442a541325d6A4E6dFE700Ec\",\n\t\t\tUsdt0Oft: \"0x14E4A1B13bf7F943c8ff7C51fb60FA964A298D92\",\n\t\t},\n\t\trpcEnvKey: \"ARBITRUM_MAINNET\",\n\t\tdefaultRpcUrl: \"https://arbitrum-one.public.blastapi.io\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"arbitrum-one\",\n\t\tlayerZeroEid: 30110,\n\t\tpopularTokens: [\n\t\t\t\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\n\t\t\t\"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n\t\t\t\"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n\t\t\t\"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\",\n\t\t],\n\t},\n\t8453: {\n\t\tchainId: 8453,\n\t\tstateMachineId: Chains.BASE_MAINNET,\n\t\tviemChain: base,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x4200000000000000000000000000000000000006\",\n\t\t\tDAI: \"0x50c5725949a6f0c72e6c4a641f24049a917db0cb\",\n\t\t\tUSDC: \"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913\",\n\t\t\tUSDT: \"0xfde4c96c8593536e31f229ea8f37b2ada2699bb2\",\n\t\t\tEXT: \"0x0e668E5127087e236578893a0e01E41837A28469\",\n\t\t\tcNGN: \"0x46C85152bFe9f96829aA94755D9f915F9B10EF5F\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t\tcNGN: 6,\n\t\t\tEXT: 18,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 0, allowanceSlot: 1 },\n\t\t\tUSDC: { balanceSlot: 9, allowanceSlot: 10 },\n\t\t\tWETH: { balanceSlot: 3, allowanceSlot: 4 },\n\t\t\tDAI: { balanceSlot: 0, allowanceSlot: 0 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0xFd413e3AFe560182C4471F4d143A96d3e259B6dE\",\n\t\t\tHost: \"0x6FFe92e4d7a9D589549644544780e6725E84b248\",\n\t\t\tUniswapRouter02: \"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24\",\n\t\t\tUniswapV2Factory: \"0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6\",\n\t\t\tUniswapV3Factory: \"0x33128a8fC17869897dcE68Ed026d694621f6FDfD\",\n\t\t\tUniversalRouter: \"0x6ff5693b99212da76ad316178a184ab56d299b43\",\n\t\t\tUniswapV3Quoter: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\",\n\t\t\tUniswapV4Quoter: \"0x0d5e0f971ed27fbff6c2837bf31316121532048d\",\n\t\t\tCalldispatcher: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tCirclePaymaster: \"0x0578cFB241215b77442a541325d6A4E6dFE700Ec\",\n\t\t\tAerodromeRouter: \"0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43\",\n\t\t\tUniswapV4PositionManager: \"0x7c5f5a4bbd8fd63184577525326123b519429bdc\",\n\t\t\tUniswapV4PoolManager: \"0x498581ff718922c3f8e6a244956af099b2652b2b\",\n\t\t\tUniswapV4StateView: \"0xa3c0c9b65bad0b08107aa264b0f3db444b867a71\",\n\t\t\t// Usdt0Oft: Not available on Base\n\t\t},\n\t\trpcEnvKey: \"BASE_MAINNET\",\n\t\tdefaultRpcUrl: \"https://base-mainnet.public.blastapi.io\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"base\",\n\t\tlayerZeroEid: 30184,\n\t\tpopularTokens: [\n\t\t\t\"0x4200000000000000000000000000000000000006\",\n\t\t\t\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n\t\t\t\"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2\",\n\t\t\t\"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\",\n\t\t],\n\t},\n\t137: {\n\t\tchainId: 137,\n\t\tstateMachineId: Chains.POLYGON_MAINNET,\n\t\tviemChain: polygon,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270\",\n\t\t\tDAI: \"0x8f3cf7ad23cd3cadbd9735aff958023239c6a063\",\n\t\t\tUSDC: \"0x3c499c542cef5e3811e1192ce70d8cc03d5c3359\",\n\t\t\tUSDT: \"0xc2132d05d31c914a87c6611c10748aeb04b58e8f\",\n\t\t\tEXT: \"0x7C8c11ADb8EF7cd3CFa718008Ea048445C6E7209\",\n\t\t\tcNGN: \"0x52828daa48C1a9A06F37500882b42daf0bE04C3B\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t\tEXT: 18,\n\t\t\tcNGN: 6,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 0, allowanceSlot: 1 },\n\t\t\tUSDC: { balanceSlot: 9, allowanceSlot: 10 },\n\t\t\tWETH: { balanceSlot: 3, allowanceSlot: 4 },\n\t\t\tDAI: { balanceSlot: 0, allowanceSlot: 0 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0x8b536105b6Fae2aE9199f5146D3C57Dfe53b614E\",\n\t\t\tHost: \"0xD8d3db17C1dF65b301D45C84405CcAC1395C559a\",\n\t\t\tUniswapRouter02: \"0xd2f9496824951D5237cC71245D659E48d0d5f9E8\",\n\t\t\tUniswapV2Factory: \"0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32\",\n\t\t\tUniswapV3Factory: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t\tUniversalRouter: \"0x1095692a6237d83c6a72f3f5efedb9a670c49223\",\n\t\t\tUniswapV3Quoter: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t\tUniswapV4Quoter: \"0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9\",\n\t\t\tUniswapV4PositionManager: \"0x1ec2ebf4f37e7363fdfe3551602425af0b3ceef9\",\n\t\t\tUniswapV4PoolManager: \"0x67366782805870060151383f4bbff9dab53e5cd6\",\n\t\t\tUniswapV4StateView: \"0x5ea1bd7974c8a611cbab0bdcafcb1d9cc9b3ba5a\",\n\t\t\tCalldispatcher: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tCirclePaymaster: \"0x0578cFB241215b77442a541325d6A4E6dFE700Ec\",\n\t\t\tUsdt0Oft: \"0x6BA10300f0DC58B7a1e4c0e41f5daBb7D7829e13\",\n\t\t},\n\t\trpcEnvKey: \"POLYGON_MAINNET\",\n\t\tdefaultRpcUrl: \"https://polygon-bor-rpc.publicnode.com\",\n\t\tconsensusStateId: \"POLY\",\n\t\tcoingeckoId: \"polygon-pos\",\n\t\tlayerZeroEid: 30109,\n\t\tpopularTokens: [\n\t\t\t\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\n\t\t\t\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n\t\t\t\"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n\t\t\t\"0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063\",\n\t\t],\n\t},\n\t130: {\n\t\tchainId: 130,\n\t\tstateMachineId: Chains.UNICHAIN_MAINNET,\n\t\tviemChain: unichain,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x4200000000000000000000000000000000000006\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x078d782b760474a361dda0af3839290b0ef57ad6\",\n\t\t\tUSDT: \"0x9151434b16b9763660705744891fa906f660ecc5\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0x8b536105b6Fae2aE9199f5146D3C57Dfe53b614E\",\n\t\t\tHost: \"0x2A17C1c3616Bbc33FCe5aF5B965F166ba76cEDAf\",\n\t\t\tUniswapRouter02: \"0x284f11109359a7e1306c3e447ef14d38400063ff\",\n\t\t\tUniswapV2Factory: \"0x1F98400000000000000000000000000000000002\",\n\t\t\tUniswapV3Factory: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t\tUniversalRouter: \"0xef740bf23acae26f6492b10de645d6b98dc8eaf3\",\n\t\t\tUniswapV3Quoter: \"0x385a5cf5f83e99f7bb2852b6a19c3538b9fa7658\",\n\t\t\tUniswapV4Quoter: \"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203\",\n\t\t\tUniswapV4PositionManager: \"0x4529a01c7a0410167c5740c487a8de60232617bf\",\n\t\t\tUniswapV4PoolManager: \"0x1f98400000000000000000000000000000000004\",\n\t\t\tUniswapV4StateView: \"0x86e8631a016f9068c3f085faf484ee3f5fdee8f2\",\n\t\t\tCalldispatcher: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tCirclePaymaster: \"0x0578cFB241215b77442a541325d6A4E6dFE700Ec\",\n\t\t\tUsdt0Oft: \"0xc07be8994d035631c36fb4a89c918cefb2f03ec3\",\n\t\t},\n\t\trpcEnvKey: \"UNICHAIN_MAINNET\",\n\t\tdefaultRpcUrl: \"https://unichain.api.onfinality.io/public\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"ethereum\",\n\t\tpopularTokens: [\n\t\t\t\"0x4200000000000000000000000000000000000006\",\n\t\t\t\"0x078d782b760474a361dda0af3839290b0ef57ad6\",\n\t\t\t\"0x9151434b16b9763660705744891fa906f660ecc5\",\n\t\t\t\"0x0000000000000000000000000000000000000000\",\n\t\t],\n\t},\n\n\t3448148188: {\n\t\tchainId: 3448148188,\n\t\tstateMachineId: Chains.TRON_NILE,\n\t\tviemChain: tronNile,\n\t\twrappedNativeDecimals: 6,\n\t\tassets: {\n\t\t\tWETH: \"0x0000000000000000000000000000000000000000\", // WTRX — TODO: fill in\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: tronAddress(\"TNuoKL1ni8aoshfFL1ASca1Gou9RXwAzfn\"),\n\t\t\tUSDT: tronAddress(\"TXYZopYRdj2D9XRtbG411XZZ3kM5VkAeBf\"),\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 0, allowanceSlot: 1 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGatewayV2: tronAddress(\"TMcm6r9RRVKPJNLgyFxcuJknFruQBuPumF\"),\n\t\t\tHost: tronAddress(\"TNduR7v184pMWv2oTamRxxzsmz7oHrKqJc\"),\n\t\t\tCalldispatcher: tronAddress(\"TA9XyBPuXL9ecXcLpcFV1g778fzstke2Eh\"),\n\t\t\tUniswapRouter02: tronAddress(\"TLXGSird23Ww5FZrtbTYisrZNARUmjwmcy\"),\n\t\t},\n\t\trpcEnvKey: \"TRON_NILE\",\n\t\tdefaultRpcUrl: \"https://nile.trongrid.io/jsonrpc\",\n\t\tconsensusStateId: \"TRON\",\n\t\tcoingeckoId: \"tron\",\n\t},\n\n\t80002: {\n\t\tchainId: 80002,\n\t\tstateMachineId: Chains.POLYGON_AMOY,\n\t\tviemChain: polygonAmoy,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x360ad4f9a9A8EFe9A8DCB5f461c4Cc1047E1Dcf9\", //wmatic, change it to wpol\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x693b854d6965ffeaae21c74049dea644b56fcacb\",\n\t\t\tUSDT: \"0x693b854d6965ffeaae21c74049dea644b56fcacb\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 18,\n\t\t\tUSDT: 18,\n\t\t},\n\t\ttokenStorageSlots: {\n\t\t\tUSDT: { balanceSlot: 0, allowanceSlot: 1 },\n\t\t\tUSDC: { balanceSlot: 1, allowanceSlot: 2 },\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGatewayV2: \"0xFbF50B2b32768127603cC9eF4b871574b881b8eD\",\n\t\t\tTokenGateway: \"0x8b536105b6Fae2aE9199f5146D3C57Dfe53b614E\",\n\t\t\tHost: \"0x9a2840D050e64Db89c90Ac5857536E4ec66641DE\",\n\t\t\tCalldispatcher: \"0x876F1891982E260026630c233A4897160A281Fb8\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tSolverAccount: \"0xCDFcFeD7A14154846808FddC8Ba971A2f8a830a3\",\n\t\t},\n\t\trpcEnvKey: \"POLYGON_AMOY\",\n\t\tdefaultRpcUrl: \"https://rpc-amoy.polygon.technology\",\n\t\tconsensusStateId: \"POLY\",\n\t\tcoingeckoId: \"polygon-pos\",\n\t},\n\t10: {\n\t\tchainId: 10,\n\t\tstateMachineId: Chains.OPTIMISM_MAINNET,\n\t\tviemChain: optimism,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x4200000000000000000000000000000000000006\",\n\t\t\tDAI: \"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\",\n\t\t\tUSDC: \"0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85\",\n\t\t\tUSDT: \"0x94b008aA00579c1307B0EF2c499aD98a8ce58e58\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0x66C4459fa61E5Ca647152EEb6dA56150EE975512\",\n\t\t\tTokenGateway: \"0xFd413e3AFe560182C4471F4d143A96d3e259B6dE\",\n\t\t\tHost: \"0x78c8A5F27C06757EA0e30bEa682f1FD5C8d7645d\",\n\t\t\tUniswapRouter02: \"0x4A7b5Da61326A6379179b40d00F57E5bbDC962c2\",\n\t\t\tUniswapV2Factory: \"0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf\",\n\t\t\tUniswapV3Factory: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t\tCalldispatcher: \"0xC71251c8b3e7B02697A84363Eef6DcE8DfBdF333\",\n\t\t\tPermit2: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tCirclePaymaster: \"0x0578cFB241215b77442a541325d6A4E6dFE700Ec\",\n\t\t\tUniswapV4PositionManager: \"0x3c3ea4b57a46241e54610e5f022e5c45859a1017\",\n\t\t\tUniswapV4PoolManager: \"0x9a13f98cb987694c9f086b1f5eb990eea8264ec3\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://mainnet.optimism.io\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"optimistic-ethereum\",\n\t},\n\t100: {\n\t\tchainId: 100,\n\t\tstateMachineId: Chains.GNOSIS_MAINNET,\n\t\tviemChain: gnosis,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x6A023CCd1ff6F2045C3309768eAd9E68F978f6e1\",\n\t\t\tDAI: \"0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d\", // WXDAI\n\t\t\tUSDC: \"0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83\",\n\t\t\tUSDT: \"0x4ECaBa5870353805a9F068101A40E0f32ed605C6\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGatewayV2: \"0x2d61624A17f361020679FaA16fbB566C344AaF4B\",\n\t\t\tSolverAccount: \"0xd4d594C99f23b1Fb9d65fdd9062854B1A1C5780b\",\n\t\t\tTokenGateway: \"0xFd413e3AFe560182C4471F4d143A96d3e259B6dE\",\n\t\t\tHost: \"0x50c236247447B9d4Ee0561054ee596fbDa7791b1\",\n\t\t\tUniswapRouter02: \"0xB2e26652e4BAd1e56055A051f922E06760cA0BFE\", // Mocked\n\t\t\tUniswapV2Factory: \"0x0000000000000000000000000000000000000000\",\n\t\t\tCalldispatcher: \"0xC71251c8b3e7B02697A84363Eef6DcE8DfBdF333\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://rpc.gnosischain.com\",\n\t\tconsensusStateId: \"GNO0\",\n\t\tcoingeckoId: \"gnosis\",\n\t},\n\t1868: {\n\t\tchainId: 1868,\n\t\tstateMachineId: Chains.SONEIUM_MAINNET,\n\t\tviemChain: soneium,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x4200000000000000000000000000000000000006\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0xbA9986D2381edf1DA03B0B9c1f8b00dc4AacC369\", // USDC.e\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tTokenGateway: \"0xCe304770236f39F9911BfCC51afBdfF3b8635718\",\n\t\t\tHost: \"0x7F0165140D0f3251c8f6465e94E9d12C7FD40711\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t\tUniswapV4PositionManager: \"0x1b35d13a2e2528f192637f14b05f0dc0e7deb566\",\n\t\t\tUniswapV4PoolManager: \"0x360e68faccca8ca495c1b759fd9eee466db9fb32\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://rpc.soneium.org\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"ethereum\",\n\t},\n\t421614: {\n\t\tchainId: 421614,\n\t\tstateMachineId: Chains.ARBITRUM_SEPOLIA,\n\t\tviemChain: arbitrumSepolia,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x0000000000000000000000000000000000000000\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tTokenGateway: \"0xFcDa26cA021d5535C3059547390E6cCd8De7acA6\",\n\t\t\tHost: \"0x3435bD7e5895356535459D6087D1eB982DAd90e7\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://sepolia-rollup.arbitrum.io/rpc\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"arbitrum-one\",\n\t},\n\t11155420: {\n\t\tchainId: 11155420,\n\t\tstateMachineId: Chains.OPTIMISM_SEPOLIA,\n\t\tviemChain: optimismSepolia,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x0000000000000000000000000000000000000000\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tTokenGateway: \"0xFcDa26cA021d5535C3059547390E6cCd8De7acA6\",\n\t\t\tHost: \"0x6d51b678836d8060d980605d2999eF211809f3C2\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://sepolia.optimism.io\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"optimistic-ethereum\",\n\t},\n\t84532: {\n\t\tchainId: 84532,\n\t\tstateMachineId: Chains.BASE_SEPOLIA,\n\t\tviemChain: baseSepolia,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x0000000000000000000000000000000000000000\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 6,\n\t\t\tUSDT: 6,\n\t\t},\n\t\taddresses: {\n\t\t\tTokenGateway: \"0xFcDa26cA021d5535C3059547390E6cCd8De7acA6\",\n\t\t\tHost: \"0xD198c01839dd4843918617AfD1e4DDf44Cc3BB4a\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://sepolia.base.org\",\n\t\tconsensusStateId: \"ETH0\",\n\t\tcoingeckoId: \"base\",\n\t},\n\t420420417: {\n\t\tchainId: 420420417,\n\t\tstateMachineId: Chains.POLKADOT_ASSET_HUB_PASEO,\n\t\tviemChain: polkadotAssetHubPaseo,\n\t\twrappedNativeDecimals: 18,\n\t\tassets: {\n\t\t\tWETH: \"0x0000000000000000000000000000000000000000\",\n\t\t\tDAI: \"0x0000000000000000000000000000000000000000\",\n\t\t\tUSDC: \"0x0dc440cf87830f0af564eb8b62b454b7e0c68a4b\", // USD.h\n\t\t\tUSDT: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\ttokenDecimals: {\n\t\t\tUSDC: 18,\n\t\t\tUSDT: 18,\n\t\t},\n\t\taddresses: {\n\t\t\tIntentGateway: \"0x606ba811aa6cb424ce2108e8977c5284686f0d1f\",\n\t\t\tTokenGateway: \"0x1c1e5be83df4a54c7a2230c337e4a3e8b7354b1c\",\n\t\t\tHost: \"0xbb26e04a71e7c12093e82b83ba310163eac186fa\",\n\t\t\tEntryPointV08: \"0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108\",\n\t\t},\n\t\tdefaultRpcUrl: \"https://testnet-asset-hub-eth-rpc.polkadot.io\",\n\t\tconsensusStateId: \"PAS0\",\n\t\tcoingeckoId: \"polkadot\",\n\t},\n\t688600: {\n\t\tchainId: 688600,\n\t\tstateMachineId: Chains.PHAROS_MAINNET,\n\t\tviemChain: pharosMainnet,\n\t\twrappedNativeDecimals: 18,\n\t\taddresses: {\n\t\t\tHost: \"0x0000000000000000000000000000000000000000\",\n\t\t},\n\t\tconsensusStateId: \"PHAR\",\n\t\tcoingeckoId: \"pharos\",\n\t},\n\t688689: {\n\t\tchainId: 688689,\n\t\tstateMachineId: Chains.PHAROS_ATLANTIC,\n\t\tviemChain: pharosAtlantic,\n\t\twrappedNativeDecimals: 18,\n\t\taddresses: {\n\t\t\tTokenGateway: \"0x451bDd8273839AD0Ec7F4Fa798E8B3DABb223fD8\",\n\t\t\tHost: \"0xED54E9b64043c389173316B6351Bd25491060eA8\",\n\t\t\tIntentGatewayV2: \"0xb8039832c6c9266F928d038eA49A8a169300C670\",\n\t\t},\n\t\tconsensusStateId: \"PHAR\",\n\t\tcoingeckoId: \"pharos\",\n\t},\n}\n\n// Lookup by state machine ID\nconst configsByStateMachineId = Object.fromEntries(\n\tObject.values(chainConfigs).map((c) => [c.stateMachineId, c]),\n) as Record<Chains, ChainConfigData>\n\nexport const getConfigByStateMachineId = (id: Chains): ChainConfigData | undefined => configsByStateMachineId[id]\n\nexport const getChainId = (stateMachineId: string): number | undefined =>\n\tconfigsByStateMachineId[stateMachineId as Chains]?.chainId\n\nexport const getViemChain = (chainId: number): Chain | undefined => chainConfigs[chainId]?.viemChain\n\nexport const hyperbridgeAddress = \"\"\n","import type { ChainConfig, HexString } from \"@/types\"\nimport { chainConfigs, getConfigByStateMachineId, Chains, hyperbridgeAddress } from \"@/configs/chain\"\n\nexport class ChainConfigService {\n\tprivate rpcUrls: Record<string, string> = {}\n\n\tconstructor(env: NodeJS.ProcessEnv = process.env) {\n\t\tfor (const config of Object.values(chainConfigs)) {\n\t\t\tif (config.rpcEnvKey) {\n\t\t\t\tthis.rpcUrls[config.stateMachineId] = env[config.rpcEnvKey] || config.defaultRpcUrl || \"\"\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getConfig(chain: string) {\n\t\treturn getConfigByStateMachineId(chain as Chains)\n\t}\n\n\tgetChainConfig(chain: string): ChainConfig {\n\t\tconst config = this.getConfig(chain)\n\t\treturn {\n\t\t\tchainId: config?.chainId ?? 0,\n\t\t\trpcUrl: this.rpcUrls[chain] ?? \"\",\n\t\t\tintentGatewayAddress: config?.addresses.IntentGateway ?? (\"0x\" as `0x${string}`),\n\t\t}\n\t}\n\n\tgetIntentGatewayAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.IntentGateway ?? \"0x\") as HexString\n\t}\n\n\tgetTokenGatewayAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.TokenGateway ?? \"0x\") as HexString\n\t}\n\n\tgetHostAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.Host ?? \"0x\") as HexString\n\t}\n\n\tgetWrappedNativeAssetWithDecimals(chain: string): { asset: HexString; decimals: number } {\n\t\tconst config = this.getConfig(chain)\n\t\treturn {\n\t\t\tasset: (config?.assets?.WETH ?? \"0x\") as HexString,\n\t\t\tdecimals: config?.wrappedNativeDecimals ?? 18,\n\t\t}\n\t}\n\n\tgetDaiAsset(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.assets?.DAI ?? \"0x\") as HexString\n\t}\n\n\tgetUsdtAsset(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.assets?.USDT ?? \"0x\") as HexString\n\t}\n\n\tgetUsdcAsset(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.assets?.USDC ?? \"0x\") as HexString\n\t}\n\n\tgetUsdcDecimals(chain: string): number {\n\t\treturn this.getConfig(chain)?.tokenDecimals?.USDC!\n\t}\n\n\tgetUsdtDecimals(chain: string): number {\n\t\treturn this.getConfig(chain)?.tokenDecimals?.USDT!\n\t}\n\n\tgetCNgnAsset(chain: string): HexString | undefined {\n\t\treturn this.getConfig(chain)?.assets?.cNGN as HexString | undefined\n\t}\n\n\tgetCNgnDecimals(chain: string): number | undefined {\n\t\treturn this.getConfig(chain)?.tokenDecimals?.cNGN\n\t}\n\n\tgetExtAsset(chain: string): HexString | undefined {\n\t\treturn this.getConfig(chain)?.assets?.EXT as HexString | undefined\n\t}\n\n\tgetExtDecimals(chain: string): number | undefined {\n\t\treturn this.getConfig(chain)?.tokenDecimals?.EXT\n\t}\n\n\tgetChainId(chain: string): number {\n\t\treturn this.getConfig(chain)?.chainId ?? 0\n\t}\n\n\tgetConsensusStateId(chain: string): string {\n\t\tconst id = this.getConfig(chain)?.consensusStateId\n\t\tif (!id) throw new Error(`No consensusStateId configured for chain: ${chain}`)\n\t\treturn id\n\t}\n\n\tgetHyperbridgeChainId(): number {\n\t\treturn chainConfigs[4009]?.chainId ?? 4009\n\t}\n\n\tgetRpcUrl(chain: string): string {\n\t\treturn this.rpcUrls[chain] ?? \"\"\n\t}\n\n\tgetUniswapRouterV2Address(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapRouter02 ?? \"0x\") as HexString\n\t}\n\n\tgetAerodromeRouterAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.AerodromeRouter ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV2FactoryAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV2Factory ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV3FactoryAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV3Factory ?? \"0x\") as HexString\n\t}\n\n\tgetUniversalRouterAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniversalRouter ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV3QuoterAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV3Quoter ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV4QuoterAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV4Quoter ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV4PositionManagerAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV4PositionManager ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV4PoolManagerAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV4PoolManager ?? \"0x\") as HexString\n\t}\n\n\tgetUniswapV4StateViewAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.UniswapV4StateView ?? \"0x\") as HexString\n\t}\n\n\tgetPermit2Address(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.Permit2 ?? \"0x\") as HexString\n\t}\n\n\tgetSolverAccountAddress(chain: string): HexString | undefined {\n\t\treturn this.getConfig(chain)?.addresses.SolverAccount as HexString | undefined\n\t}\n\n\tgetCoingeckoId(chain: string): string | undefined {\n\t\treturn this.getConfig(chain)?.coingeckoId\n\t}\n\n\tgetEtherscanApiKey(): string | undefined {\n\t\treturn typeof process !== \"undefined\" ? (process as any)?.env?.ETHERSCAN_API_KEY : undefined\n\t}\n\n\tgetCalldispatcherAddress(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.Calldispatcher ?? \"0x\") as HexString\n\t}\n\n\tgetTokenStorageSlots(\n\t\tchain: string,\n\t\ttokenAddress: string,\n\t): { balanceSlot: number; allowanceSlot: number } | undefined {\n\t\tconst config = this.getConfig(chain)\n\t\tif (!config?.tokenStorageSlots || !config?.assets) return undefined\n\n\t\tconst normalized = tokenAddress.toLowerCase()\n\t\tfor (const [symbol, address] of Object.entries(config.assets)) {\n\t\t\tif (address.toLowerCase() === normalized) {\n\t\t\t\treturn config.tokenStorageSlots[symbol as keyof typeof config.tokenStorageSlots]\n\t\t\t}\n\t\t}\n\t\treturn undefined\n\t}\n\n\tgetPopularTokens(chain: string): string[] {\n\t\treturn this.getConfig(chain)?.popularTokens ?? []\n\t}\n\n\tgetIntentGatewayV2Address(chain: string): HexString {\n\t\treturn (this.getConfig(chain)?.addresses.IntentGatewayV2 ?? \"0x\") as HexString\n\t}\n\n\tgetEntryPointV08Address(chain: string): HexString {\n\t\treturn this.getConfig(chain)?.addresses.EntryPointV08!\n\t}\n\n\tgetCirclePaymasterAddress(chain: string): HexString | undefined {\n\t\treturn this.getConfig(chain)?.addresses.CirclePaymaster as HexString | undefined\n\t}\n\n\tgetHyperbridgeAddress(): string {\n\t\treturn hyperbridgeAddress\n\t}\n\n\t/**\n\t * Get the LayerZero Endpoint ID for the chain\n\t * Used for USDT0 cross-chain transfers via LayerZero OFT\n\t */\n\tgetLayerZeroEid(chain: string): number | undefined {\n\t\treturn this.getConfig(chain)?.layerZeroEid\n\t}\n\n\t/**\n\t * Get the USDT0 OFT contract address for the chain\n\t * On Ethereum: OFT Adapter (locks/unlocks USDT)\n\t * On other chains: OFT contract (mints/burns USDT0)\n\t */\n\tgetUsdt0OftAddress(chain: string): HexString | undefined {\n\t\treturn this.getConfig(chain)?.addresses.Usdt0Oft as HexString | undefined\n\t}\n}\n","const ABI = [\n\t{\n\t\tinputs: [],\n\t\tname: \"WETH\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"tokenA\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"tokenB\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountADesired\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountBDesired\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountAMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountBMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"addLiquidity\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountA\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountB\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountTokenDesired\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountTokenMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETHMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"addLiquidityETH\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountToken\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETH\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"factory\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"reserveIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"reserveOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"getAmountIn\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"reserveIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"reserveOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"getAmountOut\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t],\n\t\tname: \"getAmountsIn\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t],\n\t\tname: \"getAmountsOut\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountA\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"reserveA\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"reserveB\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"quote\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountB\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"tokenA\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"tokenB\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountAMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountBMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"removeLiquidity\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountA\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountB\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountTokenMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETHMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"removeLiquidityETH\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountToken\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETH\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountTokenMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETHMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"removeLiquidityETHSupportingFeeOnTransferTokens\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETH\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountTokenMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETHMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"approveMax\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint8\",\n\t\t\t\tname: \"v\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"r\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"s\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"removeLiquidityETHWithPermit\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountToken\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETH\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"token\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountTokenMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETHMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"approveMax\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint8\",\n\t\t\t\tname: \"v\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"r\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"s\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountETH\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"tokenA\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"tokenB\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"liquidity\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountAMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountBMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bool\",\n\t\t\t\tname: \"approveMax\",\n\t\t\t\ttype: \"bool\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint8\",\n\t\t\t\tname: \"v\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"r\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"s\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"removeLiquidityWithPermit\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountA\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountB\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapETHForExactTokens\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOutMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapExactETHForTokens\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOutMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapExactETHForTokensSupportingFeeOnTransferTokens\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOutMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapExactTokensForETH\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOutMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapExactTokensForETHSupportingFeeOnTransferTokens\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOutMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapExactTokensForTokens\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOutMin\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapExactTokensForTokensSupportingFeeOnTransferTokens\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountInMax\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapTokensForExactETH\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountInMax\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address[]\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"address[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"to\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"swapTokensForExactTokens\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256[]\",\n\t\t\t\tname: \"amounts\",\n\t\t\t\ttype: \"uint256[]\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n] as const\n\nexport default { ABI }\n","import {\n\thttp,\n\ttype PublicClient,\n\tbytesToBigInt,\n\tbytesToHex,\n\tcreatePublicClient,\n\tencodeFunctionData,\n\terc20Abi,\n\thexToBytes,\n\tkeccak256,\n\tpad,\n\ttoBytes,\n\ttoHex,\n\tmaxUint256,\n} from \"viem\"\nimport {\n\tarbitrum,\n\tarbitrumSepolia,\n\tbase,\n\tbaseSepolia,\n\tbsc,\n\tbscTestnet,\n\tgnosis,\n\tgnosisChiado,\n\tmainnet,\n\toptimism,\n\toptimismSepolia,\n\tpolygon,\n\tunichain,\n\tsoneium,\n\ttron,\n} from \"viem/chains\"\nimport { chainConfigs, pharosAtlantic, pharosMainnet, polkadotAssetHubPaseo, tronNile } from \"@/configs/chain\"\n\nimport { flatten, zip } from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport type { GetProofParameters, Hex, TransactionReceipt } from \"viem\"\n\nimport EvmHost from \"@/abis/evmHost\"\nimport evmHost from \"@/abis/evmHost\"\nimport HandlerV2 from \"@/abis/handlerV2\"\nimport type { IChain, IIsmpMessage } from \"@/chain\"\nimport { ChainConfigService } from \"@/configs/ChainConfigService\"\nimport type {\n\tHexString,\n\tIEvmConfig,\n\tIGetRequest,\n\tIMessage,\n\tIPostRequest,\n\tStateMachineHeight,\n\tStateMachineIdParams,\n} from \"@/types\"\nimport {\n\tADDRESS_ZERO,\n\tEvmStateProof,\n\tgetContractCallInput,\n\tMmrProof,\n\tSubstrateStateProof,\n\tgenerateRootWithProof,\n} from \"@/utils\"\n\nimport UniswapV2Factory from \"@/abis/uniswapV2Factory\"\nimport UniswapRouterV2 from \"@/abis/uniswapRouterV2\"\n\nconst chains = {\n\t[mainnet.id]: mainnet,\n\t[arbitrum.id]: arbitrum,\n\t[arbitrumSepolia.id]: arbitrumSepolia,\n\t[optimism.id]: optimism,\n\t[optimismSepolia.id]: optimismSepolia,\n\t[base.id]: base,\n\t[baseSepolia.id]: baseSepolia,\n\t[soneium.id]: soneium,\n\t[bsc.id]: bsc,\n\t[bscTestnet.id]: bscTestnet,\n\t[gnosis.id]: gnosis,\n\t[gnosisChiado.id]: gnosisChiado,\n\t[polygon.id]: polygon,\n\t[unichain.id]: unichain,\n\t[tron.id]: tron,\n\t[tronNile.id]: tronNile,\n\t[polkadotAssetHubPaseo.id]: polkadotAssetHubPaseo,\n\t[pharosMainnet.id]: pharosMainnet,\n\t[pharosAtlantic.id]: pharosAtlantic,\n}\n\n/**\n * The default address used as fallback when no address is provided.\n * This represents the zero address in EVM chains.\n */\nexport const DEFAULT_ADDRESS = \"0x0000000000000000000000000000000000000000\"\n\n/**\n * ERC-165 interface ID for IHandlerV2 (bytes4(keccak256(\"batchCall(bytes[])\"))).\n */\n\n/**\n * Parameters for an EVM chain.\n */\nexport interface EvmChainParams {\n\t/**\n\t * The chain ID of the EVM chain\n\t */\n\tchainId: number\n\t/**\n\t * The RPC URL of the EVM chain\n\t */\n\trpcUrl: string\n\t/**\n\t * The host address of the EVM chain (IsmpHost contract address)\n\t */\n\thost: HexString\n\t/**\n\t * Consensus state identifier of this chain on hyperbridge\n\t */\n\tconsensusStateId?: string\n\t/**\n\t * Optional ERC-4337 bundler URL for account abstraction support\n\t */\n\tbundlerUrl?: string\n}\n\n/**\n * Encapsulates an EVM chain.\n */\nexport class EvmChain implements IChain {\n\tprivate publicClient: PublicClient\n\tprivate chainConfigService: ChainConfigService\n\n\tprivate constructor(private readonly params: EvmChainParams) {\n\t\t// Default consensus state IDs for known chains\n\t\tconst defaultConsensusStateIds: Record<number, string> = {\n\t\t\t1: \"ETH0\", // Ethereum Mainnet\n\t\t\t11155111: \"ETH0\", // Sepolia\n\t\t\t42161: \"ETH0\", // Arbitrum One\n\t\t\t421614: \"ETH0\", // Arbitrum Sepolia\n\t\t\t10: \"ETH0\", // Optimism\n\t\t\t11155420: \"ETH0\", // Optimism Sepolia\n\t\t\t8453: \"ETH0\", // Base\n\t\t\t84532: \"ETH0\", // Base Sepolia\n\t\t\t130: \"ETH0\", // Unichain\n\t\t\t1868: \"ETH0\", // Soneium\n\t\t\t137: \"POLY\", // Polygon Mainnet\n\t\t\t80002: \"POLY\", // Polygon Amoy\n\t\t\t56: \"BSC0\", // BSC\n\t\t\t97: \"BSC0\", // BSC Testnet\n\t\t\t100: \"GNO0\", // Gnosis\n\t\t\t10200: \"GNO0\", // Gnosis Chiado\n\t\t\t420420417: \"PAS0\", // Polkadot Asset Hub (Paseo)\n\t\t\t420420419: \"DOT0\", // Polkadot Asset Hub (Polkadot)\n\t\t\t688600: \"PHAR\", // Pharos Mainnet\n\t\t\t688689: \"PHAR\", // Pharos Atlantic (Testnet)\n\t\t}\n\n\t\t// Set default consensusStateId if not provided\n\t\tif (!params.consensusStateId) {\n\t\t\tparams.consensusStateId = defaultConsensusStateIds[params.chainId]\n\t\t}\n\n\t\t// @ts-ignore\n\t\tthis.publicClient = createPublicClient({\n\t\t\t// @ts-ignore\n\t\t\tchain: chains[params.chainId],\n\t\t\ttransport: http(params.rpcUrl),\n\t\t})\n\t\tthis.chainConfigService = new ChainConfigService()\n\t}\n\n\t/**\n\t * Creates an `EvmChain` instance directly from a fully-specified config object.\n\t * Use this when you already know the chain ID, host address, and other parameters.\n\t *\n\t * This is the only public way to construct an `EvmChain` with explicit params — the constructor is private.\n\t *\n\t * @param params - Full EVM chain configuration\n\t * @returns An `EvmChain` instance\n\t */\n\tstatic fromParams(params: EvmChainParams): EvmChain {\n\t\treturn new EvmChain(params)\n\t}\n\n\t/**\n\t * Creates an `EvmChain` instance by auto-detecting the chain ID from the RPC endpoint\n\t * and resolving the correct `IsmpHost` contract address for that chain.\n\t *\n\t * This is the only public way to construct an `EvmChain` — the constructor is private.\n\t *\n\t * @param rpcUrl - HTTP(S) RPC URL of the EVM node\n\t * @param bundlerUrl - Optional ERC-4337 bundler URL for account abstraction support\n\t * @returns A fully initialised `EvmChain` ready for use\n\t * @throws If the chain ID returned by the RPC is not a known Hyperbridge deployment\n\t *\n\t * @example\n\t * ```typescript\n\t * const chain = await EvmChain.create(\"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY\")\n\t * const chain = await EvmChain.create(\"https://mainnet.base.org\", \"https://bundler.example.com\")\n\t * ```\n\t */\n\tstatic async create(rpcUrl: string, bundlerUrl?: string): Promise<EvmChain> {\n\t\t// Use a chainless transport to fetch the chain ID before we know which chain we're on\n\t\tconst tempClient = createPublicClient({ transport: http(rpcUrl) })\n\t\tconst chainId = await tempClient.getChainId()\n\n\t\tconst host = chainConfigs[chainId]?.addresses?.Host\n\t\tif (!host) {\n\t\t\tthrow new Error(`No known IsmpHost address for chain ID ${chainId}. Provide the host address explicitly.`)\n\t\t}\n\n\t\treturn new EvmChain({ chainId, rpcUrl, host, bundlerUrl })\n\t}\n\n\t// Expose minimal getters for external helpers/classes\n\tget client(): PublicClient {\n\t\treturn this.publicClient\n\t}\n\n\tget host(): HexString {\n\t\treturn this.params.host\n\t}\n\n\tget bundlerUrl(): string | undefined {\n\t\treturn this.params.bundlerUrl\n\t}\n\n\tget config(): IEvmConfig {\n\t\treturn {\n\t\t\trpcUrl: this.params.rpcUrl,\n\t\t\tstateMachineId: `EVM-${this.params.chainId}`,\n\t\t\thost: this.params.host,\n\t\t\tconsensusStateId: this.params.consensusStateId!,\n\t\t}\n\t}\n\n\tget configService(): ChainConfigService {\n\t\treturn this.chainConfigService\n\t}\n\n\t/**\n\t * Returns the current authority set epoch from the HandlerV2 contract.\n\t */\n\tasync currentEpoch(): Promise<bigint> {\n\t\tconst hostParams = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"hostParams\",\n\t\t})\n\t\tconst epoch = await this.publicClient.readContract({\n\t\t\taddress: hostParams.handler,\n\t\t\tabi: HandlerV2.ABI,\n\t\t\tfunctionName: \"currentEpoch\",\n\t\t})\n\t\treturn BigInt(epoch)\n\t}\n\n\t/**\n\t * Derives the key for the request receipt.\n\t * @param {HexString} commitment - The commitment to derive the key from.\n\t * @returns {HexString} The derived key.\n\t */\n\trequestReceiptKey(commitment: HexString): HexString {\n\t\treturn deriveMapKey(hexToBytes(commitment), REQUEST_RECEIPTS_SLOT)\n\t}\n\n\t/**\n\t * Queries the request receipt.\n\t * @param {HexString} commitment - The commitment to query.\n\t * @returns {Promise<HexString | undefined>} The relayer address responsible for delivering the request.\n\t */\n\tasync queryRequestReceipt(commitment: HexString): Promise<HexString | undefined> {\n\t\tconst relayer = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"requestReceipts\",\n\t\t\targs: [commitment],\n\t\t})\n\n\t\t// solidity returns zeroes if the storage slot is empty\n\t\treturn relayer === DEFAULT_ADDRESS ? undefined : relayer\n\t}\n\n\t/**\n\t * Queries the proof of the commitments.\n\t * @param {IMessage} message - The message to query.\n\t * @param {string} counterparty - The counterparty address.\n\t * @param {bigint} [at] - The block number to query at.\n\t * @returns {Promise<HexString>} The proof.\n\t */\n\tasync queryProof(message: IMessage, counterparty: string, at?: bigint): Promise<HexString> {\n\t\t// for each request derive the commitment key collect into a new array\n\t\tconst commitmentKeys =\n\t\t\t\"Requests\" in message\n\t\t\t\t? message.Requests.map((key) => requestCommitmentKey(key).slot1)\n\t\t\t\t: message.Responses.map((key) => responseCommitmentKey(key))\n\t\tconst config: GetProofParameters = {\n\t\t\taddress: this.params.host,\n\t\t\tstorageKeys: commitmentKeys,\n\t\t}\n\t\tif (!at) {\n\t\t\tconfig.blockTag = \"latest\"\n\t\t} else {\n\t\t\tconfig.blockNumber = at\n\t\t}\n\t\tconst proof = await this.publicClient.getProof(config)\n\t\tconst flattenedProof = Array.from(new Set(flatten(proof.storageProof.map((item) => item.proof))))\n\n\t\tconst encoded = EvmStateProof.enc({\n\t\t\tcontractProof: proof.accountProof.map((item) => Array.from(hexToBytes(item))),\n\t\t\tstorageProof: [\n\t\t\t\t[Array.from(hexToBytes(this.params.host)), flattenedProof.map((item) => Array.from(hexToBytes(item)))],\n\t\t\t],\n\t\t})\n\n\t\treturn toHex(encoded)\n\t}\n\n\t/**\n\t * Query and return the encoded storage proof for the provided keys at the given height.\n\t * @param {bigint} at - The block height at which to query the storage proof.\n\t * @param {HexString[]} keys - The keys for which to query the storage proof.\n\t * @param {HexString} address - Optional contract address to fetch storage proof else default to host contract\n\t * @returns {Promise<HexString>} The encoded storage proof.\n\t */\n\tasync queryStateProof(at: bigint, keys: HexString[], address?: HexString): Promise<HexString> {\n\t\tconst config: GetProofParameters = {\n\t\t\taddress: address ?? this.params.host,\n\t\t\tstorageKeys: keys,\n\t\t}\n\t\tif (!at) {\n\t\t\tconfig.blockTag = \"latest\"\n\t\t} else {\n\t\t\tconfig.blockNumber = at\n\t\t}\n\t\tconst proof = await this.publicClient.getProof(config)\n\t\tconst flattenedProof = Array.from(new Set(flatten(proof.storageProof.map((item) => item.proof))))\n\n\t\tconst encoded = EvmStateProof.enc({\n\t\t\tcontractProof: proof.accountProof.map((item) => Array.from(hexToBytes(item))),\n\t\t\tstorageProof: [\n\t\t\t\t[Array.from(hexToBytes(config.address)), flattenedProof.map((item) => Array.from(hexToBytes(item)))],\n\t\t\t],\n\t\t})\n\n\t\treturn toHex(encoded)\n\t}\n\n\t/**\n\t * Returns the current timestamp of the chain.\n\t * @returns {Promise<bigint>} The current timestamp.\n\t */\n\tasync timestamp(): Promise<bigint> {\n\t\tconst data = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"timestamp\",\n\t\t})\n\t\treturn BigInt(data)\n\t}\n\n\t/**\n\t * Get the latest state machine height for a given state machine ID.\n\t * @param {StateMachineIdParams} stateMachineId - The state machine ID.\n\t * @returns {Promise<bigint>} The latest state machine height.\n\t */\n\tasync latestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\tif (!this.publicClient) throw new Error(\"API not initialized\")\n\t\tconst id = stateMachineId.stateId.Polkadot || stateMachineId.stateId.Kusama\n\t\tif (!id)\n\t\t\tthrow new Error(\n\t\t\t\t\"Expected Polakdot or Kusama State machine id when reading latest state machine height on evm\",\n\t\t\t)\n\t\tconst data = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"latestStateMachineHeight\",\n\t\t\targs: [BigInt(id)],\n\t\t})\n\t\treturn data\n\t}\n\n\t/**\n\t * Get the state machine update time for a given state machine height.\n\t * @param {StateMachineHeight} stateMachineHeight - The state machine height.\n\t * @returns {Promise<bigint>} The statemachine update time in seconds.\n\t */\n\tasync stateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint> {\n\t\tif (!this.publicClient) throw new Error(\"API not initialized\")\n\t\tconst id = stateMachineHeight.id.stateId.Polkadot || stateMachineHeight.id.stateId.Kusama\n\t\tif (!id) throw new Error(\"Expected Polkadot or Kusama State machine id when reading state machine update time\")\n\t\tconst data = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"stateMachineCommitmentUpdateTime\",\n\t\t\targs: [{ stateMachineId: BigInt(id), height: stateMachineHeight.height }],\n\t\t})\n\t\treturn data\n\t}\n\n\t/**\n\t * Retrieves the placeOrder calldata from a transaction using debug_traceTransaction.\n\t */\n\tasync getPlaceOrderCalldata(txHash: string, intentGatewayAddress: string): Promise<HexString> {\n\t\tconst callInput = await getContractCallInput(this.publicClient, txHash as HexString, intentGatewayAddress)\n\t\tif (!callInput) {\n\t\t\tthrow new Error(`Failed to extract calldata from trace for tx ${txHash}`)\n\t\t}\n\t\treturn callInput\n\t}\n\n\t/**\n\t * Get the challenge period for a given state machine id.\n\t * @param {StateMachineIdParams} stateMachineId - The state machine ID.\n\t * @returns {Promise<bigint>} The challenge period in seconds.\n\t */\n\tasync challengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\tif (!this.publicClient) throw new Error(\"API not initialized\")\n\t\tconst id = stateMachineId.stateId.Polkadot || stateMachineId.stateId.Kusama\n\t\tif (!id)\n\t\t\tthrow new Error(\n\t\t\t\t\"Expected Polkadot or Kusama State machine id when reading latest state machine height on evm\",\n\t\t\t)\n\t\tconst data = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"challengePeriod\",\n\t\t})\n\t\treturn data\n\t}\n\n\t/**\n\t * Encodes an ISMP message for the EVM chain.\n\t * @param {IIsmpMessage} message The ISMP message to encode.\n\t * @returns {HexString} The encoded calldata.\n\t */\n\tencode(message: IIsmpMessage): HexString {\n\t\tconst encoded = match(message)\n\t\t\t.with({ kind: \"PostRequest\" }, (request) => {\n\t\t\t\tconst mmrProof = MmrProof.dec(request.proof.proof)\n\t\t\t\tconst requests = zip(request.requests, mmrProof.leafIndexAndPos)\n\t\t\t\t\t.map(([req, leafIndexAndPos]) => {\n\t\t\t\t\t\tif (!req || !leafIndexAndPos) return\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\t\tsource: toHex(req.source),\n\t\t\t\t\t\t\t\tdest: toHex(req.dest),\n\t\t\t\t\t\t\t\tto: req.to,\n\t\t\t\t\t\t\t\tfrom: req.from,\n\t\t\t\t\t\t\t\tnonce: req.nonce,\n\t\t\t\t\t\t\t\ttimeoutTimestamp: req.timeoutTimestamp,\n\t\t\t\t\t\t\t\tbody: req.body,\n\t\t\t\t\t\t\t} as any,\n\t\t\t\t\t\t\tindex: leafIndexAndPos?.leafIndex!,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((item) => !!item)\n\n\t\t\t\tconst proof = {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tstateMachineId: BigInt(Number.parseInt(request.proof.stateMachine.split(\"-\")[1])),\n\t\t\t\t\t\theight: request.proof.height,\n\t\t\t\t\t},\n\t\t\t\t\tmultiproof: mmrProof.items.map((item) => bytesToHex(new Uint8Array(item))),\n\t\t\t\t\tleafCount: mmrProof.leafCount,\n\t\t\t\t}\n\t\t\t\tconst encoded = encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"handlePostRequests\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tthis.params.host,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\trequests,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\n\t\t\t\treturn encoded\n\t\t\t})\n\t\t\t.with({ kind: \"TimeoutPostRequest\" }, (timeout) => {\n\t\t\t\tconst proof = SubstrateStateProof.dec(timeout.proof.proof).value.storageProof.map((item) =>\n\t\t\t\t\ttoHex(new Uint8Array(item)),\n\t\t\t\t)\n\t\t\t\tconst encoded = encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"handlePostRequestTimeouts\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tthis.params.host,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\t\tstateMachineId: BigInt(Number.parseInt(timeout.proof.stateMachine.split(\"-\")[1])),\n\t\t\t\t\t\t\t\theight: timeout.proof.height,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttimeouts: timeout.requests.map((req) => ({\n\t\t\t\t\t\t\t\tsource: toHex(req.source),\n\t\t\t\t\t\t\t\tdest: toHex(req.dest),\n\t\t\t\t\t\t\t\tto: req.to,\n\t\t\t\t\t\t\t\tfrom: req.from,\n\t\t\t\t\t\t\t\tnonce: req.nonce,\n\t\t\t\t\t\t\t\ttimeoutTimestamp: req.timeoutTimestamp,\n\t\t\t\t\t\t\t\tbody: req.body,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\n\t\t\t\treturn encoded\n\t\t\t})\n\t\t\t.with({ kind: \"GetResponse\" }, (request) => {\n\t\t\t\tconst mmrProof = MmrProof.dec(request.proof.proof)\n\t\t\t\tconst responses = zip(request.responses, mmrProof.leafIndexAndPos)\n\t\t\t\t\t.map(([req, leafIndexAndPos]) => {\n\t\t\t\t\t\tif (!req || !leafIndexAndPos) return\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\t\t\tsource: toHex(req.get.source),\n\t\t\t\t\t\t\t\t\tdest: toHex(req.get.dest),\n\t\t\t\t\t\t\t\t\tfrom: req.get.from,\n\t\t\t\t\t\t\t\t\tnonce: req.get.nonce,\n\t\t\t\t\t\t\t\t\ttimeoutTimestamp: req.get.timeoutTimestamp,\n\t\t\t\t\t\t\t\t\tkeys: req.get.keys,\n\t\t\t\t\t\t\t\t\tcontext: req.get.context,\n\t\t\t\t\t\t\t\t\theight: req.get.height,\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\tvalues: req.values,\n\t\t\t\t\t\t\t} as any,\n\t\t\t\t\t\t\tindex: leafIndexAndPos?.leafIndex!,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((item) => !!item)\n\n\t\t\t\tconst proof = {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tstateMachineId: BigInt(Number.parseInt(request.proof.stateMachine.split(\"-\")[1])),\n\t\t\t\t\t\theight: request.proof.height,\n\t\t\t\t\t},\n\t\t\t\t\tmultiproof: mmrProof.items.map((item) => bytesToHex(new Uint8Array(item))),\n\t\t\t\t\tleafCount: mmrProof.leafCount,\n\t\t\t\t}\n\t\t\t\tconst encoded = encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"handleGetResponses\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tthis.params.host,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\n\t\t\t\treturn encoded\n\t\t\t})\n\t\t\t.with({ kind: \"Consensus\" }, (message) => {\n\t\t\t\treturn encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"handleConsensus\",\n\t\t\t\t\targs: [this.params.host, message.consensusProof],\n\t\t\t\t})\n\t\t\t})\n\t\t\t.with({ kind: \"BatchConsensusAndPostRequest\" }, (request) => {\n\t\t\t\tconst consensusCalls = request.consensusProofs.map((proof) =>\n\t\t\t\t\tthis.encode({ kind: \"Consensus\", consensusProof: proof }),\n\t\t\t\t)\n\n\t\t\t\tconst mmrProof = MmrProof.dec(request.proof.proof)\n\t\t\t\tconst requests = zip(request.requests, mmrProof.leafIndexAndPos)\n\t\t\t\t\t.map(([req, leafIndexAndPos]) => {\n\t\t\t\t\t\tif (!req || !leafIndexAndPos) return\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\t\tsource: toHex(req.source),\n\t\t\t\t\t\t\t\tdest: toHex(req.dest),\n\t\t\t\t\t\t\t\tto: req.to,\n\t\t\t\t\t\t\t\tfrom: req.from,\n\t\t\t\t\t\t\t\tnonce: req.nonce,\n\t\t\t\t\t\t\t\ttimeoutTimestamp: req.timeoutTimestamp,\n\t\t\t\t\t\t\t\tbody: req.body,\n\t\t\t\t\t\t\t} as any,\n\t\t\t\t\t\t\tindex: leafIndexAndPos?.leafIndex!,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((item) => !!item)\n\n\t\t\t\tconst proof = {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tstateMachineId: BigInt(Number.parseInt(request.proof.stateMachine.split(\"-\")[1])),\n\t\t\t\t\t\theight: request.proof.height,\n\t\t\t\t\t},\n\t\t\t\t\tmultiproof: mmrProof.items.map((item) => bytesToHex(new Uint8Array(item))),\n\t\t\t\t\tleafCount: mmrProof.leafCount,\n\t\t\t\t}\n\n\t\t\t\tconst postRequestCall = encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"handlePostRequests\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tthis.params.host,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\trequests,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\n\t\t\t\treturn encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"batchCall\",\n\t\t\t\t\targs: [[...consensusCalls, postRequestCall]],\n\t\t\t\t})\n\t\t\t})\n\t\t\t.with({ kind: \"BatchConsensusAndGetResponse\" }, (request) => {\n\t\t\t\tconst consensusCalls = request.consensusProofs.map((proof) =>\n\t\t\t\t\tthis.encode({ kind: \"Consensus\", consensusProof: proof }),\n\t\t\t\t)\n\n\t\t\t\tconst mmrProof = MmrProof.dec(request.proof.proof)\n\t\t\t\tconst responses = zip(request.responses, mmrProof.leafIndexAndPos)\n\t\t\t\t\t.map(([req, leafIndexAndPos]) => {\n\t\t\t\t\t\tif (!req || !leafIndexAndPos) return\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\t\trequest: {\n\t\t\t\t\t\t\t\t\tsource: toHex(req.get.source),\n\t\t\t\t\t\t\t\t\tdest: toHex(req.get.dest),\n\t\t\t\t\t\t\t\t\tfrom: req.get.from,\n\t\t\t\t\t\t\t\t\tnonce: req.get.nonce,\n\t\t\t\t\t\t\t\t\ttimeoutTimestamp: req.get.timeoutTimestamp,\n\t\t\t\t\t\t\t\t\tkeys: req.get.keys,\n\t\t\t\t\t\t\t\t\tcontext: req.get.context,\n\t\t\t\t\t\t\t\t\theight: req.get.height,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tvalues: req.values,\n\t\t\t\t\t\t\t} as any,\n\t\t\t\t\t\t\tindex: leafIndexAndPos?.leafIndex!,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((item) => !!item)\n\n\t\t\t\tconst proof = {\n\t\t\t\t\theight: {\n\t\t\t\t\t\tstateMachineId: BigInt(Number.parseInt(request.proof.stateMachine.split(\"-\")[1])),\n\t\t\t\t\t\theight: request.proof.height,\n\t\t\t\t\t},\n\t\t\t\t\tmultiproof: mmrProof.items.map((item) => bytesToHex(new Uint8Array(item))),\n\t\t\t\t\tleafCount: mmrProof.leafCount,\n\t\t\t\t}\n\n\t\t\t\tconst getResponseCall = encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"handleGetResponses\",\n\t\t\t\t\targs: [\n\t\t\t\t\t\tthis.params.host,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\tresponses,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\n\t\t\t\treturn encodeFunctionData({\n\t\t\t\t\tabi: HandlerV2.ABI,\n\t\t\t\t\tfunctionName: \"batchCall\",\n\t\t\t\t\targs: [[...consensusCalls, getResponseCall]],\n\t\t\t\t})\n\t\t\t})\n\t\t\t.with({ kind: \"GetRequest\" }, (message) => {\n\t\t\t\tthrow new Error(\"GetResponse is not yet supported on Substrate chains\")\n\t\t\t})\n\t\t\t.exhaustive()\n\n\t\treturn encoded\n\t}\n\n\t/**\n\t * Calculates the fee required to send a post request to the destination chain.\n\t * The fee is calculated based on the per-byte fee for the destination chain\n\t * multiplied by the size of the request body.\n\t *\n\t * @param request - The post request to calculate the fee for\n\t * @returns The total fee in wei required to send the post request\n\t */\n\tasync quote(request: IPostRequest | IGetRequest): Promise<bigint> {\n\t\t// Exclude 0x prefix from the body length, and get the byte length\n\t\tconst bodyByteLength =\n\t\t\t\"body\" in request ? Math.floor((request.body.length - 2) / 2) : Math.floor((request.context.length - 2) / 2)\n\n\t\tconst args = \"body\" in request ? [toHex(request.dest)] : [toHex(request.source)]\n\n\t\tconst perByteFee = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"perByteFee\",\n\t\t\targs: args as any,\n\t\t})\n\n\t\tconst length = bodyByteLength < 32 ? 32 : bodyByteLength\n\n\t\treturn perByteFee * BigInt(length)\n\t}\n\n\tasync quoteNative(request: IPostRequest | IGetRequest, fee: bigint): Promise<bigint> {\n\t\tconst totalFee = (await this.quote(request)) + fee\n\t\tconst feeToken = await this.getFeeTokenWithDecimals()\n\t\treturn this.getAmountsIn(totalFee, feeToken.address, request.source)\n\t}\n\n\tprivate async getAmountsIn(amountOut: bigint, tokenOutForQuote: HexString, chain: string): Promise<bigint> {\n\t\tconst v2Router = this.configService.getUniswapRouterV2Address(chain)\n\t\tconst WETH = this.configService.getWrappedNativeAssetWithDecimals(chain).asset\n\t\tconst v2AmountIn = await this.publicClient.simulateContract({\n\t\t\taddress: v2Router,\n\t\t\tabi: UniswapRouterV2.ABI,\n\t\t\t// @ts-ignore\n\t\t\tfunctionName: \"getAmountsIn\",\n\t\t\t// @ts-ignore\n\t\t\targs: [amountOut, [WETH, tokenOutForQuote]],\n\t\t})\n\n\t\treturn v2AmountIn.result[0]\n\t}\n\t/**\n\t * Estimates the gas required for a post request execution on this chain.\n\t * This function generates mock proofs for the post request, creates a state override\n\t * with the necessary overlay root, and estimates the gas cost for executing the\n\t * handlePostRequests transaction on the handler contract.\n\t *\n\t * @param request - The post request to estimate gas for\n\t * @param paraId - The ID of the parachain (Hyperbridge) that will process the request\n\t * @returns The estimated gas amount in gas units and the generated calldata\n\t */\n\tasync estimateGas(request: IPostRequest): Promise<{ gas: bigint; postRequestCalldata: HexString }> {\n\t\tconst hostParams = await this.publicClient.readContract({\n\t\t\taddress: this.params.host,\n\t\t\tabi: EvmHost.ABI,\n\t\t\tfunctionName: \"hostParams\",\n\t\t})\n\n\t\tconst { root, proof, index, treeSize } = await generateRootWithProof(request, 2n ** 10n)\n\t\tconst latestStateMachineHeight = 6291991n\n\t\tconst paraId = 4009n\n\t\tconst overlayRootSlot = getStateCommitmentFieldSlot(\n\t\t\tparaId, // Hyperbridge chain id\n\t\t\tlatestStateMachineHeight, // Hyperbridge chain height\n\t\t\t1, // For overlayRoot\n\t\t)\n\t\tconst postParams = {\n\t\t\theight: {\n\t\t\t\tstateMachineId: BigInt(paraId),\n\t\t\t\theight: latestStateMachineHeight,\n\t\t\t},\n\t\t\tmultiproof: proof,\n\t\t\tleafCount: treeSize,\n\t\t}\n\n\t\tconst formattedRequest = {\n\t\t\t...request,\n\t\t\tsource: toHex(request.source),\n\t\t\tdest: toHex(request.dest),\n\t\t}\n\n\t\tconst contractArgs = [\n\t\t\tthis.params.host,\n\t\t\t{\n\t\t\t\tproof: postParams,\n\t\t\t\trequests: [\n\t\t\t\t\t{\n\t\t\t\t\t\trequest: formattedRequest,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t] as const\n\n\t\tconst postRequestCalldata = encodeFunctionData({\n\t\t\tabi: HandlerV2.ABI,\n\t\t\tfunctionName: \"handlePostRequests\",\n\t\t\targs: contractArgs,\n\t\t})\n\n\t\tconst gas = await this.publicClient.estimateContractGas({\n\t\t\taddress: hostParams.handler,\n\t\t\tabi: HandlerV2.ABI,\n\t\t\tfunctionName: \"handlePostRequests\",\n\t\t\targs: contractArgs,\n\t\t\tstateOverride: [\n\t\t\t\t{\n\t\t\t\t\taddress: this.params.host,\n\t\t\t\t\tstateDiff: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tslot: overlayRootSlot,\n\t\t\t\t\t\t\tvalue: root,\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\n\t\treturn { gas, postRequestCalldata }\n\t}\n\n\t/**\n\t * Gets the fee token address and decimals for the chain.\n\t * This function gets the fee token address and decimals for the chain.\n\t *\n\t * @returns The fee token address and decimals\n\t */\n\tasync getFeeTokenWithDecimals(): Promise<{ address: HexString; decimals: number }> {\n\t\tconst hostParams = await this.publicClient.readContract({\n\t\t\tabi: EvmHost.ABI,\n\t\t\taddress: this.params.host,\n\t\t\tfunctionName: \"hostParams\",\n\t\t})\n\t\tconst feeTokenAddress = hostParams.feeToken\n\t\tconst feeTokenDecimals = await this.publicClient.readContract({\n\t\t\taddress: feeTokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: \"decimals\",\n\t\t})\n\t\treturn { address: feeTokenAddress, decimals: feeTokenDecimals }\n\t}\n\n\t/**\n\t * Gets the nonce of the host.\n\t * This function gets the nonce of the host.\n\t *\n\t * @returns The nonce of the host\n\t */\n\tasync getHostNonce(): Promise<bigint> {\n\t\tconst nonce = await this.publicClient.readContract({\n\t\t\tabi: evmHost.ABI,\n\t\t\taddress: this.params.host,\n\t\t\tfunctionName: \"nonce\",\n\t\t})\n\n\t\treturn nonce\n\t}\n\n\tasync broadcastTransaction(signedTransaction: HexString): Promise<TransactionReceipt> {\n\t\tconst txHash = await this.client.sendRawTransaction({\n\t\t\tserializedTransaction: signedTransaction,\n\t\t})\n\t\tconst receipt = await this.client.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t\tconfirmations: 1,\n\t\t})\n\n\t\tif (!receipt) {\n\t\t\tthrow new Error(\"Transaction receipt not found\")\n\t\t}\n\t\treturn receipt\n\t}\n\n\tasync getTransactionReceipt(hash: HexString): Promise<TransactionReceipt> {\n\t\tconst receipt = await this.client.waitForTransactionReceipt({\n\t\t\thash,\n\t\t\tconfirmations: 1,\n\t\t})\n\n\t\tif (!receipt) {\n\t\t\tthrow new Error(\"Transaction receipt not found\")\n\t\t}\n\t\treturn receipt\n\t}\n}\n\n/**\n * Factory function for creating EVM chain instances with common defaults\n *\n * @param chainId - The EVM chain ID\n * @param host - The IsmpHost contract address\n * @param options - Optional configuration overrides\n * @returns A new EvmChain instance\n *\n * @example\n * ```typescript\n * // Create with minimal config\n * const ethChain = createEvmChain(1, \"0x87ea45..\", {\n * rpcUrl: \"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY\"\n * })\n *\n * // Create with custom consensus state ID\n * const arbChain = createEvmChain(42161, \"0x87ea42345..\", {\n * rpcUrl: \"https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY\",\n * consensusStateId: \"ARB_CUSTOM\"\n * })\n * ```\n */\nexport function createEvmChain(\n\tchainId: number,\n\thost: HexString,\n\toptions: {\n\t\trpcUrl: string\n\t\tconsensusStateId?: string\n\t},\n): EvmChain {\n\treturn EvmChain.fromParams({\n\t\tchainId,\n\t\thost,\n\t\trpcUrl: options.rpcUrl,\n\t\tconsensusStateId: options.consensusStateId,\n\t})\n}\n\n/**\n * Slot for storing request commitments.\n */\nexport const REQUEST_COMMITMENTS_SLOT = 0n\n\n/**\n * Slot index for response commitments map\n */\nexport const RESPONSE_COMMITMENTS_SLOT = 1n\n\n/**\n * Slot index for requests receipts map\n */\nexport const REQUEST_RECEIPTS_SLOT = 2n\n\n/**\n * Slot index for response receipts map\n */\nexport const RESPONSE_RECEIPTS_SLOT = 3n\n\n/**\n * Slot index for state commitment map\n */\nexport const STATE_COMMITMENTS_SLOT = 5n\n\nexport function requestCommitmentKey(key: Hex): { slot1: Hex; slot2: Hex } {\n\t// First derive the map key\n\tconst keyBytes = hexToBytes(key)\n\tconst slot = REQUEST_COMMITMENTS_SLOT\n\tconst mappedKey = deriveMapKey(keyBytes, slot)\n\n\t// Convert the derived key to BigInt and add 1\n\tconst number = bytesToBigInt(hexToBytes(mappedKey)) + 1n\n\n\t// Convert back to 32-byte hex\n\treturn {\n\t\tslot1: pad(`0x${number.toString(16)}`, { size: 32 }),\n\t\tslot2: mappedKey,\n\t}\n}\n\nexport function responseCommitmentKey(key: Hex): Hex {\n\t// First derive the map key\n\tconst keyBytes = hexToBytes(key)\n\tconst slot = RESPONSE_COMMITMENTS_SLOT\n\tconst mappedKey = deriveMapKey(keyBytes, slot)\n\n\t// Convert the derived key to BigInt and add 1\n\tconst number = bytesToBigInt(hexToBytes(mappedKey)) + 1n\n\n\t// Convert back to 32-byte hex\n\treturn pad(`0x${number.toString(16)}`, { size: 32 })\n}\n\nfunction deriveMapKey(key: Uint8Array, slot: bigint): Hex {\n\t// Convert slot to 32-byte big-endian representation\n\tconst slotBytes = pad(`0x${slot.toString(16)}`, { size: 32 })\n\n\t// Combine key and slot bytes\n\tconst combined = new Uint8Array([...key, ...toBytes(slotBytes)])\n\n\t// Calculate keccak256 hash\n\treturn keccak256(combined)\n}\n\n/**\n * Derives the storage slot for a specific field in the StateCommitment struct\n *\n * struct StateCommitment {\n * uint256 timestamp; // slot + 0\n * bytes32 overlayRoot; // slot + 1\n * bytes32 stateRoot; // slot + 2\n * }\n *\n * @param stateMachineId - The state machine ID\n * @param height - The block height\n * @param field - The field index in the struct (0 for timestamp, 1 for overlayRoot, 2 for stateRoot)\n * @returns The storage slot for the specific field\n */\nexport function getStateCommitmentFieldSlot(stateMachineId: bigint, height: bigint, field: 0 | 1 | 2): HexString {\n\tconst baseSlot = getStateCommitmentSlot(stateMachineId, height)\n\tconst slotNumber = bytesToBigInt(toBytes(baseSlot)) + BigInt(field)\n\treturn pad(`0x${slotNumber.toString(16)}`, { size: 32 })\n}\n\nexport function getStateCommitmentSlot(stateMachineId: bigint, height: bigint): HexString {\n\t// First level mapping: keccak256(stateMachineId . STATE_COMMITMENTS_SLOT)\n\tconst firstLevelSlot = deriveFirstLevelSlot(stateMachineId, STATE_COMMITMENTS_SLOT)\n\n\t// Second level mapping: keccak256(height . firstLevelSlot)\n\treturn deriveSecondLevelSlot(height, firstLevelSlot)\n}\n\nfunction deriveFirstLevelSlot(key: bigint, slot: bigint): HexString {\n\tconst keyHex = pad(`0x${key.toString(16)}`, { size: 32 })\n\tconst keyBytes = toBytes(keyHex)\n\n\tconst slotBytes = toBytes(pad(`0x${slot.toString(16)}`, { size: 32 }))\n\n\tconst combined = new Uint8Array([...keyBytes, ...slotBytes])\n\n\treturn keccak256(combined)\n}\n\nfunction deriveSecondLevelSlot(key: bigint, firstLevelSlot: HexString): HexString {\n\tconst keyHex = pad(`0x${key.toString(16)}`, { size: 32 })\n\tconst keyBytes = toBytes(keyHex)\n\n\tconst slotBytes = toBytes(firstLevelSlot)\n\n\tconst combined = new Uint8Array([...keyBytes, ...slotBytes])\n\n\treturn keccak256(combined)\n}\n","export class AbortSignalInternal extends Error {\n\tconstructor(message: string) {\n\t\tsuper()\n\n\t\tthis.name = \"Hyperbridge/SDK/AbortSignalInternal\"\n\t\tthis.message = message\n\t}\n\n\tstatic isError(error: unknown): error is AbortSignalInternal {\n\t\treturn error instanceof AbortSignalInternal\n\t}\n}\n\nexport class ExpectedError extends Error {\n\tconstructor(message: string) {\n\t\tsuper()\n\n\t\tthis.name = \"Hyperbridge/SDK/ExpectedError\"\n\t\tthis.message = message\n\t}\n\n\tstatic isError(error: unknown): error is ExpectedError {\n\t\treturn error instanceof ExpectedError\n\t}\n}\n","import { ApiPromise, WsProvider } from \"@polkadot/api\"\nimport { capitalize } from \"lodash-es\"\nimport { Vector, u8 } from \"scale-ts\"\nimport { match } from \"ts-pattern\"\nimport { bytesToHex, hexToBytes, toBytes, toHex } from \"viem\"\n\nimport type { IChain, IIsmpMessage, IProof } from \"@/chain\"\nimport type {\n\tHexString,\n\tIGetRequest,\n\tIMessage,\n\tIPostRequest,\n\tISubstrateConfig,\n\tStateMachineHeight,\n\tStateMachineIdParams,\n} from \"@/types\"\nimport {\n\tBasicProof,\n\tGetRequestsWithProof,\n\ttype IStateMachine,\n\tMessage,\n\tSubstrateStateProof,\n\tisEvmChain,\n\tisSubstrateChain,\n\treplaceWebsocketWithHttp,\n\tparseStateMachineId,\n} from \"@/utils\"\nimport { ExpectedError } from \"@/utils/exceptions\"\nimport { keccakAsU8a } from \"@polkadot/util-crypto\"\n\n/**\n * HTTP RPC Client for making JSON-RPC calls over HTTP\n */\nclass HttpRpcClient {\n\tconstructor(private readonly url: string) {}\n\n\t/**\n\t * Make an RPC call over HTTP\n\t * @param method - The RPC method name\n\t * @param params - The parameters for the RPC call\n\t * @returns Promise resolving to the RPC response\n\t */\n\tasync call(method: string, params: any[] = []): Promise<any> {\n\t\tconst body = JSON.stringify({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: Date.now(),\n\t\t\tmethod,\n\t\t\tparams,\n\t\t})\n\n\t\tconst response = await fetch(this.url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t\tbody,\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP error! status: ${response.status}`)\n\t\t}\n\n\t\tconst result = await response.json()\n\n\t\tif (result.error) {\n\t\t\tthrow new Error(`RPC error: ${result.error.message}`)\n\t\t}\n\n\t\treturn result.result\n\t}\n}\n\nexport class SubstrateChain implements IChain {\n\t/*\n\t * api: The Polkadot API instance for the Substrate chain.\n\t */\n\tapi?: ApiPromise\n\tprivate rpcClient: HttpRpcClient\n\n\tprivate constructor(private readonly params: ISubstrateConfig) {\n\t\tconst url = this.params.wsUrl\n\n\t\tconst httpUrl = replaceWebsocketWithHttp(url)\n\t\tthis.rpcClient = new HttpRpcClient(httpUrl)\n\t}\n\n\t/**\n\t * Creates a `SubstrateChain` instance and immediately connects to the\n\t * WebSocket endpoint, returning a fully initialised chain client.\n\t *\n\t * This is the only public way to construct a `SubstrateChain` — the constructor is private.\n\t *\n\t * @param params - Substrate chain configuration (wsUrl, stateMachineId, etc.).\n\t * @returns A connected `SubstrateChain` instance.\n\t */\n\tstatic async connect(params: ISubstrateConfig): Promise<SubstrateChain> {\n\t\tconst instance = new SubstrateChain(params)\n\t\tawait instance.connect()\n\t\treturn instance\n\t}\n\n\tget config(): ISubstrateConfig {\n\t\treturn {\n\t\t\twsUrl: this.params.wsUrl,\n\t\t\tconsensusStateId: this.params.consensusStateId,\n\t\t\thasher: this.params.hasher,\n\t\t\tstateMachineId: this.params.stateMachineId,\n\t\t}\n\t}\n\n\t/**\n\t * Connects to the Substrate chain using the provided WebSocket URL.\n\t */\n\tpublic async connect() {\n\t\tconst wsProvider = new WsProvider(this.params.wsUrl)\n\n\t\tconst typesBundle =\n\t\t\tthis.params.hasher === \"Keccak\"\n\t\t\t\t? {\n\t\t\t\t\t\tspec: {\n\t\t\t\t\t\t\tnexus: { hasher: keccakAsU8a },\n\t\t\t\t\t\t\tgargantua: { hasher: keccakAsU8a },\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}\n\t\tthis.api = await ApiPromise.create({\n\t\t\tprovider: wsProvider,\n\t\t\ttypesBundle,\n\t\t})\n\t}\n\n\t/**\n\t * Disconnects the Substrate chain connection.\n\t */\n\tpublic async disconnect() {\n\t\tif (this.api) {\n\t\t\tawait this.api.disconnect()\n\t\t\tthis.api = undefined\n\t\t}\n\t}\n\n\t/**\n\t * Returns the storage key for a request receipt in the child trie\n\t * The request commitment is the key\n\t * @param key - The H256 hash key (as a 0x-prefixed hex string)\n\t * @returns The storage key as a hex string\n\t */\n\trequestReceiptKey(key: HexString): HexString {\n\t\tconst prefix = new TextEncoder().encode(\"RequestReceipts\")\n\n\t\tconst keyBytes = hexToBytes(key)\n\n\t\t// Concatenate the prefix and key bytes\n\t\treturn bytesToHex(new Uint8Array([...prefix, ...keyBytes]))\n\t}\n\n\t/**\n\t * Returns the storage key for a request commitment in the child trie\n\t * The request commitment is the key\n\t * @param key - The H256 hash key (as a 0x-prefixed hex string)\n\t * @returns The storage key as a hex string\n\t */\n\trequestCommitmentKey(key: HexString): HexString {\n\t\tconst prefix = new TextEncoder().encode(\"RequestCommitments\")\n\n\t\tconst keyBytes = hexToBytes(key)\n\n\t\t// Concatenate the prefix and key bytes\n\t\treturn bytesToHex(new Uint8Array([...prefix, ...keyBytes]))\n\t}\n\n\t/**\n\t * Queries a request commitment from the ISMP child trie storage.\n\t * @param {HexString} commitment - The commitment hash to look up.\n\t * @returns {Promise<HexString | undefined>} The commitment data if found, undefined otherwise.\n\t */\n\tasync queryRequestCommitment(commitment: HexString): Promise<HexString | undefined> {\n\t\tconst prefix = toHex(\":child_storage:default:ISMP\")\n\t\tconst key = this.requestCommitmentKey(commitment)\n\n\t\tconst item: any = await this.rpcClient.call(\"childstate_getStorage\", [prefix, key])\n\n\t\treturn item\n\t}\n\n\t/**\n\t * Queries the request receipt.\n\t * @param {HexString} commitment - The commitment to query.\n\t * @returns {Promise<HexString | undefined>} The relayer address responsible for delivering the request.\n\t */\n\tasync queryRequestReceipt(commitment: HexString): Promise<HexString | undefined> {\n\t\tconst prefix = toHex(\":child_storage:default:ISMP\")\n\t\tconst key = this.requestReceiptKey(commitment)\n\n\t\tconst item: any = await this.rpcClient.call(\"childstate_getStorage\", [prefix, key])\n\n\t\treturn item\n\t}\n\n\t/**\n\t * Returns the current timestamp of the chain.\n\t * @returns {Promise<bigint>} The current timestamp.\n\t */\n\tasync timestamp(): Promise<bigint> {\n\t\tif (!this.api) throw new Error(\"API not initialized\")\n\n\t\tconst now = await this.api.query.timestamp.now()\n\n\t\treturn BigInt(now.toJSON() as number) / BigInt(1000)\n\t}\n\n\t/**\n\t * Queries the proof of the commitments.\n\t * @param {IMessage} message - The message to query.\n\t * @param {string} counterparty - The counterparty address.\n\t * @param {bigint} [at] - The block number to query at.\n\t * @returns {Promise<HexString>} The proof.\n\t */\n\tasync queryProof(message: IMessage, counterparty: string, at?: bigint): Promise<HexString> {\n\t\tif (isEvmChain(counterparty)) {\n\t\t\t// for evm chains, query the mmr proof\n\t\t\tconst proof: any = await this.rpcClient.call(\"mmr_queryProof\", [Number(at), message])\n\t\t\treturn toHex(proof.proof)\n\t\t}\n\n\t\tif (isSubstrateChain(counterparty)) {\n\t\t\t// for substrate chains, we use the child trie proof\n\t\t\tconst childTrieKeys =\n\t\t\t\t\"Requests\" in message\n\t\t\t\t\t? message.Requests.map(requestCommitmentStorageKey)\n\t\t\t\t\t: message.Responses.map(responseCommitmentStorageKey)\n\t\t\tconst proof: any = await this.rpcClient.call(\"ismp_queryChildTrieProof\", [Number(at), childTrieKeys])\n\t\t\tconst basicProof = BasicProof.dec(toHex(proof.proof))\n\t\t\tconst encoded = SubstrateStateProof.enc({\n\t\t\t\ttag: \"OverlayProof\",\n\t\t\t\tvalue: {\n\t\t\t\t\thasher: {\n\t\t\t\t\t\ttag: this.params.hasher,\n\t\t\t\t\t\tvalue: undefined,\n\t\t\t\t\t},\n\t\t\t\t\tstorageProof: basicProof,\n\t\t\t\t},\n\t\t\t})\n\t\t\treturn toHex(encoded)\n\t\t}\n\n\t\tthrow new ExpectedError(`Unsupported chain type for counterparty: ${counterparty}`)\n\t}\n\n\t/**\n\t * Submit an unsigned ISMP transaction to the chain. Resolves when the transaction is finalized.\n\t * @param message - The message to be submitted.\n\t * @returns A promise that resolves to an object containing the transaction hash, block hash, and block number.\n\t */\n\tasync submitUnsigned(message: IIsmpMessage): Promise<{\n\t\ttransactionHash: string\n\t\tblockHash: string\n\t\tblockNumber: number\n\t\ttimestamp: number\n\t}> {\n\t\tif (!this.api) throw new Error(\"API not initialized\")\n\t\tconst { api } = this\n\n\t\tconst args = encodeISMPMessage(message)\n\t\tlet tx\n\t\tif (message.kind === \"GetRequest\") {\n\t\t\ttx = api.tx.stateCoprocessor.handleUnsigned(args)\n\t\t} else {\n\t\t\ttx = api.tx.ismp.handleUnsigned(args)\n\t\t}\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet unsub = () => {}\n\n\t\t\ttx.send(async ({ isInBlock, isFinalized, isError, dispatchError, txHash, status }) => {\n\t\t\t\tif (isFinalized || isInBlock) {\n\t\t\t\t\tunsub()\n\t\t\t\t\tconst blockHash = isInBlock ? status.asInBlock.toHex() : status.asFinalized.toHex()\n\t\t\t\t\tconst header = await api.rpc.chain.getHeader(blockHash)\n\t\t\t\t\t// Get a decorated api instance at a specific block\n\t\t\t\t\tconst apiAt = await api.at(blockHash)\n\t\t\t\t\tconst timestamp = await apiAt.query.timestamp.now()\n\t\t\t\t\tresolve({\n\t\t\t\t\t\ttransactionHash: txHash.toHex(),\n\t\t\t\t\t\tblockHash: blockHash,\n\t\t\t\t\t\tblockNumber: header.number.toNumber(),\n\t\t\t\t\t\ttimestamp: Number(timestamp.toJSON()) / 1000,\n\t\t\t\t\t})\n\t\t\t\t} else if (isError) {\n\t\t\t\t\tunsub()\n\t\t\t\t\tconsole.error(\"Unsigned transaction failed: \", dispatchError)\n\t\t\t\t\treject(dispatchError)\n\t\t\t\t}\n\t\t\t})\n\t\t\t\t.then((unsubscribe) => {\n\t\t\t\t\tunsub = unsubscribe\n\t\t\t\t})\n\t\t\t\t.catch(reject)\n\t\t})\n\t}\n\n\t/**\n\t * Query the state proof for a given set of keys at a specific block height.\n\t * @param at The block height to query the state proof at.\n\t * @param keys The keys to query the state proof for.\n\t * @param _address - Optional address (ignored for Substrate; present for IChain compatibility).\n\t * @returns The state proof as a hexadecimal string.\n\t */\n\tasync queryStateProof(at: bigint, keys: HexString[], _address?: HexString): Promise<HexString> {\n\t\tconst encodedKeys = keys.map((key) => Array.from(hexToBytes(key)))\n\t\tconst proof: any = await this.rpcClient.call(\"ismp_queryChildTrieProof\", [Number(at), encodedKeys])\n\t\tconst basicProof = BasicProof.dec(toHex(proof.proof))\n\t\tconst encoded = SubstrateStateProof.enc({\n\t\t\ttag: \"OverlayProof\",\n\t\t\tvalue: {\n\t\t\t\thasher: {\n\t\t\t\t\ttag: this.params.hasher,\n\t\t\t\t\tvalue: undefined,\n\t\t\t\t},\n\t\t\t\tstorageProof: basicProof,\n\t\t\t},\n\t\t})\n\t\treturn toHex(encoded)\n\t}\n\n\t/**\n\t * Get the latest state machine height for a given state machine ID.\n\t * @param {StateMachineIdParams} stateMachineId - The state machine ID.\n\t * @returns {Promise<bigint>} The latest state machine height.\n\t */\n\tasync latestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\tconst state_id = convertStateIdToStateMachineId(stateMachineId.stateId)\n\n\t\tconst payload = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: stateMachineId.consensusStateId,\n\t\t}\n\n\t\tconst latestHeight: number = await this.rpcClient.call(\"ismp_queryStateMachineLatestHeight\", [payload])\n\t\treturn BigInt(latestHeight)\n\t}\n\n\t/**\n\t * Get the state machine update time for a given state machine height.\n\t * @param {StateMachineHeight} stateMachineHeight - The state machine height.\n\t * @returns {Promise<bigint>} The statemachine update time in seconds.\n\t */\n\tasync stateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint> {\n\t\tconst state_id = convertStateIdToStateMachineId(stateMachineHeight.id.stateId)\n\n\t\tconst stateMachineId = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: stateMachineHeight.id.consensusStateId,\n\t\t}\n\n\t\tconst payload = {\n\t\t\tid: stateMachineId,\n\t\t\theight: Number(stateMachineHeight.height),\n\t\t}\n\n\t\tconst updateTime: number = await this.rpcClient.call(\"ismp_queryStateMachineUpdateTime\", [payload])\n\t\treturn BigInt(updateTime)\n\t}\n\n\t/**\n\t * Get the challenge period for a given state machine id.\n\t * @param {StateMachineIdParams} stateMachineId - The state machine ID.\n\t * @returns {Promise<bigint>} The challenge period in seconds.\n\t */\n\tasync challengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\tconst state_id = convertStateIdToStateMachineId(stateMachineId.stateId)\n\n\t\tconst payload = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: stateMachineId.consensusStateId,\n\t\t}\n\n\t\tconst challengePeriod: number = await this.rpcClient.call(\"ismp_queryChallengePeriod\", [payload])\n\t\treturn BigInt(challengePeriod)\n\t}\n\n\t/**\n\t * Encode an ISMP calldata for a substrate chain.\n\t * @param message The ISMP message to encode.\n\t * @returns The encoded message as a hexadecimal string.\n\t */\n\tencode(message: IIsmpMessage): HexString {\n\t\tconst palletIndex = this.getPalletIndex(\"Ismp\")\n\t\tconst args = encodeISMPMessage(message)\n\n\t\t// Encoding the call enum and call index\n\t\tconst call = Vector(u8, 2).enc([palletIndex, 0])\n\n\t\treturn toHex(new Uint8Array([...call, ...args]))\n\t}\n\n\t/**\n\t * Queries the latest proven height for this chain from pallet-ismp.\n\t */\n\tasync queryLastProvenHeight(): Promise<bigint> {\n\t\treturn this.latestStateMachineHeight({\n\t\t\tstateId: parseStateMachineId(this.params.stateMachineId).stateId,\n\t\t\tconsensusStateId: this.params.consensusStateId,\n\t\t})\n\t}\n\n\t/**\n\t * Queries all consensus proofs needed to catch up from a given on-chain epoch\n\t * to the latest proven state. Returns rotation proofs (in order) to advance\n\t * the authority set, plus the final messaging proof that covers `neededHeight`.\n\t *\n\t * @param neededHeight - The Hyperbridge block height that must be covered\n\t * @param currentEpoch - The current authority set id on the destination EVM chain\n\t */\n\tasync queryConsensusProofs(\n\t\tneededHeight: bigint,\n\t\tcurrentEpoch: bigint,\n\t): Promise<{ proofs: HexString[]; provenHeight: bigint } | undefined> {\n\t\tconst lastProvenHeight = await this.queryLastProvenHeight()\n\t\tif (lastProvenHeight < neededHeight) return undefined\n\n\t\tif (!this.api) throw new Error(\"API not initialized\")\n\n\t\t// Read RotationProofs BTreeMap<u64, u64> from storage\n\t\tconst rotationProofsRaw = await (this.api.query as any).beefyConsensusProofs.rotationProofs()\n\t\tconst rotationMap: Map<bigint, bigint> = new Map()\n\t\tfor (const [setId, height] of rotationProofsRaw.entries()) {\n\t\t\trotationMap.set(BigInt(setId.toString()), BigInt(height.toString()))\n\t\t}\n\n\t\tconst proofs: HexString[] = []\n\n\t\t// Walk from currentEpoch + 1 forward, fetching each rotation proof\n\t\tlet epoch = currentEpoch + 1n\n\t\twhile (rotationMap.has(epoch)) {\n\t\t\tconst height = rotationMap.get(epoch)!\n\t\t\tconst key = beefyOffchainKey(height)\n\t\t\tconst proof = await this.rpcClient.call(\"offchain_localStorageGet\", [\"PERSISTENT\", key])\n\t\t\tif (!proof) return undefined\n\t\t\tproofs.push(proof as HexString)\n\t\t\tepoch++\n\t\t}\n\n\t\t// Fetch the final messaging proof at lastProvenHeight\n\t\tconst messagingKey = beefyOffchainKey(lastProvenHeight)\n\t\tconst messagingProof = await this.rpcClient.call(\"offchain_localStorageGet\", [\"PERSISTENT\", messagingKey])\n\t\tif (!messagingProof) return undefined\n\t\tproofs.push(messagingProof as HexString)\n\n\t\treturn { proofs, provenHeight: lastProvenHeight }\n\t}\n\n\tprivate getPalletIndex(name: string): number {\n\t\tif (!this.api) throw new Error(\"API not initialized\")\n\t\tconst pallets = this.api.runtimeMetadata.asLatest.pallets.entries()\n\n\t\tfor (const p of pallets) {\n\t\t\tif (p[1].name.toString() === name) {\n\t\t\t\tconst index = p[1].index.toNumber()\n\n\t\t\t\treturn index\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`${name} not found in runtime`)\n\t}\n}\n\n/**\n * Constructs the offchain storage key for a verified consensus proof keyed by\n * proven parachain height. Matches Rust's `offchain_key(proven_height)` in\n * pallet-beefy-consensus-proofs: `OFFCHAIN_PREFIX || u64_be(proven_height)`.\n */\nfunction beefyOffchainKey(provenHeight: bigint): HexString {\n\tconst prefix = new TextEncoder().encode(\"beefy_consensus_proofs::\")\n\tconst heightBytes = new Uint8Array(8)\n\tnew DataView(heightBytes.buffer).setBigUint64(0, provenHeight, false)\n\treturn toHex(new Uint8Array([...prefix, ...heightBytes]))\n}\n\nfunction requestCommitmentStorageKey(key: HexString): number[] {\n\t// Convert \"RequestCommitments\" to bytes\n\tconst prefix = new TextEncoder().encode(\"RequestCommitments\")\n\n\t// Convert hex key to bytes\n\tconst keyBytes = hexToBytes(key)\n\n\t// Combine prefix and key bytes\n\treturn Array.from(new Uint8Array([...prefix, ...keyBytes]))\n}\n\nfunction responseCommitmentStorageKey(key: HexString): number[] {\n\t// Convert \"ResponseCommitments\" to bytes\n\tconst prefix = new TextEncoder().encode(\"ResponseCommitments\")\n\n\t// Convert hex key to bytes\n\tconst keyBytes = hexToBytes(key)\n\n\t// Combine prefix and key bytes\n\treturn Array.from(new Uint8Array([...prefix, ...keyBytes]))\n}\n\n/**\n * Converts a state machine ID string to an enum value.\n * @param {string} id - The state machine ID string.\n * @returns {IStateMachine} The corresponding enum value.\n */\nexport function convertStateMachineIdToEnum(id: string): IStateMachine {\n\tlet [tag, value]: any = id.split(\"-\")\n\ttag = capitalize(tag)\n\tif ([\"Evm\", \"Polkadot\", \"Kusama\"].includes(tag)) {\n\t\tvalue = Number.parseInt(value)\n\t} else {\n\t\tvalue = Array.from(toBytes(value))\n\t}\n\n\treturn { tag, value }\n}\n\n/**\n * Converts a state machine enum representation to a string.\n * @param {IStateMachine} stateMachine - The state machine enum object.\n * @returns {string} The state machine ID string like \"EVM-97\" or \"SUBSTRATE-cere\".\n */\nexport function convertStateMachineEnumToString(stateMachine: { tag: string; value: number | number[] }): string {\n\tconst tag = stateMachine.tag.toUpperCase()\n\tif (tag === \"EVM\" || tag === \"POLKADOT\" || tag === \"KUSAMA\") {\n\t\treturn `${tag}-${stateMachine.value}`\n\t} else {\n\t\tconst bytes = new Uint8Array(stateMachine.value as number[])\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decoded = decoder.decode(bytes)\n\t\treturn `${tag}-${decoded}`\n\t}\n}\n\n/**\n * Converts a stateId object back to the state_id format used by the RPC.\n * @param stateId - The stateId object from StateMachineIdParams\n * @returns The string representation like \"EVM-11155111\" or \"SUBSTRATE-cere\"\n */\nexport function convertStateIdToStateMachineId(stateId: {\n\tEvm?: number\n\tSubstrate?: HexString\n\tPolkadot?: number\n\tKusama?: number\n}): string {\n\tswitch (true) {\n\t\tcase stateId.Evm !== undefined:\n\t\t\treturn `EVM-${stateId.Evm}`\n\t\tcase stateId.Polkadot !== undefined:\n\t\t\treturn `POLKADOT-${stateId.Polkadot}`\n\t\tcase stateId.Kusama !== undefined:\n\t\t\treturn `KUSAMA-${stateId.Kusama}`\n\t\tcase stateId.Substrate !== undefined: {\n\t\t\tconst bytes = hexToBytes(stateId.Substrate as HexString)\n\t\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\t\tconst decoded = decoder.decode(bytes)\n\t\t\treturn `SUBSTRATE-${decoded}`\n\t\t}\n\t\tdefault:\n\t\t\tthrow new Error(\"Unsupported stateId variant\")\n\t}\n}\n\n/**\n * Converts an array of IPostRequest objects to a codec representation.\n * @param {IPostRequest} request - The array of IPostRequest objects.\n * @returns The codec representation of the requests.\n */\nfunction convertIPostRequestToCodec(request: IPostRequest) {\n\treturn {\n\t\ttag: \"Post\",\n\t\tvalue: {\n\t\t\tsource: convertStateMachineIdToEnum(request.source),\n\t\t\tdest: convertStateMachineIdToEnum(request.dest),\n\t\t\tfrom: Array.from(hexToBytes(request.from)),\n\t\t\tto: Array.from(hexToBytes(request.to)),\n\t\t\tnonce: request.nonce,\n\t\t\tbody: Array.from(hexToBytes(request.body)),\n\t\t\ttimeoutTimestamp: request.timeoutTimestamp,\n\t\t},\n\t} as const\n}\n\n/**\n * Converts an IGetRequest object to a codec representation.\n * @param {IGetRequest} request - The IGetRequest object.\n * @returns The codec representation of the request.\n */\nexport function convertIGetRequestToCodec(request: IGetRequest) {\n\treturn {\n\t\tsource: convertStateMachineIdToEnum(request.source),\n\t\tdest: convertStateMachineIdToEnum(request.dest),\n\t\tfrom: Array.from(hexToBytes(request.from)),\n\t\tnonce: request.nonce,\n\t\tkeys: request.keys.map((key) => Array.from(hexToBytes(key))),\n\t\tcontext: Array.from(hexToBytes(request.context)),\n\t\ttimeoutTimestamp: request.timeoutTimestamp,\n\t\theight: request.height,\n\t} as const\n}\n\n/**\n * Convert codec representation back to IGetRequest\n */\nexport function convertCodecToIGetRequest(codec: {\n\tsource: { tag: string; value: number | number[] }\n\tdest: { tag: string; value: number | number[] }\n\tfrom: number[]\n\tnonce: bigint\n\tkeys: number[][]\n\theight: bigint\n\tcontext: number[]\n\ttimeoutTimestamp: bigint\n}): IGetRequest {\n\treturn {\n\t\tsource: convertStateMachineEnumToString(codec.source),\n\t\tdest: convertStateMachineEnumToString(codec.dest),\n\t\tfrom: bytesToHex(new Uint8Array(codec.from)) as HexString,\n\t\tnonce: codec.nonce,\n\t\tkeys: codec.keys.map((key) => bytesToHex(new Uint8Array(key)) as HexString),\n\t\theight: codec.height,\n\t\tcontext: bytesToHex(new Uint8Array(codec.context)) as HexString,\n\t\ttimeoutTimestamp: codec.timeoutTimestamp,\n\t}\n}\n\n/**\n * Converts an IProof object to a codec representation.\n * @param {IProof} proof - The IProof object.\n * @returns The codec representation of the proof.\n */\nexport function convertIProofToCodec(proof: IProof) {\n\treturn {\n\t\theight: {\n\t\t\theight: proof.height,\n\t\t\tid: {\n\t\t\t\tconsensusStateId: Array.from(toBytes(proof.consensusStateId)),\n\t\t\t\tid: convertStateMachineIdToEnum(proof.stateMachine),\n\t\t\t},\n\t\t},\n\t\tproof: Array.from(hexToBytes(proof.proof)),\n\t} as const\n}\n\n/**\n * Converts a codec representation back to an IProof object.\n * @param {any} codec - The codec representation of the proof.\n * @returns {IProof} The IProof object.\n */\nexport function convertCodecToIProof(codec: {\n\theight: {\n\t\theight: bigint\n\t\tid: {\n\t\t\tconsensusStateId: number[]\n\t\t\tid: { tag: string; value: number | number[] }\n\t\t}\n\t}\n\tproof: number[]\n}): IProof {\n\tconst consensusStateIdBytes = new Uint8Array(codec.height.id.consensusStateId)\n\tconst decoder = new TextDecoder(\"utf-8\")\n\tconst consensusStateId = decoder.decode(consensusStateIdBytes)\n\n\treturn {\n\t\theight: codec.height.height,\n\t\tstateMachine: convertStateMachineEnumToString(codec.height.id.id),\n\t\tconsensusStateId,\n\t\tproof: bytesToHex(new Uint8Array(codec.proof)) as HexString,\n\t}\n}\n\nexport function encodeISMPMessage(message: IIsmpMessage): Uint8Array {\n\ttry {\n\t\treturn match(message)\n\t\t\t.with({ kind: \"PostRequest\" }, (message) => {\n\t\t\t\treturn Vector(Message).enc([\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: \"RequestMessage\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\trequests: message.requests.map(\n\t\t\t\t\t\t\t\t(post_request) => convertIPostRequestToCodec(post_request).value,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\t\t\theight: message.proof.height,\n\t\t\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\t\t\tconsensusStateId: Array.from(toBytes(message.proof.consensusStateId)),\n\t\t\t\t\t\t\t\t\t\tid: convertStateMachineIdToEnum(message.proof.stateMachine),\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\tproof: Array.from(hexToBytes(message.proof.proof)),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsigner: Array.from(hexToBytes(message.signer)),\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.with({ kind: \"GetResponse\" }, (message) => {\n\t\t\t\tthrow new Error(\"GetResponse is not yet supported on Substrate chains\")\n\t\t\t})\n\t\t\t.with({ kind: \"GetRequest\" }, (message) => {\n\t\t\t\treturn GetRequestsWithProof.enc({\n\t\t\t\t\trequests: message.requests.map((request) => convertIGetRequestToCodec(request)),\n\t\t\t\t\tsource: {\n\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\theight: message.source.height,\n\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\tconsensusStateId: Array.from(toBytes(message.source.consensusStateId)),\n\t\t\t\t\t\t\t\tid: convertStateMachineIdToEnum(message.source.stateMachine),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproof: Array.from(hexToBytes(message.source.proof)),\n\t\t\t\t\t},\n\t\t\t\t\tresponse: {\n\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\theight: message.response.height,\n\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\tconsensusStateId: Array.from(toBytes(message.response.consensusStateId)),\n\t\t\t\t\t\t\t\tid: convertStateMachineIdToEnum(message.response.stateMachine),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproof: Array.from(hexToBytes(message.response.proof)),\n\t\t\t\t\t},\n\t\t\t\t\tsigner: Array.from(hexToBytes(message.signer)),\n\t\t\t\t})\n\t\t\t})\n\t\t\t.with({ kind: \"TimeoutPostRequest\" }, (message) => {\n\t\t\t\treturn Vector(Message).enc([\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: \"TimeoutMessage\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\ttag: \"Post\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\trequests: message.requests.map((r) => convertIPostRequestToCodec(r)),\n\t\t\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\t\t\t\theight: message.proof.height,\n\t\t\t\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\t\t\t\tconsensusStateId: Array.from(toBytes(message.proof.consensusStateId)),\n\t\t\t\t\t\t\t\t\t\t\tid: convertStateMachineIdToEnum(message.proof.stateMachine),\n\t\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\tproof: Array.from(hexToBytes(message.proof.proof)),\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])\n\t\t\t})\n\t\t\t.with({ kind: \"Consensus\" }, () => {\n\t\t\t\tthrow new Error(\"Consensus encoding is only supported on EVM chains\")\n\t\t\t})\n\t\t\t.with({ kind: \"BatchConsensusAndPostRequest\" }, () => {\n\t\t\t\tthrow new Error(\"BatchConsensusAndPostRequest is only supported on EVM chains\")\n\t\t\t})\n\t\t\t.with({ kind: \"BatchConsensusAndGetResponse\" }, () => {\n\t\t\t\tthrow new Error(\"BatchConsensusAndGetResponse is only supported on EVM chains\")\n\t\t\t})\n\t\t\t.exhaustive()\n\t} catch (error) {\n\t\tthrow new Error(\"Failed to encode ISMP message\", { cause: error })\n\t}\n}\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 } from \"viem\"\nimport { Bytes, Struct, u8, Vector } from \"scale-ts\"\nimport type { BidSubmissionResult, HexString, PackedUserOperation, BidStorageEntry, FillerBid } from \"@/types\"\nimport type { SubstrateChain } from \"./substrate\"\n\n/** Offchain storage key prefix for bids */\nconst OFFCHAIN_BID_PREFIX = new TextEncoder().encode(\"intents::bid::\")\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/**\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/**\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 both hex seed (without 0x prefix) and mnemonic phrases\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.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, handling status updates and errors\n\t * Implements retry logic with progressive tip increases for stuck transactions\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 keyPair = this.getKeyPair()\n\t\tlet baseTip = 500_000_000_000n // 0.5 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.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\tresolve({\n\t\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\t\tblockHash: result.status.asInBlock.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} else if (result.dispatchError) {\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: `Dispatch error: ${result.dispatchError.toString()}`,\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 * 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","import type { PublicClient, TransactionReceipt } from \"viem\"\nimport { TronWeb } from \"tronweb\"\n\nimport type { IChain, IIsmpMessage } from \"@/chain\"\nimport { EvmChain, type EvmChainParams } from \"@/chains/evm\"\nimport type { HexString, IGetRequest, IMessage, IPostRequest, StateMachineHeight, StateMachineIdParams } from \"@/types\"\nimport { retryPromise } from \"@/utils\"\n\n/**\n * Parameters for a Tron-backed chain.\n * TronWeb is constructed internally from `rpcUrl`.\n */\nexport type TronChainParams = EvmChainParams\n\nexport class TronChain implements IChain {\n\tprivate readonly evm: EvmChain\n\tprivate readonly tronWebInstance: InstanceType<typeof TronWeb>\n\n\t/**\n\t * Creates a `TronChain` instance from a fully-specified config object.\n\t *\n\t * This is the only public way to construct a `TronChain` — the constructor is private.\n\t *\n\t * @param params - Tron chain configuration\n\t * @returns A `TronChain` instance\n\t */\n\tstatic async fromParams(params: TronChainParams): Promise<TronChain> {\n\t\tconst evm = await EvmChain.create(params.rpcUrl, params.bundlerUrl)\n\t\treturn new TronChain(params, evm)\n\t}\n\n\tprivate constructor(\n\t\tprivate readonly params: TronChainParams,\n\t\tevm: EvmChain,\n\t) {\n\t\tthis.evm = evm\n\t\tthis.tronWebInstance = new TronWeb({ fullHost: params.rpcUrl })\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Public accessors\n\t// -------------------------------------------------------------------------\n\n\t/** Underlying viem public client (delegated from the internal EvmChain) */\n\tget client(): PublicClient {\n\t\treturn this.evm.client\n\t}\n\n\t/** Host contract address for this chain (delegated from the internal EvmChain) */\n\tget host(): HexString {\n\t\treturn this.evm.host\n\t}\n\n\t/** Chain configuration (delegated from the internal EvmChain) */\n\tget config() {\n\t\treturn this.evm.config\n\t}\n\n\t/** Chain configuration service (delegated from the internal EvmChain) */\n\tget configService() {\n\t\treturn this.evm.configService\n\t}\n\n\t/** TronWeb instance for this Tron chain (constructed from rpcUrl) */\n\tget tronWeb(): InstanceType<typeof TronWeb> {\n\t\treturn this.tronWebInstance\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// IChain implementation (delegated to the internal EvmChain)\n\t// -------------------------------------------------------------------------\n\n\ttimestamp(): Promise<bigint> {\n\t\treturn this.evm.timestamp()\n\t}\n\n\trequestReceiptKey(commitment: HexString): HexString {\n\t\treturn this.evm.requestReceiptKey(commitment)\n\t}\n\n\tqueryRequestReceipt(commitment: HexString): Promise<HexString | undefined> {\n\t\treturn this.evm.queryRequestReceipt(commitment)\n\t}\n\n\tqueryStateProof(at: bigint, keys: HexString[], address?: HexString): Promise<HexString> {\n\t\treturn this.evm.queryStateProof(at, keys, address)\n\t}\n\n\tqueryProof(message: IMessage, counterparty: string, at?: bigint): Promise<HexString> {\n\t\treturn this.evm.queryProof(message, counterparty, at)\n\t}\n\n\tencode(message: IIsmpMessage): HexString {\n\t\treturn this.evm.encode(message)\n\t}\n\n\tlatestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\treturn this.evm.latestStateMachineHeight(stateMachineId)\n\t}\n\n\tchallengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\treturn this.evm.challengePeriod(stateMachineId)\n\t}\n\n\tstateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint> {\n\t\treturn this.evm.stateMachineUpdateTime(stateMachineHeight)\n\t}\n\n\t/**\n\t * Retrieves top-level calldata from a Tron transaction via TronWeb.\n\t * Only works for direct calls to IntentGateway (not nested/multicall).\n\t * Tron does not support debug_traceTransaction.\n\t */\n\tasync getPlaceOrderCalldata(txHash: string, _intentGatewayAddress: string): Promise<HexString> {\n\t\tconst tx = await retryPromise(() => this.tronWeb.trx.getTransaction(txHash), {\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 250,\n\t\t\tlogMessage: `Failed to get Tron transaction ${txHash}`,\n\t\t})\n\n\t\tconst rawData = (tx?.raw_data?.contract?.[0]?.parameter?.value as any)?.data\n\t\tif (!rawData) {\n\t\t\tthrow new Error(`No calldata found in Tron transaction ${txHash}`)\n\t\t}\n\n\t\treturn (rawData.startsWith(\"0x\") ? rawData : `0x${rawData}`) as HexString\n\t}\n\n\t/**\n\t * Broadcasts a signed Tron transaction and waits for confirmation,\n\t * returning a 0x-prefixed transaction hash compatible with viem.\n\t *\n\t * This mirrors the behavior used in IntentGatewayV2 for Tron chains.\n\t */\n\t// biome-ignore lint/suspicious/noExplicitAny: Tron signed transaction has a different shape from EVM HexString\n\tasync broadcastTransaction(signedTransaction: any): Promise<TransactionReceipt> {\n\t\tconst tronReceipt = await this.tronWeb.trx.sendRawTransaction(signedTransaction)\n\t\tif (!tronReceipt.result) {\n\t\t\tthrow new Error(\"Tron transaction broadcast failed\")\n\t\t}\n\n\t\tconst tronTxId = tronReceipt.transaction.txID\n\t\tconst receipt = await this.client.waitForTransactionReceipt({\n\t\t\thash: `0x${tronTxId}`,\n\t\t\tconfirmations: 1,\n\t\t})\n\n\t\tif (!receipt) {\n\t\t\tthrow new Error(\"Tron transaction receipt not found\")\n\t\t}\n\n\t\treturn receipt\n\t}\n\n\tasync getTransactionReceipt(hash: HexString): Promise<TransactionReceipt> {\n\t\tconst receipt = await this.client.waitForTransactionReceipt({\n\t\t\thash,\n\t\t\tconfirmations: 1,\n\t\t})\n\n\t\tif (!receipt) {\n\t\t\tthrow new Error(\"Transaction receipt not found\")\n\t\t}\n\t\treturn receipt\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Helpers mirrored from EvmChain for protocol integrations\n\t// -------------------------------------------------------------------------\n\n\t/** Gets the fee token address and decimals for the chain. */\n\tgetFeeTokenWithDecimals(): Promise<{ address: HexString; decimals: number }> {\n\t\treturn this.evm.getFeeTokenWithDecimals()\n\t}\n\n\t/** Gets the nonce of the host contract on this chain. */\n\tgetHostNonce(): Promise<bigint> {\n\t\treturn this.evm.getHostNonce()\n\t}\n\n\t/** Quotes the fee (in native token) required for the given ISMP request. */\n\tquoteNative(request: IPostRequest | IGetRequest, fee: bigint): Promise<bigint> {\n\t\treturn this.evm.quoteNative(request, fee)\n\t}\n\n\t/** Estimates gas for executing a post request on this chain. */\n\testimateGas(request: IPostRequest): Promise<{ gas: bigint; postRequestCalldata: HexString }> {\n\t\treturn this.evm.estimateGas(request)\n\t}\n}\n","import { Enum, Struct, Vector, u8 } from \"scale-ts\"\n\n/**\n * Revive pallet account layout for child-trie proofs — mirrors\n * `ContractInfo`, `AccountType`, and `AccountInfo` in\n * `modules/ismp/state-machines/evm/src/substrate_evm.rs`.\n */\nexport const ReviveContractInfo = Struct({\n\ttrie_id: Vector(u8),\n})\n\nexport const ReviveAccountType = Enum({\n\tContract: ReviveContractInfo,\n})\n\nexport const ReviveAccountInfo = Struct({\n\taccount_type: ReviveAccountType,\n})\n\n/**\n * Decode SCALE-encoded `AccountInfo` and return `ContractInfo::trie_id`.\n * Fails at decode time if bytes are not a valid `AccountInfo` or not `AccountType::Contract`.\n */\nexport function decodeReviveContractTrieId(accountData: Uint8Array): Uint8Array {\n\tconst {\n\t\taccount_type: { value },\n\t} = ReviveAccountInfo.dec(accountData)\n\treturn new Uint8Array(value.trie_id)\n}\n","import { type CodecType, Enum, Option, Struct, Tuple, Vector, _void, u32, u64, u8 } from \"scale-ts\"\n\nexport type IStateMachine =\n\t| {\n\t\t\ttag: \"Evm\"\n\t\t\tvalue: number\n\t }\n\t| {\n\t\t\ttag: \"Polkadot\"\n\t\t\tvalue: number\n\t }\n\t| {\n\t\t\ttag: \"Kusama\"\n\t\t\tvalue: number\n\t }\n\t| {\n\t\t\ttag: \"Substrate\"\n\t\t\tvalue: number[]\n\t }\n\t| {\n\t\t\ttag: \"Tendermint\"\n\t\t\tvalue: number[]\n\t }\n\nexport const H256 = Vector(u8, 32)\n\nexport const EvmStateProof = Struct({\n\t/**\n\t * Proof of the contract state (EVM account trie) or, for Revive / Substrate EVM, the main state trie proof\n\t * (`AccountInfo` + child root) — same SCALE shape as `SubstrateEvmProof::main_proof` on the Rust side.\n\t */\n\tcontractProof: Vector(Vector(u8)),\n\t/**\n\t * Proof of the storage state.\n\t */\n\tstorageProof: Vector(Tuple(Vector(u8), Vector(Vector(u8)))),\n})\n\nexport const SubstrateHashing = Enum({\n\t/* For chains that use keccak as their hashing algo */\n\tKeccak: _void,\n\t/* For chains that use blake2b as their hashing algo */\n\tBlake2: _void,\n})\n\nexport const SubstrateStateMachineProof = Struct({\n\t/**\n\t * The hasher used to hash the state machine state.\n\t */\n\thasher: SubstrateHashing,\n\t/**\n\t * Proof of the state machine state.\n\t */\n\tstorageProof: Vector(Vector(u8)),\n})\n\nexport const SubstrateStateProof = Enum({\n\t/*\n\t * Uses overlay root for verification\n\t */\n\tOverlayProof: SubstrateStateMachineProof,\n\t/*\n\t * Uses state root for verification\n\t */\n\tStateProof: SubstrateStateMachineProof,\n})\n\nexport const BasicProof = Vector(Vector(u8))\n\nexport const LeafIndexAndPos = Struct({\n\t/*\n\t * Leaf index\n\t */\n\tleafIndex: u64,\n\t/*\n\t * Leaf position in the MMR\n\t */\n\tpos: u64,\n})\n\nexport const MmrProof = Struct({\n\t/*\n\t * Proof of the leaf index and position.\n\t */\n\tleafIndexAndPos: Vector(LeafIndexAndPos),\n\t/*\n\t * Proof of the leaf data.\n\t */\n\tleafCount: u64,\n\t/*\n\t * Proof elements (hashes of siblings of inner nodes on the path to the leaf).\n\t */\n\titems: Vector(H256),\n})\n\nexport const ConsensusStateId = Vector(u8, 4)\n\nexport const ConsensusMessage = Struct({\n\t/*\n\t * Consensus message data.\n\t */\n\tconsensusProof: Vector(u8),\n\t/*\n\t * Consensus state Id\n\t */\n\tconsensusStateId: ConsensusStateId,\n\t/*\n\t * Public key of the sender\n\t */\n\tsigner: Vector(u8),\n})\n\nexport const FraudProofMessage = Struct({\n\t/*\n\t * The first valid consensus proof\n\t */\n\tproof1: Vector(u8),\n\t/*\n\t * The second valid consensus proof\n\t */\n\tproof2: Vector(u8),\n\t/*\n\t * Consensus state Id\n\t */\n\tconsensusStateId: ConsensusStateId,\n})\n\nexport const StateMachine = Enum({\n\t/*\n\t * Evm state machines\n\t */\n\tEvm: u32,\n\t/*\n\t * Polkadot parachains\n\t */\n\tPolkadot: u32,\n\t/*\n\t * Kusama parachains\n\t */\n\tKusama: u32,\n\t/*\n\t * Substrate-based standalone chain\n\t */\n\tSubstrate: ConsensusStateId,\n\t/*\n\t * Tendermint chains\n\t */\n\tTendermint: ConsensusStateId,\n})\n\nexport const StateMachineId = Struct({\n\t/*\n\t * The state machine id\n\t */\n\tid: StateMachine,\n\t/*\n\t * The consensus state id\n\t */\n\tconsensusStateId: ConsensusStateId,\n})\n\nexport const StateMachineHeight = Struct({\n\t/*\n\t * The state machine id\n\t */\n\tid: StateMachineId,\n\t/*\n\t * The height of the state machine\n\t */\n\theight: u64,\n})\n\nexport const Proof = Struct({\n\t/*\n\t * The height of the state machine\n\t */\n\theight: StateMachineHeight,\n\t/*\n\t * The proof\n\t */\n\tproof: Vector(u8),\n})\n\nexport const PostRequest = Struct({\n\t/*\n\t * The source state machine of this request.\n\t */\n\tsource: StateMachine,\n\t/*\n\t * The destination state machine of this request.\n\t */\n\tdest: StateMachine,\n\t/*\n\t * The nonce of this request on the source chain\n\t */\n\tnonce: u64,\n\t/*\n\t * Module identifier of the sending module\n\t */\n\tfrom: Vector(u8),\n\t/*\n\t * Module identifier of the receiving module\n\t */\n\tto: Vector(u8),\n\t/*\n\t * Timestamp which this request expires in seconds.\n\t */\n\ttimeoutTimestamp: u64,\n\t/*\n\t * Encoded request body\n\t */\n\tbody: Vector(u8),\n})\n\nexport const PostResponse = Struct({\n\t/*\n\t * The request that triggered this response.\n\t */\n\tpost: PostRequest,\n\t/*\n\t * The response message.\n\t */\n\tresponse: Vector(u8),\n\t/*\n\t * Timestamp at which this response expires in seconds.\n\t */\n\ttimeoutTimestamp: u64,\n})\n\nexport const GetRequest = Struct({\n\t/*\n\t * The source state machine of this request.\n\t */\n\tsource: StateMachine,\n\t/*\n\t * The destination state machine of this request.\n\t */\n\tdest: StateMachine,\n\t/*\n\t * The nonce of this request on the source chain\n\t */\n\tnonce: u64,\n\t/*\n\t * Module identifier of the sending module\n\t */\n\tfrom: Vector(u8),\n\t/*\n\t * Raw Storage keys that would be used to fetch the values from the counterparty\n\t * For deriving storage keys for ink contract fields follow the guide in the link below\n\t * `<https://use.ink/datastructures/storage-in-metadata#a-full-example>`\n\t * Substrate Keys\n\t */\n\tkeys: Vector(Vector(u8)),\n\t/*\n\t * The height of the state machine\n\t */\n\theight: u64,\n\t/*\n\t * Some application-specific metadata relating to this request\n\t */\n\tcontext: Vector(u8),\n\t/*\n\t * Host timestamp at which this request expires in seconds\n\t */\n\ttimeoutTimestamp: u64,\n})\n\nexport const StorageValue = Struct({\n\t/*\n\t * The request storage keys\n\t */\n\tkey: Vector(u8),\n\t/*\n\t * The verified value\n\t */\n\tvalue: Option(Vector(u8)),\n})\n\nexport const GetResponse = Struct({\n\t/*\n\t * The Get request that triggered this response.\n\t */\n\tget: GetRequest,\n\t/*\n\t * Values derived from the state proof\n\t */\n\tvalues: Vector(StorageValue),\n})\n\nexport const Request = Enum({\n\t/*\n\t * A post request allows a module on a state machine to send arbitrary bytes to another module\n\t * living in another state machine.\n\t */\n\tPost: PostRequest,\n\t/*\n\t * A get request allows a module on a state machine to read the storage of another module\n\t * living in another state machine.\n\t */\n\tGet: GetRequest,\n})\n\nexport const Response = Enum({\n\t/*\n\t * The response to a POST request\n\t */\n\tPost: PostResponse,\n\t/*\n\t * The response to a GET request\n\t */\n\tGet: GetResponse,\n})\n\nexport const RequestMessage = Struct({\n\t/*\n\t * Requests from source chain\n\t */\n\trequests: Vector(PostRequest),\n\t/*\n\t * Membership batch proof for these requests\n\t */\n\tproof: Proof,\n\t/*\n\t * Signer information. Ideally should be their account identifier\n\t */\n\tsigner: Vector(u8),\n})\n\nexport const RequestResponse = Enum({\n\t/*\n\t * A set of requests\n\t */\n\tRequest: Vector(Request),\n\t/*\n\t * A set of responses\n\t */\n\tResponse: Vector(Response),\n})\n\nexport const ResponseMessage = Struct({\n\t/*\n\t * A set of either POST requests or responses to be handled\n\t */\n\tdatagram: Vector(RequestResponse),\n\t/*\n\t * Membership batch proof for these requests/responses\n\t */\n\tproof: Proof,\n\t/*\n\t * Signer information. Ideally should be their account identifier\n\t */\n\tsigner: Vector(u8),\n})\n\nexport const TimeoutMessage = Enum({\n\t/*\n\t * A non memership proof for POST requests\n\t */\n\tPost: Struct({\n\t\t/*\n\t\t * Timed out requests\n\t\t */\n\t\trequests: Vector(Request),\n\t\t/*\n\t\t * Membership batch proof for these requests\n\t\t */\n\t\tproof: Proof,\n\t}),\n\t/*\n\t * A non memership proof for POST responses\n\t */\n\tPostResponse: Struct({\n\t\t/*\n\t\t * Timed out responses\n\t\t */\n\t\tresponses: Vector(Response),\n\t\t/*\n\t\t * Membership batch proof for these responses\n\t\t */\n\t\tproof: Proof,\n\t}),\n\t/*\n\t * There are no proofs for Get timeouts\n\t */\n\tGet: Struct({\n\t\t/*\n\t\t * Timed out requests\n\t\t */\n\t\trequests: Vector(Request),\n\t}),\n})\n\nexport const GetRequestsWithProof = Struct({\n\t/*\n\t * Requests to be fetched\n\t */\n\trequests: Vector(GetRequest),\n\n\t/*\n\t * Membership batch proof for these requests\n\t */\n\tsource: Proof,\n\n\t/*\n\t * Storage proof for these responses\n\t */\n\tresponse: Proof,\n\n\t/*\n\t * Signer information. Ideally should be their account identifier\n\t */\n\tsigner: Vector(u8),\n})\n\nexport const Message = Enum({\n\t/*\n\t * A consensus update message\n\t */\n\tConsensusMessage: ConsensusMessage,\n\t/*\n\t * A fraud proof message\n\t */\n\tFraudProofMessage: FraudProofMessage,\n\t/*\n\t * A request message\n\t */\n\tRequestMessage: RequestMessage,\n\t/*\n\t * A response message\n\t */\n\tResponseMessage: ResponseMessage,\n\t/*\n\t * A request timeout message\n\t */\n\tTimeoutMessage: TimeoutMessage,\n})\n","import type { PublicClient, TransactionReceipt } from \"viem\"\nimport { bytesToHex, getAddress, hexToBytes } from \"viem\"\nimport { u8aConcat } from \"@polkadot/util\"\nimport { blake2AsU8a, xxhashAsU8a } from \"@polkadot/util-crypto\"\n\nimport type { IChain, IIsmpMessage } from \"@/chain\"\nimport { EvmChain, requestCommitmentKey, responseCommitmentKey, type EvmChainParams } from \"@/chains/evm\"\nimport type {\n\tHexString,\n\tIGetRequest,\n\tIMessage,\n\tIPolkadotHubConfig,\n\tIPostRequest,\n\tStateMachineHeight,\n\tStateMachineIdParams,\n} from \"@/types\"\nimport { replaceWebsocketWithHttp } from \"@/utils\"\nimport { decodeReviveContractTrieId } from \"@/utils/reviveAccount\"\nimport { type CodecType } from \"scale-ts\"\n\nimport { EvmStateProof } from \"@/utils/substrate\"\n\n/** Substrate default child trie prefix (`ChildInfo::new_default`). */\nconst DEFAULT_CHILD_STORAGE_PREFIX = new TextEncoder().encode(\":child_storage:default:\")\n\n/**\n * Full chain params: EVM JSON-RPC + Ismp host plus a Substrate JSON-RPC URL for proof queries.\n */\nexport type PolkadotHubChainParams = EvmChainParams & {\n\tsubstrateRpcUrl: string\n}\n\ninterface ReadProofRpc {\n\tat?: string\n\tproof: string[]\n}\n\nclass SubstrateHttpRpc {\n\tconstructor(private readonly url: string) {}\n\n\tasync call(method: string, params: unknown[] = []): Promise<unknown> {\n\t\tconst body = JSON.stringify({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: Date.now(),\n\t\t\tmethod,\n\t\t\tparams,\n\t\t})\n\n\t\tconst response = await fetch(this.url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody,\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Substrate RPC HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst json = (await response.json()) as { result?: unknown; error?: { message: string } }\n\t\tif (json.error) {\n\t\t\tthrow new Error(`Substrate RPC error: ${json.error.message}`)\n\t\t}\n\n\t\treturn json.result\n\t}\n}\n\nfunction contractInfoKey(address20: Uint8Array): Uint8Array {\n\tconst key = new Uint8Array(16 + 16 + 20)\n\tkey.set(xxhashAsU8a(\"Revive\", 128), 0)\n\tkey.set(xxhashAsU8a(\"AccountInfoOf\", 128), 16)\n\tkey.set(address20, 32)\n\treturn key\n}\n\nfunction childPrefixedStorageKey(trieId: Uint8Array): Uint8Array {\n\treturn u8aConcat(DEFAULT_CHILD_STORAGE_PREFIX, trieId)\n}\n\nfunction storageKeyForSlot(slot32: Uint8Array): Uint8Array {\n\treturn blake2AsU8a(slot32, 256)\n}\n\nfunction hexKey(k: Uint8Array): HexString {\n\treturn bytesToHex(k) as HexString\n}\n\n/**\n * Polkadot Hub (EVM on Substrate / Revive): EVM RPC + host for reads and txs; Substrate RPC for\n * child-trie proofs aligned with `tesseract/messaging/substrate-evm` (`query_requests_proof` /\n * `query_state_proof`).\n */\nexport class PolkadotHubChain implements IChain {\n\tprivate readonly evm: EvmChain\n\tprivate readonly substrateRpc: SubstrateHttpRpc\n\n\tstatic fromParams(params: PolkadotHubChainParams): PolkadotHubChain {\n\t\tconst { substrateRpcUrl, ...evmParams } = params\n\t\tconst evm = EvmChain.fromParams(evmParams)\n\t\treturn new PolkadotHubChain(params, evm)\n\t}\n\n\t/**\n\t * Creates a `PolkadotHubChain` by auto-detecting the EVM chain ID and `IsmpHost` address via\n\t * {@link EvmChain.create}, plus a Substrate RPC URL for Revive child-trie proofs.\n\t *\n\t * @param evmRpcUrl - HTTP(S) JSON-RPC URL of the EVM (Revive) node\n\t * @param substrateRpcUrl - Substrate node RPC (HTTP or WebSocket) for proof queries\n\t * @param bundlerUrl - Optional ERC-4337 bundler URL (forwarded to `EvmChain.create`)\n\t */\n\tstatic async create(evmRpcUrl: string, substrateRpcUrl: string, bundlerUrl?: string): Promise<PolkadotHubChain> {\n\t\tconst evm = await EvmChain.create(evmRpcUrl, bundlerUrl)\n\t\tconst chainId = Number.parseInt(evm.config.stateMachineId.replace(/^EVM-/, \"\"), 10)\n\t\tif (!Number.isFinite(chainId)) {\n\t\t\tthrow new Error(`Unexpected EVM stateMachineId: ${evm.config.stateMachineId}`)\n\t\t}\n\t\tconst params: PolkadotHubChainParams = {\n\t\t\tchainId,\n\t\t\trpcUrl: evm.config.rpcUrl,\n\t\t\thost: evm.config.host,\n\t\t\tconsensusStateId: evm.config.consensusStateId,\n\t\t\tbundlerUrl: evm.bundlerUrl,\n\t\t\tsubstrateRpcUrl,\n\t\t}\n\t\treturn new PolkadotHubChain(params, evm)\n\t}\n\n\tprivate constructor(\n\t\tprivate readonly params: PolkadotHubChainParams,\n\t\tevm: EvmChain,\n\t) {\n\t\tthis.evm = evm\n\t\tthis.substrateRpc = new SubstrateHttpRpc(replaceWebsocketWithHttp(params.substrateRpcUrl))\n\t}\n\n\tget client(): PublicClient {\n\t\treturn this.evm.client\n\t}\n\n\tget host(): HexString {\n\t\treturn this.evm.host\n\t}\n\n\tget bundlerUrl(): string | undefined {\n\t\treturn this.evm.bundlerUrl\n\t}\n\n\tget configService() {\n\t\treturn this.evm.configService\n\t}\n\n\tget config(): IPolkadotHubConfig {\n\t\treturn {\n\t\t\t...this.evm.config,\n\t\t\tsubstrateRpcUrl: this.params.substrateRpcUrl,\n\t\t}\n\t}\n\n\tprivate hostAddress20(): Uint8Array {\n\t\treturn hexToBytes(getAddress(this.evm.host))\n\t}\n\n\tprivate async fetchCombinedProof(at: bigint, queries: Map<Uint8Array, Uint8Array[]>): Promise<HexString> {\n\t\tconst height = Number(at)\n\n\t\tif (!Number.isSafeInteger(height) || height < 0) {\n\t\t\tthrow new Error(\"Block height must be a non-negative safe integer for Substrate RPC\")\n\t\t}\n\n\t\tconst blockHash = (await this.substrateRpc.call(\"chain_getBlockHash\", [height])) as string | null\n\t\tif (!blockHash) {\n\t\t\tthrow new Error(`Block hash not found for height ${height}`)\n\t\t}\n\n\t\tconst mainKeys: HexString[] = []\n\t\tconst childInfoByAddr = new Map<string, { trieId: Uint8Array; prefixed: Uint8Array }>()\n\t\tconst contractEntries = [...queries.entries()]\n\n\t\tfor (const [addr20] of contractEntries) {\n\t\t\tconst infoKey = contractInfoKey(addr20)\n\t\t\tconst storageHex = (await this.substrateRpc.call(\"state_getStorage\", [hexKey(infoKey), blockHash])) as\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\tif (!storageHex) {\n\t\t\t\tthrow new Error(`Revive AccountInfo not found for contract ${hexKey(addr20)}`)\n\t\t\t}\n\t\t\tconst trieId = decodeReviveContractTrieId(hexToBytes(storageHex as HexString))\n\t\t\tconst prefixed = childPrefixedStorageKey(trieId)\n\t\t\tmainKeys.push(hexKey(infoKey))\n\t\t\tmainKeys.push(hexKey(prefixed))\n\t\t\tchildInfoByAddr.set(hexKey(addr20), { trieId, prefixed })\n\t\t}\n\n\t\tconst mainRead = (await this.substrateRpc.call(\"state_getReadProof\", [mainKeys, blockHash])) as ReadProofRpc\n\t\tconst mainProofBytes = mainRead.proof.map((p) => hexToBytes(p as HexString))\n\n\t\tconst storageProofEncoded = new Map<Uint8Array, Uint8Array[]>()\n\n\t\tfor (const [addr20, innerKeys] of contractEntries) {\n\t\t\tconst addrHex = hexKey(addr20)\n\t\t\tconst info = childInfoByAddr.get(addrHex)\n\t\t\tif (!info) {\n\t\t\t\tthrow new Error(\"Internal error: missing child info for contract\")\n\t\t\t}\n\t\t\tconst childKeysHex = innerKeys.map((k) => hexKey(k))\n\t\t\tconst childRead = (await this.substrateRpc.call(\"state_getChildReadProof\", [\n\t\t\t\thexKey(info.prefixed),\n\t\t\t\tchildKeysHex,\n\t\t\t\tblockHash,\n\t\t\t])) as ReadProofRpc\n\n\t\t\tconst childNodes = childRead.proof.map((p) => hexToBytes(p as HexString))\n\n\t\t\tstorageProofEncoded.set(\n\t\t\t\taddr20,\n\t\t\t\tchildNodes,\n\t\t\t)\n\t\t}\n\n\t\t// Match `EvmChain.queryProof`: scale-ts `Vector` encoders expect plain arrays of numbers for `Vec<u8>`,\n\t\t// not `Uint8Array` instances (nested Uint8Arrays can encode incorrectly).\n\t\tconst storageEntries = Array.from(storageProofEncoded.entries())\n\t\tconst contractProofForEnc = mainProofBytes.map((b) => Array.from(b))\n\t\tconst storageProofForEnc = storageEntries.map(([k, nodes]) => [\n\t\t\tArray.from(k),\n\t\t\tnodes.map((n) => Array.from(n)),\n\t\t]) as CodecType<typeof EvmStateProof>[\"storageProof\"]\n\n\t\tconst encoded = EvmStateProof.enc({\n\t\t\tcontractProof: contractProofForEnc,\n\t\t\tstorageProof: storageProofForEnc,\n\t\t})\n\t\treturn bytesToHex(encoded) as HexString\n\t}\n\n\ttimestamp(): Promise<bigint> {\n\t\treturn this.evm.timestamp()\n\t}\n\n\trequestReceiptKey(commitment: HexString): HexString {\n\t\treturn this.evm.requestReceiptKey(commitment)\n\t}\n\n\tqueryRequestReceipt(commitment: HexString): Promise<HexString | undefined> {\n\t\treturn this.evm.queryRequestReceipt(commitment)\n\t}\n\n\tasync queryProof(message: IMessage, _counterparty: string, at?: bigint): Promise<HexString> {\n\t\tif (at === undefined) {\n\t\t\tthrow new Error(\"PolkadotHubChain.queryProof requires an explicit block height `at`\")\n\t\t}\n\t\tconst host = this.hostAddress20()\n\t\tconst storageKeys =\n\t\t\t\"Requests\" in message\n\t\t\t\t? message.Requests.map((c) => storageKeyForSlot(hexToBytes(requestCommitmentKey(c).slot1)))\n\t\t\t\t: message.Responses.map((c) => storageKeyForSlot(hexToBytes(responseCommitmentKey(c))))\n\n\t\tconst q = new Map<Uint8Array, Uint8Array[]>()\n\t\tq.set(host, storageKeys)\n\t\treturn this.fetchCombinedProof(at, q)\n\t}\n\n\tasync queryStateProof(at: bigint, keys: HexString[], _address?: HexString): Promise<HexString> {\n\t\tconst keyBytes = keys.map((k) => hexToBytes(k))\n\t\tconst host = this.hostAddress20()\n\n\t\tif (keyBytes.every((k) => k.length === 32)) {\n\t\t\tconst storageKeys = keyBytes.map((slot) => storageKeyForSlot(slot))\n\t\t\tconst q = new Map<Uint8Array, Uint8Array[]>()\n\t\t\tq.set(host, storageKeys)\n\t\t\treturn this.fetchCombinedProof(at, q)\n\t\t}\n\n\t\tif (keyBytes.every((k) => k.length === 52)) {\n\t\t\tconst groups = new Map<string, Uint8Array[]>()\n\t\t\tfor (const full of keyBytes) {\n\t\t\t\tconst addr = full.subarray(0, 20)\n\t\t\t\tconst slot = full.subarray(20, 52)\n\t\t\t\tconst h = hexKey(addr)\n\t\t\t\tconst arr = groups.get(h) ?? []\n\t\t\t\tarr.push(storageKeyForSlot(slot))\n\t\t\t\tgroups.set(h, arr)\n\t\t\t}\n\t\t\tconst q = new Map<Uint8Array, Uint8Array[]>()\n\t\t\tfor (const [addrHex, sks] of groups) {\n\t\t\t\tq.set(hexToBytes(addrHex as HexString), sks)\n\t\t\t}\n\t\t\treturn this.fetchCombinedProof(at, q)\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t\"PolkadotHubChain.queryStateProof: keys must be either all 32-byte ISMP slots or all 52-byte (20-byte address + 32-byte slot) entries\",\n\t\t)\n\t}\n\n\tencode(message: IIsmpMessage): HexString {\n\t\treturn this.evm.encode(message)\n\t}\n\n\tlatestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\treturn this.evm.latestStateMachineHeight(stateMachineId)\n\t}\n\n\tchallengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\treturn this.evm.challengePeriod(stateMachineId)\n\t}\n\n\tstateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint> {\n\t\treturn this.evm.stateMachineUpdateTime(stateMachineHeight)\n\t}\n\n\tgetHostNonce(): Promise<bigint> {\n\t\treturn this.evm.getHostNonce()\n\t}\n\n\tquoteNative(request: IPostRequest | IGetRequest, fee: bigint): Promise<bigint> {\n\t\treturn this.evm.quoteNative(request, fee)\n\t}\n\n\tgetFeeTokenWithDecimals(): Promise<{ address: HexString; decimals: number }> {\n\t\treturn this.evm.getFeeTokenWithDecimals()\n\t}\n\n\tgetPlaceOrderCalldata(txHash: string, intentGatewayAddress: string): Promise<HexString> {\n\t\treturn this.evm.getPlaceOrderCalldata(txHash, intentGatewayAddress)\n\t}\n\n\testimateGas(request: IPostRequest): Promise<{ gas: bigint; postRequestCalldata: HexString }> {\n\t\treturn this.evm.estimateGas(request)\n\t}\n\n\tbroadcastTransaction(signedTransaction: HexString): Promise<TransactionReceipt> {\n\t\treturn this.evm.broadcastTransaction(signedTransaction)\n\t}\n\n\tgetTransactionReceipt(hash: HexString): Promise<TransactionReceipt> {\n\t\treturn this.evm.getTransactionReceipt(hash)\n\t}\n}\n","import { Struct, Tuple, Vector, u8, u32 } from \"scale-ts\"\n\n/**\n * SCALE codecs for Pharos state proofs. These mirror the Rust types defined in\n * `modules/ismp/state-machines/pharos/src/lib.rs` and\n * `modules/consensus/pharos/primitives/src/types.rs`.\n *\n * Pharos uses a flat hexary hash tree with SHA-256 hashing instead of Ethereum's\n * MPT with Keccak-256. The proof data is emitted by the `eth_getProof` endpoint on\n * Pharos nodes in a custom format (hex-encoded proof node bytes plus offsets that\n * locate the next child hash within each node).\n */\n\n/** Single node in a Pharos hexary hash tree proof path. */\nexport const PharosProofNodeCodec = Struct({\n\tproofNode: Vector(u8),\n\tnextBeginOffset: u32,\n\tnextEndOffset: u32,\n})\n\n/** Sibling leftmost-leaf proof used when witnessing non-existence. */\nexport const SiblingLeftmostLeafProofCodec = Struct({\n\tslotIndex: u8,\n\tleftmostLeafKey: Vector(u8),\n\tproofPath: Vector(PharosProofNodeCodec),\n})\n\n/** Non-existence proof: empty-slot witness or leaf-key-mismatch witness. */\nexport const NonExistenceProofCodec = Struct({\n\tproofNodes: Vector(PharosProofNodeCodec),\n\tsiblingProofs: Vector(SiblingLeftmostLeafProofCodec),\n})\n\n/** Account proof data: path from state root down to an account leaf. */\nexport const AccountProofDataCodec = Struct({\n\tproofNodes: Vector(PharosProofNodeCodec),\n\trawValue: Vector(u8),\n})\n\n/**\n * Pharos state proof (replaces `EvmStateProof` for Pharos chains).\n *\n * Scale-encoded `BTreeMap<Vec<u8>, _>` is layout-compatible with\n * `Vec<(Vec<u8>, _)>` provided entries are sorted by key; we sort before encoding.\n */\nexport const PharosStateProof = Struct({\n\tstorageProof: Vector(Tuple(Vector(u8), Vector(PharosProofNodeCodec))),\n\tstorageValues: Vector(Tuple(Vector(u8), Vector(u8))),\n\tnonExistenceProofs: Vector(Tuple(Vector(u8), NonExistenceProofCodec)),\n\taccountProofs: Vector(Tuple(Vector(u8), AccountProofDataCodec)),\n})","import type { PublicClient, TransactionReceipt } from \"viem\"\nimport { bytesToHex, getAddress, hexToBytes } from \"viem\"\nimport type { CodecType } from \"scale-ts\"\n\nimport type { IChain, IIsmpMessage } from \"@/chain\"\nimport { EvmChain, requestCommitmentKey, responseCommitmentKey, type EvmChainParams } from \"@/chains/evm\"\nimport type {\n\tHexString,\n\tIGetRequest,\n\tIMessage,\n\tIPharosConfig,\n\tIPostRequest,\n\tStateMachineHeight,\n\tStateMachineIdParams,\n} from \"@/types\"\nimport { replaceWebsocketWithHttp } from \"@/utils\"\nimport {\n\tAccountProofDataCodec,\n\tNonExistenceProofCodec,\n\tPharosProofNodeCodec,\n\tPharosStateProof,\n} from \"@/utils/pharos\"\n\n/**\n * Chain parameters for a Pharos EVM chain. Pharos reuses the EVM JSON-RPC\n * surface for reads, writes and host queries — proof fetching is the only\n * place where the Pharos client deviates from a standard EVM chain.\n */\nexport type PharosChainParams = EvmChainParams\n\ntype PharosProofNode = CodecType<typeof PharosProofNodeCodec>\ntype NonExistenceProof = CodecType<typeof NonExistenceProofCodec>\ntype AccountProofData = CodecType<typeof AccountProofDataCodec>\n\n/** Raw JSON-RPC proof-node shape returned by a Pharos node. */\ninterface RpcProofNode {\n\tproofNode: string\n\tnextBeginOffset: number\n\tnextEndOffset: number\n}\n\ninterface RpcSiblingProof {\n\tslotIndex: number\n\tleftmostLeafKey: string\n\tproofPath: RpcProofNode[]\n}\n\ninterface RpcStorageProofEntry {\n\tkey: string\n\tvalue: string\n\tproof: RpcProofNode[]\n\tisExist: boolean\n\tsiblingLeftmostLeafProofs?: RpcSiblingProof[]\n}\n\ninterface RpcAccountProof {\n\taccountProof: RpcProofNode[]\n\tbalance: string\n\tcodeHash: string\n\tnonce: string\n\tstorageHash: string\n\t/** RLP-encoded account value returned by Pharos nodes. */\n\trawValue: string\n\tstorageProof: RpcStorageProofEntry[]\n}\n\n/** Minimal HTTP JSON-RPC client used to reach the Pharos node's non-standard endpoints. */\nclass EvmHttpRpc {\n\tconstructor(private readonly url: string) {}\n\n\tasync call<T>(method: string, params: unknown[] = []): Promise<T> {\n\t\tconst response = await fetch(this.url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({ jsonrpc: \"2.0\", id: Date.now(), method, params }),\n\t\t})\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`Pharos RPC HTTP error: ${response.status}`)\n\t\t}\n\n\t\tconst json = (await response.json()) as { result?: T; error?: { message: string } }\n\t\tif (json.error) {\n\t\t\tthrow new Error(`Pharos RPC error: ${json.error.message}`)\n\t\t}\n\t\tif (json.result === undefined) {\n\t\t\tthrow new Error(\"Pharos RPC: missing result\")\n\t\t}\n\t\treturn json.result\n\t}\n}\n\n/** Pad a hex-encoded value to exactly 32 bytes, big-endian (mirrors the Rust tesseract client). */\nfunction padTo32Bytes(hex: string): Uint8Array {\n\tconst bytes = hexToBytes(hex as HexString)\n\tif (bytes.length > 32) {\n\t\tthrow new Error(`Pharos value exceeds 32 bytes: ${hex}`)\n\t}\n\tconst out = new Uint8Array(32)\n\tout.set(bytes, 32 - bytes.length)\n\treturn out\n}\n\nfunction rpcToProofNodes(nodes: RpcProofNode[]): PharosProofNode[] {\n\treturn nodes.map((n) => ({\n\t\tproofNode: Array.from(hexToBytes(n.proofNode as HexString)),\n\t\tnextBeginOffset: n.nextBeginOffset,\n\t\tnextEndOffset: n.nextEndOffset,\n\t}))\n}\n\nfunction rpcToSiblingProofs(siblings: RpcSiblingProof[] | undefined) {\n\treturn (siblings ?? []).map((s) => ({\n\t\tslotIndex: s.slotIndex,\n\t\tleftmostLeafKey: Array.from(hexToBytes(s.leftmostLeafKey as HexString)),\n\t\tproofPath: rpcToProofNodes(s.proofPath),\n\t}))\n}\n\nfunction blockTag(at: bigint | undefined): string {\n\treturn at === undefined ? \"latest\" : `0x${at.toString(16)}`\n}\n\n/**\n * Accumulator mirroring the Rust `PharosStateProof`. Kept as plain Maps so we can\n * collect entries per storage query and sort them before SCALE encoding.\n */\ninterface PharosProofAccumulator {\n\tstorageProof: Map<string, PharosProofNode[]>\n\tstorageValues: Map<string, number[]>\n\tnonExistenceProofs: Map<string, NonExistenceProof>\n\taccountProofs: Map<string, AccountProofData>\n}\n\nfunction newAccumulator(): PharosProofAccumulator {\n\treturn {\n\t\tstorageProof: new Map(),\n\t\tstorageValues: new Map(),\n\t\tnonExistenceProofs: new Map(),\n\t\taccountProofs: new Map(),\n\t}\n}\n\nfunction hexKey(bytes: Uint8Array): string {\n\treturn bytesToHex(bytes)\n}\n\nfunction mapToEntries<V>(m: Map<string, V>): [number[], V][] {\n\tconst entries: [number[], V][] = []\n\tfor (const [k, v] of m.entries()) {\n\t\tentries.push([Array.from(hexToBytes(k as HexString)), v])\n\t}\n\treturn entries\n}\n\nfunction encodeAccumulator(acc: PharosProofAccumulator): HexString {\n\tconst encoded = PharosStateProof.enc({\n\t\tstorageProof: mapToEntries(acc.storageProof),\n\t\tstorageValues: mapToEntries(acc.storageValues),\n\t\tnonExistenceProofs: mapToEntries(acc.nonExistenceProofs),\n\t\taccountProofs: mapToEntries(acc.accountProofs),\n\t})\n\treturn bytesToHex(encoded) as HexString\n}\n\n/**\n * Pharos EVM chain client.\n *\n * Delegates every standard EVM interaction to {@link EvmChain} and overrides\n * {@link PharosChain.queryProof} / {@link PharosChain.queryStateProof} to speak\n * Pharos's custom `eth_getProof` response format — mirroring the Rust\n * `tesseract-messaging-pharos-evm` client.\n */\nexport class PharosChain implements IChain {\n\tprivate readonly evm: EvmChain\n\tprivate readonly rpc: EvmHttpRpc\n\n\tstatic fromParams(params: PharosChainParams): PharosChain {\n\t\tconst evm = EvmChain.fromParams(params)\n\t\treturn new PharosChain(params, evm)\n\t}\n\n\t/**\n\t * Creates a `PharosChain` by auto-detecting the EVM chain ID and `IsmpHost`\n\t * address via {@link EvmChain.create}.\n\t *\n\t * @param rpcUrl - HTTP(S) JSON-RPC URL of the Pharos node\n\t * @param bundlerUrl - Optional ERC-4337 bundler URL forwarded to `EvmChain.create`\n\t */\n\tstatic async create(rpcUrl: string, bundlerUrl?: string): Promise<PharosChain> {\n\t\tconst evm = await EvmChain.create(rpcUrl, bundlerUrl)\n\t\tconst chainId = Number.parseInt(evm.config.stateMachineId.replace(/^EVM-/, \"\"), 10)\n\t\tif (!Number.isFinite(chainId)) {\n\t\t\tthrow new Error(`Unexpected EVM stateMachineId: ${evm.config.stateMachineId}`)\n\t\t}\n\t\tconst params: PharosChainParams = {\n\t\t\tchainId,\n\t\t\trpcUrl: evm.config.rpcUrl,\n\t\t\thost: evm.config.host,\n\t\t\tconsensusStateId: evm.config.consensusStateId,\n\t\t\tbundlerUrl: evm.bundlerUrl,\n\t\t}\n\t\treturn new PharosChain(params, evm)\n\t}\n\n\tprivate constructor(\n\t\tprivate readonly params: PharosChainParams,\n\t\tevm: EvmChain,\n\t) {\n\t\tthis.evm = evm\n\t\tthis.rpc = new EvmHttpRpc(replaceWebsocketWithHttp(params.rpcUrl))\n\t}\n\n\tget client(): PublicClient {\n\t\treturn this.evm.client\n\t}\n\n\tget host(): HexString {\n\t\treturn this.evm.host\n\t}\n\n\tget bundlerUrl(): string | undefined {\n\t\treturn this.evm.bundlerUrl\n\t}\n\n\tget configService() {\n\t\treturn this.evm.configService\n\t}\n\n\tget config(): IPharosConfig {\n\t\treturn this.evm.config\n\t}\n\n\tprivate hostAddress(): HexString {\n\t\treturn getAddress(this.evm.host) as HexString\n\t}\n\n\t/**\n\t * Fetch a storage proof for `slotKeys` under `address` at the given block and\n\t * merge the response into the supplied accumulator. Mirrors the membership\n\t * proof path of `PharosEvmClient::fetch_pharos_proof` on the Rust side.\n\t */\n\tprivate async fetchStorageProofInto(\n\t\tacc: PharosProofAccumulator,\n\t\tat: bigint,\n\t\taddress: HexString,\n\t\tslotKeys: HexString[],\n\t): Promise<void> {\n\t\tconst rpcProof = await this.rpc.call<RpcAccountProof>(\"eth_getProof\", [\n\t\t\taddress,\n\t\t\tslotKeys,\n\t\t\tblockTag(at),\n\t\t])\n\n\t\tfor (const sp of rpcProof.storageProof) {\n\t\t\tconst slotKey = hexKey(padTo32Bytes(sp.key))\n\t\t\tif (sp.isExist) {\n\t\t\t\tacc.storageProof.set(slotKey, rpcToProofNodes(sp.proof))\n\t\t\t\tacc.storageValues.set(slotKey, Array.from(padTo32Bytes(sp.value)))\n\t\t\t} else {\n\t\t\t\tacc.nonExistenceProofs.set(slotKey, {\n\t\t\t\t\tproofNodes: rpcToProofNodes(sp.proof),\n\t\t\t\t\tsiblingProofs: rpcToSiblingProofs(sp.siblingLeftmostLeafProofs),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetch an account proof (no storage keys) at the given block and record it on\n\t * the accumulator. Mirrors `PharosEvmClient::fetch_account_proof`.\n\t */\n\tprivate async fetchAccountProofInto(\n\t\tacc: PharosProofAccumulator,\n\t\tat: bigint,\n\t\taddress: HexString,\n\t): Promise<void> {\n\t\tconst rpcProof = await this.rpc.call<RpcAccountProof>(\"eth_getProof\", [\n\t\t\taddress,\n\t\t\t[],\n\t\t\tblockTag(at),\n\t\t])\n\n\t\tconst addrBytes = hexToBytes(address)\n\t\tacc.accountProofs.set(hexKey(addrBytes), {\n\t\t\tproofNodes: rpcToProofNodes(rpcProof.accountProof),\n\t\t\trawValue: Array.from(hexToBytes(rpcProof.rawValue as HexString)),\n\t\t})\n\t}\n\n\ttimestamp(): Promise<bigint> {\n\t\treturn this.evm.timestamp()\n\t}\n\n\trequestReceiptKey(commitment: HexString): HexString {\n\t\treturn this.evm.requestReceiptKey(commitment)\n\t}\n\n\tqueryRequestReceipt(commitment: HexString): Promise<HexString | undefined> {\n\t\treturn this.evm.queryRequestReceipt(commitment)\n\t}\n\n\t/**\n\t * Query a Pharos state proof for the request/response commitments in `message`.\n\t *\n\t * Mirrors `PharosEvmClient::query_requests_proof` / `query_responses_proof`:\n\t * for every commitment we derive the second storage slot (`slot1` from\n\t * {@link requestCommitmentKey} / {@link responseCommitmentKey}) and request it\n\t * from the ISMP host via `eth_getProof`.\n\t */\n\tasync queryProof(message: IMessage, _counterparty: string, at?: bigint): Promise<HexString> {\n\t\tif (at === undefined) {\n\t\t\tthrow new Error(\"PharosChain.queryProof requires an explicit block height `at`\")\n\t\t}\n\t\tconst slotKeys: HexString[] =\n\t\t\t\"Requests\" in message\n\t\t\t\t? message.Requests.map((c) => requestCommitmentKey(c).slot1 as HexString)\n\t\t\t\t: message.Responses.map((c) => responseCommitmentKey(c) as HexString)\n\n\t\tconst acc = newAccumulator()\n\t\tawait this.fetchStorageProofInto(acc, at, this.hostAddress(), slotKeys)\n\t\treturn encodeAccumulator(acc)\n\t}\n\n\t/**\n\t * Query a Pharos state proof for arbitrary keys.\n\t *\n\t * Supports the same key shapes as `PharosEvmClient::query_state_proof`:\n\t * - 32-byte keys: ISMP host storage slots\n\t * - 52-byte keys: `address (20) || slot (32)` grouped by contract\n\t * - 20-byte keys: account queries (proves the account leaf itself)\n\t *\n\t * If `address` is provided, all keys are treated as 32-byte slots under that\n\t * contract (matching the `EvmChain.queryStateProof` contract-override shape).\n\t */\n\tasync queryStateProof(at: bigint, keys: HexString[], address?: HexString): Promise<HexString> {\n\t\tconst acc = newAccumulator()\n\n\t\tif (address !== undefined) {\n\t\t\tawait this.fetchStorageProofInto(acc, at, getAddress(address) as HexString, keys)\n\t\t\treturn encodeAccumulator(acc)\n\t\t}\n\n\t\tconst keyBytes = keys.map((k) => hexToBytes(k))\n\t\tconst hostAddr = this.hostAddress()\n\n\t\tconst ismpSlots: HexString[] = []\n\t\tconst groups = new Map<string, HexString[]>()\n\t\tconst accountQueries: HexString[] = []\n\n\t\tfor (const bytes of keyBytes) {\n\t\t\tif (bytes.length === 32) {\n\t\t\t\tismpSlots.push(bytesToHex(bytes) as HexString)\n\t\t\t} else if (bytes.length === 52) {\n\t\t\t\tconst addr = getAddress(bytesToHex(bytes.subarray(0, 20))) as HexString\n\t\t\t\tconst slot = bytesToHex(bytes.subarray(20, 52)) as HexString\n\t\t\t\tconst list = groups.get(addr) ?? []\n\t\t\t\tlist.push(slot)\n\t\t\t\tgroups.set(addr, list)\n\t\t\t} else if (bytes.length === 20) {\n\t\t\t\taccountQueries.push(getAddress(bytesToHex(bytes)) as HexString)\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`PharosChain.queryStateProof: unsupported key length ${bytes.length}; expected 20, 32, or 52`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tif (ismpSlots.length > 0) {\n\t\t\tawait this.fetchStorageProofInto(acc, at, hostAddr, ismpSlots)\n\t\t}\n\t\tfor (const [addr, slots] of groups) {\n\t\t\tawait this.fetchStorageProofInto(acc, at, addr as HexString, slots)\n\t\t}\n\t\tfor (const addr of accountQueries) {\n\t\t\tawait this.fetchAccountProofInto(acc, at, addr)\n\t\t}\n\n\t\treturn encodeAccumulator(acc)\n\t}\n\n\tencode(message: IIsmpMessage): HexString {\n\t\treturn this.evm.encode(message)\n\t}\n\n\tlatestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\treturn this.evm.latestStateMachineHeight(stateMachineId)\n\t}\n\n\tchallengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint> {\n\t\treturn this.evm.challengePeriod(stateMachineId)\n\t}\n\n\tstateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint> {\n\t\treturn this.evm.stateMachineUpdateTime(stateMachineHeight)\n\t}\n\n\tgetHostNonce(): Promise<bigint> {\n\t\treturn this.evm.getHostNonce()\n\t}\n\n\tquoteNative(request: IPostRequest | IGetRequest, fee: bigint): Promise<bigint> {\n\t\treturn this.evm.quoteNative(request, fee)\n\t}\n\n\tgetFeeTokenWithDecimals(): Promise<{ address: HexString; decimals: number }> {\n\t\treturn this.evm.getFeeTokenWithDecimals()\n\t}\n\n\tgetPlaceOrderCalldata(txHash: string, intentGatewayAddress: string): Promise<HexString> {\n\t\treturn this.evm.getPlaceOrderCalldata(txHash, intentGatewayAddress)\n\t}\n\n\testimateGas(request: IPostRequest): Promise<{ gas: bigint; postRequestCalldata: HexString }> {\n\t\treturn this.evm.estimateGas(request)\n\t}\n\n\tbroadcastTransaction(signedTransaction: HexString): Promise<TransactionReceipt> {\n\t\treturn this.evm.broadcastTransaction(signedTransaction)\n\t}\n\n\tgetTransactionReceipt(hash: HexString): Promise<TransactionReceipt> {\n\t\treturn this.evm.getTransactionReceipt(hash)\n\t}\n}\n","import { hexToBytes } from \"viem\"\nimport { env, hasWindow, isNode } from \"std-env\"\nimport { postRequestCommitment } from \"@/utils\"\nimport type { HexString, IPostRequest } from \"@/types\"\n\n/**\n * Generates a Merkle Mountain Range (MMR) root hash and proof for a post request.\n *\n * This function takes a post request and tree size, encodes it according to the PostRequest format,\n * and generates both the MMR root hash and a proof. The function builds an MMR with `treeSize` leaves,\n * where most leaves are variations of the encoded request (XORed with their index), except for the\n * last leaf, which is the unmodified request. The proof is generated for this unmodified leaf.\n *\n * @param postRequest - The post request to generate the MMR root and proof for\n * @param treeSize - Controls how many leaves will be added to the MMR (exactly `treeSize` leaves)\n * @returns An object containing:\n * - root: The MMR root hash as a hex string\n * - proof: An array of hex strings representing the MMR proof for the unmodified request\n * - index: The index of the unmodified request in the MMR\n * - treeSize: The number of leaves in the MMR\n * - mmrSize: The size of the MMR in nodes\n */\nexport async function generateRootWithProof(\n\tpostRequest: IPostRequest,\n\ttreeSize: bigint,\n): Promise<{ root: HexString; proof: HexString[]; index: bigint; treeSize: bigint; mmrSize: bigint }> {\n\tconst { generate_root_with_proof } = await load_ckb_mmr()\n\tconst { commitment: hash, encodePacked } = postRequestCommitment(postRequest)\n\n\tconst result = JSON.parse(generate_root_with_proof(hexToBytes(encodePacked), treeSize))\n\tconst { root, proof, mmr_size, keccak_hash_calldata } = result\n\n\tif (keccak_hash_calldata !== hash) {\n\t\tconsole.log(\"keccak_hash\", keccak_hash_calldata)\n\t\tconsole.log(\"hash\", hash)\n\t\tthrow new Error(\"Abi keccak hash mismatch\")\n\t}\n\n\treturn {\n\t\troot: root as HexString,\n\t\tproof: proof as HexString[],\n\t\tindex: treeSize - 1n,\n\t\ttreeSize,\n\t\tmmrSize: mmr_size,\n\t}\n}\n\nasync function load_ckb_mmr() {\n\tif (hasWindow) {\n\t\tconst wasm = await import(\"@/ckb-utils/web\")\n\t\tawait wasm.default()\n\n\t\treturn wasm\n\t}\n\n\tif (isNode) {\n\t\tconst wasm = await import(\"@/ckb-utils/node\")\n\t\treturn wasm\n\t}\n\n\tthrow new Error(`SDK not setup for ${env}`)\n}\n\nexport async function __test() {\n\tconst { generate_root_with_proof } = await load_ckb_mmr()\n\n\treturn generate_root_with_proof(new Uint8Array(), 120n)\n}\n","import {\n\ttype HexString,\n\ttype IGetRequest,\n\ttype IPostRequest,\n\tRequestKind,\n\tRequestStatus,\n\ttype StateMachineHeight,\n\tTimeoutStatus,\n} from \"@/types\"\nimport type { EstimateGasCallData, Order, RequestStatusKey, RetryConfig, TimeoutStatusKey } from \"@/types\"\nimport { LogLevels, createConsola } from \"consola\"\nimport {\n\ttype CallParameters,\n\ttype PublicClient,\n\tbytesToHex,\n\tconcatHex,\n\tencodeAbiParameters,\n\tencodePacked,\n\tisHex,\n\thexToBytes,\n\tkeccak256,\n\ttoHex,\n} from \"viem\"\nimport evmHost from \"./abis/evmHost\"\nimport handler from \"./abis/handlerV2\"\nimport { type IChain, getStateCommitmentFieldSlot } from \"./chain\"\nimport { _queryRequestInternal } from \"./queryClient\"\nimport { generateRootWithProof } from \"./utils\"\nimport { ChainConfigService } from \"./configs/ChainConfigService\"\n\nexport * from \"./utils/mmr\"\nexport * from \"./utils/substrate\"\n\nexport const DEFAULT_POLL_INTERVAL = 5_000\nexport const ADDRESS_ZERO = \"0x0000000000000000000000000000000000000000\" as HexString\nexport const MOCK_ADDRESS = \"0x1234567890123456789012345678901234567890\" as HexString\nexport const DUMMY_PRIVATE_KEY = \"0x0000000000000000000000000000000000000000000000000000000000000000\" as HexString\nexport const DEFAULT_GRAFFITI = \"0x0000000000000000000000000000000000000000000000000000000000000000\" as HexString\n\n/**\n * Returns the maximum of two bigint values\n * @param a - First bigint value\n * @param b - Second bigint value\n * @returns The larger of the two values\n */\nexport function maxBigInt(a: bigint, b: bigint): bigint {\n\treturn a > b ? a : b\n}\n\n/**\n * Sleeps for the specified number of milliseconds.\n * @param ms The number of milliseconds to sleep.\n */\nexport function sleep(ms?: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms || DEFAULT_POLL_INTERVAL))\n}\n\n/**\n * Waits for the challenge period to elapse on a chain.\n * This function will sleep until the challenge period has elapsed.\n *\n * @param chain The chain object implementing IChain interface\n * @param stateMachineHeight The state machine height to wait for\n * @returns Promise that resolves when the challenge period has elapsed\n */\nexport async function waitForChallengePeriod(chain: IChain, stateMachineHeight: StateMachineHeight): Promise<void> {\n\t// Get the challenge period for this state machine\n\tconst challengePeriod = await chain.challengePeriod(stateMachineHeight.id)\n\n\tif (challengePeriod === BigInt(0)) return\n\n\t// Get the state machine update time\n\tconst updateTime = await chain.stateMachineUpdateTime(stateMachineHeight)\n\t// Check current timestamp\n\tlet currentTimestamp = await chain.timestamp()\n\t// Calculate time passed since update\n\tlet timeElapsed = currentTimestamp - updateTime\n\n\tif (timeElapsed > challengePeriod) return\n\n\t// First sleep for the whole challenge period\n\tawait sleep(Number(challengePeriod) * 1000)\n\n\t// Keep sleeping until challenge period has fully elapsed\n\twhile (timeElapsed <= challengePeriod) {\n\t\t// Sleep for remaining time\n\t\tconst remainingTime = challengePeriod - timeElapsed\n\t\tawait sleep(Number(remainingTime) * 1000)\n\n\t\t// Check timestamp again\n\t\tcurrentTimestamp = await chain.timestamp()\n\t\ttimeElapsed = currentTimestamp - updateTime\n\t}\n}\n\n/**\n * Checks if the given state machine ID represents an EVM chain.\n * @param stateMachineId The state machine ID to check.\n */\nexport function isEvmChain(stateMachineId: string): boolean {\n\treturn stateMachineId.startsWith(\"EVM\")\n}\n\n/**\n * Checks if the given state machine ID represents a Substrate chain.\n * @param stateMachineId The state machine ID to check.\n */\nexport function isSubstrateChain(stateMachineId: string): boolean {\n\treturn (\n\t\tstateMachineId.startsWith(\"POLKADOT\") ||\n\t\tstateMachineId.startsWith(\"KUSAMA\") ||\n\t\tstateMachineId.startsWith(\"SUBSTRATE\")\n\t)\n}\n\n/**\n * Converts a state machine ID string to a stateId object.\n * Handles formats like:\n * - \"EVM-97\" → { Evm: 97 }\n * - \"SUBSTRATE-cere\" → { Substrate: \"0x63657265\" } (hex encoded UTF-8 bytes)\n * - \"POLKADOT-3367\" → { Polkadot: 3367 }\n * - \"KUSAMA-123\" → { Kusama: 123 }\n *\n * @param stateMachineId The state machine ID string\n * @returns A stateId object conforming to the StateMachineIdParams interface\n */\nexport function parseStateMachineId(stateMachineId: string): {\n\tstateId: { Evm?: number; Substrate?: HexString; Polkadot?: number; Kusama?: number }\n} {\n\tconst [type, value] = stateMachineId.split(\"-\")\n\n\tif (!type || !value) {\n\t\tthrow new Error(\n\t\t\t`Invalid state machine ID format: ${stateMachineId}. Expected format like \"EVM-97\" or \"SUBSTRATE-cere\"`,\n\t\t)\n\t}\n\n\tconst stateId: { Evm?: number; Substrate?: HexString; Polkadot?: number; Kusama?: number } = {}\n\n\tswitch (type.toUpperCase()) {\n\t\tcase \"EVM\": {\n\t\t\tconst evmChainId = Number.parseInt(value, 10)\n\t\t\tif (Number.isNaN(evmChainId)) {\n\t\t\t\tthrow new Error(`Invalid EVM chain ID: ${value}. Expected a number.`)\n\t\t\t}\n\t\t\tstateId.Evm = evmChainId\n\t\t\tbreak\n\t\t}\n\n\t\tcase \"SUBSTRATE\": {\n\t\t\t// Convert the string to hex-encoded UTF-8 bytes\n\t\t\tconst bytes = Buffer.from(value, \"utf8\")\n\t\t\tstateId.Substrate = `0x${bytes.toString(\"hex\")}` as HexString\n\t\t\tbreak\n\t\t}\n\n\t\tcase \"POLKADOT\": {\n\t\t\tconst polkadotChainId = Number.parseInt(value, 10)\n\t\t\tif (Number.isNaN(polkadotChainId)) {\n\t\t\t\tthrow new Error(`Invalid Polkadot chain ID: ${value}. Expected a number.`)\n\t\t\t}\n\t\t\tstateId.Polkadot = polkadotChainId\n\t\t\tbreak\n\t\t}\n\n\t\tcase \"KUSAMA\": {\n\t\t\tconst kusamaChainId = Number.parseInt(value, 10)\n\t\t\tif (Number.isNaN(kusamaChainId)) {\n\t\t\t\tthrow new Error(`Invalid Kusama chain ID: ${value}. Expected a number.`)\n\t\t\t}\n\t\t\tstateId.Kusama = kusamaChainId\n\t\t\tbreak\n\t\t}\n\n\t\tdefault:\n\t\t\tthrow new Error(`Unsupported chain type: ${type}. Expected one of: EVM, SUBSTRATE, POLKADOT, KUSAMA.`)\n\t}\n\n\treturn { stateId }\n}\n\n/**\n * Checks if the given string is a valid UTF-8 string.\n * @param str The string to check.\n */\nexport function isValidUTF8(str: string): boolean {\n\treturn Buffer.from(str).toString(\"utf8\") === str\n}\n\n/**\n * Calculates the commitment hash for a post request.\n * @param post The post request to calculate the commitment hash for.\n * @returns The commitment hash and the encode packed data.\n */\nexport function postRequestCommitment(post: IPostRequest): { commitment: HexString; encodePacked: HexString } {\n\tconst data = encodePacked(\n\t\t[\"bytes\", \"bytes\", \"uint64\", \"uint64\", \"bytes\", \"bytes\", \"bytes\"],\n\t\t[toHex(post.source), toHex(post.dest), post.nonce, post.timeoutTimestamp, post.from, post.to, post.body],\n\t)\n\n\treturn {\n\t\tcommitment: keccak256(data),\n\t\tencodePacked: data,\n\t}\n}\n\n/**\n * Converts a bytes32 token address to bytes20 format\n * This removes the extra padded zeros from the address\n */\nexport function bytes32ToBytes20(bytes32Address: string): HexString {\n\tif (bytes32Address.length === 42) {\n\t\treturn bytes32Address as HexString\n\t}\n\n\tif (bytes32Address === ADDRESS_ZERO) {\n\t\treturn ADDRESS_ZERO\n\t}\n\n\tif (bytes32Address.length !== 66) {\n\t\tthrow new Error(`Expected a 20-byte or 32-byte hex value, got ${bytes32Address.length} characters`)\n\t}\n\n\tconst bytes = hexToBytes(bytes32Address as HexString)\n\tconst addressBytes = bytes.slice(12)\n\treturn bytesToHex(addressBytes) as HexString\n}\n\nexport function bytes20ToBytes32(bytes20Address: string): HexString {\n\t// Already a 32-byte value — return unchanged\n\tif (bytes20Address.length === 66) return bytes20Address as HexString\n\tif (bytes20Address.length !== 42) {\n\t\tthrow new Error(`Expected a 20-byte or 32-byte hex value, got ${bytes20Address.length} characters`)\n\t}\n\treturn `0x${bytes20Address.slice(2).padStart(64, \"0\")}` as HexString\n}\n\nexport function hexToString(hex: string): string {\n\tconst hexWithoutPrefix = hex.startsWith(\"0x\") ? hex.slice(2) : hex\n\n\tconst bytes = new Uint8Array(hexWithoutPrefix.length / 2)\n\tfor (let i = 0; i < hexWithoutPrefix.length; i += 2) {\n\t\tbytes[i / 2] = Number.parseInt(hexWithoutPrefix.slice(i, i + 2), 16)\n\t}\n\n\treturn new TextDecoder().decode(bytes)\n}\n\nexport function normalizeStateMachineId(stateMachineId: string): string {\n\treturn isHex(stateMachineId) ? hexToString(stateMachineId) : stateMachineId\n}\n\nexport function normalizeEvmChainId(chainId: number | string): { chainId: number; stateMachineId: string } {\n\tif (typeof chainId === \"number\") {\n\t\tif (!Number.isInteger(chainId) || chainId <= 0) {\n\t\t\tthrow new Error(`Invalid EVM chain ID: ${chainId}. Expected a positive integer.`)\n\t\t}\n\t\treturn { chainId, stateMachineId: `EVM-${chainId}` }\n\t}\n\n\tconst stateMachineId = normalizeStateMachineId(chainId)\n\tconst { stateId } = parseStateMachineId(stateMachineId)\n\tif (!stateId.Evm) {\n\t\tthrow new Error(`Unsupported chainId format: ${chainId}. Expected a number or EVM state machine ID.`)\n\t}\n\n\treturn { chainId: stateId.Evm, stateMachineId }\n}\n\nexport function encodeStateMachineId(stateMachineId: string): HexString {\n\treturn isHex(stateMachineId) ? (stateMachineId as HexString) : (toHex(stateMachineId) as HexString)\n}\n\nexport function normalizeAddressForEvmBytes32(address: string): HexString {\n\tif (address.length === 66) return address as HexString\n\treturn bytes20ToBytes32(address)\n}\n\nexport function normalizeAddressForStateMachine(address: string, stateMachineId: string): HexString {\n\treturn isEvmChain(normalizeStateMachineId(stateMachineId))\n\t\t? normalizeAddressForEvmBytes32(address)\n\t\t: (address as HexString)\n}\n\nexport const DEFAULT_LOGGER = createConsola({\n\tlevel: LogLevels.silent,\n})\n\n/**\n * Retries a promise-returning operation with exponential backoff.\n * This function will attempt to execute the operation up to maxRetries times,\n * with an exponential backoff delay between attempts.\n *\n * @param operation The async operation to retry\n * @param retryConfig Configuration object containing retry parameters\n * @returns Promise that resolves with the operation result or rejects with the last error\n */\nexport async function retryPromise<T>(operation: () => Promise<T>, retryConfig: RetryConfig): Promise<T> {\n\tconst { logger = DEFAULT_LOGGER, logMessage = \"Retry operation failed\" } = retryConfig\n\n\tlet lastError: unknown\n\tfor (let i = 0; i < retryConfig.maxRetries; i++) {\n\t\ttry {\n\t\t\treturn await operation()\n\t\t} catch (error) {\n\t\t\tlogger.trace(`Retrying(${i}) > ${logMessage}`)\n\t\t\tlastError = error\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, retryConfig.backoffMs * 2 ** i))\n\t\t}\n\t}\n\n\tthrow lastError\n}\n\n/**\n * Calculates the commitment hash for a get request.\n * @param get The get request to calculate the commitment hash for.\n * @returns The commitment hash.\n */\nexport function getRequestCommitment(get: IGetRequest): HexString {\n\tconst keysEncoding = \"0x\".concat(get.keys.map((key) => key.slice(2)).join(\"\"))\n\treturn keccak256(\n\t\tencodePacked(\n\t\t\t[\"bytes\", \"bytes\", \"uint64\", \"uint64\", \"uint64\", \"bytes\", \"bytes\", \"bytes\"],\n\t\t\t[\n\t\t\t\ttoHex(get.source),\n\t\t\t\ttoHex(get.dest),\n\t\t\t\tget.nonce,\n\t\t\t\tget.height,\n\t\t\t\tget.timeoutTimestamp,\n\t\t\t\tget.from,\n\t\t\t\tkeysEncoding as HexString,\n\t\t\t\tget.context,\n\t\t\t],\n\t\t),\n\t)\n}\n\n/**\n ** Calculates the weight of a request status.\n * Used to determine the progression of a request through its lifecycle.\n * Higher weights represent more advanced states in the processing pipeline.\n * @returns A record mapping each RequestStatus to its corresponding weight value.\n */\nexport const REQUEST_STATUS_WEIGHTS: Record<RequestStatusKey, number> = {\n\t[RequestStatus.SOURCE]: 0,\n\t[RequestStatus.SOURCE_FINALIZED]: 1,\n\t[RequestStatus.HYPERBRIDGE_DELIVERED]: 2,\n\t[RequestStatus.HYPERBRIDGE_FINALIZED]: 3,\n\t[RequestStatus.DESTINATION]: 4,\n\t[RequestStatus.HYPERBRIDGE_TIMED_OUT]: 5,\n\t[RequestStatus.TIMED_OUT]: 6,\n}\n\n/**\n * Calculates the weight of a timeout status.\n * Used to determine the progression of a timeout through its lifecycle.\n * Higher weights represent more advanced states in the timeout processing.\n * @returns A record mapping each TimeoutStatus to its corresponding weight value.\n */\nexport const TIMEOUT_STATUS_WEIGHTS: Record<TimeoutStatusKey, number> = {\n\t[TimeoutStatus.PENDING_TIMEOUT]: 1,\n\t[TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT]: 2,\n\t[TimeoutStatus.HYPERBRIDGE_TIMED_OUT]: 3,\n\t[TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT]: 4,\n\t[TimeoutStatus.TIMED_OUT]: 5,\n}\n\n/**\n * Combines both request and timeout status weights into a single mapping.\n * This provides a comprehensive view of all possible states a request can be in,\n * with higher weights representing more advanced states in either the normal\n * processing pipeline or the timeout handling process.\n *\n * The weights follow this progression:\n * 0-4: Normal request processing (SOURCE to DESTINATION)\n * 5-9: Timeout handling progression (PENDING_TIMEOUT to TIMED_OUT)\n *\n * @returns A record mapping each RequestStatus and TimeoutStatus to its corresponding weight value.\n */\nexport const COMBINED_STATUS_WEIGHTS: Record<RequestStatusKey | TimeoutStatusKey, number> = {\n\t[RequestStatus.SOURCE]: 0,\n\t[RequestStatus.SOURCE_FINALIZED]: 1,\n\t[RequestStatus.HYPERBRIDGE_DELIVERED]: 2,\n\t[RequestStatus.HYPERBRIDGE_FINALIZED]: 3,\n\t[RequestStatus.DESTINATION]: 4,\n\t[TimeoutStatus.PENDING_TIMEOUT]: 5,\n\t[TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT]: 6,\n\t[TimeoutStatus.HYPERBRIDGE_TIMED_OUT]: 7,\n\t[TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT]: 8,\n\t[TimeoutStatus.TIMED_OUT]: 9,\n}\n\n/**\n * Estimates the gas required for a post request transaction on the source chain.\n * This function constructs a post request, generates mock proofs, and estimates\n * the gas cost for executing the transaction on the source chain.\n */\nexport async function estimateGasForPost(params: {\n\tpostRequest: IPostRequest\n\tsourceClient: PublicClient\n\thostLatestStateMachineHeight: bigint\n\thostAddress: HexString\n}): Promise<{ gas_fee: bigint; call_data: EstimateGasCallData }> {\n\tconst hostParams = await params.sourceClient.readContract({\n\t\taddress: params.hostAddress,\n\t\tabi: evmHost.ABI,\n\t\tfunctionName: \"hostParams\",\n\t})\n\n\tconst { root, proof, index, treeSize } = await generateRootWithProof(params.postRequest, 2n ** 10n)\n\tconst latestStateMachineHeight = params.hostLatestStateMachineHeight\n\tconst overlayRootSlot = getStateCommitmentFieldSlot(\n\t\tBigInt(4009n), // Hyperbridge chain id\n\t\tlatestStateMachineHeight, // Hyperbridge chain height\n\t\t1, // For overlayRoot\n\t)\n\tconst postParams = {\n\t\theight: {\n\t\t\tstateMachineId: BigInt(4009n),\n\t\t\theight: latestStateMachineHeight,\n\t\t},\n\t\tmultiproof: proof,\n\t\tleafCount: treeSize,\n\t}\n\n\tconst call_data: EstimateGasCallData = [\n\t\tparams.hostAddress,\n\t\t{\n\t\t\tproof: postParams,\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\trequest: {\n\t\t\t\t\t\t...params.postRequest,\n\t\t\t\t\t\tsource: toHex(params.postRequest.source),\n\t\t\t\t\t\tdest: toHex(params.postRequest.dest),\n\t\t\t\t\t},\n\t\t\t\t\tindex,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]\n\n\tconst gas_fee = await params.sourceClient.estimateContractGas({\n\t\taddress: hostParams.handler,\n\t\tabi: handler.ABI,\n\t\tfunctionName: \"handlePostRequests\",\n\t\targs: call_data,\n\t\tstateOverride: [\n\t\t\t{\n\t\t\t\taddress: params.hostAddress,\n\t\t\t\tstateDiff: [\n\t\t\t\t\t{\n\t\t\t\t\t\tslot: overlayRootSlot,\n\t\t\t\t\t\tvalue: root,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t})\n\n\treturn { gas_fee, call_data }\n}\n\n/**\n * ABI-encodes a WithdrawalRequest (commitment + beneficiary + tokens).\n * Used as the GET-request context for cancel-from-source, and as the inner\n * payload (after the RequestKind prefix) for POST-based escrow operations.\n */\nexport function encodeWithdrawalRequest(order: Order | Order, beneficiary: HexString): HexString {\n\treturn encodeAbiParameters(\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"requestBody\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"commitment\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"beneficiary\", type: \"bytes32\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"tokens\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"token\", type: \"bytes32\" },\n\t\t\t\t\t\t\t{ name: \"amount\", type: \"uint256\" },\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\t[\n\t\t\t{\n\t\t\t\tcommitment: order.id as HexString,\n\t\t\t\tbeneficiary: bytes20ToBytes32(beneficiary),\n\t\t\t\ttokens: order.inputs.map((token) => ({\n\t\t\t\t\t...token,\n\t\t\t\t\ttoken: normalizeAddressForEvmBytes32(token.token),\n\t\t\t\t})),\n\t\t\t},\n\t\t],\n\t) as HexString\n}\n\nfunction constructEscrowRequestBody(kind: RequestKind, order: Order | Order, beneficiary: HexString): HexString {\n\tconst requestKind = encodePacked([\"uint8\"], [kind])\n\treturn concatHex([requestKind, encodeWithdrawalRequest(order, beneficiary)]) as HexString\n}\n\n/**\n * Constructs the request body for a redeem escrow operation.\n * This function encodes the order commitment, beneficiary address, and token inputs\n * to match the format expected by the IntentGateway contract.\n */\nexport function constructRedeemEscrowRequestBody(order: Order | Order, beneficiary: HexString): HexString {\n\treturn constructEscrowRequestBody(RequestKind.RedeemEscrow, order, beneficiary)\n}\n\n/**\n * Constructs the request body for a refund escrow operation (cancel from destination).\n * Uses RequestKind.RefundEscrow to match the IntentGatewayV2 contract's _cancelFromDest.\n */\nexport function constructRefundEscrowRequestBody(order: Order | Order, beneficiary: HexString): HexString {\n\treturn constructEscrowRequestBody(RequestKind.RefundEscrow, order, beneficiary)\n}\n\nexport const normalizeTimestamp = (timestamp: bigint): bigint => {\n\tif (timestamp.toString().length <= 11) {\n\t\treturn timestamp * 1000n\n\t}\n\treturn timestamp\n}\n\n/// Convert ensure a date string is in iso format before getting it's timestamp\nexport const dateStringtoTimestamp = (date: string): number => {\n\tif (!date.endsWith(\"Z\")) {\n\t\tdate = `${date}Z`\n\t}\n\treturn new Date(date).getTime()\n}\n\nconst CHAIN_ID_TO_COINGECKO_NATIVE: Record<number, string> = {\n\t1: \"weth\",\n\t11155111: \"weth\",\n\t42161: \"weth\",\n\t8453: \"weth\",\n\t130: \"weth\",\n\t10200: \"dai\",\n\t56: \"wbnb\",\n\t97: \"wbnb\",\n\t137: \"polygon-ecosystem-token\",\n\t80002: \"polygon-ecosystem-token\",\n\t3448148188: \"tron\",\n}\n\n/**\n * Maps testnet identifiers to mainnet identifiers for price lookup.\n * When `identifier` is undefined, falls back to the chain's native token\n * using `chainId`.\n *\n * @param identifier - The original token identifier (symbol or contract address)\n * @param chainId - Numeric EVM chain ID, used as fallback when identifier is undefined\n * @returns The mapped mainnet identifier\n */\nexport function mapToValidCoingeckoId(identifier: string | undefined, chainId?: number): string {\n\tif (!identifier) {\n\t\tif (chainId != null && CHAIN_ID_TO_COINGECKO_NATIVE[chainId]) {\n\t\t\treturn CHAIN_ID_TO_COINGECKO_NATIVE[chainId]\n\t\t}\n\t\tthrow new Error(`Cannot resolve coingecko id: identifier is undefined and chainId ${chainId} is not mapped`)\n\t}\n\n\tidentifier = identifier.toLowerCase()\n\n\tswitch (identifier) {\n\t\tcase \"bnb\":\n\t\t\treturn \"wbnb\"\n\t\tcase \"eth\":\n\t\t\treturn \"weth\"\n\t\tcase \"tbnb\":\n\t\t\treturn \"wbnb\"\n\t\tcase \"0xc043f483373072f7f27420d6e7d7ad269c018e18\".toLowerCase():\n\t\t\treturn \"dai\"\n\t\tcase \"0xae13d989dac2f0debff460ac112a837c89baa7cd\".toLowerCase():\n\t\t\treturn \"wbnb\"\n\t\tcase \"0x1938165569a5463327fb206be06d8d9253aa06b7\".toLowerCase():\n\t\t\treturn \"dai\"\n\t\tcase \"0xc625ec7d30a4b1aaefb1304610cdacd0d606ac92\".toLowerCase():\n\t\t\treturn \"dai\"\n\t\tcase \"0x50b1d3c7c073c9caa1ef207365a2c9c976bd70b9\".toLowerCase():\n\t\t\treturn \"dai\"\n\t\tcase \"0xa801da100bf16d07f668f4a49e1f71fc54d05177\".toLowerCase():\n\t\t\treturn \"dai\"\n\t\tcase \"pol\":\n\t\t\treturn \"polygon-ecosystem-token\"\n\t\tcase \"trx\":\n\t\t\treturn \"tron\"\n\n\t\tdefault:\n\t\t\treturn identifier\n\t}\n}\n\nexport async function fetchPrice(identifier: string | undefined, chainId = 1, apiKey?: string): Promise<number> {\n\tconst mappedIdentifier = mapToValidCoingeckoId(identifier, chainId)\n\n\tconst network = new ChainConfigService().getCoingeckoId(`EVM-${chainId}`) || \"ethereum\"\n\n\tapiKey = apiKey || (typeof process !== \"undefined\" ? (process as any)?.env?.COINGECKO : undefined)\n\tconst baseUrl = apiKey ? \"https://pro-api.coingecko.com/api/v3\" : \"https://api.coingecko.com/api/v3\"\n\n\tconst url = mappedIdentifier.startsWith(\"0x\")\n\t\t? `${baseUrl}/simple/token_price/${network}?contract_addresses=${mappedIdentifier}&vs_currencies=usd`\n\t\t: `${baseUrl}/simple/price?ids=${mappedIdentifier}&vs_currencies=usd`\n\n\tconst headers = apiKey ? { \"x-cg-pro-api-key\": apiKey as string } : undefined\n\n\tconst response = await fetch(url, { headers })\n\n\tif (!response.ok) {\n\t\tthrow new Error(`CoinGecko API error: ${response.status} ${response.statusText}`)\n\t}\n\n\tconst data = await response.json()\n\tconst key = mappedIdentifier.toLowerCase()\n\n\tif (!data[key]?.usd) {\n\t\tthrow new Error(`Price not found for token: ${mappedIdentifier} on ${network}`)\n\t}\n\n\treturn data[key].usd\n}\n\n/**\n * Fetches the current network gas price from an Etherscan-family explorer API.\n * Returns the ProposeGasPrice (in gwei) converted to wei as bigint.\n */\nexport async function getGasPriceFromEtherscan(chainId: string, apiKey?: string): Promise<bigint> {\n\tlet parsedChainId = Number(chainId.split(\"-\")[1])\n\tconst url = apiKey\n\t\t? `https://api.etherscan.io/v2/api?chainid=${parsedChainId}&module=gastracker&action=gasoracle&apikey=${apiKey}`\n\t\t: `https://api.etherscan.io/v2/api?chainid=${parsedChainId}&module=gastracker&action=gasoracle`\n\tconst response = await fetch(url)\n\tconst data = await response.json()\n\treturn gweiToWei(data.result.ProposeGasPrice)\n}\n\n/**\n * Converts a decimal gwei string to wei bigint without floating point errors.\n */\nfunction gweiToWei(gwei: string): bigint {\n\tif (!gwei || typeof gwei !== \"string\") {\n\t\tthrow new Error(`Invalid gwei value: ${gwei}`)\n\t}\n\tconst [intPart, fracPartRaw] = gwei.split(\".\")\n\tconst fracPart = (fracPartRaw || \"\").slice(0, 9) // up to 9 decimal places for gwei->wei\n\tconst fracPadded = fracPart.padEnd(9, \"0\")\n\tconst whole = BigInt(intPart || \"0\") * 1_000_000_000n\n\tconst fractional = BigInt(fracPadded || \"0\")\n\treturn whole + fractional\n}\n\n/**\n * ERC20 method signatures used for storage slot detection\n */\nexport enum ERC20Method {\n\t/** ERC20 balanceOf(address) method signature */\n\tBALANCE_OF = \"0x70a08231\",\n\t/** ERC20 allowance(address,address) method signature */\n\tALLOWANCE = \"0xdd62ed3e\",\n}\n\nexport enum EvmLanguage {\n\tSolidity,\n\tVyper,\n}\n\nexport enum UniversalRouterCommands {\n\tWRAP_ETH = 0x0b,\n\tUNWRAP_WETH = 0x0c,\n\tV2_SWAP_EXACT_IN = 0x08,\n\tV2_SWAP_EXACT_OUT = 0x09,\n\tV3_SWAP_EXACT_IN = 0x00,\n\tV3_SWAP_EXACT_OUT = 0x01,\n\tV4_SWAP = 0x10,\n\tV4_SWAP_EXACT_IN_SINGLE = 0x06,\n\tV4_SWAP_EXACT_OUT_SINGLE = 0x08,\n\tSETTLE_ALL = 0x0c,\n\tTAKE_ALL = 0x0f,\n}\n\n/**\n * Shape of a call in the debug call tracer response.\n */\ninterface CallTracerCall {\n\tfrom: string\n\tto: string\n\tgas?: string\n\tgasUsed?: string\n\tinput: string\n\toutput?: string\n\tvalue?: string\n\ttype?: string\n\tcalls?: CallTracerCall[]\n}\n\n/**\n * Retrieves the storage slot for a contract call using debug_traceCall\n *\n * This function uses the Ethereum debug API to trace contract execution and identify\n * the storage slot accessed during the call. It's commonly used for ERC20 token state\n * mappings like balanceOf and allowance, but can work with any contract call that\n * performs SLOAD operations.\n *\n * @param client - The viem PublicClient instance connected to an RPC node with debug API enabled\n * @param tokenAddress - The address of the contract to trace\n * @param data - The full encoded function call data (method signature + encoded parameters)\n * @returns The storage slot as a hex string\n * @throws Error if the storage slot cannot be found or if debug API is not available\n *\n * @example\n * ```ts\n * import { ERC20Method, bytes20ToBytes32 } from '@hyperbridge/sdk'\n *\n * // Get balance storage slot for ERC20\n * const balanceData = ERC20Method.BALANCE_OF + bytes20ToBytes32(userAddress).slice(2)\n * const balanceSlot = await getStorageSlot(\n * client,\n * tokenAddress,\n * balanceData as HexString\n * )\n *\n * // Get allowance storage slot for ERC20\n * const allowanceData = ERC20Method.ALLOWANCE +\n * bytes20ToBytes32(ownerAddress).slice(2) +\n * bytes20ToBytes32(spenderAddress).slice(2)\n * const allowanceSlot = await getStorageSlot(\n * client,\n * tokenAddress,\n * allowanceData as HexString\n * )\n * ```\n */\nexport async function getStorageSlot(\n\tclient: PublicClient,\n\tcontractAddress: HexString,\n\tdata: HexString,\n): Promise<string> {\n\t// Default tracer (struct logger)\n\tasync function tryDefaultTracer(): Promise<string> {\n\t\tconst traceCallClient = client.extend((client) => ({\n\t\t\tasync traceCall(args: CallParameters) {\n\t\t\t\treturn client.request({\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tmethod: \"debug_traceCall\",\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tparams: [args, \"latest\", {}],\n\t\t\t\t})\n\t\t\t},\n\t\t}))\n\n\t\tconst response = await traceCallClient.traceCall({\n\t\t\tto: contractAddress,\n\t\t\tdata: data,\n\t\t})\n\n\t\tconst methodSignature = data.slice(0, 10) as HexString\n\t\t// @ts-ignore\n\t\tconst logs = response.structLogs\n\n\t\tif (!logs || logs.length === 0) {\n\t\t\tthrow new Error(\"No struct logs found\")\n\t\t}\n\n\t\tfor (let i = logs.length - 1; i >= 0; i--) {\n\t\t\tconst log = logs[i]\n\t\t\tif (log.op === \"SLOAD\" && log.stack?.length >= 3) {\n\t\t\t\tconst sigHash = log.stack[0]\n\t\t\t\tconst slotHex = log.stack[log.stack.length - 1]\n\t\t\t\t// Extract method signature from data (first 4 bytes)\n\t\t\t\tif (sigHash === methodSignature && slotHex.length === 66) {\n\t\t\t\t\treturn slotHex\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(`Storage slot not found for data: ${methodSignature}`)\n\t}\n\n\t// prestateTracer\n\tasync function tryPrestateTracer(): Promise<string> {\n\t\tconst traceCallClient = client.extend((client) => ({\n\t\t\tasync traceCall(args: CallParameters) {\n\t\t\t\treturn client.request({\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tmethod: \"debug_traceCall\",\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tparams: [\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\targs,\n\t\t\t\t\t\t\"latest\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttracer: \"prestateTracer\",\n\t\t\t\t\t\t\ttracerConfig: {\n\t\t\t\t\t\t\t\tdisableCode: true,\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\n\t\tconst response = await traceCallClient.traceCall({\n\t\t\tto: contractAddress,\n\t\t\tdata: data,\n\t\t})\n\n\t\t// @ts-ignore\n\t\tlet contractData = response[contractAddress.toLowerCase()]\n\n\t\tif (!contractData) {\n\t\t\t// @ts-ignore\n\t\t\tconst addressKey = Object.keys(response).find(\n\t\t\t\t(addr) => addr.toLowerCase() === contractAddress.toLowerCase(),\n\t\t\t)\n\t\t\tif (addressKey) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tcontractData = response[addressKey]\n\t\t\t}\n\t\t}\n\n\t\tif (!contractData || !contractData.storage) {\n\t\t\tthrow new Error(`No storage access found for contract ${contractAddress} with data: ${data}`)\n\t\t}\n\n\t\tlet storageSlots = Object.keys(contractData.storage)\n\n\t\tconst PROXY_SLOTS = [\n\t\t\t\"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\", // EIP-1967 implementation\n\t\t\t\"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\", // EIP-1967 beacon\n\t\t\t\"0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50\", // EIP-1967 admin\n\t\t]\n\n\t\tstorageSlots = storageSlots.filter((slot) => !PROXY_SLOTS.includes(slot))\n\n\t\tif (storageSlots.length === 0) {\n\t\t\tthrow new Error(`No storage slots accessed for contract ${contractAddress} with data: ${data}`)\n\t\t}\n\n\t\tif (storageSlots.length === 1) {\n\t\t\treturn storageSlots[0] as HexString\n\t\t}\n\n\t\treturn storageSlots[storageSlots.length - 1] as HexString\n\t}\n\n\treturn tryDefaultTracer().catch(() => tryPrestateTracer())\n}\n\nexport function getRecordedStorageSlot(\n\tchain: string,\n\tcontractAddress: HexString,\n\tdata: HexString,\n): HexString | undefined {\n\tconst methodSignature = data.slice(0, 10)\n\n\tconst configService = new ChainConfigService()\n\n\tconst baseSlots = configService.getTokenStorageSlots(chain, contractAddress)\n\tif (!baseSlots) return undefined\n\n\t// If both slots are 0, treat as unknown (placeholder for tokens like DAI)\n\tif (baseSlots.balanceSlot === 0 && baseSlots.allowanceSlot === 0) return undefined\n\n\tif (methodSignature === ERC20Method.BALANCE_OF) {\n\t\t// Extract holder address from data\n\t\t// Format: 0x70a08231 + 32-byte padded address\n\t\t// The actual address is the last 40 hex chars (20 bytes) of the 32-byte param\n\t\tconst holderAddress = `0x${data.slice(34, 74)}` as HexString\n\t\tconst baseSlot = BigInt(baseSlots.balanceSlot)\n\t\treturn calculateBalanceMappingLocation(baseSlot, holderAddress, EvmLanguage.Solidity)\n\t} else if (methodSignature === ERC20Method.ALLOWANCE) {\n\t\t// Extract owner and spender addresses from data\n\t\t// Format: 0xdd62ed3e + 32-byte padded owner + 32-byte padded spender\n\t\tconst ownerAddress = `0x${data.slice(34, 74)}` as HexString\n\t\tconst spenderAddress = `0x${data.slice(98, 138)}` as HexString\n\t\tconst baseSlot = BigInt(baseSlots.allowanceSlot)\n\t\treturn calculateAllowanceMappingLocation(baseSlot, ownerAddress, spenderAddress, EvmLanguage.Solidity)\n\t}\n\n\treturn undefined\n}\n\n/**\n * Returns the storage slot for an ERC20 `balanceOf` or `allowance` call,\n * first checking the recorded slot cache and falling back to an RPC trace\n * call via `getStorageSlot` when no cached slot is available.\n *\n * @param client - The viem PublicClient to use for the RPC trace fallback\n * @param chain - The chain identifier (e.g. \"EVM-1\")\n * @param contractAddress - The ERC20 token contract address\n * @param data - The ABI-encoded call data (method selector + padded args)\n * @returns The storage slot as a hex string, or undefined if not found\n */\nexport async function getOrFetchStorageSlot(\n\tclient: PublicClient,\n\tchain: string,\n\tcontractAddress: HexString,\n\tdata: HexString,\n): Promise<HexString | undefined> {\n\tconst recorded = getRecordedStorageSlot(chain, contractAddress, data)\n\tif (recorded) return recorded\n\treturn (await getStorageSlot(client, contractAddress, data)) as HexString\n}\n\n/**\n * Adjusts fee amounts between different decimal precisions.\n * Handles scaling up or down based on the decimal difference.\n *\n * @param feeInFeeToken - The fee amount to adjust\n * @param fromDecimals - The current decimal precision\n * @param toDecimals - The target decimal precision\n * @returns The adjusted fee amount with the target decimal precision\n */\nexport function adjustDecimals(feeInFeeToken: bigint, fromDecimals: number, toDecimals: number): bigint {\n\tif (fromDecimals === toDecimals) return feeInFeeToken\n\tif (fromDecimals < toDecimals) {\n\t\tconst scaleFactor = BigInt(10 ** (toDecimals - fromDecimals))\n\t\treturn feeInFeeToken * scaleFactor\n\t} else {\n\t\tconst scaleFactor = BigInt(10 ** (fromDecimals - toDecimals))\n\t\treturn (feeInFeeToken + scaleFactor - 1n) / scaleFactor\n\t}\n}\n\n/**\n * Chains that should prefer the Etherscan API for gas price lookup\n */\nexport const USE_ETHERSCAN_CHAINS = new Set([\"EVM-137\", \"EVM-56\", \"EVM-1\"])\n\n/**\n * Testnet chains\n */\nexport const TESTNET_CHAINS = new Set([\"EVM-10200\", \"EVM-97\"])\n\n/**\n * Recursively searches through call tracer response to find a call matching the target contract address.\n * Searches only in nested calls; the top-level call should be handled by the caller.\n * @param call The call object to search\n * @param targetContractAddress The target contract address to find\n * @returns The input (calldata) if found, null otherwise\n */\nfunction findCallInputByAddress(call: CallTracerCall, targetContractAddress: string): string | null {\n\tconst normalizedTarget = targetContractAddress.toLowerCase()\n\n\tif (call.calls && Array.isArray(call.calls)) {\n\t\tfor (const nestedCall of call.calls) {\n\t\t\tif (nestedCall.to.toLowerCase() === normalizedTarget) {\n\t\t\t\treturn nestedCall.input\n\t\t\t}\n\t\t\tconst result = findCallInputByAddress(nestedCall, targetContractAddress)\n\t\t\tif (result !== null) {\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null\n}\n\n/**\n * Retrieves the calldata used to call a target contract within a transaction using debug_traceTransaction\n * with the callTracer. Unlike the indexer helper, this returns the calldata whether the target is called\n * directly by the transaction or via nested calls.\n *\n * @param client - viem PublicClient connected to an RPC node with debug API enabled\n * @param txHash - The transaction hash\n * @param targetContractAddress - The target contract address to find the call for\n * @returns The input (calldata) as a hex string, or null if the target is not found in the trace\n * @throws Error if the RPC call fails or returns an unexpected response\n */\nexport async function getContractCallInput(\n\tclient: PublicClient,\n\ttxHash: HexString,\n\ttargetContractAddress: string,\n): Promise<HexString | null> {\n\tconst traceClient = client.extend((client) => ({\n\t\tasync traceTransaction(hash: HexString): Promise<CallTracerCall> {\n\t\t\t// Cast to any to bypass viem's strict RPC method typing for debug_* methods\n\t\t\tconst debugClient: any = client\n\t\t\treturn debugClient.request({\n\t\t\t\tmethod: \"debug_traceTransaction\",\n\t\t\t\tparams: [\n\t\t\t\t\thash,\n\t\t\t\t\t{\n\t\t\t\t\t\ttracer: \"callTracer\",\n\t\t\t\t\t\ttracerConfig: {\n\t\t\t\t\t\t\tdisableCode: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}) as Promise<CallTracerCall>\n\t\t},\n\t}))\n\n\tconst trace = await traceClient.traceTransaction(txHash)\n\n\tif (!trace) {\n\t\tthrow new Error(\"Unexpected response: No result found in debug_traceTransaction response\")\n\t}\n\n\tconst normalizedTarget = targetContractAddress.toLowerCase()\n\n\t// If the top-level transaction directly calls the target contract, return its input\n\tif (trace.to.toLowerCase() === normalizedTarget) {\n\t\treturn trace.input as HexString\n\t}\n\n\t// Otherwise search for the target contract in nested calls\n\tconst input = findCallInputByAddress(trace, targetContractAddress)\n\n\treturn input ? (input as HexString) : null\n}\n\n/**\n * Replace Websocket with HTTP is a function that replaces a websocket URL with an HTTP URL.\n * @param url The URL to replace\n */\nexport function replaceWebsocketWithHttp(url: string): string {\n\tif (url.startsWith(\"ws://\")) {\n\t\treturn url.replace(\"ws://\", \"http://\")\n\t} else if (url.startsWith(\"wss://\")) {\n\t\treturn url.replace(\"wss://\", \"https://\")\n\t}\n\treturn url\n}\n\n/**\n * Calculates the balance mapping location for a given slot and holder address.\n * This function handles the different encoding formats used by Solidity and Vyper.\n *\n * @param slot - The slot number to calculate the mapping location for.\n * @param holder - The address of the holder to calculate the mapping location for.\n * @param language - The language of the contract.\n * @returns The balance mapping location as a HexString.\n */\nexport function calculateBalanceMappingLocation(slot: bigint, holder: string, language: EvmLanguage): HexString {\n\tconst holderBytes = bytes20ToBytes32(holder)\n\tconst slotBytes = `0x${slot.toString(16).padStart(64, \"0\")}` as HexString\n\n\tif (language === EvmLanguage.Solidity) {\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters([{ type: \"bytes32\" }, { type: \"bytes32\" }], [holderBytes, slotBytes]) as HexString,\n\t\t)\n\t} else {\n\t\t// Vyper uses reverse order\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters([{ type: \"bytes32\" }, { type: \"bytes32\" }], [slotBytes, holderBytes]) as HexString,\n\t\t)\n\t}\n}\n\n/**\n * Calculates the allowance mapping location for a given slot, owner, and spender.\n * ERC20 allowance is a nested mapping: mapping(address owner => mapping(address spender => uint256))\n *\n * @param slot - The base slot number for the allowance mapping\n * @param owner - The address of the token owner (first parameter in allowance(owner, spender))\n * @param spender - The address approved to spend tokens (second parameter)\n * @param language - The language of the contract (Solidity or Vyper)\n * @returns The allowance mapping location as a HexString\n */\nexport function calculateAllowanceMappingLocation(\n\tslot: bigint,\n\towner: string,\n\tspender: string,\n\tlanguage: EvmLanguage,\n): HexString {\n\tconst ownerBytes = bytes20ToBytes32(owner)\n\tconst spenderBytes = bytes20ToBytes32(spender)\n\tconst slotBytes = `0x${slot.toString(16).padStart(64, \"0\")}` as HexString\n\n\tif (language === EvmLanguage.Solidity) {\n\t\t// For mapping(address => mapping(address => uint256)):\n\t\t// Step 1: keccak256(abi.encode(owner, slot)) -> gives inner mapping location\n\t\tconst innerMappingSlot = keccak256(\n\t\t\tencodeAbiParameters([{ type: \"bytes32\" }, { type: \"bytes32\" }], [ownerBytes, slotBytes]) as HexString,\n\t\t)\n\n\t\t// Step 2: keccak256(abi.encode(spender, innerMappingSlot)) -> gives final storage location\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[{ type: \"bytes32\" }, { type: \"bytes32\" }],\n\t\t\t\t[spenderBytes, innerMappingSlot],\n\t\t\t) as HexString,\n\t\t)\n\t} else {\n\t\t// Vyper uses reverse order: keccak256(slot, owner) then keccak256(innerSlot, spender)\n\t\tconst innerMappingSlot = keccak256(\n\t\t\tencodeAbiParameters([{ type: \"bytes32\" }, { type: \"bytes32\" }], [slotBytes, ownerBytes]) as HexString,\n\t\t)\n\n\t\treturn keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[{ type: \"bytes32\" }, { type: \"bytes32\" }],\n\t\t\t\t[innerMappingSlot, spenderBytes],\n\t\t\t) as HexString,\n\t\t)\n\t}\n}\n","import { isNil } from \"lodash-es\"\n\nimport type { IChain } from \"@/chain\"\nimport { type RequestStatusWithMetadata, type RetryConfig, TimeoutStatus } from \"@/types\"\nimport { retryPromise, sleep } from \"@/utils\"\nimport { AbortSignalInternal } from \"@/utils/exceptions\"\n\nimport type { ClientContext } from \".\"\n\n/**\n * Executes an async operation with exponential backoff retry, using the context's\n * default retry config as the base and letting callers override individual fields.\n */\nexport async function withRetry<T>(\n\tctx: ClientContext,\n\toperation: () => Promise<T>,\n\toverrides: Partial<RetryConfig> = {},\n): Promise<T> {\n\treturn retryPromise(operation, { ...ctx.defaultRetryConfig, ...overrides })\n}\n\n/**\n * Sleeps for `duration` ms, logging a trace line.\n */\nexport function sleepFor(ctx: ClientContext, duration: number): Promise<void> {\n\tctx.logger.trace(`Sleeping for ${duration}ms`)\n\treturn sleep(duration)\n}\n\n/**\n * Sleeps for one poll interval.\n */\nexport function sleepForInterval(ctx: ClientContext): Promise<void> {\n\treturn sleepFor(ctx, ctx.config.pollInterval)\n}\n\n/**\n * Shared watcher used by both POST and GET status streams: yields a single\n * `PENDING_TIMEOUT` event once `chain.timestamp()` passes `timeoutTimestamp`.\n * Yields nothing if `timeoutTimestamp === 0n` (no timeout configured).\n */\nexport async function* timeoutStream(\n\tctx: ClientContext,\n\ttimeoutTimestamp: bigint,\n\tchain: IChain,\n): AsyncGenerator<RequestStatusWithMetadata, void> {\n\tconst logger = ctx.logger.withTag(\"[timeoutStream()]\")\n\tif (timeoutTimestamp === 0n) return\n\n\tlet timestamp = await chain.timestamp()\n\twhile (timestamp < timeoutTimestamp) {\n\t\tlogger.trace(\"Comparing timeout timestamps\", { control: timeoutTimestamp, latest: timestamp })\n\t\tconst diff = BigInt(timeoutTimestamp) - BigInt(timestamp)\n\t\tawait sleepFor(ctx, Number(diff))\n\t\ttimestamp = await chain.timestamp()\n\t}\n\n\tyield {\n\t\tstatus: TimeoutStatus.PENDING_TIMEOUT,\n\t\tmetadata: { blockHash: \"0x\", blockNumber: 0, transactionHash: \"0x\" },\n\t}\n}\n\n/**\n * Repeatedly invokes `params.promise()` with `params.predicate` (default: `isNil`)\n * deciding when to keep waiting. Throws {@link AbortSignalInternal} if the signal\n * trips. Returns the first value for which `predicate` is false.\n */\nexport async function waitOrAbort<T>(\n\tctx: ClientContext,\n\tparams: {\n\t\tsignal: AbortSignal\n\t\tpromise: () => Promise<T>\n\t\tpredicate?: (value: T) => boolean\n\t},\n): Promise<NonNullable<T>> {\n\tconst { predicate = (value) => isNil(value) } = params\n\n\tconst assertNotAborted = () => {\n\t\tif (params.signal.aborted) {\n\t\t\tthrow new AbortSignalInternal(\"Terminated request in 'waitOrAbort'\")\n\t\t}\n\t}\n\n\twhile (true) {\n\t\tassertNotAborted()\n\t\tawait sleepForInterval(ctx)\n\t\tassertNotAborted()\n\t\tconst value = await params.promise()\n\t\tassertNotAborted()\n\n\t\tif (predicate(value)) continue\n\t\treturn value as NonNullable<T>\n\t}\n}\n","import { maxBy } from \"lodash-es\"\nimport { pad } from \"viem\"\n\n// @ts-ignore\nimport mergeRace from \"@async-generator/merge-race\"\n\nimport type { SubstrateChain } from \"@/chain\"\nimport { EvmChain } from \"@/chains/evm\"\nimport {\n\ttype GetRequestWithStatus,\n\ttype HexString,\n\ttype RequestStatusKey,\n\ttype RequestStatusWithMetadata,\n\ttype ResponseCommitmentWithValues,\n\tRequestStatus,\n} from \"@/types\"\nimport { COMBINED_STATUS_WEIGHTS, REQUEST_STATUS_WEIGHTS } from \"@/utils\"\nimport { AbortSignalInternal } from \"@/utils/exceptions\"\n\nimport type { Queries } from \"./Queries\"\nimport type { ClientContext } from \".\"\nimport { timeoutStream, waitOrAbort } from \"./utils\"\n\n/**\n * GET request status tracking — snapshot + streaming flows. Responses travel\n * back to the origin chain, so finality work happens against `source` rather\n * than `dest`.\n */\nexport class GetRequestClient {\n\tprivate readonly logger\n\n\tconstructor(\n\t\tprivate readonly ctx: ClientContext,\n\t\tprivate readonly queries: Queries,\n\t) {\n\t\tthis.logger = ctx.logger.withTag(\"[GetRequestClient]\")\n\t}\n\n\t/**\n\t * Enhances a GET request with finality events (`SOURCE_FINALIZED`,\n\t * `HYPERBRIDGE_FINALIZED`).\n\t */\n\tasync addGetRequestFinalityEvents(request: GetRequestWithStatus): Promise<GetRequestWithStatus> {\n\t\tconst events: RequestStatusWithMetadata[] = []\n\n\t\tconst commit = () => {\n\t\t\tthis.logger.trace(`Added ${events.length} 'GetRequest' finality events`, events)\n\t\t\trequest.statuses = [...request.statuses, ...events]\n\t\t\treturn request\n\t\t}\n\n\t\tlet hyperbridgeDelivered: RequestStatusWithMetadata | undefined\n\n\t\tif (request.source === this.ctx.config.hyperbridge.config.stateMachineId) {\n\t\t\thyperbridgeDelivered = request.statuses[0]\n\t\t\treturn commit()\n\t\t}\n\n\t\tconst sourceFinality = await this.queries.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: request.source,\n\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t})\n\t\tif (!sourceFinality) return commit()\n\n\t\tevents.push({\n\t\t\tstatus: RequestStatus.SOURCE_FINALIZED,\n\t\t\tmetadata: {\n\t\t\t\tblockHash: sourceFinality.blockHash,\n\t\t\t\tblockNumber: sourceFinality.height,\n\t\t\t\ttransactionHash: sourceFinality.transactionHash,\n\t\t\t\ttimestamp: sourceFinality.timestamp,\n\t\t\t},\n\t\t})\n\n\t\thyperbridgeDelivered = request.statuses.find((item) => item.status === RequestStatus.HYPERBRIDGE_DELIVERED)\n\t\tif (!hyperbridgeDelivered) return commit()\n\n\t\ttry {\n\t\t\tconst response = await this.queries.queryResponseByRequestId(request.commitment)\n\t\t\tif (!response) return commit()\n\n\t\t\tconst finalized = await this.buildFinalized(request, hyperbridgeDelivered, response)\n\t\t\tif (finalized) events.push(finalized)\n\t\t} catch (error) {\n\t\t\tthis.logger.trace(\"Could not generate HYPERBRIDGE_FINALIZED event for GET request:\", error)\n\t\t}\n\n\t\treturn commit()\n\t}\n\n\t/**\n\t * Snapshot query with all inferred finality events sorted.\n\t */\n\tasync queryGetRequestWithStatus(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\tlet request = await this.queries.queryGetRequest(hash)\n\t\tif (!request) return\n\n\t\trequest = await this.addGetRequestFinalityEvents(request)\n\n\t\trequest.statuses = request.statuses.sort(\n\t\t\t(a, b) => COMBINED_STATUS_WEIGHTS[a.status] - COMBINED_STATUS_WEIGHTS[b.status],\n\t\t)\n\t\treturn request\n\t}\n\n\t/**\n\t * Streaming status updates for a GET request. Ends when the request reaches\n\t * the destination or a timeout becomes pending.\n\t */\n\tasync *getRequestStatusStream(hash: HexString): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tconst controller = new AbortController()\n\t\ttry {\n\t\t\tconst request = await waitOrAbort(this.ctx, {\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tpromise: () => this.queries.queryGetRequest(hash),\n\t\t\t})\n\n\t\t\tconst chain = this.ctx.config.dest\n\t\t\tconst timeouts =\n\t\t\t\trequest.timeoutTimestamp > 0n ? timeoutStream(this.ctx, request.timeoutTimestamp, chain) : undefined\n\t\t\tconst statusStream = this.streamInternal(hash, controller.signal)\n\t\t\tconst combined = timeouts ? mergeRace(timeouts, statusStream) : statusStream\n\n\t\t\tlet item = await combined.next()\n\t\t\twhile (!item.done) {\n\t\t\t\tyield item.value\n\t\t\t\titem = await combined.next()\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) throw error\n\t\t}\n\t\tcontroller.abort()\n\t}\n\n\tprivate async *streamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tlet request = await waitOrAbort(this.ctx, { signal, promise: () => this.queries.queryGetRequest(hash) })\n\n\t\tlet status: RequestStatusKey | undefined =\n\t\t\trequest.source === this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t? RequestStatus.HYPERBRIDGE_DELIVERED\n\t\t\t\t: RequestStatus.SOURCE\n\n\t\tconst latestMetadata = request.statuses[request.statuses.length - 1]\n\t\tstatus = maxBy([status, latestMetadata.status as RequestStatusKey], (item) => REQUEST_STATUS_WEIGHTS[item])\n\t\tif (!status) return\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\tcase RequestStatus.SOURCE: {\n\t\t\t\t\tconst sourceUpdate = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.queries.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\tstatemachineId: request.source,\n\t\t\t\t\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\t\t\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: RequestStatus.SOURCE_FINALIZED,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: sourceUpdate.blockHash,\n\t\t\t\t\t\t\tblockNumber: sourceUpdate.height,\n\t\t\t\t\t\t\ttransactionHash: sourceUpdate.transactionHash,\n\t\t\t\t\t\t\ttimestamp: sourceUpdate.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = RequestStatus.SOURCE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\trequest = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queries.queryGetRequest(hash),\n\t\t\t\t\t\tpredicate: (r) => !r || r.statuses.length < 2,\n\t\t\t\t\t})\n\n\t\t\t\t\tstatus =\n\t\t\t\t\t\trequest.source === this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t\t\t\t? RequestStatus.DESTINATION\n\t\t\t\t\t\t\t: RequestStatus.HYPERBRIDGE_DELIVERED\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: request.statuses[1].metadata.blockHash,\n\t\t\t\t\t\t\tblockNumber: request.statuses[1].metadata.blockNumber,\n\t\t\t\t\t\t\ttransactionHash: request.statuses[1].metadata.transactionHash,\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttimestamp: request.statuses[1].metadata.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED: {\n\t\t\t\t\tif (request.source === this.ctx.config.hyperbridge.config.stateMachineId) return\n\n\t\t\t\t\tconst response = await this.queries.queryResponseByRequestId(hash)\n\t\t\t\t\tyield await this.streamFinalized(signal, request, 1, response)\n\t\t\t\t\tstatus = RequestStatus.HYPERBRIDGE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED: {\n\t\t\t\t\tif (request.source === this.ctx.config.hyperbridge.config.stateMachineId) return\n\n\t\t\t\t\trequest = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queries.queryGetRequest(hash),\n\t\t\t\t\t\tpredicate: (r) => !r || !r.statuses.find((s) => s.status === RequestStatus.DESTINATION),\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: RequestStatus.DESTINATION,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: request.statuses[2].metadata.blockHash,\n\t\t\t\t\t\t\tblockNumber: request.statuses[2].metadata.blockNumber,\n\t\t\t\t\t\t\ttransactionHash: request.statuses[2].metadata.transactionHash,\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttimestamp: request.statuses[2].metadata.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = RequestStatus.DESTINATION\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.DESTINATION:\n\t\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Snapshot helper: returns the `HYPERBRIDGE_FINALIZED` event with source-chain\n\t * calldata if prerequisites are met, or `undefined` if we're still waiting\n\t * for a consensus proof.\n\t * Requires the matching response to already exist in the indexer.\n\t */\n\tprivate async buildFinalized(\n\t\trequest: GetRequestWithStatus,\n\t\thyperbridgeDelivered: RequestStatusWithMetadata,\n\t\tresponse: ResponseCommitmentWithValues,\n\t): Promise<RequestStatusWithMetadata | undefined> {\n\t\tconst sourceChain = this.ctx.config.source\n\t\tconst hyperbridge = this.ctx.config.hyperbridge\n\n\t\tif (sourceChain instanceof EvmChain) {\n\t\t\tconst hyperbridgeSubstrate = hyperbridge as SubstrateChain\n\t\t\tconst currentEpoch = await sourceChain.currentEpoch()\n\t\t\tconst consensusResult = await hyperbridgeSubstrate.queryConsensusProofs(\n\t\t\t\tBigInt(hyperbridgeDelivered.metadata.blockNumber),\n\t\t\t\tcurrentEpoch,\n\t\t\t)\n\t\t\tif (!consensusResult) return undefined\n\n\t\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t\t{ Responses: [response.commitment as HexString] },\n\t\t\t\trequest.source,\n\t\t\t\tconsensusResult.provenHeight,\n\t\t\t)\n\n\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\tkind: \"BatchConsensusAndGetResponse\",\n\t\t\t\tconsensusProofs: consensusResult.proofs,\n\t\t\t\tproof: {\n\t\t\t\t\tstateMachine: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\tproof,\n\t\t\t\t\theight: consensusResult.provenHeight,\n\t\t\t\t},\n\t\t\t\tresponses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tget: request,\n\t\t\t\t\t\tvalues: request.keys.map((key, index) => ({\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: (response.values[index] as HexString) || \"0x\",\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: hyperbridgeDelivered.metadata.blockHash,\n\t\t\t\t\tblockNumber: Number(consensusResult.provenHeight),\n\t\t\t\t\ttransactionHash: hyperbridgeDelivered.metadata.transactionHash,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttimestamp: hyperbridgeDelivered.metadata.timestamp,\n\t\t\t\t\tcalldata,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// Substrate source: use state machine update from indexer\n\t\tconst hyperbridgeFinality = await this.queries.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\theight: hyperbridgeDelivered.metadata.blockNumber,\n\t\t\tchain: request.source,\n\t\t})\n\t\tif (!hyperbridgeFinality) return undefined\n\n\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t{ Responses: [response.commitment as HexString] },\n\t\t\trequest.source,\n\t\t\tBigInt(hyperbridgeFinality.height),\n\t\t)\n\n\t\tconst calldata = sourceChain.encode({\n\t\t\tkind: \"GetResponse\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\tproof,\n\t\t\t\theight: BigInt(hyperbridgeFinality.height),\n\t\t\t},\n\t\t\tresponses: [\n\t\t\t\t{\n\t\t\t\t\tget: request,\n\t\t\t\t\tvalues: request.keys.map((key, index) => ({\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue: (response.values[index] as HexString) || \"0x\",\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t],\n\t\t\tsigner: pad(\"0x\"),\n\t\t})\n\n\t\treturn {\n\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\tmetadata: {\n\t\t\t\tblockHash: hyperbridgeFinality.blockHash,\n\t\t\t\tblockNumber: hyperbridgeFinality.height,\n\t\t\t\ttransactionHash: hyperbridgeFinality.transactionHash,\n\t\t\t\ttimestamp: hyperbridgeFinality.timestamp,\n\t\t\t\tcalldata,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Streaming helper: waits (via `waitOrAbort`) for the consensus proof or\n\t * state machine update, fetches the messaging proof, and returns the\n\t * finalized event. Caller has already observed `HYPERBRIDGE_DELIVERED` and\n\t * provides the index into `request.statuses` that carries it plus the\n\t * indexed response (looked up separately because GET responses live in a\n\t * different GraphQL entity from requests).\n\t */\n\tprivate async streamFinalized(\n\t\tsignal: AbortSignal,\n\t\trequest: GetRequestWithStatus,\n\t\thyperbridgeDeliveredIndex: number,\n\t\tresponse: ResponseCommitmentWithValues | undefined,\n\t): Promise<RequestStatusWithMetadata> {\n\t\tconst sourceChain = this.ctx.config.source\n\t\tconst hyperbridge = this.ctx.config.hyperbridge\n\t\tconst stateMachineId = this.ctx.config.hyperbridge.config.stateMachineId\n\t\tconst neededHeight = BigInt(request.statuses[hyperbridgeDeliveredIndex].metadata.blockNumber)\n\n\t\tif (sourceChain instanceof EvmChain) {\n\t\t\tconst hyperbridgeSubstrate = hyperbridge as SubstrateChain\n\t\t\tconst currentEpoch = await sourceChain.currentEpoch()\n\t\t\tconst consensusResult = await waitOrAbort(this.ctx, {\n\t\t\t\tsignal,\n\t\t\t\tpromise: () => hyperbridgeSubstrate.queryConsensusProofs(neededHeight, currentEpoch),\n\t\t\t})\n\n\t\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t\t{ Responses: [response?.commitment as HexString] },\n\t\t\t\trequest.source,\n\t\t\t\tconsensusResult.provenHeight,\n\t\t\t)\n\n\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\tkind: \"BatchConsensusAndGetResponse\",\n\t\t\t\tconsensusProofs: consensusResult.proofs,\n\t\t\t\tproof: {\n\t\t\t\t\tstateMachine: stateMachineId,\n\t\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\tproof,\n\t\t\t\t\theight: consensusResult.provenHeight,\n\t\t\t\t},\n\t\t\t\tresponses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tget: request,\n\t\t\t\t\t\tvalues: request.keys.map((key, index) => ({\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: (response?.values[index] as HexString) || \"0x\",\n\t\t\t\t\t\t})),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: request.statuses[hyperbridgeDeliveredIndex].metadata.blockHash,\n\t\t\t\t\tblockNumber: Number(consensusResult.provenHeight),\n\t\t\t\t\ttransactionHash: request.statuses[hyperbridgeDeliveredIndex].metadata.transactionHash,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttimestamp: request.statuses[hyperbridgeDeliveredIndex].metadata.timestamp,\n\t\t\t\t\tcalldata,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// Substrate source: wait for state machine update\n\t\tconst hyperbridgeFinalized = await waitOrAbort(this.ctx, {\n\t\t\tsignal,\n\t\t\tpromise: () =>\n\t\t\t\tthis.queries.queryStateMachineUpdateByHeight({\n\t\t\t\t\tstatemachineId: stateMachineId,\n\t\t\t\t\theight: Number(neededHeight),\n\t\t\t\t\tchain: request.source,\n\t\t\t\t}),\n\t\t})\n\n\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t{ Responses: [response?.commitment as HexString] },\n\t\t\trequest.source,\n\t\t\tBigInt(hyperbridgeFinalized.height),\n\t\t)\n\n\t\tconst calldata = sourceChain.encode({\n\t\t\tkind: \"GetResponse\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: stateMachineId,\n\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\tproof,\n\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t},\n\t\t\tresponses: [\n\t\t\t\t{\n\t\t\t\t\tget: request,\n\t\t\t\t\tvalues: request.keys.map((key, index) => ({\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue: (response?.values[index] as HexString) || \"0x\",\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t],\n\t\t\tsigner: pad(\"0x\"),\n\t\t})\n\n\t\treturn {\n\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\tmetadata: {\n\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\tblockNumber: hyperbridgeFinalized.height,\n\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\ttimestamp: hyperbridgeFinalized.timestamp,\n\t\t\t\tcalldata,\n\t\t\t},\n\t\t}\n\t}\n}\n","import { maxBy } from \"lodash-es\"\nimport { pad } from \"viem\"\n\n// @ts-ignore\nimport mergeRace from \"@async-generator/merge-race\"\n\nimport type { SubstrateChain } from \"@/chain\"\nimport { EvmChain } from \"@/chains/evm\"\nimport {\n\ttype HexString,\n\ttype PostRequestTimeoutStatus,\n\ttype PostRequestWithStatus,\n\ttype RequestStatusKey,\n\ttype RequestStatusWithMetadata,\n\ttype StateMachineUpdate,\n\ttype TimeoutStatusKey,\n\tRequestStatus,\n\tTimeoutStatus,\n} from \"@/types\"\nimport {\n\tCOMBINED_STATUS_WEIGHTS,\n\tREQUEST_STATUS_WEIGHTS,\n\tTIMEOUT_STATUS_WEIGHTS,\n\tparseStateMachineId,\n\tpostRequestCommitment,\n\twaitForChallengePeriod,\n} from \"@/utils\"\nimport { AbortSignalInternal } from \"@/utils/exceptions\"\n\nimport type { Queries } from \"./Queries\"\nimport type { ClientContext } from \".\"\nimport { timeoutStream, waitOrAbort, withRetry } from \"./utils\"\n\n/**\n * POST request lifecycle — snapshot status, streaming status, and the full\n * timeout flow (pending → destination-finalized → hyperbridge-finalized → timed-out).\n * Also hosts `aggregateTransactionWithCommitment`, which relays a dispatched\n * post request through Hyperbridge from source-chain state.\n */\nexport class PostRequestClient {\n\tprivate readonly logger\n\n\tconstructor(\n\t\tprivate readonly ctx: ClientContext,\n\t\tprivate readonly queries: Queries,\n\t) {\n\t\tthis.logger = ctx.logger.withTag(\"[PostRequestClient]\")\n\t}\n\n\t/**\n\t * Enhances a request with finality events by querying state machine updates.\n\t * Adds `SOURCE_FINALIZED` and `HYPERBRIDGE_FINALIZED` when applicable.\n\t */\n\tasync addRequestFinalityEvents(request: PostRequestWithStatus): Promise<PostRequestWithStatus> {\n\t\tconst events: RequestStatusWithMetadata[] = []\n\n\t\tconst commit = () => {\n\t\t\tthis.logger.trace(`Added ${events.length} 'Request' finality events`, events)\n\t\t\trequest.statuses = [...request.statuses, ...events]\n\t\t\treturn request\n\t\t}\n\n\t\tlet hyperbridgeDelivered: RequestStatusWithMetadata | undefined\n\n\t\tif (request.source === this.ctx.config.hyperbridge.config.stateMachineId) {\n\t\t\thyperbridgeDelivered = request.statuses[0]\n\t\t} else {\n\t\t\tconst sourceFinality = await this.queries.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: request.source,\n\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\t\t\tif (!sourceFinality) return commit()\n\n\t\t\tevents.push({\n\t\t\t\tstatus: RequestStatus.SOURCE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: sourceFinality.blockHash,\n\t\t\t\t\tblockNumber: sourceFinality.height,\n\t\t\t\t\ttransactionHash: sourceFinality.transactionHash,\n\t\t\t\t\ttimestamp: sourceFinality.timestamp,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\thyperbridgeDelivered = request.statuses.find((item) => item.status === RequestStatus.HYPERBRIDGE_DELIVERED)\n\t\t\tif (!hyperbridgeDelivered) return commit()\n\t\t}\n\n\t\tif (request.statuses.some((s) => s.status === TimeoutStatus.HYPERBRIDGE_TIMED_OUT)) return commit()\n\t\tif (request.dest === this.ctx.config.hyperbridge.config.stateMachineId) return commit()\n\n\t\tconst finalized = await this.buildFinalized(request, hyperbridgeDelivered)\n\t\tif (!finalized) return commit()\n\n\t\tevents.push(finalized)\n\t\treturn commit()\n\t}\n\n\t/**\n\t * Snapshot query: request + all inferred finality/timeout events, sorted.\n\t */\n\tasync queryRequestWithStatus(hash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\tlet request = await this.queries.queryPostRequest(hash)\n\t\tif (!request) return\n\n\t\trequest = await this.addRequestFinalityEvents(request)\n\t\trequest = await this.addTimeoutFinalityEvents(request)\n\n\t\trequest.statuses = request.statuses.sort(\n\t\t\t(a, b) => COMBINED_STATUS_WEIGHTS[a.status] - COMBINED_STATUS_WEIGHTS[b.status],\n\t\t)\n\t\treturn request\n\t}\n\n\n\t/**\n\t * Streaming status updates for a post request. Ends when the request reaches\n\t * the destination or a timeout becomes pending.\n\t */\n\tasync *postRequestStatusStream(hash: HexString): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tconst controller = new AbortController()\n\t\tconst logger = this.logger.withTag(\"[postRequestStatusStream]\")\n\n\t\ttry {\n\t\t\tconst request = await waitOrAbort(this.ctx, {\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tpromise: () => this.queries.queryPostRequest(hash),\n\t\t\t})\n\n\t\t\tlogger.trace(\"`Request` found\")\n\t\t\tconst chain = this.ctx.config.dest\n\t\t\tconst timeouts =\n\t\t\t\trequest.timeoutTimestamp > 0n ? timeoutStream(this.ctx, request.timeoutTimestamp, chain) : undefined\n\t\t\tconst statusStream = this.streamStatusInternal(hash, controller.signal)\n\t\t\tconst combined = timeouts ? mergeRace(timeouts, statusStream) : statusStream\n\n\t\t\tlet item = await combined.next()\n\t\t\twhile (!item.done) {\n\t\t\t\tlogger.trace(`Yielding Event(${item.value.status})`)\n\t\t\t\tyield item.value\n\t\t\t\titem = await combined.next()\n\t\t\t}\n\t\t\tlogger.trace(\"Streaming complete\")\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) throw error\n\t\t}\n\t\tcontroller.abort()\n\t}\n\n\tprivate async *streamStatusInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tlet request = await waitOrAbort(this.ctx, { signal, promise: () => this.queries.queryPostRequest(hash) })\n\n\t\tlet status: RequestStatusKey =\n\t\t\trequest.source === this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t? RequestStatus.HYPERBRIDGE_DELIVERED\n\t\t\t\t: RequestStatus.SOURCE\n\n\t\tconst latestMetadata = request.statuses[request.statuses.length - 1]\n\t\tconst latest_request = maxBy(\n\t\t\t[status, latestMetadata.status as RequestStatusKey],\n\t\t\t(item) => REQUEST_STATUS_WEIGHTS[item],\n\t\t)\n\t\tif (!latest_request) return\n\t\tstatus = latest_request\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\tcase RequestStatus.SOURCE: {\n\t\t\t\t\tconst sourceUpdate = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.queries.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\tstatemachineId: request.source,\n\t\t\t\t\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\t\t\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: RequestStatus.SOURCE_FINALIZED,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: sourceUpdate.blockHash,\n\t\t\t\t\t\t\tblockNumber: sourceUpdate.height,\n\t\t\t\t\t\t\ttransactionHash: sourceUpdate.transactionHash,\n\t\t\t\t\t\t\ttimestamp: sourceUpdate.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = RequestStatus.SOURCE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\trequest = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queries.queryPostRequest(hash),\n\t\t\t\t\t\tpredicate: (r) => !r || r.statuses.length < 2,\n\t\t\t\t\t})\n\n\t\t\t\t\tstatus =\n\t\t\t\t\t\trequest.dest === this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t\t\t\t? RequestStatus.DESTINATION\n\t\t\t\t\t\t\t: RequestStatus.HYPERBRIDGE_DELIVERED\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: request.statuses[1].metadata.blockHash,\n\t\t\t\t\t\t\tblockNumber: request.statuses[1].metadata.blockNumber,\n\t\t\t\t\t\t\ttransactionHash: request.statuses[1].metadata.transactionHash,\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttimestamp: request.statuses[1].metadata.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED: {\n\t\t\t\t\tconst stateMachineId = this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t\tconst index = request.source === stateMachineId ? 0 : 1\n\n\t\t\t\t\tyield await this.streamFinalized(signal, request, index)\n\t\t\t\t\tstatus = RequestStatus.HYPERBRIDGE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED: {\n\t\t\t\t\trequest = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queries.queryPostRequest(hash),\n\t\t\t\t\t\tpredicate: (r) => !r || !r.statuses.find((s) => s.status === RequestStatus.DESTINATION),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst index = request.source === this.ctx.config.hyperbridge.config.stateMachineId ? 1 : 2\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: RequestStatus.DESTINATION,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: request.statuses[index].metadata.blockHash,\n\t\t\t\t\t\t\tblockNumber: request.statuses[index].metadata.blockNumber,\n\t\t\t\t\t\t\ttransactionHash: request.statuses[index].metadata.transactionHash,\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\ttimestamp: request.statuses[index].metadata.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = RequestStatus.DESTINATION\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.DESTINATION:\n\t\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Populates timeout-related status events (`PENDING_TIMEOUT`,\n\t * `DESTINATION_FINALIZED_TIMEOUT`, `HYPERBRIDGE_FINALIZED_TIMEOUT`) and the\n\t * accompanying timeout-proof calldata.\n\t */\n\tasync addTimeoutFinalityEvents(request: PostRequestWithStatus): Promise<PostRequestWithStatus> {\n\t\tconst destChain = this.ctx.config.dest\n\t\tconst hyperbridge = this.ctx.config.hyperbridge\n\t\tconst events: RequestStatusWithMetadata[] = []\n\t\tconst commitment = postRequestCommitment(request).commitment\n\t\tconst receipt = await destChain.queryRequestReceipt(commitment)\n\t\tconst destTimestamp = await destChain.timestamp()\n\n\t\tconst commit = (req: PostRequestWithStatus) => {\n\t\t\tthis.logger.trace(`Added ${events.length} timeout events`, events)\n\t\t\trequest.statuses = [...req.statuses, ...events]\n\t\t\treturn request\n\t\t}\n\n\t\tif (request.timeoutTimestamp === 0n) return commit(request)\n\t\tif (receipt || request.timeoutTimestamp > destTimestamp) return commit(request)\n\n\t\tconst is_finished = request.statuses.find((item) => item.status === RequestStatus.DESTINATION)\n\t\tif (!is_finished) {\n\t\t\tevents.push({\n\t\t\t\tstatus: TimeoutStatus.PENDING_TIMEOUT,\n\t\t\t\tmetadata: { blockHash: \"0x\", blockNumber: 0, transactionHash: \"0x\" },\n\t\t\t})\n\t\t}\n\n\t\tconst delivered = request.statuses.find((item) => item.status === RequestStatus.HYPERBRIDGE_DELIVERED)\n\n\t\tlet hyperbridgeFinalized: StateMachineUpdate | undefined\n\t\tif (!delivered) {\n\t\t\thyperbridgeFinalized = await this.queries.queryStateMachineUpdateByTimestamp({\n\t\t\t\tstatemachineId: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\tchain: request.source,\n\t\t\t})\n\t\t} else {\n\t\t\tconst destFinalized = await this.queries.queryStateMachineUpdateByTimestamp({\n\t\t\t\tstatemachineId: request.dest,\n\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\t\t\tif (!destFinalized) return commit(request)\n\n\t\t\tevents.push({\n\t\t\t\tstatus: TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: destFinalized.blockHash,\n\t\t\t\t\tblockNumber: destFinalized.blockNumber,\n\t\t\t\t\ttransactionHash: destFinalized.transactionHash,\n\t\t\t\t\ttimestamp: destFinalized.timestamp,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (request.source === this.ctx.config.hyperbridge.config.stateMachineId) return request\n\n\t\t\tconst hyperbridgeTimedOut = request.statuses.find(\n\t\t\t\t(item) => item.status === TimeoutStatus.HYPERBRIDGE_TIMED_OUT,\n\t\t\t)\n\t\t\tif (!hyperbridgeTimedOut) return commit(request)\n\t\t\thyperbridgeFinalized = await this.queries.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\theight: hyperbridgeTimedOut.metadata.blockNumber,\n\t\t\t\tchain: request.source,\n\t\t\t})\n\t\t}\n\n\t\tif (!hyperbridgeFinalized) return commit(request)\n\n\t\tconst proof = await hyperbridge.queryStateProof(BigInt(hyperbridgeFinalized.height), [\n\t\t\thyperbridge.requestReceiptKey(commitment),\n\t\t])\n\t\tconst sourceChain = this.ctx.config.source\n\t\tconst calldata = sourceChain.encode({\n\t\t\tkind: \"TimeoutPostRequest\",\n\t\t\tproof: {\n\t\t\t\tproof,\n\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\tstateMachine: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t},\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tsource: request.source,\n\t\t\t\t\tdest: request.dest,\n\t\t\t\t\tfrom: request.from,\n\t\t\t\t\tto: request.to,\n\t\t\t\t\tnonce: request.nonce,\n\t\t\t\t\tbody: request.body,\n\t\t\t\t\ttimeoutTimestamp: request.timeoutTimestamp,\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\n\t\tevents.push({\n\t\t\tstatus: TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT,\n\t\t\tmetadata: {\n\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\tblockNumber: hyperbridgeFinalized.blockNumber,\n\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\ttimestamp: hyperbridgeFinalized.timestamp,\n\t\t\t\tcalldata,\n\t\t\t},\n\t\t})\n\n\t\treturn commit(request)\n\t}\n\n\n\t/**\n\t * Streaming status updates for a timed-out post request.\n\t */\n\tasync *postRequestTimeoutStream(hash: HexString): AsyncGenerator<PostRequestTimeoutStatus, void> {\n\t\tconst controller = new AbortController()\n\t\tconst logger = this.logger.withTag(\"[postRequestTimeoutStream]\")\n\n\t\ttry {\n\t\t\tconst request = await this.queries.queryPostRequest(hash)\n\t\t\tif (!request) throw new Error(\"Request not found\")\n\n\t\t\tlogger.trace(\"`Request` found\")\n\t\t\tconst stream = this.streamTimeoutInternal(hash, controller.signal)\n\t\t\tlet item = await stream.next()\n\t\t\twhile (!item.done) {\n\t\t\t\tlogger.trace(`Yielding Timeout Event(${item.value.status})`)\n\t\t\t\tyield item.value\n\t\t\t\titem = await stream.next()\n\t\t\t}\n\t\t\tlogger.trace(\"Streaming complete\")\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) throw error\n\t\t}\n\t\tcontroller.abort()\n\t}\n\n\tprivate async *streamTimeoutInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<PostRequestTimeoutStatus, void> {\n\t\tconst request = await waitOrAbort(this.ctx, { signal, promise: () => this.queries.queryPostRequest(hash) })\n\n\t\tconst destChain = this.ctx.config.dest\n\t\tlet status: TimeoutStatusKey =\n\t\t\trequest.dest === this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t? TimeoutStatus.HYPERBRIDGE_TIMED_OUT\n\t\t\t\t: TimeoutStatus.PENDING_TIMEOUT\n\n\t\tconst commitment = postRequestCommitment(request).commitment\n\t\tconst hyperbridge = this.ctx.config.hyperbridge as SubstrateChain\n\n\t\tconst latest = request.statuses[request.statuses.length - 1]\n\t\tconst latest_request = maxBy(\n\t\t\t[status, latest.status as TimeoutStatusKey],\n\t\t\t(item: TimeoutStatusKey) => TIMEOUT_STATUS_WEIGHTS[item],\n\t\t)\n\t\tif (!latest_request) return\n\t\tstatus = latest_request\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\tcase TimeoutStatus.PENDING_TIMEOUT: {\n\t\t\t\t\tconst receipt = await hyperbridge.queryRequestReceipt(commitment)\n\t\t\t\t\tif (!receipt && request.source !== this.ctx.config.hyperbridge.config.stateMachineId) {\n\t\t\t\t\t\tstatus = TimeoutStatus.HYPERBRIDGE_TIMED_OUT\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tconst update = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.queries.queryStateMachineUpdateByTimestamp({\n\t\t\t\t\t\t\t\tstatemachineId: request.dest,\n\t\t\t\t\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\t\t\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: update.blockHash,\n\t\t\t\t\t\t\tblockNumber: update.height,\n\t\t\t\t\t\t\ttransactionHash: update.transactionHash,\n\t\t\t\t\t\t\ttimestamp: update.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase TimeoutStatus.DESTINATION_FINALIZED_TIMEOUT: {\n\t\t\t\t\tif (request.source !== this.ctx.config.hyperbridge.config.stateMachineId) {\n\t\t\t\t\t\tconst receipt = await hyperbridge.queryRequestReceipt(commitment)\n\t\t\t\t\t\tif (!receipt) {\n\t\t\t\t\t\t\tstatus = TimeoutStatus.HYPERBRIDGE_TIMED_OUT\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst update = (await this.queries.queryStateMachineUpdateByTimestamp({\n\t\t\t\t\t\tstatemachineId: request.dest,\n\t\t\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\t\t\tchain: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t}))!\n\n\t\t\t\t\tconst proof = await destChain.queryStateProof(BigInt(update.height), [\n\t\t\t\t\t\tdestChain.requestReceiptKey(commitment),\n\t\t\t\t\t])\n\n\t\t\t\t\tconst { stateId } = parseStateMachineId(request.dest)\n\t\t\t\t\tawait waitForChallengePeriod(hyperbridge, {\n\t\t\t\t\t\theight: BigInt(update.height),\n\t\t\t\t\t\tid: { stateId, consensusStateId: this.ctx.config.dest.config.consensusStateId },\n\t\t\t\t\t})\n\n\t\t\t\t\tconst { blockHash, transactionHash, blockNumber, timestamp } = await hyperbridge.submitUnsigned({\n\t\t\t\t\t\tkind: \"TimeoutPostRequest\",\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\theight: BigInt(update.height),\n\t\t\t\t\t\t\tstateMachine: request.dest,\n\t\t\t\t\t\t\tconsensusStateId: this.ctx.config.dest.config.consensusStateId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequests: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsource: request.source,\n\t\t\t\t\t\t\t\tdest: request.dest,\n\t\t\t\t\t\t\t\tfrom: request.from,\n\t\t\t\t\t\t\t\tto: request.to,\n\t\t\t\t\t\t\t\tnonce: request.nonce,\n\t\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\t\ttimeoutTimestamp: request.timeoutTimestamp,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\n\t\t\t\t\tstatus =\n\t\t\t\t\t\trequest.source === this.ctx.config.hyperbridge.config.stateMachineId\n\t\t\t\t\t\t\t? TimeoutStatus.TIMED_OUT\n\t\t\t\t\t\t\t: TimeoutStatus.HYPERBRIDGE_TIMED_OUT\n\n\t\t\t\t\tyield { status, metadata: { blockHash, transactionHash, blockNumber, timestamp } }\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase TimeoutStatus.HYPERBRIDGE_TIMED_OUT: {\n\t\t\t\t\tconst hasDelivered = request.statuses.some(\n\t\t\t\t\t\t(item) => item.status === RequestStatus.HYPERBRIDGE_DELIVERED,\n\t\t\t\t\t)\n\t\t\t\t\tlet update: StateMachineUpdate | undefined\n\t\t\t\t\tif (!hasDelivered) {\n\t\t\t\t\t\tupdate = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\t\tthis.queries.queryStateMachineUpdateByTimestamp({\n\t\t\t\t\t\t\t\t\tstatemachineId: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\t\t\t\t\t\tchain: request.source,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst timeout = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\tpromise: async () => {\n\t\t\t\t\t\t\t\tconst req = await this.queries.queryPostRequest(hash)\n\t\t\t\t\t\t\t\treturn req?.statuses\n\t\t\t\t\t\t\t\t\t.sort(\n\t\t\t\t\t\t\t\t\t\t(a, b) => COMBINED_STATUS_WEIGHTS[a.status] - COMBINED_STATUS_WEIGHTS[b.status],\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.pop()\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpredicate: (t) => !t || t?.status !== TimeoutStatus.HYPERBRIDGE_TIMED_OUT,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tupdate = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\tpromise: async () =>\n\t\t\t\t\t\t\t\tthis.queries.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\t\tstatemachineId: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t\t\theight: timeout.metadata.blockNumber,\n\t\t\t\t\t\t\t\t\tchain: request.source,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tconst proof = await hyperbridge.queryStateProof(BigInt(update.height), [\n\t\t\t\t\t\thyperbridge.requestReceiptKey(commitment),\n\t\t\t\t\t])\n\n\t\t\t\t\tconst sourceChain = this.ctx.config.source\n\t\t\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\t\t\tkind: \"TimeoutPostRequest\",\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\theight: BigInt(update.height),\n\t\t\t\t\t\t\tstateMachine: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequests: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsource: request.source,\n\t\t\t\t\t\t\t\tdest: request.dest,\n\t\t\t\t\t\t\t\tfrom: request.from,\n\t\t\t\t\t\t\t\tto: request.to,\n\t\t\t\t\t\t\t\tnonce: request.nonce,\n\t\t\t\t\t\t\t\tbody: request.body,\n\t\t\t\t\t\t\t\ttimeoutTimestamp: request.timeoutTimestamp,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\n\t\t\t\t\tconst { stateId } = parseStateMachineId(this.ctx.config.hyperbridge.config.stateMachineId)\n\t\t\t\t\tawait waitForChallengePeriod(sourceChain, {\n\t\t\t\t\t\theight: BigInt(update.height),\n\t\t\t\t\t\tid: { stateId, consensusStateId: this.ctx.config.hyperbridge.config.consensusStateId },\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ttransactionHash: update.transactionHash,\n\t\t\t\t\t\t\tblockNumber: update.blockNumber,\n\t\t\t\t\t\t\tblockHash: update.blockHash,\n\t\t\t\t\t\t\ttimestamp: update.timestamp,\n\t\t\t\t\t\t\tcalldata,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase TimeoutStatus.HYPERBRIDGE_FINALIZED_TIMEOUT: {\n\t\t\t\t\tconst delivered = await waitOrAbort(this.ctx, {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: async () => {\n\t\t\t\t\t\t\tconst req = await this.queries.queryPostRequest(hash)\n\t\t\t\t\t\t\treturn req?.statuses.find((s) => s.status === RequestStatus.TIMED_OUT)\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: TimeoutStatus.TIMED_OUT,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\ttransactionHash: delivered.metadata.transactionHash,\n\t\t\t\t\t\t\tblockNumber: delivered.metadata.blockNumber,\n\t\t\t\t\t\t\tblockHash: delivered.metadata.blockHash,\n\t\t\t\t\t\t\ttimestamp: delivered.metadata.timestamp,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t\tstatus = TimeoutStatus.TIMED_OUT\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase TimeoutStatus.TIMED_OUT:\n\t\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Snapshot helper: returns the `HYPERBRIDGE_FINALIZED` event with relayer\n\t * calldata if prerequisites are met, or `undefined` if we're still waiting\n\t * for a consensus proof.\n\t */\n\tprivate async buildFinalized(\n\t\trequest: PostRequestWithStatus,\n\t\thyperbridgeDelivered: RequestStatusWithMetadata,\n\t): Promise<RequestStatusWithMetadata | undefined> {\n\t\tconst destChain = this.ctx.config.dest\n\t\tconst hyperbridge = this.ctx.config.hyperbridge\n\n\t\tif (destChain instanceof EvmChain) {\n\t\t\tconst hyperbridgeSubstrate = hyperbridge as SubstrateChain\n\t\t\tconst currentEpoch = await destChain.currentEpoch()\n\t\t\tconst consensusResult = await hyperbridgeSubstrate.queryConsensusProofs(\n\t\t\t\tBigInt(hyperbridgeDelivered.metadata.blockNumber),\n\t\t\t\tcurrentEpoch,\n\t\t\t)\n\t\t\tif (!consensusResult) return undefined\n\n\t\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t\t{ Requests: [postRequestCommitment(request).commitment] },\n\t\t\t\trequest.dest,\n\t\t\t\tconsensusResult.provenHeight,\n\t\t\t)\n\n\t\t\tconst calldata = destChain.encode({\n\t\t\t\tkind: \"BatchConsensusAndPostRequest\",\n\t\t\t\tconsensusProofs: consensusResult.proofs,\n\t\t\t\tproof: {\n\t\t\t\t\tstateMachine: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\tproof,\n\t\t\t\t\theight: consensusResult.provenHeight,\n\t\t\t\t},\n\t\t\t\trequests: [request],\n\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: hyperbridgeDelivered.metadata.blockHash,\n\t\t\t\t\tblockNumber: Number(consensusResult.provenHeight),\n\t\t\t\t\ttransactionHash: hyperbridgeDelivered.metadata.transactionHash,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttimestamp: hyperbridgeDelivered.metadata.timestamp,\n\t\t\t\t\tcalldata,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// Substrate destination: use state machine update from indexer\n\t\tconst hyperbridgeFinality = await this.queries.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\theight: hyperbridgeDelivered.metadata.blockNumber,\n\t\t\tchain: request.dest,\n\t\t})\n\t\tif (!hyperbridgeFinality) return undefined\n\n\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t{ Requests: [postRequestCommitment(request).commitment] },\n\t\t\trequest.dest,\n\t\t\tBigInt(hyperbridgeFinality.height),\n\t\t)\n\n\t\tconst calldata = destChain.encode({\n\t\t\tkind: \"PostRequest\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: this.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\tproof,\n\t\t\t\theight: BigInt(hyperbridgeFinality.height),\n\t\t\t},\n\t\t\trequests: [request],\n\t\t\tsigner: pad(\"0x\"),\n\t\t})\n\n\t\treturn {\n\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\tmetadata: {\n\t\t\t\tblockHash: hyperbridgeFinality.blockHash,\n\t\t\t\tblockNumber: hyperbridgeFinality.height,\n\t\t\t\ttransactionHash: hyperbridgeFinality.transactionHash,\n\t\t\t\ttimestamp: hyperbridgeFinality.timestamp,\n\t\t\t\tcalldata,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Streaming helper: waits for the consensus proof, fetches the messaging\n\t * proof with retry, and returns the finalized event. Caller has already\n\t * observed `HYPERBRIDGE_DELIVERED` and provides the index into\n\t * `request.statuses` that carries it.\n\t */\n\tprivate async streamFinalized(\n\t\tsignal: AbortSignal,\n\t\trequest: PostRequestWithStatus,\n\t\thyperbridgeDeliveredIndex: number,\n\t): Promise<RequestStatusWithMetadata> {\n\t\tconst destChain = this.ctx.config.dest\n\t\tconst hyperbridge = this.ctx.config.hyperbridge\n\t\tconst stateMachineId = this.ctx.config.hyperbridge.config.stateMachineId\n\t\tconst neededHeight = BigInt(request.statuses[hyperbridgeDeliveredIndex].metadata.blockNumber)\n\n\t\tthis.logger.trace(`[streamFinalized] neededHeight=${neededHeight}`)\n\n\t\tif (destChain instanceof EvmChain) {\n\t\t\tconst hyperbridgeSubstrate = hyperbridge as SubstrateChain\n\t\t\tconst currentEpoch = await destChain.currentEpoch()\n\t\t\tconst consensusResult = await waitOrAbort(this.ctx, {\n\t\t\t\tsignal,\n\t\t\t\tpromise: () => hyperbridgeSubstrate.queryConsensusProofs(neededHeight, currentEpoch),\n\t\t\t})\n\n\t\t\tconst commitment = postRequestCommitment(request).commitment\n\t\t\tthis.logger.trace(\n\t\t\t\t`[streamFinalized] consensusProofs found (${consensusResult.proofs.length} proofs), provenHeight=${consensusResult.provenHeight}, ` +\n\t\t\t\t`commitment=${commitment}, dest=${request.dest}`\n\t\t\t)\n\n\t\t\tconst proof = await this.fetchProofWithRetry(signal, () =>\n\t\t\t\thyperbridge.queryProof(\n\t\t\t\t\t{ Requests: [commitment] },\n\t\t\t\t\trequest.dest,\n\t\t\t\t\tconsensusResult.provenHeight,\n\t\t\t\t),\n\t\t\t)\n\n\t\t\tconst calldata = destChain.encode({\n\t\t\t\tkind: \"BatchConsensusAndPostRequest\",\n\t\t\t\tconsensusProofs: consensusResult.proofs,\n\t\t\t\tproof: {\n\t\t\t\t\tstateMachine: stateMachineId,\n\t\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\tproof,\n\t\t\t\t\theight: consensusResult.provenHeight,\n\t\t\t\t},\n\t\t\t\trequests: [request],\n\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t})\n\n\t\t\treturn {\n\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: request.statuses[hyperbridgeDeliveredIndex].metadata.blockHash,\n\t\t\t\t\tblockNumber: Number(consensusResult.provenHeight),\n\t\t\t\t\ttransactionHash: request.statuses[hyperbridgeDeliveredIndex].metadata.transactionHash,\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\ttimestamp: request.statuses[hyperbridgeDeliveredIndex].metadata.timestamp,\n\t\t\t\t\tcalldata,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// Substrate destination: wait for state machine update\n\t\tconst hyperbridgeFinalized = await waitOrAbort(this.ctx, {\n\t\t\tsignal,\n\t\t\tpromise: () =>\n\t\t\t\tthis.queries.queryStateMachineUpdateByHeight({\n\t\t\t\t\tstatemachineId: stateMachineId,\n\t\t\t\t\theight: Number(neededHeight),\n\t\t\t\t\tchain: request.dest,\n\t\t\t\t}),\n\t\t})\n\n\t\tconst proof = await this.fetchProofWithRetry(signal, () =>\n\t\t\thyperbridge.queryProof(\n\t\t\t\t{ Requests: [postRequestCommitment(request).commitment] },\n\t\t\t\trequest.dest,\n\t\t\t\tBigInt(hyperbridgeFinalized.height),\n\t\t\t),\n\t\t)\n\n\t\tconst calldata = destChain.encode({\n\t\t\tkind: \"PostRequest\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: stateMachineId,\n\t\t\t\tconsensusStateId: this.ctx.config.hyperbridge.config.consensusStateId,\n\t\t\t\tproof,\n\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t},\n\t\t\trequests: [request],\n\t\t\tsigner: pad(\"0x\"),\n\t\t})\n\n\t\tconst { stateId } = parseStateMachineId(stateMachineId)\n\t\tawait waitForChallengePeriod(destChain, {\n\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\tid: { stateId, consensusStateId: this.ctx.config.hyperbridge.config.consensusStateId },\n\t\t})\n\n\t\treturn {\n\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\tmetadata: {\n\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\tblockNumber: hyperbridgeFinalized.height,\n\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\ttimestamp: hyperbridgeFinalized.timestamp,\n\t\t\t\tcalldata,\n\t\t\t},\n\t\t}\n\t}\n\n\t/**\n\t * Retry-wrapped `hyperbridge.queryProof`. Fails after 6 retries (~2 minutes at\n\t * 2s backoff) so a hung Hyperbridge node doesn't stall the stream forever.\n\t */\n\tprivate async fetchProofWithRetry(signal: AbortSignal, fetch: () => Promise<HexString>): Promise<HexString> {\n\t\tlet attempt = 0\n\t\tconst safe = async () => {\n\t\t\tattempt++\n\t\t\ttry {\n\t\t\t\tthis.logger.trace(`[fetchProofWithRetry] attempt ${attempt}`)\n\t\t\t\tconst result = await fetch()\n\t\t\t\tthis.logger.trace(`[fetchProofWithRetry] attempt ${attempt} succeeded, proof length=${result.length}`)\n\t\t\t\treturn { data: result, error: null as unknown }\n\t\t\t} catch (err) {\n\t\t\t\tthis.logger.trace(`[fetchProofWithRetry] attempt ${attempt} failed: ${err}`)\n\t\t\t\treturn { data: null, error: err as unknown }\n\t\t\t}\n\t\t}\n\t\tconst result = await waitOrAbort(this.ctx, {\n\t\t\tsignal,\n\t\t\tpromise: () => withRetry(this.ctx, safe, { backoffMs: 2000, maxRetries: 6 }),\n\t\t})\n\t\tif (result.data === null) {\n\t\t\tthis.logger.error(\"Failed to fetch messaging proof:\", result.error)\n\t\t\tthrow result.error\n\t\t}\n\t\treturn result.data\n\t}\n\n\t/**\n\t * Relay a post-request to Hyperbridge from source-chain state, returning\n\t * the finalized Hyperbridge extrinsic receipt.\n\t */\n\tasync aggregateTransactionWithCommitment(\n\t\tcommitment: HexString,\n\t): Promise<Awaited<ReturnType<SubstrateChain[\"submitUnsigned\"]>>> {\n\t\tconst logger = this.logger.withTag(\"aggregateTransactionWithCommitment\")\n\n\t\tconst { stateMachineId, consensusStateId } = this.ctx.config.source.config\n\t\tconst sourceChain = this.ctx.config.source\n\t\tconst hyperbridge = this.ctx.config.hyperbridge as SubstrateChain\n\n\t\tlogger.trace(\"Querying post request with commitment hash\")\n\t\tconst request = await this.queries.queryPostRequest(commitment)\n\t\tif (!request) throw new Error(\"Request not found\")\n\n\t\tlogger.trace(\"Fetch latest stateMachineHeight\")\n\t\tconst latestStateMachineHeight = await hyperbridge.latestStateMachineHeight({\n\t\t\tstateId: parseStateMachineId(stateMachineId).stateId,\n\t\t\tconsensusStateId,\n\t\t})\n\n\t\tlogger.trace(\"Query Request Proof from sourceChain\")\n\t\tconst proof = await sourceChain.queryProof(\n\t\t\t{ Requests: [commitment] },\n\t\t\tthis.ctx.config.hyperbridge.config.stateMachineId,\n\t\t\tlatestStateMachineHeight,\n\t\t)\n\n\t\tlogger.trace(\"Construct Extrinsic and Submit Unsigned\")\n\t\treturn hyperbridge.submitUnsigned({\n\t\t\tkind: \"PostRequest\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: this.ctx.config.source.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.ctx.config.source.config.consensusStateId,\n\t\t\t\tproof,\n\t\t\t\theight: BigInt(latestStateMachineHeight),\n\t\t\t},\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tsource: request.source,\n\t\t\t\t\tdest: request.dest,\n\t\t\t\t\tfrom: request.from,\n\t\t\t\t\tto: request.to,\n\t\t\t\t\tnonce: request.nonce,\n\t\t\t\t\tbody: request.body,\n\t\t\t\t\ttimeoutTimestamp: request.timeoutTimestamp,\n\t\t\t\t},\n\t\t\t],\n\t\t\tsigner: pad(\"0x\"),\n\t\t})\n\t}\n}\n","export const POST_REQUEST_STATUS = `\n query RequestStatusM($hash: String!) {\n requestV2s(\n filter: { commitment: { equalTo: $hash } }\n ) {\n nodes {\n commitment\n timeoutTimestamp\n source\n dest\n to\n from\n nonce\n body\n statusMetadata {\n nodes {\n blockHash\n blockNumber\n timestamp\n chain\n status\n transactionHash\n }\n }\n }\n }\n}\n`\n\nexport const GET_REQUEST_STATUS = `\nquery GetRequestDetails($commitment: String!) {\n getRequestV2s(\n filter: { commitment: { equalTo: $commitment } }\n ) {\n nodes {\n id\n source\n dest\n from\n keys\n nonce\n height\n context\n timeoutTimestamp\n fee\n blockNumber\n blockHash\n transactionHash\n blockTimestamp\n chain\n commitment\n statusMetadata {\n nodes {\n status\n chain\n timestamp\n blockNumber\n blockHash\n transactionHash\n }\n }\n }\n }\n}`\n\nexport const STATE_MACHINE_UPDATES_BY_HEIGHT = `\nquery StateMachineUpdatesByHeight($statemachineId: String!, $height: Int!, $chain: String!) {\n\tstateMachineUpdateEvents(\n\t\tfilter: {\n\t\t\tand: [\n\t\t\t\t{ stateMachineId: { equalTo: $statemachineId } }\n\t\t\t\t{ height: { greaterThanOrEqualTo: $height } }\n\t\t\t\t{ chain: { equalTo: $chain } }\n\t\t\t]\n\t\t}\n\t\torderBy: HEIGHT_ASC\n\t\tfirst: 1\n\t) {\n nodes {\n height\n stateMachineId\n chain\n blockHash\n blockNumber\n transactionHash\n createdAt\n }\n }\n}\n`\n\nexport const STATE_MACHINE_UPDATES_BY_HEIGHT_DESC = `\nquery StateMachineUpdatesByHeightDesc($statemachineId: String!, $height: Int!, $chain: String!) {\n\tstateMachineUpdateEvents(\n\t\tfilter: {\n\t\t\tand: [\n\t\t\t\t{ stateMachineId: { equalTo: $statemachineId } }\n\t\t\t\t{ height: { greaterThanOrEqualTo: $height } }\n\t\t\t\t{ chain: { equalTo: $chain } }\n\t\t\t]\n\t\t}\n\t\torderBy: HEIGHT_DESC\n\t\tfirst: 1\n\t) {\n nodes {\n height\n stateMachineId\n chain\n blockHash\n blockNumber\n transactionHash\n createdAt\n }\n }\n}\n`\n\nexport const STATE_MACHINE_UPDATES_BY_TIMESTAMP = `\nquery StateMachineUpdatesByTimestamp($statemachineId: String!, $commitmentTimestamp: BigFloat!, $chain: String!) {\n\tstateMachineUpdateEvents(\n\t\tfilter: {\n\t\t\tand: [\n\t\t\t\t{ stateMachineId: { equalTo: $statemachineId } }\n\t\t\t\t{ commitmentTimestamp: { greaterThanOrEqualTo: $commitmentTimestamp } }\n \t\t\t{ chain: { equalTo: $chain } }\n\t\t\t]\n\t\t}\n\t\torderBy: COMMITMENT_TIMESTAMP_DESC\n\t\tfirst: 1\n\t) {\n nodes {\n height\n stateMachineId\n chain\n blockHash\n blockNumber\n transactionHash\n commitmentTimestamp\n createdAt\n }\n }\n }\n`\n\nexport const LATEST_STATE_MACHINE_UPDATE = `\nquery LatestStateMachineUpdate($statemachineId: String!, $chain: String!) {\n\tstateMachineUpdateEvents(\n\t\tfilter: {\n\t\t\tand: [\n\t\t\t\t{ stateMachineId: { equalTo: $statemachineId } }\n\t\t\t\t{ chain: { equalTo: $chain } }\n\t\t\t]\n\t\t}\n\t\torderBy: HEIGHT_DESC\n\t\tfirst: 1\n\t) {\n\t\tnodes {\n\t\t\theight\n\t\t\tstateMachineId\n\t\t\tchain\n\t\t\tblockHash\n\t\t\tblockNumber\n\t\t\ttransactionHash\n\t\t\tcreatedAt\n\t\t}\n\t}\n}\n`\n\nexport const ASSET_TELEPORTED_BY_PARAMS = `\nquery AssetTeleportedByParams($id: String!) {\n assetTeleportedV2(id: $id) {\n id\n from\n to\n amount\n dest\n commitment\n createdAt\n blockNumber\n }\n}\n`\n\nexport const GET_RESPONSE_BY_REQUEST_ID = `\nquery GetResponseByRequestId($requestId: String!) {\n getResponses(filter: {requestId: {equalTo: $requestId}}) {\n nodes {\n id\n commitment\n responseMessage\n }\n }\n}\n`\n\nexport const ORDER_STATUS = `\nquery OrderStatus($commitment: String!) {\n orders(\n filter: { commitment: { equalTo: $commitment } }\n ) {\n nodes {\n id\n user\n sourceChain\n destChain\n commitment\n deadline\n nonce\n fees\n inputTokens\n inputAmounts\n inputValuesUSD\n inputUSD\n outputTokens\n outputAmounts\n outputBeneficiaries\n calldata\n referrer\n status\n referrer\n createdAt\n blockNumber\n blockTimestamp\n transactionHash\n statusMetadata {\n nodes {\n status\n chain\n timestamp\n blockNumber\n transactionHash\n filler\n }\n }\n }\n }\n}`\n\nexport const TOKEN_GATEWAY_ASSET_TELEPORTED_STATUS = `\nquery TokenGatewayAssetTeleportedStatus($commitment: String!) {\n tokenGatewayAssetTeleportedV2s(\n filter: { commitment: { equalTo: $commitment } }\n ) {\n nodes {\n id\n from\n to\n sourceChain\n destChain\n commitment\n amount\n usdValue\n assetId\n redeem\n status\n createdAt\n blockNumber\n blockTimestamp\n transactionHash\n statusMetadata {\n nodes {\n status\n chain\n timestamp\n blockNumber\n transactionHash\n }\n }\n }\n }\n}`\n\nexport const TOKEN_PRICE = `\nquery TokenPrice($symbol: String!) {\n tokenPrices(\n filter: { symbol: { equalTo: $symbol } }\n ) {\n nodes {\n id\n symbol\n address\n currency\n price\n lastUpdatedAt\n }\n }\n}`\n","import type { ConsolaInstance } from \"consola\"\nimport { GraphQLClient } from \"graphql-request\"\nimport {\n\tASSET_TELEPORTED_BY_PARAMS,\n\tGET_REQUEST_STATUS,\n\tORDER_STATUS,\n\tPOST_REQUEST_STATUS,\n\tTOKEN_GATEWAY_ASSET_TELEPORTED_STATUS,\n\tTOKEN_PRICE,\n} from \"./queries\"\nimport type {\n\tAssetTeleported,\n\tAssetTeleportedResponse,\n\tGetRequestResponse,\n\tGetRequestWithStatus,\n\tHexString,\n\tIndexerQueryClient,\n\tOrderResponse,\n\tOrderWithStatus,\n\tPostRequestWithStatus,\n\tRequestResponse,\n\tRequestStatusKey,\n\tTokenGatewayAssetTeleportedResponse,\n\tTokenGatewayAssetTeleportedWithStatus,\n\tTokenPrice,\n\tTokenPricesResponse,\n} from \"./types\"\nimport { DEFAULT_LOGGER, REQUEST_STATUS_WEIGHTS, retryPromise, sleep } from \"./utils\"\n\nexport function createQueryClient(config: { url: string }) {\n\treturn new GraphQLClient(config.url)\n}\n\n/**\n * Queries a request by CommitmentHash\n *\n * @example\n * import { createQueryClient, queryRequest } from \"@hyperbridge/sdk\"\n *\n * const queryClient = createQueryClient({\n * url: \"http://localhost:3000\", // URL of the Hyperbridge indexer API\n * })\n * const commitmentHash = \"0x....\"\n * const request = await queryPostRequest({ commitmentHash, queryClient })\n */\nexport function queryPostRequest(params: { commitmentHash: string; queryClient: IndexerQueryClient }) {\n\treturn _queryRequestInternal(params)\n}\n\n/**\n * Query for asset teleported events by sender, recipient, and destination chain\n * @param id - Encoded Message Id\n * @returns The asset teleported event if found, undefined otherwise\n */\nexport async function queryAssetTeleported(params: {\n\tid: HexString\n\tqueryClient: IndexerQueryClient\n}): Promise<AssetTeleported | undefined> {\n\tconst { id, queryClient } = params\n\n\treturn await retryPromise(\n\t\tasync () => {\n\t\t\tconst response = await queryClient.request<AssetTeleportedResponse>(ASSET_TELEPORTED_BY_PARAMS, { id })\n\n\t\t\tif (!response?.assetTeleportedV2) {\n\t\t\t\tthrow new Error(`AssetTeleportedEvent not found for ${id}`)\n\t\t\t}\n\n\t\t\treturn response.assetTeleportedV2\n\t\t},\n\t\t{\n\t\t\tlogMessage: \"queryingAssetTeleported\",\n\t\t\tbackoffMs: 15000,\n\t\t\tmaxRetries: 15,\n\t\t},\n\t)\n}\n\n/**\n * Queries a GET Request by CommitmentHash\n *\n * @example\n * import { createQueryClient, queryRequest } from \"@hyperbridge/sdk\"\n *\n * const queryClient = createQueryClient({\n * url: \"http://localhost:3000\", // URL of the Hyperbridge indexer API\n * })\n * const commitmentHash = \"0x....\"\n * const request = await queryGetRequest({ commitmentHash, queryClient })\n */\nexport function queryGetRequest(params: { commitmentHash: string; queryClient: IndexerQueryClient }) {\n\treturn _queryGetRequestInternal(params)\n}\n\n/**\n * Queries an order by CommitmentHash\n *\n * @example\n * import { createQueryClient, queryOrder } from \"@hyperbridge/sdk\"\n *\n * const queryClient = createQueryClient({\n * url: \"http://localhost:3000\", // URL of the Hyperbridge indexer API\n * })\n * const commitmentHash = \"0x....\"\n * const order = await queryOrder({ commitmentHash, queryClient })\n */\nexport function queryOrder(params: { commitmentHash: string; queryClient: IndexerQueryClient }) {\n\treturn _queryOrderInternal(params)\n}\n\n/**\n * Internal function to query a token gateway asset teleported by CommitmentHash\n *\n * @param params - Parameters for querying the token gateway asset teleported\n * @returns Latest status and block metadata of the token gateway asset teleported\n */\nexport async function _queryTokenGatewayAssetTeleportedInternal(\n\tparams: InternalQueryParams,\n): Promise<TokenGatewayAssetTeleportedWithStatus | undefined> {\n\tconst { commitmentHash, queryClient: client, logger = DEFAULT_LOGGER } = params\n\n\tconst response = await retryPromise(\n\t\t() => {\n\t\t\treturn client.request<TokenGatewayAssetTeleportedResponse>(TOKEN_GATEWAY_ASSET_TELEPORTED_STATUS, {\n\t\t\t\tcommitment: commitmentHash,\n\t\t\t})\n\t\t},\n\t\t{\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 1000,\n\t\t\tlogger,\n\t\t\tlogMessage: `querying 'TokenGatewayAssetTeleported' with Statuses by CommitmentHash(${commitmentHash})`,\n\t\t},\n\t)\n\n\tconst first_record = response.tokenGatewayAssetTeleportedV2s.nodes[0]\n\tif (!first_record) return\n\n\tlogger.trace(\"`TokenGatewayAssetTeleported` found\")\n\tconst { statusMetadata, ...first_node } = first_record\n\n\tconst statuses = structuredClone(statusMetadata.nodes).map((item) => ({\n\t\tstatus: item.status,\n\t\tmetadata: {\n\t\t\tblockHash: item.blockHash,\n\t\t\tblockNumber: Number.parseInt(item.blockNumber),\n\t\t\ttransactionHash: item.transactionHash,\n\t\t\ttimestamp: BigInt(item.timestamp),\n\t\t},\n\t}))\n\n\t// sort by ascending order\n\tconst sorted = statuses.sort((a, b) => {\n\t\treturn Number(a.metadata.timestamp) - Number(b.metadata.timestamp)\n\t})\n\n\treturn {\n\t\t...first_node,\n\t\tamount: BigInt(first_node.amount),\n\t\tblockNumber: BigInt(first_node.blockNumber),\n\t\tblockTimestamp: BigInt(first_node.blockTimestamp),\n\t\tcreatedAt: new Date(first_node.createdAt),\n\t\tstatuses: sorted,\n\t}\n}\n\ntype InternalQueryParams = {\n\tcommitmentHash: string\n\tqueryClient: IndexerQueryClient\n\tlogger?: ConsolaInstance\n}\n\n/**\n * Queries a request by CommitmentHash\n\n * @param hash - Can be commitment\n * @returns Latest status and block metadata of the request\n */\nexport async function _queryRequestInternal(params: InternalQueryParams): Promise<PostRequestWithStatus | undefined> {\n\tconst { commitmentHash: hash, queryClient: client, logger: logger_ = DEFAULT_LOGGER } = params\n\n\tconst logger = logger_.withTag(\"[queryRequest]\")\n\n\tconst response = await retryPromise(\n\t\t() => {\n\t\t\treturn client.request<RequestResponse>(POST_REQUEST_STATUS, {\n\t\t\t\thash,\n\t\t\t})\n\t\t},\n\t\t{\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 1000,\n\t\t\tlogger,\n\t\t\tlogMessage: `querying 'Request' with Statuses by CommitmentHash(${hash})`,\n\t\t},\n\t)\n\n\tconst first_record = response.requestV2s.nodes[0]\n\tif (!first_record) return\n\n\tlogger.trace(\"`Request` found\")\n\tconst { statusMetadata, ...first_node } = first_record\n\n\tconst statuses = structuredClone(statusMetadata.nodes).map((item) => ({\n\t\tstatus: item.status as any,\n\t\tmetadata: {\n\t\t\tblockHash: item.blockHash,\n\t\t\tblockNumber: Number.parseInt(item.blockNumber),\n\t\t\ttransactionHash: item.transactionHash,\n\t\t\ttimestamp: item?.timestamp,\n\t\t},\n\t}))\n\n\t// sort by ascending order\n\tconst sorted = statuses.sort(\n\t\t(a, b) =>\n\t\t\tREQUEST_STATUS_WEIGHTS[a.status as RequestStatusKey] - REQUEST_STATUS_WEIGHTS[b.status as RequestStatusKey],\n\t)\n\tlogger.trace(\"Statuses found\", statuses)\n\n\tconst request: PostRequestWithStatus = {\n\t\t...first_node,\n\t\ttimeoutTimestamp: BigInt(first_node.timeoutTimestamp),\n\t\tstatuses: sorted,\n\t}\n\n\treturn request\n}\n\n/**\n * Queries a request by any of its associated hashes and returns it alongside its statuses\n * Statuses will be one of SOURCE, HYPERBRIDGE_DELIVERED and DESTINATION\n *\n * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n * @returns Latest status and block metadata of the request\n */\nexport async function _queryGetRequestInternal(params: InternalQueryParams): Promise<GetRequestWithStatus | undefined> {\n\tconst { commitmentHash, queryClient: client, logger = DEFAULT_LOGGER } = params\n\n\tconst response = await retryPromise(\n\t\t() => {\n\t\t\treturn client.request<GetRequestResponse>(GET_REQUEST_STATUS, {\n\t\t\t\tcommitment: commitmentHash,\n\t\t\t})\n\t\t},\n\t\t{\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 1000,\n\t\t\tlogger,\n\t\t\tlogMessage: `query \\`IGetRequest\\` with commitment hash ${commitmentHash}`,\n\t\t},\n\t)\n\n\tif (!response.getRequestV2s.nodes[0]) return\n\n\tlogger.trace(\"`Request` found\")\n\n\tconst statuses = response.getRequestV2s.nodes[0].statusMetadata.nodes.map((item) => ({\n\t\tstatus: item.status as any,\n\t\tmetadata: {\n\t\t\tblockHash: item.blockHash,\n\t\t\tblockNumber: Number.parseInt(item.blockNumber),\n\t\t\ttransactionHash: item.transactionHash,\n\t\t\ttimestamp: item?.timestamp,\n\t\t},\n\t}))\n\n\t// sort by ascending order\n\tconst sorted = statuses.sort((a, b) => {\n\t\treturn (\n\t\t\tREQUEST_STATUS_WEIGHTS[a.status as RequestStatusKey] - REQUEST_STATUS_WEIGHTS[b.status as RequestStatusKey]\n\t\t)\n\t})\n\n\tconst { statusMetadata, ...rest } = response.getRequestV2s.nodes[0]\n\n\treturn {\n\t\t...rest,\n\t\tcommitment: commitmentHash as HexString,\n\t\ttimeoutTimestamp: BigInt(rest.timeoutTimestamp),\n\t\tnonce: BigInt(rest.nonce),\n\t\theight: BigInt(rest.height),\n\t\tstatuses: sorted,\n\t}\n}\n\n/**\n * Internal function to query an order by CommitmentHash\n *\n * @param params - Parameters for querying the order\n * @returns Latest status and block metadata of the order\n */\nexport async function _queryOrderInternal(params: InternalQueryParams): Promise<OrderWithStatus | undefined> {\n\tconst { commitmentHash, queryClient: client, logger = DEFAULT_LOGGER } = params\n\n\tconst response = await retryPromise(\n\t\t() => {\n\t\t\treturn client.request<OrderResponse>(ORDER_STATUS, {\n\t\t\t\tcommitment: commitmentHash,\n\t\t\t})\n\t\t},\n\t\t{\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 1000,\n\t\t\tlogger,\n\t\t\tlogMessage: `querying 'Order' with Statuses by CommitmentHash(${commitmentHash})`,\n\t\t},\n\t)\n\n\tconst first_record = response.orderPlaceds.nodes[0]\n\tif (!first_record) return\n\n\tlogger.trace(\"`Order` found\")\n\tconst { statusMetadata, ...first_node } = first_record\n\n\tconst statuses = structuredClone(statusMetadata.nodes).map((item) => ({\n\t\tstatus: item.status,\n\t\tmetadata: {\n\t\t\tblockHash: item.blockHash,\n\t\t\tblockNumber: Number.parseInt(item.blockNumber),\n\t\t\ttransactionHash: item.transactionHash,\n\t\t\ttimestamp: BigInt(item.timestamp),\n\t\t\tfiller: item.filler,\n\t\t},\n\t}))\n\n\t// sort by ascending order\n\tconst sorted = statuses.sort((a, b) => {\n\t\t// Since OrderStatus and RequestStatus are different enums, we'll just sort by timestamp\n\t\treturn Number(a.metadata.timestamp) - Number(b.metadata.timestamp)\n\t})\n\n\tconst order: OrderWithStatus = {\n\t\t...first_node,\n\t\tdeadline: BigInt(first_node.deadline),\n\t\tnonce: BigInt(first_node.nonce),\n\t\tfees: BigInt(first_node.fees),\n\t\tinputAmounts: first_node.inputAmounts.map(BigInt),\n\t\toutputAmounts: first_node.outputAmounts.map(BigInt),\n\t\tblockNumber: BigInt(first_node.blockNumber),\n\t\tblockTimestamp: BigInt(first_node.blockTimestamp),\n\t\tcreatedAt: new Date(first_node.createdAt),\n\t\tstatuses: sorted,\n\t}\n\n\treturn order\n}\n\ntype TokenPriceQueryParams = {\n\tsymbol: string\n\tqueryClient: IndexerQueryClient\n\tlogger?: ConsolaInstance\n}\n\nexport async function _queryTokenPriceInternal(params: TokenPriceQueryParams): Promise<TokenPrice | undefined> {\n\tconst { symbol, queryClient: client, logger = DEFAULT_LOGGER } = params\n\n\tconst response = await retryPromise(\n\t\t() => {\n\t\t\treturn client.request<TokenPricesResponse>(TOKEN_PRICE, { symbol })\n\t\t},\n\t\t{\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 1000,\n\t\t\tlogger,\n\t\t\tlogMessage: `querying 'TokenPrice' by Symbol(${symbol})`,\n\t\t},\n\t)\n\n\tconst item = response.tokenPrices.nodes?.[0]\n\tif (!item) return\n\n\tlogger.trace(\"`TokenPrice` found\")\n\treturn item\n}\n","import type {\n\tGetRequestWithStatus,\n\tGetResponseByRequestIdResponse,\n\tHexString,\n\tPostRequestWithStatus,\n\tResponseCommitmentWithValues,\n\tStateMachineResponse,\n\tStateMachineUpdate,\n} from \"@/types\"\nimport {\n\t_queryGetRequestInternal,\n\t_queryRequestInternal,\n} from \"@/queryClient\"\nimport {\n\tGET_RESPONSE_BY_REQUEST_ID,\n\tLATEST_STATE_MACHINE_UPDATE,\n\tSTATE_MACHINE_UPDATES_BY_HEIGHT,\n\tSTATE_MACHINE_UPDATES_BY_HEIGHT_DESC,\n\tSTATE_MACHINE_UPDATES_BY_TIMESTAMP,\n} from \"@/queries\"\nimport { dateStringtoTimestamp } from \"@/utils\"\n\nimport type { ClientContext } from \".\"\nimport { withRetry } from \"./utils\"\n\n/**\n * Read-only indexer queries — state machine updates, post/get requests, and\n * response lookups. Groups the thin GraphQL wrappers that other client\n * sub-modules consume when building finality events and status streams.\n */\nexport class Queries {\n\tprivate readonly logger\n\n\tconstructor(private readonly ctx: ClientContext) {\n\t\tthis.logger = ctx.logger.withTag(\"[Queries]\")\n\t}\n\n\t/**\n\t * Query for a single state machine update event greater than or equal to the given height.\n\t */\n\tasync queryStateMachineUpdateByHeight({\n\t\tstatemachineId,\n\t\theight,\n\t\tchain,\n\t}: {\n\t\tstatemachineId: string\n\t\tchain: string\n\t\theight: number\n\t}): Promise<StateMachineUpdate | undefined> {\n\t\tconst logger = this.logger.withTag(\"[queryStateMachineUpdateByHeight]()\")\n\t\tconst message = `querying StateMachineId(${statemachineId}) update by Height(${height}) in chain Chain(${chain})`\n\n\t\t// Query both ASC (for earliest timestamp) and DESC (for latest state machine height)\n\t\tconst [ascResponse, descResponse] = await Promise.all([\n\t\t\twithRetry(\n\t\t\t\tthis.ctx,\n\t\t\t\t() =>\n\t\t\t\t\tthis.ctx.graphql.request<StateMachineResponse>(STATE_MACHINE_UPDATES_BY_HEIGHT, {\n\t\t\t\t\t\tstatemachineId,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tchain,\n\t\t\t\t\t}),\n\t\t\t),\n\t\t\twithRetry(\n\t\t\t\tthis.ctx,\n\t\t\t\t() =>\n\t\t\t\t\tthis.ctx.graphql.request<StateMachineResponse>(STATE_MACHINE_UPDATES_BY_HEIGHT_DESC, {\n\t\t\t\t\t\tstatemachineId,\n\t\t\t\t\t\theight,\n\t\t\t\t\t\tchain,\n\t\t\t\t\t}),\n\t\t\t),\n\t\t])\n\n\t\tconst ascNode = ascResponse?.stateMachineUpdateEvents?.nodes[0]\n\t\tconst descNode = descResponse?.stateMachineUpdateEvents?.nodes[0]\n\n\t\tif (!ascNode) return undefined\n\n\t\tconst timestamp = Math.floor(dateStringtoTimestamp(ascNode.createdAt) / 1000)\n\t\tconst stateMachineHeight = descNode?.height ?? ascNode.height\n\n\t\tconst combined: StateMachineUpdate = {\n\t\t\theight: stateMachineHeight,\n\t\t\tchain: ascNode.chain,\n\t\t\tblockHash: ascNode.blockHash,\n\t\t\tblockNumber: ascNode.blockNumber,\n\t\t\ttransactionHash: ascNode.transactionHash,\n\t\t\ttransactionIndex: ascNode.transactionIndex,\n\t\t\tstateMachineId: ascNode.stateMachineId,\n\t\t\ttimestamp,\n\t\t}\n\n\t\tlogger.trace(`${message} -> response`, combined)\n\t\treturn combined\n\t}\n\n\t/**\n\t * Query for a single state machine update event greater than or equal to the given timestamp.\n\t */\n\tasync queryStateMachineUpdateByTimestamp({\n\t\tstatemachineId,\n\t\tcommitmentTimestamp,\n\t\tchain,\n\t}: {\n\t\tstatemachineId: string\n\t\tcommitmentTimestamp: bigint\n\t\tchain: string\n\t}): Promise<StateMachineUpdate | undefined> {\n\t\tconst logger = this.logger.withTag(\"[queryStateMachineUpdateByTimestamp]\")\n\n\t\tconst response = await withRetry(this.ctx, () =>\n\t\t\tthis.ctx.graphql.request<StateMachineResponse>(STATE_MACHINE_UPDATES_BY_TIMESTAMP, {\n\t\t\t\tstatemachineId,\n\t\t\t\tcommitmentTimestamp: commitmentTimestamp.toString(),\n\t\t\t\tchain,\n\t\t\t}),\n\t\t)\n\n\t\tconst first_node = response?.stateMachineUpdateEvents?.nodes[0]\n\t\tif (first_node?.createdAt) {\n\t\t\t// @ts-ignore\n\t\t\tfirst_node.timestamp = Math.floor(dateStringtoTimestamp(first_node.createdAt) / 1000)\n\t\t}\n\t\tlogger.trace(\"Response >\", first_node)\n\n\t\t// @ts-ignore\n\t\treturn first_node\n\t}\n\n\t/**\n\t * Query for the latest state machine update height.\n\t */\n\tasync queryLatestStateMachineHeight({\n\t\tstatemachineId,\n\t\tchain,\n\t}: {\n\t\tstatemachineId: string\n\t\tchain: string\n\t}): Promise<bigint | undefined> {\n\t\tconst logger = this.logger.withTag(\"[queryLatestStateMachineHeight]()\")\n\n\t\tconst response = await withRetry(this.ctx, () =>\n\t\t\tthis.ctx.graphql.request<StateMachineResponse>(LATEST_STATE_MACHINE_UPDATE, {\n\t\t\t\tstatemachineId,\n\t\t\t\tchain,\n\t\t\t}),\n\t\t)\n\n\t\tconst first_node = response?.stateMachineUpdateEvents?.nodes[0]\n\t\tif (!first_node) return undefined\n\n\t\tlogger.trace(\"Latest height >\", first_node.height)\n\t\treturn BigInt(first_node.height)\n\t}\n\n\t/**\n\t * Queries a POST request by commitment hash.\n\t */\n\tasync queryPostRequest(commitmentHash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\treturn _queryRequestInternal({\n\t\t\tcommitmentHash,\n\t\t\tqueryClient: this.ctx.graphql,\n\t\t\tlogger: this.ctx.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Queries a GET request by any of its associated hashes.\n\t */\n\tasync queryGetRequest(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\treturn _queryGetRequestInternal({\n\t\t\tcommitmentHash: hash,\n\t\t\tqueryClient: this.ctx.graphql,\n\t\t\tlogger: this.ctx.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Queries the response associated with a specific request ID and returns its commitment.\n\t */\n\tasync queryResponseByRequestId(requestId: string): Promise<ResponseCommitmentWithValues | undefined> {\n\t\tconst response = await withRetry(this.ctx, () =>\n\t\t\tthis.ctx.graphql.request<GetResponseByRequestIdResponse>(GET_RESPONSE_BY_REQUEST_ID, { requestId }),\n\t\t)\n\n\t\tif (!response.getResponses.nodes.length) return undefined\n\n\t\tconst firstResponse = response.getResponses.nodes[0]\n\t\treturn {\n\t\t\tcommitment: firstResponse.commitment,\n\t\t\tvalues: firstResponse.responseMessage,\n\t\t}\n\t}\n}\n","import { type ConsolaInstance, LogLevels, createConsola } from \"consola\"\n\nimport type { IChain, SubstrateChain } from \"@/chain\"\nimport type {\n\tClientConfig,\n\tGetRequestWithStatus,\n\tHexString,\n\tIndexerQueryClient,\n\tPostRequestTimeoutStatus,\n\tPostRequestWithStatus,\n\tRequestStatusWithMetadata,\n\tRetryConfig,\n\tStateMachineUpdate,\n} from \"@/types\"\nimport { DEFAULT_POLL_INTERVAL } from \"@/utils\"\n\nimport { GetRequestClient } from \"./GetRequestClient\"\nimport { PostRequestClient } from \"./PostRequestClient\"\nimport { Queries } from \"./Queries\"\nimport { timeoutStream } from \"./utils\"\n\n/**\n * Shared dependencies passed to every sub-module of {@link IsmpClient}.\n *\n * Sub-modules read their chain configuration, GraphQL client, logger, and\n * retry helpers off of this object rather than reaching back into the facade.\n *\n * Internal — not part of the public SDK surface.\n */\nexport interface ClientContext {\n\t/** Chain configuration + indexer poll interval. `pollInterval` is guaranteed set. */\n\tconfig: ClientConfig & { pollInterval: number }\n\t/** GraphQL client used to query the Hyperbridge indexer. */\n\tgraphql: IndexerQueryClient\n\t/** Structured logger (tag-scoped per sub-module). */\n\tlogger: ConsolaInstance\n\t/** Default retry config — sub-modules may override per-call. */\n\tdefaultRetryConfig: RetryConfig\n}\n\n/**\n * `IsmpClient` tracks ISMP POST/GET requests and their timeout flows across\n * source, Hyperbridge, and destination chains.\n *\n * The client:\n * - queries the Hyperbridge indexer for request status,\n * - augments status trails with derived finality events (`SOURCE_FINALIZED`,\n * `HYPERBRIDGE_FINALIZED`, timeout events),\n * - streams live updates while a request is in flight, and\n * - generates the calldata a relayer needs to finalize a request on the\n * counterparty chain (including the HandlerV2 batch path).\n *\n * The RPC URLs in {@link ClientConfig} must point to archive nodes — timeout\n * and challenge-period flows reach back into older blocks for storage proofs.\n *\n * @example\n * ```typescript\n * const client = new IsmpClient({\n * queryClient,\n * source: sourceChain,\n * dest: destChain,\n * hyperbridge: hyperbridgeChain,\n * pollInterval: 2000,\n * })\n *\n * const status = await client.queryRequestWithStatus(\"0x1234...\")\n *\n * for await (const update of client.postRequestStatusStream(\"0x1234...\")) {\n * console.log(`Request status: ${update.status}`)\n * }\n * ```\n */\nexport class IsmpClient {\n\t/** Shared context threaded through every sub-module. */\n\tprotected readonly ctx: ClientContext\n\t/** Indexer read-only queries (state machine updates, post/get requests). */\n\tprotected readonly queries: Queries\n\t/** POST request lifecycle: snapshot + streaming status, timeout flow, aggregation. */\n\tprotected readonly postRequest: PostRequestClient\n\t/** GET request snapshot + streaming status. */\n\tprotected readonly getRequest: GetRequestClient\n\n\tconstructor(config: PartialClientConfig) {\n\t\tconst logger = createConsola({\n\t\t\tlevel: LogLevels[config.tracing ? \"trace\" : \"info\"],\n\t\t\tformatOptions: { columns: 80, colors: true, compact: true, date: false },\n\t\t})\n\n\t\tconst defaultRetryConfig: RetryConfig = { maxRetries: 3, backoffMs: 1000 }\n\n\t\tthis.ctx = {\n\t\t\tconfig: { pollInterval: DEFAULT_POLL_INTERVAL, ...config },\n\t\t\tgraphql: config.queryClient,\n\t\t\tlogger,\n\t\t\tdefaultRetryConfig,\n\t\t}\n\n\t\tthis.queries = new Queries(this.ctx)\n\t\tthis.postRequest = new PostRequestClient(this.ctx, this.queries)\n\t\tthis.getRequest = new GetRequestClient(this.ctx, this.queries)\n\t}\n\n\t/** Source chain instance. */\n\tget source(): IChain {\n\t\treturn this.ctx.config.source\n\t}\n\t/** Destination chain instance. */\n\tget dest(): IChain {\n\t\treturn this.ctx.config.dest\n\t}\n\t/** Hyperbridge chain instance. */\n\tget hyperbridge(): IChain {\n\t\treturn this.ctx.config.hyperbridge\n\t}\n\n\t/**\n\t * Query for the first state machine update at or after `height` for the given\n\t * state machine on the indicated counterparty chain.\n\t *\n\t * @returns The matching update, or `undefined` if none has been indexed yet.\n\t */\n\tqueryStateMachineUpdateByHeight(args: {\n\t\t/** State machine id whose commitment is being looked up (e.g. `EVM-1`). */\n\t\tstatemachineId: string\n\t\t/** Chain id where the update was applied (e.g. `POLKADOT-3367`). */\n\t\tchain: string\n\t\t/** Lower bound on the update height. */\n\t\theight: number\n\t}): Promise<StateMachineUpdate | undefined> {\n\t\treturn this.queries.queryStateMachineUpdateByHeight(args)\n\t}\n\n\t/**\n\t * Query for the first state machine update whose commitment timestamp is at\n\t * or after `commitmentTimestamp`. Used by timeout flows to find when a\n\t * counterparty chain finalized a state past the request's deadline.\n\t */\n\tqueryStateMachineUpdateByTimestamp(args: {\n\t\tstatemachineId: string\n\t\tcommitmentTimestamp: bigint\n\t\tchain: string\n\t}): Promise<StateMachineUpdate | undefined> {\n\t\treturn this.queries.queryStateMachineUpdateByTimestamp(args)\n\t}\n\n\t/**\n\t * Returns the latest known state machine height for a given state machine,\n\t * or `undefined` if the indexer has no record yet.\n\t */\n\tqueryLatestStateMachineHeight(args: { statemachineId: string; chain: string }): Promise<bigint | undefined> {\n\t\treturn this.queries.queryLatestStateMachineHeight(args)\n\t}\n\n\t/**\n\t * Queries a POST request by any of its associated hashes (commitment,\n\t * source/destination/hyperbridge tx hash, or timeout tx hash). Returns the\n\t * raw indexed record without derived finality events.\n\t */\n\tqueryPostRequest(commitmentHash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\treturn this.queries.queryPostRequest(commitmentHash)\n\t}\n\n\t/**\n\t * Queries a GET request by any of its associated hashes. Returns the raw\n\t * indexed record without derived finality events.\n\t */\n\tqueryGetRequest(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\treturn this.queries.queryGetRequest(hash)\n\t}\n\n\t/**\n\t * Queries the response a GET request's values come from, by the request's id.\n\t * Returns the response commitment plus the indexed storage values.\n\t */\n\tqueryResponseByRequestId(requestId: string) {\n\t\treturn this.queries.queryResponseByRequestId(requestId)\n\t}\n\n\t/**\n\t * Snapshot query for a POST request: returns the indexed record with all\n\t * inferred finality and timeout events (`SOURCE_FINALIZED`,\n\t * `HYPERBRIDGE_FINALIZED`, `PENDING_TIMEOUT`, …) sorted by progress weight.\n\t *\n\t * Unlike {@link postRequestStatusStream} this does not poll; each call\n\t * returns a fresh snapshot based on the indexer's current state.\n\t */\n\tqueryRequestWithStatus(hash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\treturn this.postRequest.queryRequestWithStatus(hash)\n\t}\n\n\t/**\n\t * Streams status updates for a POST request as it progresses through the\n\t * source → Hyperbridge → destination lifecycle. Ends when the request\n\t * reaches its destination or its timeout becomes pending.\n\t *\n\t * Yields the `HYPERBRIDGE_FINALIZED` event with relayer calldata attached —\n\t * this is the calldata a caller submits to the destination handler to\n\t * deliver the request (bundled `handleConsensus` + `handlePostRequests` via\n\t * `batchCall`).\n\t */\n\tpostRequestStatusStream(hash: HexString): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\treturn this.postRequest.postRequestStatusStream(hash)\n\t}\n\n\t/**\n\t * Streams timeout status updates for a POST request past its\n\t * `timeoutTimestamp`. Drives the `PENDING_TIMEOUT →\n\t * DESTINATION_FINALIZED_TIMEOUT → HYPERBRIDGE_FINALIZED_TIMEOUT → TIMED_OUT`\n\t * progression, submitting unsigned extrinsics to Hyperbridge where required\n\t * and yielding source-chain timeout calldata at the final step.\n\t */\n\tpostRequestTimeoutStream(hash: HexString): AsyncGenerator<PostRequestTimeoutStatus, void> {\n\t\treturn this.postRequest.postRequestTimeoutStream(hash)\n\t}\n\n\t/**\n\t * Relays a POST request to Hyperbridge from source-chain state (when the\n\t * request wasn't aggregated there yet) and returns the finalized Hyperbridge\n\t * extrinsic receipt. Used to bootstrap status tracking for requests that\n\t * Hyperbridge hasn't seen.\n\t */\n\taggregateTransactionWithCommitment(\n\t\tcommitment: HexString,\n\t): Promise<Awaited<ReturnType<SubstrateChain[\"submitUnsigned\"]>>> {\n\t\treturn this.postRequest.aggregateTransactionWithCommitment(commitment)\n\t}\n\n\t/**\n\t * Snapshot query for a GET request: returns the indexed record with all\n\t * inferred finality events (`SOURCE_FINALIZED`, `HYPERBRIDGE_FINALIZED`)\n\t * sorted by progress weight.\n\t */\n\tqueryGetRequestWithStatus(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\treturn this.getRequest.queryGetRequestWithStatus(hash)\n\t}\n\n\t/**\n\t * Streams status updates for a GET request. Ends when the response is\n\t * delivered back to the source chain or the request's timeout elapses.\n\t * Yields the `HYPERBRIDGE_FINALIZED` event with source-chain calldata for\n\t * submitting the response (bundled `handleConsensus` + `handleGetResponses`\n\t * via `batchCall`).\n\t */\n\tgetRequestStatusStream(hash: HexString): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\treturn this.getRequest.getRequestStatusStream(hash)\n\t}\n\n\n\t/**\n\t * Low-level watcher that yields a single `PENDING_TIMEOUT` event once\n\t * `chain.timestamp()` passes `timeoutTimestamp`. Used internally by the\n\t * status streams; exposed for callers that want to race their own logic\n\t * against a request's deadline.\n\t */\n\ttimeoutStream(timeoutTimestamp: bigint, chain: IChain): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\treturn timeoutStream(this.ctx, timeoutTimestamp, chain)\n\t}\n}\n\ninterface PartialClientConfig extends Omit<ClientConfig, \"pollInterval\"> {\n\tpollInterval?: number\n}\n","import fsDriver from \"unstorage/drivers/fs\"\nimport type { LoadDriver } from \"../types\"\n\nexport const loadDriver: LoadDriver = ({ options }) => {\n\treturn fsDriver({ base: options?.basePath ?? \"./.hyperbridge-cache\" })\n}\n","import { createStorage } from \"unstorage\"\n// @ts-ignore - unstorage types don't resolve due to package.json exports\nimport inMemoryDriver from \"unstorage/drivers/memory\"\nimport { loadDriver } from \"@/storage/load-driver\"\nimport { bytesToHex, hexToBytes } from \"viem\"\nimport { GetRequest, Proof } from \"@/utils/substrate\"\nimport {\n\tconvertCodecToIGetRequest,\n\tconvertIGetRequestToCodec,\n\tconvertCodecToIProof,\n\tconvertIProofToCodec,\n} from \"@/chains/substrate\"\nimport type { IGetRequest, HexString } from \"@/types\"\nimport type { IProof } from \"@/chain\"\nimport type { CancellationStorageOptions, SessionKeyStorageOptions, StorageDriverKey } from \"@/storage/types\"\n\n/**\n * Encode IGetRequest to hex string using scale codec\n */\nfunction encodeIGetRequest(request: IGetRequest): string {\n\tconst codec = convertIGetRequestToCodec(request)\n\tconst encoded = GetRequest.enc(codec)\n\treturn bytesToHex(encoded)\n}\n\n/**\n * Decode hex string back to IGetRequest using scale codec\n */\nfunction decodeIGetRequest(hex: string): IGetRequest {\n\tconst bytes = hexToBytes(hex as HexString)\n\tconst decoded = GetRequest.dec(bytes)\n\treturn convertCodecToIGetRequest(decoded)\n}\n\n/**\n * Encode IProof to hex string using scale codec\n */\nfunction encodeIProof(proof: IProof): string {\n\tconst codec = convertIProofToCodec(proof)\n\tconst encoded = Proof.enc(codec)\n\treturn bytesToHex(encoded)\n}\n\n/**\n * Decode hex string back to IProof using scale codec\n */\nfunction decodeIProof(hex: string): IProof {\n\tconst bytes = hexToBytes(hex as HexString)\n\tconst decoded = Proof.dec(bytes)\n\treturn convertCodecToIProof(decoded)\n}\n\nconst detectEnvironment = (): StorageDriverKey => {\n\tif (typeof process !== \"undefined\" && !!process.versions?.node) return \"node\"\n\tif (typeof globalThis !== \"undefined\" && \"localStorage\" in globalThis) return \"localstorage\"\n\tif (typeof globalThis !== \"undefined\" && \"indexedDB\" in globalThis) return \"indexeddb\"\n\treturn \"memory\"\n}\n\nexport function createCancellationStorage(options: CancellationStorageOptions = {}) {\n\tconst key = options.env ?? detectEnvironment()\n\tconst driver = loadDriver({ key, options }) ?? inMemoryDriver()\n\tconst baseStorage = createStorage({ driver })\n\n\tconst getItem = async <T>(key: string): Promise<T | null> => {\n\t\tconst value = await baseStorage.getItem<string>(key)\n\t\tif (!value) return null\n\n\t\tif (key.includes(\"getRequest\")) {\n\t\t\tconst decoded = decodeIGetRequest(value)\n\t\t\treturn decoded as T\n\t\t}\n\n\t\tif (key.includes(\"Proof\")) {\n\t\t\tconst decoded = decodeIProof(value)\n\t\t\treturn decoded as T\n\t\t}\n\n\t\tthrow new Error(`Unknown storage key type: ${key}`)\n\t}\n\n\tconst setItem = async (key: string, value: unknown): Promise<void> => {\n\t\tif (key.includes(\"getRequest\") && value && typeof value === \"object\") {\n\t\t\tconst encoded = encodeIGetRequest(value as IGetRequest)\n\t\t\tawait baseStorage.setItem(key, encoded)\n\t\t\treturn\n\t\t}\n\n\t\tif (key.includes(\"Proof\") && value && typeof value === \"object\") {\n\t\t\tconst encoded = encodeIProof(value as IProof)\n\t\t\tawait baseStorage.setItem(key, encoded)\n\t\t\treturn\n\t\t}\n\n\t\tthrow new Error(`Unknown storage key type: ${key}`)\n\t}\n\n\tconst removeItem = async (key: string): Promise<void> => {\n\t\tawait baseStorage.removeItem(key)\n\t}\n\n\treturn Object.freeze({\n\t\t...baseStorage,\n\t\tgetItem,\n\t\tsetItem,\n\t\tremoveItem,\n\t})\n}\n\nexport const STORAGE_KEYS = Object.freeze({\n\tdestProof: (orderId: string) => `cancel-order:${orderId}:destProof`,\n\tgetRequest: (orderId: string) => `cancel-order:${orderId}:getRequest`,\n\tsourceProof: (orderId: string) => `cancel-order:${orderId}:sourceProof`,\n\tpostCommitment: (orderId: string) => `cancel-order:${orderId}:postCommitment`,\n})\n\n/**\n * Creates a simple string-based storage for tracking used user operations per commitment.\n * Values are stored as raw strings under their provided keys.\n */\nexport function createUsedUserOpsStorage(options: SessionKeyStorageOptions = {}) {\n\tconst key = options.env ?? detectEnvironment()\n\tconst driver = loadDriver({ key, options }) ?? inMemoryDriver()\n\tconst baseStorage = createStorage({ driver })\n\n\tconst getItem = async (key: string): Promise<string | null> => {\n\t\tconst value = await baseStorage.getItem<string>(key)\n\t\treturn value ?? null\n\t}\n\n\tconst setItem = async (key: string, value: string): Promise<void> => {\n\t\tawait baseStorage.setItem(key, value)\n\t}\n\n\tconst removeItem = async (key: string): Promise<void> => {\n\t\tawait baseStorage.removeItem(key)\n\t}\n\n\treturn Object.freeze({\n\t\tgetItem,\n\t\tsetItem,\n\t\tremoveItem,\n\t})\n}\n\n/**\n * Session key data stored for each order\n */\nexport interface SessionKeyData {\n\t/**\n\t * The private key as a hex string\n\t */\n\tprivateKey: HexString\n\n\t/**\n\t * The derived public address\n\t */\n\taddress: HexString\n\n\t/**\n\t * The order commitment this session key is associated with.\n\t * This may be undefined for session keys that were created\n\t * but whose corresponding order has not been finalized yet.\n\t */\n\tcommitment?: HexString\n\n\t/**\n\t * Timestamp when the session key was created\n\t */\n\tcreatedAt: number\n}\n\n/**\n * Creates a session key storage instance for IntentGatewayV2 orders.\n * The storage is used to persist session key private keys so they can be\n * used later to sign solver selection messages.\n *\n * @param options - Optional configuration for the storage driver\n * @returns A storage instance with methods to get, set, and remove session keys\n */\nexport function createSessionKeyStorage(options: SessionKeyStorageOptions = {}) {\n\tconst key = options.env ?? detectEnvironment()\n\tconst driver = loadDriver({ key, options }) ?? inMemoryDriver()\n\tconst baseStorage = createStorage({ driver })\n\n\tconst SESSION_KEY_PREFIX = \"session-key:\"\n\tconst SESSION_KEY_ADDRESS_PREFIX = \"session-key-address:\"\n\n\t/**\n\t * Gets a session key by order commitment\n\t */\n\tconst getSessionKey = async (commitment: HexString): Promise<SessionKeyData | null> => {\n\t\tconst storageKey = `${SESSION_KEY_PREFIX}${commitment}`\n\t\tconst value = await baseStorage.getItem<string>(storageKey)\n\t\tif (!value) return null\n\n\t\ttry {\n\t\t\treturn JSON.parse(value) as SessionKeyData\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t}\n\n\t/**\n\t * Gets a session key by session key address\n\t */\n\tconst getSessionKeyByAddress = async (address: HexString): Promise<SessionKeyData | null> => {\n\t\tconst storageKey = `${SESSION_KEY_ADDRESS_PREFIX}${address.toLowerCase()}`\n\t\tconst value = await baseStorage.getItem<string>(storageKey)\n\t\tif (!value) return null\n\n\t\ttry {\n\t\t\treturn JSON.parse(value) as SessionKeyData\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t}\n\n\t/**\n\t * Stores a session key for an order commitment\n\t */\n\tconst setSessionKey = async (commitment: HexString, data: SessionKeyData): Promise<void> => {\n\t\tconst storageKey = `${SESSION_KEY_PREFIX}${commitment}`\n\t\tawait baseStorage.setItem(storageKey, JSON.stringify(data))\n\t}\n\n\t/**\n\t * Stores a session key for a session key address\n\t */\n\tconst setSessionKeyByAddress = async (address: HexString, data: SessionKeyData): Promise<void> => {\n\t\tconst storageKey = `${SESSION_KEY_ADDRESS_PREFIX}${address.toLowerCase()}`\n\t\tawait baseStorage.setItem(storageKey, JSON.stringify(data))\n\t}\n\n\t/**\n\t * Removes a session key by order commitment\n\t */\n\tconst removeSessionKey = async (commitment: HexString): Promise<void> => {\n\t\tconst storageKey = `${SESSION_KEY_PREFIX}${commitment}`\n\t\tawait baseStorage.removeItem(storageKey)\n\t}\n\n\t/**\n\t * Removes a session key by session key address\n\t */\n\tconst removeSessionKeyByAddress = async (address: HexString): Promise<void> => {\n\t\tconst storageKey = `${SESSION_KEY_ADDRESS_PREFIX}${address.toLowerCase()}`\n\t\tawait baseStorage.removeItem(storageKey)\n\t}\n\n\t/**\n\t * Lists all stored session keys\n\t */\n\tconst listSessionKeys = async (): Promise<SessionKeyData[]> => {\n\t\tconst keys = await baseStorage.getKeys(SESSION_KEY_PREFIX)\n\t\tconst sessionKeys: SessionKeyData[] = []\n\n\t\tfor (const key of keys) {\n\t\t\tconst value = await baseStorage.getItem<string>(key)\n\t\t\tif (value) {\n\t\t\t\ttry {\n\t\t\t\t\tsessionKeys.push(JSON.parse(value) as SessionKeyData)\n\t\t\t\t} catch {\n\t\t\t\t\t// Skip invalid entries\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sessionKeys\n\t}\n\n\treturn Object.freeze({\n\t\tgetSessionKey,\n\t\tgetSessionKeyByAddress,\n\t\tsetSessionKey,\n\t\tsetSessionKeyByAddress,\n\t\tremoveSessionKey,\n\t\tremoveSessionKeyByAddress,\n\t\tlistSessionKeys,\n\t})\n}\n\n/**\n * Storage keys for session key storage\n */\nexport const SESSION_KEY_STORAGE_KEYS = Object.freeze({\n\tsessionKey: (commitment: string) => `session-key:${commitment}`,\n\tsessionKeyByAddress: (address: string) => `session-key-address:${address.toLowerCase()}`,\n})\n","const ABI = [\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteExactInput\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint160[]\",\n\t\t\t\tname: \"sqrtPriceX96AfterList\",\n\t\t\t\ttype: \"uint160[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint32[]\",\n\t\t\t\tname: \"initializedTicksCrossedList\",\n\t\t\t\ttype: \"uint32[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"gasEstimate\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"tokenIn\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"tokenOut\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"amountIn\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint24\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint24\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint160\",\n\t\t\t\t\t\tname: \"sqrtPriceLimitX96\",\n\t\t\t\t\t\ttype: \"uint160\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct IQuoterV2.QuoteExactInputSingleParams\",\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteExactInputSingle\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint160\",\n\t\t\t\tname: \"sqrtPriceX96After\",\n\t\t\t\ttype: \"uint160\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint32\",\n\t\t\t\tname: \"initializedTicksCrossed\",\n\t\t\t\ttype: \"uint32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"gasEstimate\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"path\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountOut\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteExactOutput\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint160[]\",\n\t\t\t\tname: \"sqrtPriceX96AfterList\",\n\t\t\t\ttype: \"uint160[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint32[]\",\n\t\t\t\tname: \"initializedTicksCrossedList\",\n\t\t\t\ttype: \"uint32[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"gasEstimate\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"tokenIn\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"tokenOut\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint24\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint24\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint160\",\n\t\t\t\t\t\tname: \"sqrtPriceLimitX96\",\n\t\t\t\t\t\ttype: \"uint160\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct IQuoterV2.QuoteExactOutputSingleParams\",\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteExactOutputSingle\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountIn\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint160\",\n\t\t\t\tname: \"sqrtPriceX96After\",\n\t\t\t\ttype: \"uint160\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint32\",\n\t\t\t\tname: \"initializedTicksCrossed\",\n\t\t\t\ttype: \"uint32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"gasEstimate\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n] as const\n\nexport default { ABI }\n","export const UNISWAP_V4_QUOTER_ABI = [\n\t{\n\t\ttype: \"constructor\",\n\t\tinputs: [{ name: \"_poolManager\", type: \"address\", internalType: \"contract IPoolManager\" }],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_quoteExactInput\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"exactCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct PathKey[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"intermediateCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [{ name: \"\", type: \"bytes\", internalType: \"bytes\" }],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_quoteExactInputSingle\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactSingleParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"poolKey\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PoolKey\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"currency0\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"currency1\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"zeroForOne\", type: \"bool\", internalType: \"bool\" },\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [{ name: \"\", type: \"bytes\", internalType: \"bytes\" }],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_quoteExactOutput\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"exactCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct PathKey[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"intermediateCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [{ name: \"\", type: \"bytes\", internalType: \"bytes\" }],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"_quoteExactOutputSingle\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactSingleParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"poolKey\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PoolKey\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"currency0\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"currency1\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"zeroForOne\", type: \"bool\", internalType: \"bool\" },\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [{ name: \"\", type: \"bytes\", internalType: \"bytes\" }],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"msgSender\",\n\t\tinputs: [],\n\t\toutputs: [{ name: \"\", type: \"address\", internalType: \"address\" }],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"poolManager\",\n\t\tinputs: [],\n\t\toutputs: [{ name: \"\", type: \"address\", internalType: \"contract IPoolManager\" }],\n\t\tstateMutability: \"view\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quoteExactInput\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"exactCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct PathKey[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"intermediateCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{ name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n\t\t\t{ name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" },\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quoteExactInputSingle\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactSingleParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"poolKey\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PoolKey\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"currency0\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"currency1\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"zeroForOne\", type: \"bool\", internalType: \"bool\" },\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{ name: \"amountOut\", type: \"uint256\", internalType: \"uint256\" },\n\t\t\t{ name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" },\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quoteExactOutput\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"exactCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"path\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\tinternalType: \"struct PathKey[]\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"intermediateCurrency\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{ name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" },\n\t\t\t{ name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" },\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"quoteExactOutputSingle\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IV4Quoter.QuoteExactSingleParams\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"poolKey\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t\tinternalType: \"struct PoolKey\",\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{ name: \"currency0\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"currency1\", type: \"address\", internalType: \"Currency\" },\n\t\t\t\t\t\t\t{ name: \"fee\", type: \"uint24\", internalType: \"uint24\" },\n\t\t\t\t\t\t\t{ name: \"tickSpacing\", type: \"int24\", internalType: \"int24\" },\n\t\t\t\t\t\t\t{ name: \"hooks\", type: \"address\", internalType: \"contract IHooks\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t\t{ name: \"zeroForOne\", type: \"bool\", internalType: \"bool\" },\n\t\t\t\t\t{ name: \"exactAmount\", type: \"uint128\", internalType: \"uint128\" },\n\t\t\t\t\t{ name: \"hookData\", type: \"bytes\", internalType: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\toutputs: [\n\t\t\t{ name: \"amountIn\", type: \"uint256\", internalType: \"uint256\" },\n\t\t\t{ name: \"gasEstimate\", type: \"uint256\", internalType: \"uint256\" },\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"function\",\n\t\tname: \"unlockCallback\",\n\t\tinputs: [{ name: \"data\", type: \"bytes\", internalType: \"bytes\" }],\n\t\toutputs: [{ name: \"\", type: \"bytes\", internalType: \"bytes\" }],\n\t\tstateMutability: \"nonpayable\",\n\t},\n\t{\n\t\ttype: \"error\",\n\t\tname: \"NotEnoughLiquidity\",\n\t\tinputs: [{ name: \"poolId\", type: \"bytes32\", internalType: \"PoolId\" }],\n\t},\n\t{ type: \"error\", name: \"NotPoolManager\", inputs: [] },\n\t{ type: \"error\", name: \"NotSelf\", inputs: [] },\n\t{\n\t\ttype: \"error\",\n\t\tname: \"QuoteSwap\",\n\t\tinputs: [{ name: \"amount\", type: \"uint256\", internalType: \"uint256\" }],\n\t},\n\t{ type: \"error\", name: \"UnexpectedCallSuccess\", inputs: [] },\n\t{\n\t\ttype: \"error\",\n\t\tname: \"UnexpectedRevertBytes\",\n\t\tinputs: [{ name: \"revertData\", type: \"bytes\", internalType: \"bytes\" }],\n\t},\n] as const\n","const ABI = [\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"permit2\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"weth9\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"v2Factory\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"v3Factory\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"pairInitCodeHash\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"poolInitCodeHash\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"v4PoolManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"v3NFTPositionManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"v4PositionManager\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct RouterParameters\",\n\t\t\t\tname: \"params\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"constructor\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"BalanceTooLow\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"ContractLocked\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"Currency\",\n\t\t\t\tname: \"currency\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"DeltaNotNegative\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"Currency\",\n\t\t\t\tname: \"currency\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"DeltaNotPositive\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"ETHNotAccepted\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"commandIndex\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"message\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"ExecutionFailed\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"FromAddressIsNotOwner\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InputLengthMismatch\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InsufficientBalance\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InsufficientETH\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InsufficientToken\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes4\",\n\t\t\t\tname: \"action\",\n\t\t\t\ttype: \"bytes4\",\n\t\t\t},\n\t\t],\n\t\tname: \"InvalidAction\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidBips\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"commandType\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"InvalidCommandType\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidEthSender\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidPath\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidReserves\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"LengthMismatch\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"tokenId\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"NotAuthorizedForToken\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"NotPoolManager\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"OnlyMintAllowed\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"SliceOutOfBounds\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"TransactionDeadlinePassed\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnsafeCast\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"action\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"UnsupportedAction\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V2InvalidPath\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V2TooLittleReceived\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V2TooMuchRequested\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V3InvalidAmountOut\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V3InvalidCaller\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V3InvalidSwap\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V3TooLittleReceived\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V3TooMuchRequested\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"minAmountOutReceived\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountReceived\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"V4TooLittleReceived\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"maxAmountInRequested\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"amountRequested\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"V4TooMuchRequested\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V3_POSITION_MANAGER\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract INonfungiblePositionManager\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"V4_POSITION_MANAGER\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IPositionManager\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"commands\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"bytes[]\",\n\t\t\t},\n\t\t],\n\t\tname: \"execute\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"commands\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"bytes[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tname: \"execute\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"msgSender\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"poolManager\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IPoolManager\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"int256\",\n\t\t\t\tname: \"amount0Delta\",\n\t\t\t\ttype: \"int256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"int256\",\n\t\t\t\tname: \"amount1Delta\",\n\t\t\t\ttype: \"int256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"data\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"uniswapV3SwapCallback\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"data\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"unlockCallback\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tstateMutability: \"payable\",\n\t\ttype: \"receive\",\n\t},\n] as const\n\nexport default { ABI }\n","export const PERMIT2_ABI = [\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"address\", name: \"token\", type: \"address\" },\n\t\t\t{ internalType: \"address\", name: \"spender\", type: \"address\" },\n\t\t\t{ internalType: \"uint160\", name: \"amount\", type: \"uint160\" },\n\t\t\t{ internalType: \"uint48\", name: \"expiration\", type: \"uint48\" },\n\t\t],\n\t\tname: \"approve\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{ internalType: \"address\", name: \"owner\", type: \"address\" },\n\t\t\t{ internalType: \"address\", name: \"token\", type: \"address\" },\n\t\t\t{ internalType: \"address\", name: \"spender\", type: \"address\" },\n\t\t],\n\t\tname: \"allowance\",\n\t\toutputs: [\n\t\t\t{ internalType: \"uint160\", name: \"amount\", type: \"uint160\" },\n\t\t\t{ internalType: \"uint48\", name: \"expiration\", type: \"uint48\" },\n\t\t\t{ internalType: \"uint48\", name: \"nonce\", type: \"uint48\" },\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n] as const\n","import { PublicClient, createPublicClient, http, maxUint256 } from \"viem\"\nimport { ChainConfigService } from \"@/configs/ChainConfigService\"\nimport type { HexString, Transaction } from \"@/types\"\nimport { normalizeEvmChainId } from \"@/utils\"\n\nexport type UniswapProtocol = \"v2\" | \"v3\" | \"v4\"\nexport type UniswapTradeType = \"EXACT_INPUT\" | \"EXACT_OUTPUT\"\n\n/**\n * Token metadata required for Uniswap quoting.\n */\nexport interface UniswapQuoteToken {\n\t/** Token contract address. Use ADDRESS_ZERO for the native asset. */\n\taddress: HexString\n\t/** Token decimals used by the integrating app when formatting quote amounts. */\n\tdecimals: number\n\t/** Optional display symbol, returned unchanged in quote responses. */\n\tsymbol?: string\n\t/** EVM chain ID where this token exists. */\n\tchainId: number\n}\n\n/**\n * Parameters for quoting a Uniswap swap through the SDK.\n *\n * Provide `amountIn` when `tradeType` is `EXACT_INPUT`, or `amountOut` when\n * `tradeType` is `EXACT_OUTPUT`. RPC clients are derived from SDK chain config.\n */\nexport interface QuoteUniswapParams {\n\t/** Numeric EVM chain ID or state machine ID, for example `8453` or `EVM-8453`. */\n\tchainId: number | string\n\t/** Token the user pays with. */\n\ttokenIn: UniswapQuoteToken\n\t/** Token the user receives. */\n\ttokenOut: UniswapQuoteToken\n\t/** Exact input amount, required for `EXACT_INPUT`. */\n\tamountIn?: bigint\n\t/** Exact output amount, required for `EXACT_OUTPUT`. */\n\tamountOut?: bigint\n\t/** Whether to quote by fixed input or fixed output. */\n\ttradeType: UniswapTradeType\n\t/** Protocols to check. Defaults to all supported protocols: v2, v3, and v4. */\n\tprotocols?: UniswapProtocol[]\n\t/** Slippage tolerance in basis points, only used when `recipient` is provided. */\n\tslippageBps?: number\n\t/** Optional recipient. When set, executable transaction calldata is included. */\n\trecipient?: HexString\n}\n\n/**\n * Normalized quote returned by every Uniswap protocol adapter.\n */\nexport interface UniswapQuote {\n\t/** Protocol that produced this quote. */\n\tprotocol: UniswapProtocol\n\t/** Quote direction used to calculate the amounts. */\n\ttradeType: UniswapTradeType\n\t/** Numeric EVM chain ID. */\n\tchainId: number\n\t/** Token the user pays with. */\n\ttokenIn: UniswapQuoteToken\n\t/** Token the user receives. */\n\ttokenOut: UniswapQuoteToken\n\t/** Input amount required for this quote. */\n\tamountIn: bigint\n\t/** Output amount returned by this quote. */\n\tamountOut: bigint\n\t/** Winning fee tier for concentrated-liquidity protocols. */\n\tfee?: number\n\t/** Token path used by the quote. */\n\troute: {\n\t\ttokens: HexString[]\n\t}\n\t/** Executable transactions, included only when `recipient` is supplied. */\n\ttransactions?: Transaction[]\n}\n\n/**\n * Quote result containing the best quote and all successful protocol candidates.\n */\nexport interface QuoteUniswapResult {\n\t/** Best quote by highest output for exact input, or lowest input for exact output. */\n\tbestQuote: UniswapQuote | null\n\t/** All successful protocol quotes considered by the SDK. */\n\tquotes: UniswapQuote[]\n}\n\ninterface ProtocolQuoteOptions {\n\tselectedProtocol?: UniswapProtocol\n\tgenerateCalldata?: boolean\n\trecipient?: HexString\n}\n\nexport interface UniswapQuoteAdapter {\n\tfindBestProtocolWithAmountIn(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountIn: bigint,\n\t\tevmChainID: string,\n\t\toptions?: ProtocolQuoteOptions,\n\t): Promise<{\n\t\tprotocol: UniswapProtocol | null\n\t\tamountOut: bigint\n\t\tfee?: number\n\t\ttransactions?: Transaction[]\n\t}>\n\tfindBestProtocolWithAmountOut(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountOut: bigint,\n\t\tevmChainID: string,\n\t\toptions?: ProtocolQuoteOptions,\n\t): Promise<{\n\t\tprotocol: UniswapProtocol | null\n\t\tamountIn: bigint\n\t\tfee?: number\n\t\ttransactions?: Transaction[]\n\t}>\n\tcreateV2SwapCalldataExactIn(\n\t\tpath: HexString[],\n\t\tamountIn: bigint,\n\t\tamountOutMinimum: bigint,\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[]\n\tcreateV2SwapCalldataExactOut(\n\t\tpath: HexString[],\n\t\tamountOut: bigint,\n\t\tamountInMax: bigint,\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[]\n\tcreateV3SwapCalldataExactIn(\n\t\tpath: HexString[],\n\t\tamountIn: bigint,\n\t\tamountOutMinimum: bigint,\n\t\tfees: number[],\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[]\n\tcreateV3SwapCalldataExactOut(\n\t\tpath: HexString[],\n\t\tamountOut: bigint,\n\t\tamountInMax: bigint,\n\t\tfees: number[],\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[]\n\tcreateV4SwapCalldataExactIn(\n\t\tsourceTokenAddress: HexString,\n\t\ttargetTokenAddress: HexString,\n\t\tamountIn: bigint,\n\t\tamountOutMinimum: bigint,\n\t\tfee: number,\n\t\tevmChainID: string,\n\t): Transaction[]\n\tcreateV4SwapCalldataExactOut(\n\t\tsourceTokenAddress: HexString,\n\t\ttargetTokenAddress: HexString,\n\t\tamountOut: bigint,\n\t\tamountInMax: bigint,\n\t\tfee: number,\n\t\tevmChainID: string,\n\t): Transaction[]\n}\n\ninterface QuoteOptions {\n\tclient?: PublicClient\n}\n\nexport class UniswapQuoteEngine {\n\tconstructor(\n\t\tprivate readonly adapter: UniswapQuoteAdapter,\n\t\tprivate readonly chainConfigService = new ChainConfigService(),\n\t) {}\n\n\tasync quote(params: QuoteUniswapParams, options: QuoteOptions = {}): Promise<QuoteUniswapResult> {\n\t\tthis.validateQuoteParams(params)\n\n\t\tconst protocols = this.getQuoteProtocols(params.protocols)\n\t\tconst { chainId, stateMachineId: evmChainID } = normalizeEvmChainId(params.chainId)\n\t\tconst client = options.client ?? this.resolveClient(params.chainId)\n\n\t\tconst quotes: UniswapQuote[] = []\n\t\tfor (const protocol of protocols) {\n\t\t\tconst quote =\n\t\t\t\tparams.tradeType === \"EXACT_INPUT\"\n\t\t\t\t\t? await this.quoteExactInputForProtocol(params, client, protocol, chainId, evmChainID)\n\t\t\t\t\t: await this.quoteExactOutputForProtocol(params, client, protocol, chainId, evmChainID)\n\t\t\tif (quote) quotes.push(quote)\n\t\t}\n\n\t\treturn { bestQuote: this.selectBestQuote(quotes, params.tradeType), quotes }\n\t}\n\n\tprivate resolveClient(chainId: number | string): PublicClient {\n\t\tconst { stateMachineId: evmChainID } = normalizeEvmChainId(chainId)\n\t\tconst rpcUrl = this.chainConfigService.getRpcUrl(evmChainID)\n\t\tif (!rpcUrl) {\n\t\t\tthrow new Error(`No RPC URL configured for chain ${evmChainID}`)\n\t\t}\n\t\treturn createPublicClient({ transport: http(rpcUrl) })\n\t}\n\n\tprivate getQuoteProtocols(protocols?: UniswapProtocol[]): UniswapProtocol[] {\n\t\treturn protocols?.length ? protocols : [\"v2\", \"v3\", \"v4\"]\n\t}\n\n\tprivate validateQuoteParams(params: QuoteUniswapParams): void {\n\t\tif (params.tradeType === \"EXACT_INPUT\" && params.amountIn === undefined) {\n\t\t\tthrow new Error(\"amountIn is required for EXACT_INPUT quotes\")\n\t\t}\n\t\tif (params.tradeType === \"EXACT_OUTPUT\" && params.amountOut === undefined) {\n\t\t\tthrow new Error(\"amountOut is required for EXACT_OUTPUT quotes\")\n\t\t}\n\t\tif (params.slippageBps !== undefined && (params.slippageBps < 0 || params.slippageBps > 10_000)) {\n\t\t\tthrow new Error(\"slippageBps must be between 0 and 10000\")\n\t\t}\n\t}\n\n\tprivate applySlippageToAmountOut(amountOut: bigint, slippageBps: number): bigint {\n\t\treturn (amountOut * BigInt(10_000 - slippageBps)) / 10_000n\n\t}\n\n\tprivate applySlippageToAmountIn(amountIn: bigint, slippageBps: number): bigint {\n\t\tconst numerator = amountIn * BigInt(10_000 + slippageBps)\n\t\treturn (numerator + 9_999n) / 10_000n\n\t}\n\n\tprivate selectBestQuote(quotes: UniswapQuote[], tradeType: UniswapTradeType): UniswapQuote | null {\n\t\tif (quotes.length === 0) return null\n\n\t\tif (tradeType === \"EXACT_INPUT\") {\n\t\t\treturn quotes.reduce((best, current) => {\n\t\t\t\treturn current.amountOut > best.amountOut ? current : best\n\t\t\t})\n\t\t}\n\n\t\treturn quotes.reduce((best, current) => {\n\t\t\treturn current.amountIn < best.amountIn ? current : best\n\t\t})\n\t}\n\n\tprivate createExactInputTransactions(\n\t\tprotocol: UniswapProtocol,\n\t\tparams: QuoteUniswapParams,\n\t\tminAmountOut: bigint,\n\t\tfee: number | undefined,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tconst amountIn = params.amountIn!\n\t\tconst recipient = params.recipient!\n\t\tconst path = [params.tokenIn.address, params.tokenOut.address]\n\n\t\tswitch (protocol) {\n\t\t\tcase \"v2\":\n\t\t\t\treturn this.adapter.createV2SwapCalldataExactIn(path, amountIn, minAmountOut, recipient, evmChainID)\n\t\t\tcase \"v3\":\n\t\t\t\treturn this.adapter.createV3SwapCalldataExactIn(\n\t\t\t\t\tpath,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tminAmountOut,\n\t\t\t\t\t[fee!],\n\t\t\t\t\trecipient,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\tcase \"v4\":\n\t\t\t\treturn this.adapter.createV4SwapCalldataExactIn(\n\t\t\t\t\tparams.tokenIn.address,\n\t\t\t\t\tparams.tokenOut.address,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tminAmountOut,\n\t\t\t\t\tfee!,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t}\n\t}\n\n\tprivate createExactOutputTransactions(\n\t\tprotocol: UniswapProtocol,\n\t\tparams: QuoteUniswapParams,\n\t\tmaxAmountIn: bigint,\n\t\tfee: number | undefined,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tconst amountOut = params.amountOut!\n\t\tconst recipient = params.recipient!\n\t\tconst path = [params.tokenIn.address, params.tokenOut.address]\n\n\t\tswitch (protocol) {\n\t\t\tcase \"v2\":\n\t\t\t\treturn this.adapter.createV2SwapCalldataExactOut(path, amountOut, maxAmountIn, recipient, evmChainID)\n\t\t\tcase \"v3\":\n\t\t\t\treturn this.adapter.createV3SwapCalldataExactOut(\n\t\t\t\t\tpath,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tmaxAmountIn,\n\t\t\t\t\t[fee!],\n\t\t\t\t\trecipient,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\tcase \"v4\":\n\t\t\t\treturn this.adapter.createV4SwapCalldataExactOut(\n\t\t\t\t\tparams.tokenIn.address,\n\t\t\t\t\tparams.tokenOut.address,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tmaxAmountIn,\n\t\t\t\t\tfee!,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t}\n\t}\n\n\tprivate async quoteExactInputForProtocol(\n\t\tparams: QuoteUniswapParams,\n\t\tclient: PublicClient,\n\t\tprotocol: UniswapProtocol,\n\t\tchainId: number,\n\t\tevmChainID: string,\n\t): Promise<UniswapQuote | null> {\n\t\tconst generateCalldata = !!params.recipient\n\t\tconst result = await this.adapter.findBestProtocolWithAmountIn(\n\t\t\tclient,\n\t\t\tparams.tokenIn.address,\n\t\t\tparams.tokenOut.address,\n\t\t\tparams.amountIn!,\n\t\t\tevmChainID,\n\t\t\t{\n\t\t\t\tselectedProtocol: protocol,\n\t\t\t\tgenerateCalldata,\n\t\t\t\trecipient: params.recipient,\n\t\t\t},\n\t\t)\n\t\tif (result.protocol === null || result.amountOut === 0n) return null\n\n\t\tlet transactions = result.transactions\n\t\tconst slippageBps = params.slippageBps ?? 0\n\t\tif (generateCalldata && slippageBps > 0) {\n\t\t\tconst minAmountOut = this.applySlippageToAmountOut(result.amountOut, slippageBps)\n\t\t\ttransactions = this.createExactInputTransactions(protocol, params, minAmountOut, result.fee, evmChainID)\n\t\t}\n\n\t\treturn {\n\t\t\tprotocol,\n\t\t\ttradeType: params.tradeType,\n\t\t\tchainId,\n\t\t\ttokenIn: params.tokenIn,\n\t\t\ttokenOut: params.tokenOut,\n\t\t\tamountIn: params.amountIn!,\n\t\t\tamountOut: result.amountOut,\n\t\t\tfee: result.fee,\n\t\t\troute: { tokens: [params.tokenIn.address, params.tokenOut.address] },\n\t\t\ttransactions,\n\t\t}\n\t}\n\n\tprivate async quoteExactOutputForProtocol(\n\t\tparams: QuoteUniswapParams,\n\t\tclient: PublicClient,\n\t\tprotocol: UniswapProtocol,\n\t\tchainId: number,\n\t\tevmChainID: string,\n\t): Promise<UniswapQuote | null> {\n\t\tconst generateCalldata = !!params.recipient\n\t\tconst result = await this.adapter.findBestProtocolWithAmountOut(\n\t\t\tclient,\n\t\t\tparams.tokenIn.address,\n\t\t\tparams.tokenOut.address,\n\t\t\tparams.amountOut!,\n\t\t\tevmChainID,\n\t\t\t{\n\t\t\t\tselectedProtocol: protocol,\n\t\t\t\tgenerateCalldata,\n\t\t\t\trecipient: params.recipient,\n\t\t\t},\n\t\t)\n\t\tif (result.protocol === null || result.amountIn === maxUint256) return null\n\n\t\tlet transactions = result.transactions\n\t\tconst slippageBps = params.slippageBps ?? 0\n\t\tif (generateCalldata && slippageBps > 0) {\n\t\t\tconst maxAmountIn = this.applySlippageToAmountIn(result.amountIn, slippageBps)\n\t\t\ttransactions = this.createExactOutputTransactions(protocol, params, maxAmountIn, result.fee, evmChainID)\n\t\t}\n\n\t\treturn {\n\t\t\tprotocol,\n\t\t\ttradeType: params.tradeType,\n\t\t\tchainId,\n\t\t\ttokenIn: params.tokenIn,\n\t\t\ttokenOut: params.tokenOut,\n\t\t\tamountIn: result.amountIn,\n\t\t\tamountOut: params.amountOut!,\n\t\t\tfee: result.fee,\n\t\t\troute: { tokens: [params.tokenIn.address, params.tokenOut.address] },\n\t\t\ttransactions,\n\t\t}\n\t}\n}\n","import {\n\tPublicClient,\n\tmaxUint256,\n\tencodeAbiParameters,\n\tparseAbiParameters,\n\tparseAbiItem,\n\tencodePacked,\n\tencodeFunctionData,\n\terc20Abi,\n} from \"viem\"\nimport UniswapRouterV2 from \"@/abis/uniswapRouterV2\"\nimport UniswapV3Quoter from \"@/abis/uniswapV3Quoter\"\nimport { UNISWAP_V4_QUOTER_ABI } from \"@/abis/uniswapV4Quoter\"\nimport universalRouter from \"@/abis/universalRouter\"\nimport { PERMIT2_ABI } from \"@/abis/permit2\"\nimport { ChainConfigService } from \"@/configs/ChainConfigService\"\nimport type { HexString, Transaction } from \"@/types\"\nimport { ADDRESS_ZERO, UniversalRouterCommands } from \"@/utils\"\nimport { QuoteUniswapParams, QuoteUniswapResult, UniswapQuoteEngine, type UniswapProtocol } from \"@/utils/uniswapQuote\"\n\nconst COMMON_FEE_TIERS = [100, 500, 2500, 3000, 10000]\n\nexport class Swap {\n\tprivate chainConfigService: ChainConfigService\n\tprivate uniswapQuoteEngine: UniswapQuoteEngine\n\tconstructor() {\n\t\tthis.chainConfigService = new ChainConfigService()\n\t\tthis.uniswapQuoteEngine = new UniswapQuoteEngine(this, this.chainConfigService)\n\t}\n\n\tasync quoteUniswap(params: QuoteUniswapParams): Promise<QuoteUniswapResult> {\n\t\treturn this.uniswapQuoteEngine.quote(params)\n\t}\n\t/**\n\t * Gets V2 quote for exact output swap.\n\t */\n\tasync getV2QuoteWithAmountOut(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountOut: bigint,\n\t\tevmChainID: string,\n\t): Promise<bigint> {\n\t\tconst v2Router = this.chainConfigService.getUniswapRouterV2Address(evmChainID)\n\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst tokenInForQuote = tokenIn === ADDRESS_ZERO ? wethAsset : tokenIn\n\t\tconst tokenOutForQuote = tokenOut === ADDRESS_ZERO ? wethAsset : tokenOut\n\n\t\ttry {\n\t\t\tconst v2AmountIn = await client.simulateContract({\n\t\t\t\taddress: v2Router,\n\t\t\t\tabi: UniswapRouterV2.ABI,\n\t\t\t\t// @ts-ignore\n\t\t\t\tfunctionName: \"getAmountsIn\",\n\t\t\t\t// @ts-ignore\n\t\t\t\targs: [amountOut, [tokenInForQuote, tokenOutForQuote]],\n\t\t\t})\n\n\t\t\treturn v2AmountIn.result[0]\n\t\t} catch {\n\t\t\tconsole.warn(\"V2 quote failed:\")\n\t\t\treturn maxUint256\n\t\t}\n\t}\n\n\t/**\n\t * Gets V2 quote for exact input swap.\n\t */\n\tasync getV2QuoteWithAmountIn(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountIn: bigint,\n\t\tevmChainID: string,\n\t): Promise<bigint> {\n\t\tconst v2Router = this.chainConfigService.getUniswapRouterV2Address(evmChainID)\n\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst tokenInForQuote = tokenIn === ADDRESS_ZERO ? wethAsset : tokenIn\n\t\tconst tokenOutForQuote = tokenOut === ADDRESS_ZERO ? wethAsset : tokenOut\n\n\t\ttry {\n\t\t\tconst v2AmountOut = await client.simulateContract({\n\t\t\t\taddress: v2Router,\n\t\t\t\tabi: UniswapRouterV2.ABI,\n\t\t\t\t// @ts-ignore\n\t\t\t\tfunctionName: \"getAmountsOut\",\n\t\t\t\t// @ts-ignore\n\t\t\t\targs: [amountIn, [tokenInForQuote, tokenOutForQuote]],\n\t\t\t})\n\n\t\t\treturn v2AmountOut.result[1]\n\t\t} catch {\n\t\t\tconsole.warn(\"V2 quote failed:\")\n\t\t\treturn BigInt(0)\n\t\t}\n\t}\n\n\t/**\n\t * Gets V3 quote for exact output swap.\n\t */\n\tasync getV3QuoteWithAmountOut(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountOut: bigint,\n\t\tevmChainID: string,\n\t): Promise<{ amountIn: bigint; fee: number }> {\n\t\tlet bestAmountIn = maxUint256\n\t\tlet bestFee = 0\n\n\t\tconst v3Quoter = this.chainConfigService.getUniswapV3QuoterAddress(evmChainID)\n\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst tokenInForQuote = tokenIn === ADDRESS_ZERO ? wethAsset : tokenIn\n\t\tconst tokenOutForQuote = tokenOut === ADDRESS_ZERO ? wethAsset : tokenOut\n\n\t\tfor (const fee of COMMON_FEE_TIERS) {\n\t\t\ttry {\n\t\t\t\tconst quoteResult = (\n\t\t\t\t\tawait client.simulateContract({\n\t\t\t\t\t\taddress: v3Quoter,\n\t\t\t\t\t\tabi: UniswapV3Quoter.ABI,\n\t\t\t\t\t\tfunctionName: \"quoteExactOutputSingle\",\n\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttokenIn: tokenInForQuote,\n\t\t\t\t\t\t\t\ttokenOut: tokenOutForQuote,\n\t\t\t\t\t\t\t\tfee: fee,\n\t\t\t\t\t\t\t\tamount: amountOut,\n\t\t\t\t\t\t\t\tsqrtPriceLimitX96: BigInt(0),\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).result as [bigint, bigint, number, bigint]\n\n\t\t\t\tconst amountIn = quoteResult[0]\n\n\t\t\t\tif (amountIn < bestAmountIn) {\n\t\t\t\t\tbestAmountIn = amountIn\n\t\t\t\t\tbestFee = fee\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tconsole.warn(`V3 quote failed for fee ${fee}, continuing to next fee tier`)\n\t\t\t}\n\t\t}\n\n\t\treturn { amountIn: bestAmountIn, fee: bestFee }\n\t}\n\n\t/**\n\t * Gets V3 quote for exact input swap.\n\t */\n\tasync getV3QuoteWithAmountIn(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountIn: bigint,\n\t\tevmChainID: string,\n\t): Promise<{ amountOut: bigint; fee: number }> {\n\t\tlet bestAmountOut = BigInt(0)\n\t\tlet bestFee = 0\n\n\t\tconst v3Quoter = this.chainConfigService.getUniswapV3QuoterAddress(evmChainID)\n\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst tokenInForQuote = tokenIn === ADDRESS_ZERO ? wethAsset : tokenIn\n\t\tconst tokenOutForQuote = tokenOut === ADDRESS_ZERO ? wethAsset : tokenOut\n\n\t\tfor (const fee of COMMON_FEE_TIERS) {\n\t\t\ttry {\n\t\t\t\tconst quoteResult = (\n\t\t\t\t\tawait client.simulateContract({\n\t\t\t\t\t\taddress: v3Quoter,\n\t\t\t\t\t\tabi: UniswapV3Quoter.ABI,\n\t\t\t\t\t\tfunctionName: \"quoteExactInputSingle\",\n\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttokenIn: tokenInForQuote,\n\t\t\t\t\t\t\t\ttokenOut: tokenOutForQuote,\n\t\t\t\t\t\t\t\tfee: fee,\n\t\t\t\t\t\t\t\tamountIn: amountIn,\n\t\t\t\t\t\t\t\tsqrtPriceLimitX96: BigInt(0),\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).result as [bigint, bigint, number, bigint]\n\n\t\t\t\tconst amountOut = quoteResult[0]\n\n\t\t\t\tif (amountOut > bestAmountOut) {\n\t\t\t\t\tbestAmountOut = amountOut\n\t\t\t\t\tbestFee = fee\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tconsole.warn(`V3 quote failed for fee ${fee}, continuing to next fee tier`)\n\t\t\t}\n\t\t}\n\n\t\treturn { amountOut: bestAmountOut, fee: bestFee }\n\t}\n\n\t/**\n\t * Gets V4 quote for exact output swap.\n\t */\n\tasync getV4QuoteWithAmountOut(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountOut: bigint,\n\t\tevmChainID: string,\n\t): Promise<{ amountIn: bigint; fee: number }> {\n\t\tlet bestAmountIn = maxUint256\n\t\tlet bestFee = 0\n\n\t\tconst v4Quoter = this.chainConfigService.getUniswapV4QuoterAddress(evmChainID)\n\n\t\tfor (const fee of COMMON_FEE_TIERS) {\n\t\t\ttry {\n\t\t\t\tconst currency0 = tokenIn.toLowerCase() < tokenOut.toLowerCase() ? tokenIn : tokenOut\n\t\t\t\tconst currency1 = tokenIn.toLowerCase() < tokenOut.toLowerCase() ? tokenOut : tokenIn\n\n\t\t\t\tconst zeroForOne = tokenIn.toLowerCase() === currency0.toLowerCase()\n\n\t\t\t\tconst poolKey = {\n\t\t\t\t\tcurrency0: currency0,\n\t\t\t\t\tcurrency1: currency1,\n\t\t\t\t\tfee: fee,\n\t\t\t\t\ttickSpacing: this.getTickSpacing(fee),\n\t\t\t\t\thooks: ADDRESS_ZERO,\n\t\t\t\t}\n\n\t\t\t\tconst quoteResult = (\n\t\t\t\t\tawait client.simulateContract({\n\t\t\t\t\t\taddress: v4Quoter,\n\t\t\t\t\t\tabi: UNISWAP_V4_QUOTER_ABI,\n\t\t\t\t\t\tfunctionName: \"quoteExactOutputSingle\",\n\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpoolKey: poolKey,\n\t\t\t\t\t\t\t\tzeroForOne: zeroForOne,\n\t\t\t\t\t\t\t\texactAmount: amountOut,\n\t\t\t\t\t\t\t\thookData: \"0x\",\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).result as [bigint, bigint]\n\n\t\t\t\tconst amountIn = quoteResult[0]\n\n\t\t\t\tif (amountIn < bestAmountIn) {\n\t\t\t\t\tbestAmountIn = amountIn\n\t\t\t\t\tbestFee = fee\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tconsole.warn(`V4 quote failed for fee ${fee}, continuing to next fee tier`)\n\t\t\t}\n\t\t}\n\n\t\treturn { amountIn: bestAmountIn, fee: bestFee }\n\t}\n\n\t/**\n\t * Gets V4 quote for exact input swap.\n\t */\n\tasync getV4QuoteWithAmountIn(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountIn: bigint,\n\t\tevmChainID: string,\n\t): Promise<{ amountOut: bigint; fee: number }> {\n\t\tlet bestAmountOut = BigInt(0)\n\t\tlet bestFee = 0\n\n\t\tconst v4Quoter = this.chainConfigService.getUniswapV4QuoterAddress(evmChainID)\n\n\t\tfor (const fee of COMMON_FEE_TIERS) {\n\t\t\ttry {\n\t\t\t\tconst currency0 = tokenIn.toLowerCase() < tokenOut.toLowerCase() ? tokenIn : tokenOut\n\t\t\t\tconst currency1 = tokenIn.toLowerCase() < tokenOut.toLowerCase() ? tokenOut : tokenIn\n\n\t\t\t\tconst zeroForOne = tokenIn.toLowerCase() === currency0.toLowerCase()\n\n\t\t\t\tconst poolKey = {\n\t\t\t\t\tcurrency0: currency0,\n\t\t\t\t\tcurrency1: currency1,\n\t\t\t\t\tfee: fee,\n\t\t\t\t\ttickSpacing: this.getTickSpacing(fee),\n\t\t\t\t\thooks: ADDRESS_ZERO,\n\t\t\t\t}\n\n\t\t\t\tconst quoteResult = (\n\t\t\t\t\tawait client.simulateContract({\n\t\t\t\t\t\taddress: v4Quoter,\n\t\t\t\t\t\tabi: UNISWAP_V4_QUOTER_ABI,\n\t\t\t\t\t\tfunctionName: \"quoteExactInputSingle\",\n\t\t\t\t\t\targs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpoolKey: poolKey,\n\t\t\t\t\t\t\t\tzeroForOne: zeroForOne,\n\t\t\t\t\t\t\t\texactAmount: amountIn,\n\t\t\t\t\t\t\t\thookData: \"0x\",\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).result as [bigint, bigint]\n\n\t\t\t\tconst amountOut = quoteResult[0]\n\n\t\t\t\tif (amountOut > bestAmountOut) {\n\t\t\t\t\tbestAmountOut = amountOut\n\t\t\t\t\tbestFee = fee\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tconsole.warn(`V4 quote failed for fee ${fee}, continuing to next fee tier`)\n\t\t\t}\n\t\t}\n\n\t\treturn { amountOut: bestAmountOut, fee: bestFee }\n\t}\n\n\t/**\n\t * Creates transaction structure for V2 exact input swap, including ERC20 transfer if needed.\n\t * Supports both single-hop and multi-hop swaps.\n\t */\n\tcreateV2SwapCalldataExactIn(\n\t\tpath: HexString[],\n\t\tamountIn: bigint,\n\t\tamountOutMinimum: bigint,\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tif (path.length < 2) {\n\t\t\tthrow new Error(\"Path must contain at least 2 tokens\")\n\t\t}\n\n\t\tif (path[0].toLowerCase() === path[path.length - 1].toLowerCase()) {\n\t\t\tthrow new Error(\"Source and target tokens cannot be the same\")\n\t\t}\n\n\t\tconst isPermit2 = false\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst universalRouterAddress = this.chainConfigService.getUniversalRouterAddress(evmChainID)\n\n\t\tconst swapPath = path.map((token) => (token === ADDRESS_ZERO ? wethAsset : token))\n\n\t\tconst sourceTokenAddress = path[0]\n\t\tconst targetTokenAddress = path[path.length - 1]\n\n\t\tconst commands: number[] = []\n\t\tconst inputs: HexString[] = []\n\n\t\tif (sourceTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.WRAP_ETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [\n\t\t\t\t\tuniversalRouterAddress,\n\t\t\t\t\tamountIn,\n\t\t\t\t]),\n\t\t\t)\n\t\t}\n\n\t\tcommands.push(UniversalRouterCommands.V2_SWAP_EXACT_IN)\n\t\tinputs.push(\n\t\t\tencodeAbiParameters(\n\t\t\t\tparseAbiParameters(\n\t\t\t\t\t\"address recipient, uint256 amountIn, uint256 amountOutMinimum, address[] path, bool isPermit2\",\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\ttargetTokenAddress === ADDRESS_ZERO ? universalRouterAddress : recipient,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tamountOutMinimum,\n\t\t\t\t\tswapPath,\n\t\t\t\t\tisPermit2,\n\t\t\t\t],\n\t\t\t),\n\t\t)\n\n\t\tif (targetTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.UNWRAP_WETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [\n\t\t\t\t\trecipient,\n\t\t\t\t\tamountOutMinimum,\n\t\t\t\t]),\n\t\t\t)\n\t\t}\n\n\t\tconst commandsEncoded = this.encodeCommands(commands)\n\t\tconst executeData = encodeFunctionData({\n\t\t\tabi: universalRouter.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [commandsEncoded, inputs],\n\t\t})\n\n\t\tconst transactions: Transaction[] = []\n\n\t\tif (sourceTokenAddress !== ADDRESS_ZERO) {\n\t\t\tconst transferData = encodeFunctionData({\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: \"transfer\",\n\t\t\t\targs: [universalRouterAddress, amountIn],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: sourceTokenAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: transferData,\n\t\t\t})\n\t\t}\n\n\t\ttransactions.push({\n\t\t\tto: universalRouterAddress,\n\t\t\tvalue: sourceTokenAddress === ADDRESS_ZERO ? amountIn : 0n,\n\t\t\tdata: executeData,\n\t\t})\n\n\t\treturn transactions\n\t}\n\n\t/**\n\t * Creates transaction structure for V2 exact output swap, including ERC20 transfer if needed.\n\t * Supports both single-hop and multi-hop swaps.\n\t */\n\tcreateV2SwapCalldataExactOut(\n\t\tpath: HexString[],\n\t\tamountOut: bigint,\n\t\tamountInMax: bigint,\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tif (path.length < 2) {\n\t\t\tthrow new Error(\"Path must contain at least 2 tokens\")\n\t\t}\n\n\t\tif (path[0].toLowerCase() === path[path.length - 1].toLowerCase()) {\n\t\t\tthrow new Error(\"Source and target tokens cannot be the same\")\n\t\t}\n\n\t\tconst isPermit2 = false\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst universalRouterAddress = this.chainConfigService.getUniversalRouterAddress(evmChainID)\n\n\t\t// Convert ADDRESS_ZERO to WETH in path\n\t\tconst swapPath = path.map((token) => (token === ADDRESS_ZERO ? wethAsset : token))\n\n\t\tconst sourceTokenAddress = path[0]\n\t\tconst targetTokenAddress = path[path.length - 1]\n\n\t\tconst commands: number[] = []\n\t\tconst inputs: HexString[] = []\n\t\tconst transactions: Transaction[] = []\n\n\t\tif (sourceTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.WRAP_ETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [\n\t\t\t\t\tuniversalRouterAddress,\n\t\t\t\t\tamountInMax,\n\t\t\t\t]),\n\t\t\t)\n\t\t}\n\n\t\tcommands.push(UniversalRouterCommands.V2_SWAP_EXACT_OUT)\n\t\tinputs.push(\n\t\t\tencodeAbiParameters(\n\t\t\t\tparseAbiParameters(\n\t\t\t\t\t\"address recipient, uint256 amountOut, uint256 amountInMax, address[] path, bool isPermit2\",\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\ttargetTokenAddress === ADDRESS_ZERO ? universalRouterAddress : recipient,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tamountInMax,\n\t\t\t\t\tswapPath,\n\t\t\t\t\tisPermit2,\n\t\t\t\t],\n\t\t\t),\n\t\t)\n\n\t\tif (targetTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.UNWRAP_WETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [recipient, amountOut]),\n\t\t\t)\n\t\t}\n\n\t\tconst commandsEncoded = this.encodeCommands(commands)\n\t\tconst executeData = encodeFunctionData({\n\t\t\tabi: universalRouter.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [commandsEncoded, inputs],\n\t\t})\n\n\t\tif (sourceTokenAddress !== ADDRESS_ZERO) {\n\t\t\tconst transferData = encodeFunctionData({\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: \"transfer\",\n\t\t\t\targs: [universalRouterAddress, amountInMax],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: sourceTokenAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: transferData,\n\t\t\t})\n\t\t}\n\n\t\ttransactions.push({\n\t\t\tto: universalRouterAddress,\n\t\t\tvalue: sourceTokenAddress === ADDRESS_ZERO ? amountInMax : 0n,\n\t\t\tdata: executeData,\n\t\t})\n\n\t\treturn transactions\n\t}\n\n\t/**\n\t * Creates transaction structure for V3 exact input swap, including ERC20 transfer if needed.\n\t * Supports both single-hop and multi-hop swaps.\n\t */\n\tcreateV3SwapCalldataExactIn(\n\t\tpath: HexString[],\n\t\tamountIn: bigint,\n\t\tamountOutMinimum: bigint,\n\t\tfees: number[],\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tif (path.length < 2) {\n\t\t\tthrow new Error(\"Path must contain at least 2 tokens\")\n\t\t}\n\n\t\tif (path[0].toLowerCase() === path[path.length - 1].toLowerCase()) {\n\t\t\tthrow new Error(\"Source and target tokens cannot be the same\")\n\t\t}\n\n\t\tif (fees.length !== path.length - 1) {\n\t\t\tthrow new Error(\"Fees array length must be one less than path length\")\n\t\t}\n\n\t\tconst isPermit2 = false\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst universalRouterAddress = this.chainConfigService.getUniversalRouterAddress(evmChainID)\n\n\t\t// Build path elements with alternating tokens and fees\n\t\tconst pathElements: Array<string | number> = []\n\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\tconst token = path[i] === ADDRESS_ZERO ? wethAsset : path[i]\n\t\t\tpathElements.push(token)\n\n\t\t\tif (i < path.length - 1) {\n\t\t\t\tpathElements.push(fees[i])\n\t\t\t}\n\t\t}\n\n\t\tconst types: string[] = []\n\t\tfor (let i = 0; i < pathElements.length; i++) {\n\t\t\ttypes.push(i % 2 === 0 ? \"address\" : \"uint24\")\n\t\t}\n\n\t\tconst pathV3 = encodePacked(types, pathElements)\n\n\t\tconst sourceTokenAddress = path[0]\n\t\tconst targetTokenAddress = path[path.length - 1]\n\n\t\tconst commands: number[] = []\n\t\tconst inputs: HexString[] = []\n\n\t\tif (sourceTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.WRAP_ETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [\n\t\t\t\t\tuniversalRouterAddress,\n\t\t\t\t\tamountIn,\n\t\t\t\t]),\n\t\t\t)\n\t\t}\n\n\t\tcommands.push(UniversalRouterCommands.V3_SWAP_EXACT_IN)\n\t\tinputs.push(\n\t\t\tencodeAbiParameters(\n\t\t\t\tparseAbiParameters(\n\t\t\t\t\t\"address recipient, uint256 amountIn, uint256 amountOutMinimum, bytes path, bool isPermit2\",\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\ttargetTokenAddress === ADDRESS_ZERO ? universalRouterAddress : recipient,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tamountOutMinimum,\n\t\t\t\t\tpathV3,\n\t\t\t\t\tisPermit2,\n\t\t\t\t],\n\t\t\t),\n\t\t)\n\n\t\tif (targetTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.UNWRAP_WETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [\n\t\t\t\t\trecipient,\n\t\t\t\t\tamountOutMinimum,\n\t\t\t\t]),\n\t\t\t)\n\t\t}\n\n\t\tconst commandsEncoded = this.encodeCommands(commands)\n\t\tconst executeData = encodeFunctionData({\n\t\t\tabi: universalRouter.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [commandsEncoded, inputs],\n\t\t})\n\n\t\tconst transactions: Transaction[] = []\n\n\t\tif (sourceTokenAddress !== ADDRESS_ZERO) {\n\t\t\tconst transferData = encodeFunctionData({\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: \"transfer\",\n\t\t\t\targs: [universalRouterAddress, amountIn],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: sourceTokenAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: transferData,\n\t\t\t})\n\t\t}\n\n\t\ttransactions.push({\n\t\t\tto: universalRouterAddress,\n\t\t\tvalue: sourceTokenAddress === ADDRESS_ZERO ? amountIn : 0n,\n\t\t\tdata: executeData,\n\t\t})\n\n\t\treturn transactions\n\t}\n\n\t/**\n\t * Creates transaction structure for V3 exact output swap, including ERC20 transfer if needed.\n\t * Supports both single-hop and multi-hop swaps.\n\t */\n\tcreateV3SwapCalldataExactOut(\n\t\tpath: HexString[],\n\t\tamountOut: bigint,\n\t\tamountInMax: bigint,\n\t\tfees: number[],\n\t\trecipient: HexString,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tif (path.length < 2) {\n\t\t\tthrow new Error(\"Path must contain at least 2 tokens\")\n\t\t}\n\n\t\tif (path[0].toLowerCase() === path[path.length - 1].toLowerCase()) {\n\t\t\tthrow new Error(\"Source and target tokens cannot be the same\")\n\t\t}\n\n\t\tif (fees.length !== path.length - 1) {\n\t\t\tthrow new Error(\"Fees array length must be one less than path length\")\n\t\t}\n\n\t\tconst isPermit2 = false\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst universalRouterAddress = this.chainConfigService.getUniversalRouterAddress(evmChainID)\n\n\t\t// Build path elements with alternating tokens and fees (reversed for exact output)\n\t\tconst pathElements: Array<string | number> = []\n\t\tfor (let i = path.length - 1; i >= 0; i--) {\n\t\t\tconst token = path[i] === ADDRESS_ZERO ? wethAsset : path[i]\n\t\t\tpathElements.push(token)\n\n\t\t\tif (i > 0) {\n\t\t\t\tpathElements.push(fees[i - 1])\n\t\t\t}\n\t\t}\n\n\t\tconst types: string[] = []\n\t\tfor (let i = 0; i < pathElements.length; i++) {\n\t\t\ttypes.push(i % 2 === 0 ? \"address\" : \"uint24\")\n\t\t}\n\n\t\tconst pathV3 = encodePacked(types, pathElements)\n\n\t\tconst sourceTokenAddress = path[0]\n\t\tconst targetTokenAddress = path[path.length - 1]\n\n\t\tconst commands: number[] = []\n\t\tconst inputs: HexString[] = []\n\n\t\tif (sourceTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.WRAP_ETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [\n\t\t\t\t\tuniversalRouterAddress,\n\t\t\t\t\tamountInMax,\n\t\t\t\t]),\n\t\t\t)\n\t\t}\n\n\t\tcommands.push(UniversalRouterCommands.V3_SWAP_EXACT_OUT)\n\t\tinputs.push(\n\t\t\tencodeAbiParameters(\n\t\t\t\tparseAbiParameters(\n\t\t\t\t\t\"address recipient, uint256 amountOut, uint256 amountInMax, bytes path, bool isPermit2\",\n\t\t\t\t),\n\t\t\t\t[\n\t\t\t\t\ttargetTokenAddress === ADDRESS_ZERO ? universalRouterAddress : recipient,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tamountInMax,\n\t\t\t\t\tpathV3,\n\t\t\t\t\tisPermit2,\n\t\t\t\t],\n\t\t\t),\n\t\t)\n\n\t\tif (targetTokenAddress === ADDRESS_ZERO) {\n\t\t\tcommands.push(UniversalRouterCommands.UNWRAP_WETH)\n\t\t\tinputs.push(\n\t\t\t\tencodeAbiParameters(parseAbiParameters(\"address recipient, uint256 amountMin\"), [recipient, amountOut]),\n\t\t\t)\n\t\t}\n\n\t\tconst commandsEncoded = this.encodeCommands(commands)\n\t\tconst executeData = encodeFunctionData({\n\t\t\tabi: universalRouter.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [commandsEncoded, inputs],\n\t\t})\n\n\t\tconst transactions: Transaction[] = []\n\n\t\tif (sourceTokenAddress !== ADDRESS_ZERO) {\n\t\t\tconst transferData = encodeFunctionData({\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: \"transfer\",\n\t\t\t\targs: [universalRouterAddress, amountInMax],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: sourceTokenAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: transferData,\n\t\t\t})\n\t\t}\n\n\t\ttransactions.push({\n\t\t\tto: universalRouterAddress,\n\t\t\tvalue: sourceTokenAddress === ADDRESS_ZERO ? amountInMax : 0n,\n\t\t\tdata: executeData,\n\t\t})\n\n\t\treturn transactions\n\t}\n\n\t/**\n\t * Creates transaction structure for V4 exact input swap, including Permit2 approvals for ERC20 tokens.\n\t */\n\tcreateV4SwapCalldataExactIn(\n\t\tsourceTokenAddress: HexString,\n\t\ttargetTokenAddress: HexString,\n\t\tamountIn: bigint,\n\t\tamountOutMinimum: bigint,\n\t\tfee: number,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tif (sourceTokenAddress.toLowerCase() === targetTokenAddress.toLowerCase()) {\n\t\t\tthrow new Error(\"Source and target tokens cannot be the same\")\n\t\t}\n\t\tconst currency0 =\n\t\t\tsourceTokenAddress.toLowerCase() < targetTokenAddress.toLowerCase()\n\t\t\t\t? sourceTokenAddress\n\t\t\t\t: targetTokenAddress\n\t\tconst currency1 =\n\t\t\tsourceTokenAddress.toLowerCase() < targetTokenAddress.toLowerCase()\n\t\t\t\t? targetTokenAddress\n\t\t\t\t: sourceTokenAddress\n\n\t\tconst zeroForOne = sourceTokenAddress.toLowerCase() === currency0.toLowerCase()\n\n\t\tconst poolKey = {\n\t\t\tcurrency0: currency0,\n\t\t\tcurrency1: currency1,\n\t\t\tfee: fee,\n\t\t\ttickSpacing: this.getTickSpacing(fee),\n\t\t\thooks: ADDRESS_ZERO,\n\t\t}\n\n\t\tconst actions = encodePacked(\n\t\t\t[\"uint8\", \"uint8\", \"uint8\"],\n\t\t\t[\n\t\t\t\tUniversalRouterCommands.V4_SWAP_EXACT_IN_SINGLE,\n\t\t\t\tUniversalRouterCommands.SETTLE_ALL,\n\t\t\t\tUniversalRouterCommands.TAKE_ALL,\n\t\t\t],\n\t\t)\n\n\t\tconst swapParams = encodeAbiParameters(\n\t\t\tparseAbiParameters(\n\t\t\t\t\"((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, bool zeroForOne, uint128 amountIn, uint128 amountOutMinimum, bytes hookData)\",\n\t\t\t),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tpoolKey,\n\t\t\t\t\tzeroForOne,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tamountOutMinimum,\n\t\t\t\t\thookData: \"0x\",\n\t\t\t\t},\n\t\t\t],\n\t\t)\n\n\t\tconst settleParams = encodeAbiParameters(parseAbiParameters(\"address currency, uint128 amount\"), [\n\t\t\tsourceTokenAddress,\n\t\t\tamountIn,\n\t\t])\n\n\t\tconst takeParams = encodeAbiParameters(parseAbiParameters(\"address currency, uint128 amount\"), [\n\t\t\ttargetTokenAddress,\n\t\t\tamountOutMinimum,\n\t\t])\n\n\t\tconst params = [swapParams, settleParams, takeParams]\n\n\t\tconst commands = encodePacked([\"uint8\"], [UniversalRouterCommands.V4_SWAP])\n\t\tconst inputs = [encodeAbiParameters(parseAbiParameters(\"bytes actions, bytes[] params\"), [actions, params])]\n\n\t\tconst executeData = encodeFunctionData({\n\t\t\tabi: universalRouter.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [commands, inputs],\n\t\t})\n\n\t\tconst transactions: Transaction[] = []\n\n\t\tif (sourceTokenAddress !== ADDRESS_ZERO) {\n\t\t\tconst approveToPermit2Data = encodeFunctionData({\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: \"approve\",\n\t\t\t\targs: [this.chainConfigService.getPermit2Address(evmChainID), amountIn],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: sourceTokenAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: approveToPermit2Data,\n\t\t\t})\n\n\t\t\tconst permit2ApprovalData = encodeFunctionData({\n\t\t\t\tabi: PERMIT2_ABI,\n\t\t\t\tfunctionName: \"approve\",\n\t\t\t\targs: [\n\t\t\t\t\tsourceTokenAddress,\n\t\t\t\t\tthis.chainConfigService.getUniversalRouterAddress(evmChainID),\n\t\t\t\t\tamountIn,\n\t\t\t\t\t281474976710655, // Max expiration\n\t\t\t\t],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: this.chainConfigService.getPermit2Address(evmChainID),\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: permit2ApprovalData,\n\t\t\t})\n\t\t}\n\n\t\ttransactions.push({\n\t\t\tto: this.chainConfigService.getUniversalRouterAddress(evmChainID),\n\t\t\tvalue: sourceTokenAddress === ADDRESS_ZERO ? amountIn : 0n,\n\t\t\tdata: executeData,\n\t\t})\n\n\t\treturn transactions\n\t}\n\n\t/**\n\t * Creates transaction structure for V4 exact output swap, including Permit2 approvals for ERC20 tokens.\n\t */\n\tcreateV4SwapCalldataExactOut(\n\t\tsourceTokenAddress: HexString,\n\t\ttargetTokenAddress: HexString,\n\t\tamountOut: bigint,\n\t\tamountInMax: bigint,\n\t\tfee: number,\n\t\tevmChainID: string,\n\t): Transaction[] {\n\t\tif (sourceTokenAddress.toLowerCase() === targetTokenAddress.toLowerCase()) {\n\t\t\tthrow new Error(\"Source and target tokens cannot be the same\")\n\t\t}\n\t\tconst currency0 =\n\t\t\tsourceTokenAddress.toLowerCase() < targetTokenAddress.toLowerCase()\n\t\t\t\t? sourceTokenAddress\n\t\t\t\t: targetTokenAddress\n\t\tconst currency1 =\n\t\t\tsourceTokenAddress.toLowerCase() < targetTokenAddress.toLowerCase()\n\t\t\t\t? targetTokenAddress\n\t\t\t\t: sourceTokenAddress\n\n\t\tconst zeroForOne = sourceTokenAddress.toLowerCase() === currency0.toLowerCase()\n\n\t\tconst poolKey = {\n\t\t\tcurrency0: currency0,\n\t\t\tcurrency1: currency1,\n\t\t\tfee: fee,\n\t\t\ttickSpacing: this.getTickSpacing(fee),\n\t\t\thooks: ADDRESS_ZERO,\n\t\t}\n\n\t\tconst actions = encodePacked(\n\t\t\t[\"uint8\", \"uint8\", \"uint8\"],\n\t\t\t[\n\t\t\t\tUniversalRouterCommands.V4_SWAP_EXACT_OUT_SINGLE,\n\t\t\t\tUniversalRouterCommands.SETTLE_ALL,\n\t\t\t\tUniversalRouterCommands.TAKE_ALL,\n\t\t\t],\n\t\t)\n\n\t\tconst swapParams = encodeAbiParameters(\n\t\t\tparseAbiParameters(\n\t\t\t\t\"((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, bool zeroForOne, uint128 amountOut, uint128 amountInMaximum, bytes hookData)\",\n\t\t\t),\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tpoolKey,\n\t\t\t\t\tzeroForOne,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tamountInMaximum: amountInMax,\n\t\t\t\t\thookData: \"0x\",\n\t\t\t\t},\n\t\t\t],\n\t\t)\n\n\t\tconst settleParams = encodeAbiParameters(parseAbiParameters(\"address currency, uint128 amount\"), [\n\t\t\tsourceTokenAddress,\n\t\t\tamountInMax,\n\t\t])\n\n\t\tconst takeParams = encodeAbiParameters(parseAbiParameters(\"address currency, uint128 amount\"), [\n\t\t\ttargetTokenAddress,\n\t\t\tamountOut,\n\t\t])\n\n\t\tconst params = [swapParams, settleParams, takeParams]\n\n\t\tconst commands = encodePacked([\"uint8\"], [UniversalRouterCommands.V4_SWAP])\n\t\tconst inputs = [encodeAbiParameters(parseAbiParameters(\"bytes actions, bytes[] params\"), [actions, params])]\n\n\t\tconst executeData = encodeFunctionData({\n\t\t\tabi: universalRouter.ABI,\n\t\t\tfunctionName: \"execute\",\n\t\t\targs: [commands, inputs],\n\t\t})\n\n\t\tconst transactions: Transaction[] = []\n\n\t\tif (sourceTokenAddress !== ADDRESS_ZERO) {\n\t\t\tconst approveToPermit2Data = encodeFunctionData({\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: \"approve\",\n\t\t\t\targs: [this.chainConfigService.getPermit2Address(evmChainID), amountInMax],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: sourceTokenAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: approveToPermit2Data,\n\t\t\t})\n\n\t\t\tconst permit2ApprovalData = encodeFunctionData({\n\t\t\t\tabi: PERMIT2_ABI,\n\t\t\t\tfunctionName: \"approve\",\n\t\t\t\targs: [\n\t\t\t\t\tsourceTokenAddress,\n\t\t\t\t\tthis.chainConfigService.getUniversalRouterAddress(evmChainID),\n\t\t\t\t\tamountInMax,\n\t\t\t\t\t281474976710655, // Max expiration\n\t\t\t\t],\n\t\t\t})\n\n\t\t\ttransactions.push({\n\t\t\t\tto: this.chainConfigService.getPermit2Address(evmChainID),\n\t\t\t\tvalue: 0n,\n\t\t\t\tdata: permit2ApprovalData,\n\t\t\t})\n\t\t}\n\n\t\ttransactions.push({\n\t\t\tto: this.chainConfigService.getUniversalRouterAddress(evmChainID),\n\t\t\tvalue: sourceTokenAddress === ADDRESS_ZERO ? amountInMax : 0n,\n\t\t\tdata: executeData,\n\t\t})\n\n\t\treturn transactions\n\t}\n\n\t/**\n\t * Finds the best Uniswap protocol (V2, V3, or V4) for swapping tokens given a desired output amount.\n\t * Compares liquidity and pricing across different protocols and fee tiers.\n\t *\n\t * @param getQuoteIn - Whether to use \"source\" or \"dest\" chain for the swap\n\t * @param tokenIn - The address of the input token\n\t * @param tokenOut - The address of the output token\n\t * @param amountOut - The desired output amount\n\t * @returns Object containing the best protocol, required input amount, fee tier (for V3/V4), and transaction structure\n\t */\n\tasync findBestProtocolWithAmountOut(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountOut: bigint,\n\t\tevmChainID: string,\n\t\toptions?: {\n\t\t\tselectedProtocol?: \"v2\" | \"v3\" | \"v4\"\n\t\t\tgenerateCalldata?: boolean\n\t\t\trecipient?: HexString\n\t\t},\n\t): Promise<{\n\t\tprotocol: \"v2\" | \"v3\" | \"v4\" | null\n\t\tamountIn: bigint\n\t\tfee?: number\n\t\ttransactions?: Transaction[]\n\t}> {\n\t\tif (options?.generateCalldata && !options?.recipient) {\n\t\t\tthrow new Error(\"Recipient address is required when generating calldata\")\n\t\t}\n\n\t\tif (options?.selectedProtocol) {\n\t\t\tif (options.selectedProtocol === \"v2\") {\n\t\t\t\tconst amountInV2 = await this.getV2QuoteWithAmountOut(client, tokenIn, tokenOut, amountOut, evmChainID)\n\t\t\t\tif (amountInV2 === maxUint256) {\n\t\t\t\t\treturn { protocol: null, amountIn: maxUint256 }\n\t\t\t\t}\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV2SwapCalldataExactOut(\n\t\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\t\tamountOut,\n\t\t\t\t\t\tamountInV2,\n\t\t\t\t\t\toptions.recipient!,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v2\", amountIn: amountInV2, transactions }\n\t\t\t}\n\n\t\t\tif (options.selectedProtocol === \"v3\") {\n\t\t\t\tconst { amountIn: amountInV3, fee: bestV3Fee } = await this.getV3QuoteWithAmountOut(\n\t\t\t\t\tclient,\n\t\t\t\t\ttokenIn,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t\tif (amountInV3 === maxUint256) {\n\t\t\t\t\treturn { protocol: null, amountIn: maxUint256 }\n\t\t\t\t}\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV3SwapCalldataExactOut(\n\t\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\t\tamountOut,\n\t\t\t\t\t\tamountInV3,\n\t\t\t\t\t\t[bestV3Fee],\n\t\t\t\t\t\toptions.recipient!,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v3\", amountIn: amountInV3, fee: bestV3Fee, transactions }\n\t\t\t}\n\n\t\t\tif (options.selectedProtocol === \"v4\") {\n\t\t\t\tconst { amountIn: amountInV4, fee: bestV4Fee } = await this.getV4QuoteWithAmountOut(\n\t\t\t\t\tclient,\n\t\t\t\t\ttokenIn,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t\tif (amountInV4 === maxUint256) {\n\t\t\t\t\treturn { protocol: null, amountIn: maxUint256 }\n\t\t\t\t}\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV4SwapCalldataExactOut(\n\t\t\t\t\t\ttokenIn,\n\t\t\t\t\t\ttokenOut,\n\t\t\t\t\t\tamountOut,\n\t\t\t\t\t\tamountInV4,\n\t\t\t\t\t\tbestV4Fee,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v4\", amountIn: amountInV4, fee: bestV4Fee, transactions }\n\t\t\t}\n\t\t}\n\n\t\t// If no protocol is selected, query all protocols to find the best one\n\t\tconst amountInV2 = await this.getV2QuoteWithAmountOut(client, tokenIn, tokenOut, amountOut, evmChainID)\n\n\t\tconst { amountIn: amountInV3, fee: bestV3Fee } = await this.getV3QuoteWithAmountOut(\n\t\t\tclient,\n\t\t\ttokenIn,\n\t\t\ttokenOut,\n\t\t\tamountOut,\n\t\t\tevmChainID,\n\t\t)\n\n\t\tconst { amountIn: amountInV4, fee: bestV4Fee } = await this.getV4QuoteWithAmountOut(\n\t\t\tclient,\n\t\t\ttokenIn,\n\t\t\ttokenOut,\n\t\t\tamountOut,\n\t\t\tevmChainID,\n\t\t)\n\n\t\tif (amountInV2 === maxUint256 && amountInV3 === maxUint256 && amountInV4 === maxUint256) {\n\t\t\treturn {\n\t\t\t\tprotocol: null,\n\t\t\t\tamountIn: maxUint256,\n\t\t\t}\n\t\t}\n\n\t\t// Prefer V4 when V4 is close to the best of V2/V3 (within thresholdBps)\n\t\tif (amountInV4 !== maxUint256) {\n\t\t\tconst thresholdBps = 100n // 1%\n\t\t\tif (amountInV3 !== maxUint256 && this.isWithinThreshold(amountInV4, amountInV3, thresholdBps)) {\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV4SwapCalldataExactOut(\n\t\t\t\t\t\ttokenIn,\n\t\t\t\t\t\ttokenOut,\n\t\t\t\t\t\tamountOut,\n\t\t\t\t\t\tamountInV4,\n\t\t\t\t\t\tbestV4Fee,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v4\", amountIn: amountInV4, fee: bestV4Fee, transactions }\n\t\t\t}\n\t\t\tif (amountInV2 !== maxUint256 && this.isWithinThreshold(amountInV4, amountInV2, thresholdBps)) {\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV4SwapCalldataExactOut(\n\t\t\t\t\t\ttokenIn,\n\t\t\t\t\t\ttokenOut,\n\t\t\t\t\t\tamountOut,\n\t\t\t\t\t\tamountInV4,\n\t\t\t\t\t\tbestV4Fee,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v4\", amountIn: amountInV4, fee: bestV4Fee, transactions }\n\t\t\t}\n\t\t}\n\n\t\tconst minAmount = [\n\t\t\t{ protocol: \"v2\" as const, amountIn: amountInV2 },\n\t\t\t{ protocol: \"v3\" as const, amountIn: amountInV3, fee: bestV3Fee },\n\t\t\t{ protocol: \"v4\" as const, amountIn: amountInV4, fee: bestV4Fee },\n\t\t].reduce((best, current) => (current.amountIn < best.amountIn ? current : best))\n\n\t\tlet transactions: Transaction[] | undefined\n\t\tif (options?.generateCalldata) {\n\t\t\tif (minAmount.protocol === \"v2\") {\n\t\t\t\ttransactions = this.createV2SwapCalldataExactOut(\n\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\tamountOut,\n\t\t\t\t\tamountInV2,\n\t\t\t\t\toptions.recipient!,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t} else if (minAmount.protocol === \"v3\") {\n\t\t\t\ttransactions = this.createV3SwapCalldataExactOut(\n\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\tamountOut,\n\t\t\t\t\tamountInV3,\n\t\t\t\t\t[bestV3Fee],\n\t\t\t\t\toptions.recipient!,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\ttransactions = this.createV4SwapCalldataExactOut(\n\t\t\t\t\ttokenIn,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tamountOut,\n\t\t\t\t\tamountInV4,\n\t\t\t\t\tbestV4Fee,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tif (minAmount.protocol === \"v2\") {\n\t\t\treturn {\n\t\t\t\tprotocol: \"v2\",\n\t\t\t\tamountIn: amountInV2,\n\t\t\t\ttransactions,\n\t\t\t}\n\t\t} else if (minAmount.protocol === \"v3\") {\n\t\t\treturn {\n\t\t\t\tprotocol: \"v3\",\n\t\t\t\tamountIn: amountInV3,\n\t\t\t\tfee: bestV3Fee,\n\t\t\t\ttransactions,\n\t\t\t}\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tprotocol: \"v4\",\n\t\t\t\tamountIn: amountInV4,\n\t\t\t\tfee: bestV4Fee,\n\t\t\t\ttransactions,\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Finds the best Uniswap protocol (V2, V3, or V4) for swapping tokens given an input amount.\n\t * Compares liquidity and pricing across different protocols and fee tiers.\n\t *\n\t * @param getQuoteIn - Whether to use \"source\" or \"dest\" chain for the swap\n\t * @param tokenIn - The address of the input token\n\t * @param tokenOut - The address of the output token\n\t * @param amountIn - The input amount to swap\n\t * @param evmChainID - The EVM chain ID in format \"EVM-{id}\"\n\t * @param selectedProtocol - Optional specific protocol to use (\"v2\", \"v3\", or \"v4\")\n\t * @returns Object containing the best protocol, expected output amount, fee tier (for V3/V4), and transaction structure\n\t */\n\tasync findBestProtocolWithAmountIn(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountIn: bigint,\n\t\tevmChainID: string,\n\t\toptions?: {\n\t\t\tselectedProtocol?: \"v2\" | \"v3\" | \"v4\"\n\t\t\tgenerateCalldata?: boolean\n\t\t\trecipient?: HexString\n\t\t},\n\t): Promise<{\n\t\tprotocol: \"v2\" | \"v3\" | \"v4\" | null\n\t\tamountOut: bigint\n\t\tfee?: number\n\t\ttransactions?: Transaction[]\n\t}> {\n\t\tif (options?.generateCalldata && !options?.recipient) {\n\t\t\tthrow new Error(\"Recipient address is required when generating calldata\")\n\t\t}\n\n\t\tif (options?.selectedProtocol) {\n\t\t\tif (options.selectedProtocol === \"v2\") {\n\t\t\t\tconst amountOutV2 = await this.getV2QuoteWithAmountIn(client, tokenIn, tokenOut, amountIn, evmChainID)\n\t\t\t\tif (amountOutV2 === BigInt(0)) {\n\t\t\t\t\treturn { protocol: null, amountOut: BigInt(0) }\n\t\t\t\t}\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV2SwapCalldataExactIn(\n\t\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\t\tamountIn,\n\t\t\t\t\t\tamountOutV2,\n\t\t\t\t\t\toptions.recipient!,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v2\", amountOut: amountOutV2, transactions }\n\t\t\t}\n\n\t\t\tif (options.selectedProtocol === \"v3\") {\n\t\t\t\tconst { amountOut: amountOutV3, fee: bestV3Fee } = await this.getV3QuoteWithAmountIn(\n\t\t\t\t\tclient,\n\t\t\t\t\ttokenIn,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t\tif (amountOutV3 === BigInt(0)) {\n\t\t\t\t\treturn { protocol: null, amountOut: BigInt(0) }\n\t\t\t\t}\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV3SwapCalldataExactIn(\n\t\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\t\tamountIn,\n\t\t\t\t\t\tamountOutV3,\n\t\t\t\t\t\t[bestV3Fee],\n\t\t\t\t\t\toptions.recipient!,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v3\", amountOut: amountOutV3, fee: bestV3Fee, transactions }\n\t\t\t}\n\n\t\t\tif (options.selectedProtocol === \"v4\") {\n\t\t\t\tconst { amountOut: amountOutV4, fee: bestV4Fee } = await this.getV4QuoteWithAmountIn(\n\t\t\t\t\tclient,\n\t\t\t\t\ttokenIn,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t\tif (amountOutV4 === BigInt(0)) {\n\t\t\t\t\treturn { protocol: null, amountOut: BigInt(0) }\n\t\t\t\t}\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV4SwapCalldataExactIn(\n\t\t\t\t\t\ttokenIn,\n\t\t\t\t\t\ttokenOut,\n\t\t\t\t\t\tamountIn,\n\t\t\t\t\t\tamountOutV4,\n\t\t\t\t\t\tbestV4Fee,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v4\", amountOut: amountOutV4, fee: bestV4Fee, transactions }\n\t\t\t}\n\t\t}\n\n\t\t// If no protocol is selected, query all protocols to find the best one\n\t\tconst amountOutV2 = await this.getV2QuoteWithAmountIn(client, tokenIn, tokenOut, amountIn, evmChainID)\n\n\t\tconst { amountOut: amountOutV3, fee: bestV3Fee } = await this.getV3QuoteWithAmountIn(\n\t\t\tclient,\n\t\t\ttokenIn,\n\t\t\ttokenOut,\n\t\t\tamountIn,\n\t\t\tevmChainID,\n\t\t)\n\n\t\tconst { amountOut: amountOutV4, fee: bestV4Fee } = await this.getV4QuoteWithAmountIn(\n\t\t\tclient,\n\t\t\ttokenIn,\n\t\t\ttokenOut,\n\t\t\tamountIn,\n\t\t\tevmChainID,\n\t\t)\n\n\t\t// If no liquidity found in any protocol\n\t\tif (amountOutV2 === BigInt(0) && amountOutV3 === BigInt(0) && amountOutV4 === BigInt(0)) {\n\t\t\treturn {\n\t\t\t\tprotocol: null,\n\t\t\t\tamountOut: BigInt(0),\n\t\t\t}\n\t\t}\n\n\t\t// Prefer V4 when V4 is close to the best of V2/V3 (within thresholdBps)\n\t\tif (amountOutV4 !== BigInt(0)) {\n\t\t\tconst thresholdBps = 100n // 1%\n\t\t\tif (amountOutV3 !== BigInt(0) && this.isWithinThreshold(amountOutV4, amountOutV3, thresholdBps)) {\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV4SwapCalldataExactIn(\n\t\t\t\t\t\ttokenIn,\n\t\t\t\t\t\ttokenOut,\n\t\t\t\t\t\tamountIn,\n\t\t\t\t\t\tamountOutV4,\n\t\t\t\t\t\tbestV4Fee,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v4\", amountOut: amountOutV4, fee: bestV4Fee, transactions }\n\t\t\t}\n\t\t\tif (amountOutV2 !== BigInt(0) && this.isWithinThreshold(amountOutV4, amountOutV2, thresholdBps)) {\n\t\t\t\tlet transactions: Transaction[] | undefined\n\t\t\t\tif (options?.generateCalldata) {\n\t\t\t\t\ttransactions = this.createV4SwapCalldataExactIn(\n\t\t\t\t\t\ttokenIn,\n\t\t\t\t\t\ttokenOut,\n\t\t\t\t\t\tamountIn,\n\t\t\t\t\t\tamountOutV4,\n\t\t\t\t\t\tbestV4Fee,\n\t\t\t\t\t\tevmChainID,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn { protocol: \"v4\", amountOut: amountOutV4, fee: bestV4Fee, transactions }\n\t\t\t}\n\t\t}\n\n\t\tconst maxAmount = [\n\t\t\t{ protocol: \"v2\" as const, amountOut: amountOutV2 },\n\t\t\t{ protocol: \"v3\" as const, amountOut: amountOutV3, fee: bestV3Fee },\n\t\t\t{ protocol: \"v4\" as const, amountOut: amountOutV4, fee: bestV4Fee },\n\t\t].reduce((best, current) => (current.amountOut > best.amountOut ? current : best))\n\n\t\tlet transactions: Transaction[] | undefined\n\t\tif (options?.generateCalldata) {\n\t\t\tif (maxAmount.protocol === \"v2\") {\n\t\t\t\ttransactions = this.createV2SwapCalldataExactIn(\n\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\tamountIn,\n\t\t\t\t\tamountOutV2,\n\t\t\t\t\toptions.recipient!,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t} else if (maxAmount.protocol === \"v3\") {\n\t\t\t\ttransactions = this.createV3SwapCalldataExactIn(\n\t\t\t\t\t[tokenIn, tokenOut],\n\t\t\t\t\tamountIn,\n\t\t\t\t\tamountOutV3,\n\t\t\t\t\t[bestV3Fee],\n\t\t\t\t\toptions.recipient!,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\ttransactions = this.createV4SwapCalldataExactIn(\n\t\t\t\t\ttokenIn,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tamountIn,\n\t\t\t\t\tamountOutV4,\n\t\t\t\t\tbestV4Fee,\n\t\t\t\t\tevmChainID,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tif (maxAmount.protocol === \"v2\") {\n\t\t\treturn {\n\t\t\t\tprotocol: \"v2\",\n\t\t\t\tamountOut: amountOutV2,\n\t\t\t\ttransactions,\n\t\t\t}\n\t\t} else if (maxAmount.protocol === \"v3\") {\n\t\t\treturn {\n\t\t\t\tprotocol: \"v3\",\n\t\t\t\tamountOut: amountOutV3,\n\t\t\t\tfee: bestV3Fee,\n\t\t\t\ttransactions,\n\t\t\t}\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tprotocol: \"v4\",\n\t\t\t\tamountOut: amountOutV4,\n\t\t\t\tfee: bestV4Fee,\n\t\t\t\ttransactions,\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Finds the best pair for multi-hop swaps based on popular tokens and liquidity.\n\t * Prefers pairs with tokenIn as intermediate token, then returns the pair with highest liquidity.\n\t */\n\tasync findPair(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tevmChainID: string,\n\t\tprotocol?: \"v2\" | \"v3\",\n\t): Promise<{ pairAddress: HexString; intermediateToken: HexString }> {\n\t\tconst chainPopularTokens = this.chainConfigService.getPopularTokens(evmChainID)\n\n\t\tif (chainPopularTokens.length === 0) {\n\t\t\tthrow new Error(`No suitable intermediate tokens found for chain ${evmChainID}`)\n\t\t}\n\n\t\tconst pairCandidates: Array<{\n\t\t\tpairAddress: HexString\n\t\t\ttoken0: HexString\n\t\t\ttoken1: HexString\n\t\t\tliquidity: bigint\n\t\t\thasTokenIn: boolean\n\t\t\tfee?: number\n\t\t}> = []\n\n\t\tfor (const intermediateToken of chainPopularTokens) {\n\t\t\ttry {\n\t\t\t\tconst pair = await this.getPairAddress(\n\t\t\t\t\tclient,\n\t\t\t\t\tintermediateToken as HexString,\n\t\t\t\t\ttokenOut,\n\t\t\t\t\tevmChainID,\n\t\t\t\t\tprotocol,\n\t\t\t\t)\n\n\t\t\t\tif (pair.poolAddress && pair.poolAddress !== ADDRESS_ZERO) {\n\t\t\t\t\tlet liquidity = 0n\n\n\t\t\t\t\tif (protocol === \"v2\") {\n\t\t\t\t\t\tconst reserves = await client.readContract({\n\t\t\t\t\t\t\taddress: pair.poolAddress,\n\t\t\t\t\t\t\tabi: [parseAbiItem(\"function getReserves() view returns (uint112, uint112, uint32)\")],\n\t\t\t\t\t\t\tfunctionName: \"getReserves\",\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tliquidity = BigInt(reserves[0]) + BigInt(reserves[1])\n\t\t\t\t\t} else if (protocol === \"v3\") {\n\t\t\t\t\t\tliquidity = await client.readContract({\n\t\t\t\t\t\t\taddress: pair.poolAddress,\n\t\t\t\t\t\t\tabi: [parseAbiItem(\"function liquidity() view returns (uint128)\")],\n\t\t\t\t\t\t\tfunctionName: \"liquidity\",\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hasTokenIn = intermediateToken.toLowerCase() === tokenIn.toLowerCase()\n\n\t\t\t\t\tpairCandidates.push({\n\t\t\t\t\t\tpairAddress: pair.poolAddress,\n\t\t\t\t\t\ttoken0: intermediateToken as HexString,\n\t\t\t\t\t\ttoken1: tokenOut,\n\t\t\t\t\t\tliquidity,\n\t\t\t\t\t\thasTokenIn,\n\t\t\t\t\t\tfee: pair.fee,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif (pairCandidates.length === 0) {\n\t\t\tthrow new Error(`No valid pairs found for chain ${evmChainID}`)\n\t\t}\n\n\t\tpairCandidates.sort((a, b) => {\n\t\t\tif (a.hasTokenIn && !b.hasTokenIn) return -1\n\t\t\tif (!a.hasTokenIn && b.hasTokenIn) return 1\n\t\t\treturn b.liquidity > a.liquidity ? 1 : -1\n\t\t})\n\n\t\treturn {\n\t\t\tpairAddress: pairCandidates[0].pairAddress,\n\t\t\tintermediateToken: pairCandidates[0].token0,\n\t\t}\n\t}\n\n\t/**\n\t * Gets pair address for V2 or V3 based on protocol parameter\n\t * For V3, returns both pool address and fee\n\t */\n\tprivate async getPairAddress(\n\t\tclient: PublicClient,\n\t\ttokenA: HexString,\n\t\ttokenB: HexString,\n\t\tevmChainID: string,\n\t\tprotocolParam?: \"v2\" | \"v3\",\n\t): Promise<{ poolAddress: HexString; fee?: number }> {\n\t\tconst factoryAddress = this.chainConfigService.getUniswapV2FactoryAddress(evmChainID)\n\t\tif (protocolParam === \"v2\") {\n\t\t\tconst poolAddress = await client.readContract({\n\t\t\t\taddress: factoryAddress,\n\t\t\t\tabi: [parseAbiItem(\"function getPair(address tokenA, address tokenB) view returns (address pair)\")],\n\t\t\t\tfunctionName: \"getPair\",\n\t\t\t\targs: [tokenA, tokenB],\n\t\t\t})\n\t\t\treturn { poolAddress }\n\t\t}\n\t\tif (protocolParam === \"v3\") {\n\t\t\treturn await this.getBestV3Pool(client, tokenA, tokenB, evmChainID)\n\t\t}\n\t\tthrow new Error(`Invalid protocol parameter: ${protocolParam}`)\n\t}\n\n\t/**\n\t * Gets the best V3 pool based on liquidity across different fee tiers\n\t */\n\tprivate async getBestV3Pool(\n\t\tclient: PublicClient,\n\t\ttoken0: HexString,\n\t\ttoken1: HexString,\n\t\tevmChainID: string,\n\t): Promise<{ poolAddress: HexString; fee: number }> {\n\t\tconst factoryAddress = this.chainConfigService.getUniswapV3FactoryAddress(evmChainID)\n\n\t\tlet mostLiquidPool = ADDRESS_ZERO\n\t\tlet bestFee = 0\n\t\tlet deepestLiquidity = 0n\n\n\t\tfor (const fee of COMMON_FEE_TIERS) {\n\t\t\ttry {\n\t\t\t\tconst poolAddress = (await client.readContract({\n\t\t\t\t\taddress: factoryAddress,\n\t\t\t\t\tabi: [\n\t\t\t\t\t\tparseAbiItem(\n\t\t\t\t\t\t\t\"function getPool(address tokenA, address tokenB, uint24 fee) view returns (address pool)\",\n\t\t\t\t\t\t),\n\t\t\t\t\t],\n\t\t\t\t\tfunctionName: \"getPool\",\n\t\t\t\t\targs: [token0, token1, fee],\n\t\t\t\t})) as HexString\n\n\t\t\t\tif (poolAddress !== ADDRESS_ZERO) {\n\t\t\t\t\tconst liquidity = await client.readContract({\n\t\t\t\t\t\taddress: poolAddress,\n\t\t\t\t\t\tabi: [parseAbiItem(\"function liquidity() view returns (uint128)\")],\n\t\t\t\t\t\tfunctionName: \"liquidity\",\n\t\t\t\t\t})\n\n\t\t\t\t\tif (liquidity > deepestLiquidity) {\n\t\t\t\t\t\tdeepestLiquidity = liquidity\n\t\t\t\t\t\tmostLiquidPool = poolAddress\n\t\t\t\t\t\tbestFee = fee\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tconsole.warn(`Failed to get V3 pool for fee ${fee}:`)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif (mostLiquidPool === ADDRESS_ZERO) {\n\t\t\tthrow new Error(`No V3 pools found for tokens ${token0} and ${token1}`)\n\t\t}\n\n\t\treturn { poolAddress: mostLiquidPool, fee: bestFee }\n\t}\n\n\tasync createMultiHopSwapThroughPair(\n\t\tclient: PublicClient,\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tamountIn: bigint,\n\t\tevmChainID: string,\n\t\trecipient: HexString,\n\t\tprotocol: \"v2\" | \"v3\" = \"v2\",\n\t\tslippagePercentage: bigint,\n\t\tdexPairAddress?: HexString,\n\t): Promise<{ finalAmountOut: bigint; calldata: Transaction[] }> {\n\t\tconst wethAsset = this.chainConfigService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\n\t\t// Convert ADDRESS_ZERO to WETH for pair lookup (DEX pairs use WETH, not ADDRESS_ZERO)\n\t\tconst tokenInForPairLookup = tokenIn === ADDRESS_ZERO ? wethAsset : tokenIn\n\t\tconst tokenOutForPairLookup = tokenOut === ADDRESS_ZERO ? wethAsset : tokenOut\n\n\t\tlet intermediateToken: HexString\n\n\t\tif (dexPairAddress) {\n\t\t\tconst [token0Result, token1Result] = await Promise.all([\n\t\t\t\tclient.readContract({\n\t\t\t\t\taddress: dexPairAddress,\n\t\t\t\t\tabi: [parseAbiItem(\"function token0() view returns (address)\")],\n\t\t\t\t\tfunctionName: \"token0\",\n\t\t\t\t}),\n\t\t\t\tclient.readContract({\n\t\t\t\t\taddress: dexPairAddress,\n\t\t\t\t\tabi: [parseAbiItem(\"function token1() view returns (address)\")],\n\t\t\t\t\tfunctionName: \"token1\",\n\t\t\t\t}),\n\t\t\t])\n\t\t\t// Handle native token: if tokenOut is ADDRESS_ZERO, check if either token0 or token1 is WETH\n\t\t\tconst normalizedTokenOut = tokenOut === ADDRESS_ZERO ? wethAsset : tokenOut\n\t\t\tintermediateToken =\n\t\t\t\tnormalizedTokenOut.toLowerCase() === token0Result.toLowerCase() ? token1Result : token0Result\n\t\t} else {\n\t\t\tconst { intermediateToken: foundIntermediateToken } = await this.findPair(\n\t\t\t\tclient,\n\t\t\t\ttokenInForPairLookup,\n\t\t\t\ttokenOutForPairLookup,\n\t\t\t\tevmChainID,\n\t\t\t\tprotocol,\n\t\t\t)\n\t\t\tintermediateToken = foundIntermediateToken\n\t\t}\n\n\t\tconst swapPath = this.buildSwapPath(tokenIn, tokenOut, intermediateToken, wethAsset)\n\n\t\tconst { finalAmountOut, fees } = await this.getQuoteForPath(client, swapPath, amountIn, evmChainID, protocol)\n\n\t\tconst amountOutMinimum = (finalAmountOut * (10000n - slippagePercentage)) / 10000n\n\n\t\tconst calldata =\n\t\t\tprotocol === \"v2\"\n\t\t\t\t? this.createV2SwapCalldataExactIn(swapPath, amountIn, amountOutMinimum, recipient, evmChainID)\n\t\t\t\t: this.createV3SwapCalldataExactIn(swapPath, amountIn, amountOutMinimum, fees, recipient, evmChainID)\n\n\t\treturn {\n\t\t\tfinalAmountOut: amountOutMinimum,\n\t\t\tcalldata,\n\t\t}\n\t}\n\n\tprivate buildSwapPath(\n\t\ttokenIn: HexString,\n\t\ttokenOut: HexString,\n\t\tintermediateToken: HexString,\n\t\twethAsset: HexString,\n\t): HexString[] {\n\t\tconst normalize = (token: HexString) => token.toLowerCase()\n\n\t\tif (normalize(intermediateToken) === normalize(tokenIn)) {\n\t\t\treturn [tokenIn, tokenOut]\n\t\t}\n\n\t\tif (normalize(intermediateToken) === normalize(wethAsset)) {\n\t\t\treturn [tokenIn, wethAsset, tokenOut]\n\t\t}\n\n\t\treturn [tokenIn, wethAsset, intermediateToken, tokenOut]\n\t}\n\n\tprivate async getQuoteForPath(\n\t\tclient: PublicClient,\n\t\tpath: HexString[],\n\t\tinitialAmount: bigint,\n\t\tevmChainID: string,\n\t\tprotocol: \"v2\" | \"v3\",\n\t): Promise<{ finalAmountOut: bigint; fees: number[] }> {\n\t\tlet currentAmount = initialAmount\n\t\tconst fees: number[] = []\n\n\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\tconst tokenIn = path[i]\n\t\t\tconst tokenOut = path[i + 1]\n\n\t\t\tif (protocol === \"v2\") {\n\t\t\t\tcurrentAmount = await this.getV2QuoteWithAmountIn(client, tokenIn, tokenOut, currentAmount, evmChainID)\n\t\t\t} else {\n\t\t\t\tconst quote = await this.getV3QuoteWithAmountIn(client, tokenIn, tokenOut, currentAmount, evmChainID)\n\t\t\t\tcurrentAmount = quote.amountOut\n\t\t\t\tfees.push(quote.fee)\n\t\t\t}\n\t\t}\n\n\t\treturn { finalAmountOut: currentAmount, fees }\n\t}\n\n\t/**\n\t * Returns true if candidate <= reference * (1 + thresholdBps/10000)\n\t * @param candidate - The candidate amount to compare\n\t * @param reference - The reference amount\n\t * @param thresholdBps - The threshold in basis points\n\t * @returns True if candidate is within threshold of reference\n\t */\n\tprivate isWithinThreshold(candidate: bigint, reference: bigint, thresholdBps: bigint): boolean {\n\t\tconst basisPoints = 10000n\n\t\treturn candidate * basisPoints <= reference * (basisPoints + thresholdBps)\n\t}\n\n\t/**\n\t * Encodes multiple command bytes into packed format\n\t * @private\n\t */\n\tprivate encodeCommands(commands: number[]): HexString {\n\t\tif (commands.length === 0) {\n\t\t\tthrow new Error(\"Commands array cannot be empty\")\n\t\t}\n\n\t\t// Build the type array and ensure proper typing\n\t\tconst types = Array(commands.length).fill(\"uint8\")\n\n\t\t// Use type assertion for viem's strict typing\n\t\treturn encodePacked(types as any, commands as any)\n\t}\n\n\t/**\n\t * Returns the tick spacing for a given fee tier in Uniswap V4\n\t * @param fee - The fee tier in basis points\n\t * @returns The tick spacing value\n\t */\n\tprivate getTickSpacing(fee: number): number {\n\t\tswitch (fee) {\n\t\t\tcase 100: // 0.01%\n\t\t\t\treturn 1\n\t\t\tcase 500: // 0.05%\n\t\t\t\treturn 10\n\t\t\tcase 3000: // 0.30%\n\t\t\t\treturn 60\n\t\t\tcase 10000: // 1.00%\n\t\t\t\treturn 200\n\t\t\tdefault:\n\t\t\t\treturn 60 // Default to medium\n\t\t}\n\t}\n}\n\nexport async function quoteUniswap(params: QuoteUniswapParams): Promise<QuoteUniswapResult> {\n\treturn new Swap().quoteUniswap(params)\n}\n","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 * - `HYPERBRIDGE_DELIVERED` – the cancel message has been delivered to Hyperbridge.\n * - `HYPERBRIDGE_FINALIZED` – the cancel message has been finalised on Hyperbridge.\n * - `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","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 * 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","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: \"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\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: \"address\",\n\t\t\t\t\t\t\t\t\t\tinternalType: \"address\",\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 GetRequest\",\n\t\t\t\tcomponents: [\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: \"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: \"nonce\",\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: \"from\",\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: \"timeoutTimestamp\",\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: \"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: \"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],\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 PostRequest\",\n\t\t\t\tcomponents: [\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: \"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: \"nonce\",\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: \"from\",\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: \"timeoutTimestamp\",\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: \"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],\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: \"onPostResponse\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct IncomingPostResponse\",\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 PostResponse\",\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 PostRequest\",\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: \"to\",\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: \"body\",\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: \"response\",\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],\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: \"onPostResponseTimeout\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct PostResponse\",\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: \"response\",\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: \"timeoutTimestamp\",\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: \"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],\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: \"response\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tinternalType: \"struct DispatchPostResponse\",\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: \"response\",\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: \"quoteNative\",\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: \"quoteNative\",\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 DispatchPostResponse\",\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: \"response\",\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: \"quoteNative\",\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],\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: \"setParams\",\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],\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: \"stateMachineId\",\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: \"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],\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],\n\t\tanonymous: false,\n\t},\n\t{\n\t\ttype: \"event\",\n\t\tname: \"NewDeploymentAdded\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"stateMachineId\",\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: \"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],\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: \"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: \"destination\",\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: \"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: \"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: \"SafeCastOverflowedUintDowncast\",\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tname: \"bits\",\n\t\t\t\ttype: \"uint8\",\n\t\t\t\tinternalType: \"uint8\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"value\",\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: \"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 { encodeFunctionData, encodeAbiParameters, formatUnits, parseUnits, keccak256 } from \"viem\"\nimport IntentGatewayV2 from \"@/abis/IntentGatewayV2\"\nimport Decimal from \"decimal.js\"\nimport type { Order } from \"@/types\"\nimport type { ERC7821Call } from \"@/types\"\nimport type { HexString } from \"@/types\"\nimport { retryPromise, fetchPrice, normalizeAddressForEvmBytes32, encodeStateMachineId } from \"@/utils\"\nimport ERC7821ABI from \"@/abis/erc7281\"\nimport { ERC7821_BATCH_MODE } from \"./types\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { requestCommitmentKey } from \"@/chain\"\nimport type { IEvmChain } from \"@/chain\"\nimport type { IProof } from \"@/chain\"\n\ntype ContractOrder = Omit<Order, \"id\" | \"source\" | \"destination\"> & {\n\tsource: HexString\n\tdestination: HexString\n}\n\n/** Cache TTL for fee-token entries, in milliseconds (5 minutes). */\nconst FEE_TOKEN_CACHE_TTL_MS = 5 * 60 * 1000\n\n/**\n * Returns the fee token (address and decimals) for a given chain, using a\n * timed cache to avoid redundant on-chain calls.\n *\n * Re-fetches from the chain whenever the cached entry is missing or older\n * than {@link FEE_TOKEN_CACHE_TTL_MS} (5 minutes).\n *\n * @param ctx - The shared IntentsV2 context containing the fee-token cache.\n * @param chainId - State-machine ID of the chain whose fee token is needed.\n * @param chain - EVM chain client used to fetch a fresh fee token if the cache misses.\n * @returns Resolves with the fee token address and its ERC-20 decimal count.\n */\nexport async function getFeeToken(\n\tctx: IntentGatewayContext,\n\tchainId: string,\n\tchain: IEvmChain,\n): Promise<{ address: HexString; decimals: number }> {\n\tconst cached = ctx.feeTokenCache.get(chainId)\n\tif (cached && Date.now() - cached.cachedAt < FEE_TOKEN_CACHE_TTL_MS) {\n\t\treturn cached\n\t}\n\n\tconst fresh = await chain.getFeeTokenWithDecimals()\n\tctx.feeTokenCache.set(chainId, { ...fresh, cachedAt: Date.now() })\n\treturn fresh\n}\n\n/**\n * Encodes a list of calls into ERC-7821 `execute` function calldata using\n * single-batch mode.\n *\n * This is a standalone utility that can be used outside of the\n * `IntentGatewayV2` class — for example, by filler strategies that need to\n * build custom batch calldata for combined swap-and-fill operations before\n * submitting a UserOperation.\n *\n * @param calls - Ordered list of calls to batch; each specifies a target\n * address, ETH value, and calldata.\n * @returns ABI-encoded calldata for the ERC-7821 `execute(bytes32,bytes)` function.\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\n/**\n * Fetches a Merkle/state proof for the given ISMP request commitment on the\n * source chain.\n *\n * Derives the two storage slots from the commitment using\n * `requestCommitmentKey`, then queries the source chain node for a state\n * proof at the given block height.\n *\n * @param commitment - The ISMP request commitment hash to prove.\n * @param source - Source chain client used to query the state proof.\n * @param sourceStateMachine - State-machine ID string of the source chain.\n * @param sourceConsensusStateId - Consensus-state identifier for the source chain.\n * @param sourceHeight - Block height at which to generate the proof.\n * @returns Resolves with an {@link IProof} ready to be submitted to Hyperbridge.\n * @internal\n */\nexport async function fetchSourceProof(\n\tcommitment: HexString,\n\tsource: IEvmChain,\n\tsourceStateMachine: string,\n\tsourceConsensusStateId: string,\n\tsourceHeight: bigint,\n): Promise<IProof> {\n\tconst { slot1, slot2 } = requestCommitmentKey(commitment)\n\tconst proofHex = await source.queryStateProof(sourceHeight, [slot1, slot2])\n\n\treturn {\n\t\theight: sourceHeight,\n\t\tstateMachine: sourceStateMachine,\n\t\tconsensusStateId: sourceConsensusStateId,\n\t\tproof: proofHex,\n\t}\n}\n\n/**\n * Strips SDK-only fields from an {@link Order} and normalises all fields to\n * the encoding the IntentGatewayV2 contract ABI expects:\n *\n * - `id` is removed (not part of the on-chain struct).\n * - `source` and `destination` are hex-encoded if currently plain string\n * state-machine IDs.\n * - `user`, `inputs[i].token`, `output.beneficiary`, `output.assets[i].token`,\n * and `predispatch.assets[i].token` are left-padded from 20-byte addresses to\n * 32-byte values (`0x000…addr`) via {@link bytes20ToBytes32}, matching the\n * `bytes32(uint256(uint160(addr)))` encoding the contract uses when casting\n * these fields back to `address`. Values already at 32 bytes are unchanged.\n *\n * @param order - The SDK-level order to transform.\n * @returns A contract-compatible order struct without `id`.\n */\nexport function transformOrderForContract(order: Order): ContractOrder {\n\tconst { id: _id, ...contractOrder } = order\n\treturn {\n\t\t...contractOrder,\n\t\tsource: encodeStateMachineId(order.source),\n\t\tdestination: encodeStateMachineId(order.destination),\n\t\tuser: normalizeAddressForEvmBytes32(order.user),\n\t\tinputs: order.inputs.map((t) => ({ ...t, token: normalizeAddressForEvmBytes32(t.token) })),\n\t\tpredispatch: {\n\t\t\t...order.predispatch,\n\t\t\tassets: order.predispatch.assets.map((t) => ({ ...t, token: normalizeAddressForEvmBytes32(t.token) })),\n\t\t},\n\t\toutput: {\n\t\t\t...order.output,\n\t\t\tbeneficiary: normalizeAddressForEvmBytes32(order.output.beneficiary),\n\t\t\tassets: order.output.assets.map((t) => ({ ...t, token: normalizeAddressForEvmBytes32(t.token) })),\n\t\t},\n\t}\n}\n\n/**\n * Calculates the commitment hash for an order by ABI-encoding the\n * contract-normalised form of the order and hashing it.\n *\n * Calls `transformOrderForContract` before encoding to ensure all address\n * fields are padded to 32 bytes and SDK-only fields are stripped.\n *\n * @param order - The SDK-level order to hash.\n * @returns The keccak256 commitment hash.\n */\nexport function orderCommitment(order: Order): HexString {\n\tconst placeOrderAbi = IntentGatewayV2.ABI.find(\n\t\t(item) => item.type === \"function\" && \"name\" in item && item.name === \"placeOrder\",\n\t)\n\tconst orderType = placeOrderAbi?.inputs?.[0]\n\tif (!orderType) throw new Error(\"Could not find Order type in ABI\")\n\n\tconst encoded = encodeAbiParameters([orderType], [transformOrderForContract(order) as any])\n\treturn keccak256(encoded)\n}\n\n/**\n * Converts a gas estimate (in gas units) on a given chain into the\n * equivalent amount of that chain's fee token (e.g. USDC).\n *\n * First attempts to price the gas cost in fee-token units using a Uniswap V2\n * on-chain quote (WETH → fee token). If that quote returns zero or fails,\n * falls back to a price-oracle estimate using the native currency's USD price\n * and assumes the fee token is worth $1.\n *\n * @param ctx - Shared IntentsV2 context.\n * @param gasEstimate - Gas quantity to convert (in gas units, not wei).\n * @param gasEstimateIn - Which chain side the gas estimate belongs to (`\"source\"` or `\"dest\"`).\n * @param evmChainID - State-machine ID of the chain on which gas is consumed.\n * @param gasPriceOverride - Optional gas price in wei; fetched on-chain if omitted.\n * @returns Resolves with the fee-token-denominated cost as a bigint, scaled to\n * the fee token's decimal precision.\n */\nexport async function convertGasToFeeToken(\n\tctx: IntentGatewayContext,\n\tgasEstimate: bigint,\n\tgasEstimateIn: \"source\" | \"dest\",\n\tevmChainID: string,\n\tgasPriceOverride?: bigint,\n): Promise<bigint> {\n\tconst chain = ctx[gasEstimateIn]\n\tconst client = chain.client\n\tconst gasPrice =\n\t\tgasPriceOverride ??\n\t\t((await retryPromise(() => client.getGasPrice(), {\n\t\t\tmaxRetries: 3,\n\t\t\tbackoffMs: 250,\n\t\t})) as bigint)\n\tconst gasCostInWei = gasEstimate * gasPrice\n\tconst wethAddr = chain.configService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\tconst feeToken = await getFeeToken(ctx, evmChainID, chain)\n\n\ttry {\n\t\tconst { amountOut } = await ctx.swap.findBestProtocolWithAmountIn(\n\t\t\tclient,\n\t\t\twethAddr,\n\t\t\tfeeToken.address,\n\t\t\tgasCostInWei,\n\t\t\tevmChainID,\n\t\t\t{ selectedProtocol: \"v2\" },\n\t\t)\n\t\tif (amountOut === 0n) {\n\t\t\tthrow new Error()\n\t\t}\n\t\treturn amountOut\n\t} catch {\n\t\tconst nativeCurrency = client.chain?.nativeCurrency\n\t\tconst chainId = Number.parseInt(evmChainID.split(\"-\")[1])\n\t\tconst gasCostInToken = new Decimal(formatUnits(gasCostInWei, nativeCurrency?.decimals ?? 18))\n\t\tconst tokenPriceUsd = await fetchPrice(nativeCurrency?.symbol, chainId)\n\t\tconst gasCostUsd = gasCostInToken.times(tokenPriceUsd)\n\t\tconst feeTokenPriceUsd = new Decimal(1)\n\t\tconst gasCostInFeeToken = gasCostUsd.dividedBy(feeTokenPriceUsd)\n\t\treturn parseUnits(gasCostInFeeToken.toFixed(feeToken.decimals), feeToken.decimals)\n\t}\n}\n\n/**\n * Converts a fee-token amount on a given chain into the equivalent native wei amount.\n *\n * First attempts a Uniswap V2 quote (fee token -> WETH). If that quote fails or\n * returns zero, falls back to a price-oracle estimate assuming the fee token is $1.\n *\n * @param ctx - Shared IntentsV2 context.\n * @param feeTokenAmount - Amount in fee token units (scaled by fee token decimals).\n * @param feeTokenIn - Which chain side the fee-token amount belongs to (`\"source\"` or `\"dest\"`).\n * @param evmChainID - State-machine ID of the chain used for conversion.\n * @returns Native wei-equivalent amount.\n */\nexport async function convertFeeTokenToWei(\n\tctx: IntentGatewayContext,\n\tfeeTokenAmount: bigint,\n\tfeeTokenIn: \"source\" | \"dest\",\n\tevmChainID: string,\n): Promise<bigint> {\n\tconst chain = ctx[feeTokenIn]\n\tconst client = chain.client\n\tconst wethAddr = chain.configService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\tconst feeToken = await getFeeToken(ctx, evmChainID, chain)\n\n\ttry {\n\t\tconst { amountOut } = await ctx.swap.findBestProtocolWithAmountIn(\n\t\t\tclient,\n\t\t\tfeeToken.address,\n\t\t\twethAddr,\n\t\t\tfeeTokenAmount,\n\t\t\tevmChainID,\n\t\t\t{ selectedProtocol: \"v2\" },\n\t\t)\n\t\tif (amountOut === 0n) {\n\t\t\tthrow new Error()\n\t\t}\n\t\treturn amountOut\n\t} catch {\n\t\tconst nativeCurrency = client.chain?.nativeCurrency\n\t\tconst chainId = Number.parseInt(evmChainID.split(\"-\")[1])\n\t\tconst feeTokenAmountInToken = new Decimal(formatUnits(feeTokenAmount, feeToken.decimals))\n\t\tconst nativeTokenPriceUsd = await fetchPrice(nativeCurrency?.symbol, chainId)\n\t\tconst feeTokenAmountUsd = feeTokenAmountInToken.times(new Decimal(1))\n\t\tconst nativeAmount = feeTokenAmountUsd.dividedBy(nativeTokenPriceUsd)\n\t\treturn parseUnits(nativeAmount.toFixed(nativeCurrency?.decimals ?? 18), nativeCurrency?.decimals ?? 18)\n\t}\n}\n","import { encodeFunctionData, parseEventLogs, type TransactionReceipt } from \"viem\"\nimport { generatePrivateKey, privateKeyToAccount } from \"viem/accounts\"\nimport { ABI as IntentGatewayV2ABI } from \"@/abis/IntentGatewayV2\"\nimport { normalizeStateMachineId } from \"@/utils\"\nimport { orderCommitment } from \"./utils\"\nimport type { Order, DecodedOrderPlacedLog } from \"@/types\"\nimport type { HexString } from \"@/types\"\nimport type { SessionKeyData } from \"@/storage\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { DEFAULT_GRAFFITI } from \"./types\"\nimport { transformOrderForContract } from \"./utils\"\n\n/**\n * Handles order placement on the source chain for IntentGatewayV2.\n *\n * Generates a fresh ephemeral session key per order, encodes the\n * `placeOrder` calldata, yields it to the caller for signing and\n * submission, then waits for the on-chain `OrderPlaced` event to\n * extract the canonical nonce and inputs before computing the final\n * order commitment.\n */\nexport class OrderPlacer {\n\t/**\n\t * @param ctx - Shared IntentsV2 context providing the source chain client,\n\t * config service, and session-key storage.\n\t */\n\tconstructor(private readonly ctx: IntentGatewayContext) {}\n\n\t/**\n\t * Bidirectional async generator that orchestrates order placement.\n\t *\n\t * **Yield/receive protocol:**\n\t * 1. Yields `{ to, data, sessionPrivateKey }` — the caller must sign a\n\t * transaction sending `data` to `to` and pass the signed transaction back\n\t * via `gen.next(signedTx)`.\n\t * 2. Returns `{ order, transactionHash }` — the finalized order with its\n\t * on-chain `nonce`, `inputs`, and computed `id`, plus the placement\n\t * transaction hash.\n\t *\n\t * A fresh ephemeral session key is generated for every call. The key is\n\t * stored immediately (without a commitment) so it can be retrieved by\n\t * address, then updated with the commitment once the `OrderPlaced` event\n\t * confirms the nonce.\n\t *\n\t * @param order - The order to place. `order.session` is mutated in-place\n\t * with the generated session key address before yielding.\n\t * @param graffiti - Optional bytes32 tag for orderflow attribution /\n\t * revenue share. Defaults to {@link DEFAULT_GRAFFITI} (bytes32 zero).\n\t * @yields `{ to, data, sessionPrivateKey }` — target contract address,\n\t * encoded `placeOrder` calldata, and the raw session private key.\n\t * @returns `{ order, transactionHash }` after the transaction is confirmed\n\t * and the `OrderPlaced` event is parsed.\n\t * @throws If the broadcast transaction receipt does not contain an\n\t * `OrderPlaced` event.\n\t */\n\tasync *placeOrder(\n\t\torder: Order,\n\t\tgraffiti: HexString = DEFAULT_GRAFFITI,\n\t): AsyncGenerator<\n\t\t{ to: HexString; data: HexString; sessionPrivateKey: HexString },\n\t\t{ order: Order; receipt: TransactionReceipt },\n\t\tHexString\n\t> {\n\t\tconst privateKey = generatePrivateKey()\n\t\tconst account = privateKeyToAccount(privateKey)\n\t\tconst sessionKeyAddress = account.address as HexString\n\t\tconst createdAt = Date.now()\n\n\t\torder.session = sessionKeyAddress\n\n\t\tawait this.ctx.sessionKeyStorage.setSessionKeyByAddress(sessionKeyAddress, {\n\t\t\tprivateKey: privateKey as HexString,\n\t\t\taddress: sessionKeyAddress,\n\t\t\tcreatedAt,\n\t\t})\n\n\t\tconst data = encodeFunctionData({\n\t\t\tabi: IntentGatewayV2ABI,\n\t\t\tfunctionName: \"placeOrder\",\n\t\t\targs: [transformOrderForContract(order), graffiti],\n\t\t}) as HexString\n\n\t\tconst intentGatewayAddress = this.ctx.source.configService.getIntentGatewayV2Address(\n\t\t\tnormalizeStateMachineId(order.source),\n\t\t)\n\n\t\tconst signedTransaction = yield {\n\t\t\tto: intentGatewayAddress,\n\t\t\tdata,\n\t\t\tsessionPrivateKey: privateKey as HexString,\n\t\t}\n\n\t\tconst receipt =\n\t\t\tsignedTransaction.length === 66\n\t\t\t\t? await this.ctx.source.getTransactionReceipt(signedTransaction)\n\t\t\t\t: await this.ctx.source.broadcastTransaction(signedTransaction)\n\n\t\tconst events = parseEventLogs({\n\t\t\tabi: IntentGatewayV2ABI,\n\t\t\tlogs: receipt.logs,\n\t\t\teventName: \"OrderPlaced\",\n\t\t})\n\n\t\tconst orderPlacedEvent = events[0] as DecodedOrderPlacedLog | undefined\n\t\tif (!orderPlacedEvent) {\n\t\t\tthrow new Error(\"OrderPlaced event not found in transaction receipt\")\n\t\t}\n\n\t\torder.nonce = orderPlacedEvent.args.nonce\n\t\torder.inputs = orderPlacedEvent.args.inputs.map((input) => ({\n\t\t\ttoken: input.token,\n\t\t\tamount: input.amount,\n\t\t}))\n\n\t\torder.id = orderCommitment(order)\n\n\t\tconst sessionKeyData: SessionKeyData = {\n\t\t\tprivateKey: privateKey as HexString,\n\t\t\taddress: sessionKeyAddress,\n\t\t\tcommitment: order.id as HexString,\n\t\t\tcreatedAt,\n\t\t}\n\n\t\tawait this.ctx.sessionKeyStorage.setSessionKeyByAddress(sessionKeyAddress, sessionKeyData)\n\n\t\treturn { order, receipt }\n\t}\n}\n","import type { HexString, TokenInfo, Order } from \"@/types\"\nimport type { IntentOrderStatusUpdate, ExecuteIntentOrderOptions, FillerBid, SelectBidResult } from \"@/types\"\nimport { sleep, DEFAULT_POLL_INTERVAL, normalizeStateMachineId } from \"@/utils\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { BidManager } from \"./BidManager\"\nimport { CryptoUtils } from \"./CryptoUtils\"\n// @ts-ignore\nimport mergeRace from \"@async-generator/merge-race\"\n\nconst USED_USEROPS_STORAGE_KEY = (commitment: HexString) => `used-userops:${commitment.toLowerCase()}`\n\n/**\n * Drives the post-placement execution lifecycle of an intent order.\n *\n * After an order is placed on the source chain, `OrderExecutor` polls the\n * Hyperbridge coprocessor for solver bids, selects the best bid, submits\n * the corresponding ERC-4337 UserOperation via the bundler, and tracks\n * partial fills until the order is fully satisfied or its on-chain block\n * deadline is reached.\n *\n * Execution is structured as two racing async generators combined via\n * `mergeRace`: an `executionStream` that polls for bids and submits\n * UserOperations, and a `deadlineStream` that sleeps until the order's\n * block deadline and yields `EXPIRED`. Whichever yields first wins.\n *\n * Deduplication of UserOperations is persisted across restarts using\n * `usedUserOpsStorage` so that the executor can resume safely after a crash.\n */\nexport class OrderExecutor {\n\tconstructor(\n\t\tprivate readonly ctx: IntentGatewayContext,\n\t\tprivate readonly bidManager: BidManager,\n\t\tprivate readonly crypto: import(\"./CryptoUtils\").CryptoUtils,\n\t) {}\n\n\t/**\n\t * Sleeps until the order's block deadline is reached, then yields EXPIRED.\n\t * Uses the chain's block time to calculate the sleep duration.\n\t */\n\tprivate async *deadlineStream(\n\t\tdeadline: bigint,\n\t\tcommitment: HexString,\n\t): AsyncGenerator<IntentOrderStatusUpdate, void> {\n\t\tconst client = this.ctx.dest.client\n\t\tconst blockTimeMs = client.chain?.blockTime ?? 2_000\n\n\t\twhile (true) {\n\t\t\tconst currentBlock = await client.getBlockNumber()\n\t\t\tif (currentBlock >= deadline) break\n\n\t\t\tconst blocksRemaining = Number(deadline - currentBlock)\n\t\t\tconst sleepMs = Math.min(blocksRemaining * blockTimeMs, 60_000)\n\t\t\tawait sleep(sleepMs)\n\t\t}\n\n\t\tyield {\n\t\t\tstatus: \"EXPIRED\",\n\t\t\tcommitment,\n\t\t\terror: \"Order deadline reached\",\n\t\t}\n\t}\n\n\t/** Loads the persisted deduplication set of already-submitted UserOp hashes for a given order commitment. */\n\tprivate async loadUsedUserOps(commitment: HexString): Promise<Set<string>> {\n\t\tconst usedUserOps = new Set<string>()\n\t\tconst persisted = await this.ctx.usedUserOpsStorage.getItem(USED_USEROPS_STORAGE_KEY(commitment))\n\t\tif (persisted) {\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(persisted) as string[]\n\t\t\t\tfor (const key of parsed) {\n\t\t\t\t\tusedUserOps.add(key)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore corrupt entries and start fresh\n\t\t\t}\n\t\t}\n\t\treturn usedUserOps\n\t}\n\n\t/** Persists the deduplication set of UserOp hashes to storage. */\n\tprivate async persistUsedUserOps(commitment: HexString, usedUserOps: Set<string>): Promise<void> {\n\t\tawait this.ctx.usedUserOpsStorage.setItem(\n\t\t\tUSED_USEROPS_STORAGE_KEY(commitment),\n\t\t\tJSON.stringify([...usedUserOps]),\n\t\t)\n\t}\n\n\t/**\n\t * Creates a closure that computes the deduplication hash key for a\n\t * UserOperation, pre-bound to the order's destination chain and entry point.\n\t */\n\tprivate createUserOpHasher(order: {\n\t\tdestination: string\n\t}): (userOp: SelectBidResult[\"userOp\"] | FillerBid[\"userOp\"]) => string {\n\t\tconst entryPointAddress = this.ctx.dest.configService.getEntryPointV08Address(\n\t\t\tnormalizeStateMachineId(order.destination),\n\t\t)\n\t\tconst chainId = BigInt(\n\t\t\tthis.ctx.dest.client.chain?.id ?? Number.parseInt(this.ctx.dest.config.stateMachineId.split(\"-\")[1]),\n\t\t)\n\t\treturn (userOp) => CryptoUtils.computeUserOpHash(userOp, entryPointAddress, chainId)\n\t}\n\n\t/**\n\t * Fetches bids from the coprocessor for a given order commitment.\n\t * If a preferred solver is configured and the solver lock has not expired,\n\t * only bids from that solver are returned.\n\t */\n\tprivate async fetchBids(params: {\n\t\tcommitment: HexString\n\t\tsolver?: { address: HexString; timeoutMs: number }\n\t\tsolverLockStartTime: number\n\t}): Promise<FillerBid[]> {\n\t\tconst { commitment, solver, solverLockStartTime } = params\n\n\t\tconst fetchedBids = await this.ctx.intentsCoprocessor!.getBidsForOrder(commitment)\n\n\t\tif (solver) {\n\t\t\tconst { address, timeoutMs } = solver\n\t\t\tconst solverLockActive = Date.now() - solverLockStartTime < timeoutMs\n\n\t\t\treturn solverLockActive\n\t\t\t\t? fetchedBids.filter((bid) => bid.userOp.sender.toLowerCase() === address.toLowerCase())\n\t\t\t\t: fetchedBids\n\t\t}\n\n\t\treturn fetchedBids\n\t}\n\n\t/**\n\t * Selects the best bid from the provided candidates, submits the\n\t * UserOperation, and persists the dedup entry to prevent resubmission.\n\t */\n\tprivate async submitBid(params: {\n\t\torder: Order\n\t\tfreshBids: FillerBid[]\n\t\tsessionPrivateKey?: HexString\n\t\tcommitment: HexString\n\t\tusedUserOps: Set<string>\n\t\tuserOpHashKey: (userOp: SelectBidResult[\"userOp\"] | FillerBid[\"userOp\"]) => string\n\t}): Promise<SelectBidResult> {\n\t\tconst { order, freshBids, sessionPrivateKey, commitment, usedUserOps, userOpHashKey } = params\n\n\t\tconst result = await this.bidManager.selectBid(order, freshBids, sessionPrivateKey)\n\n\t\tusedUserOps.add(userOpHashKey(result.userOp))\n\t\tawait this.persistUsedUserOps(commitment, usedUserOps)\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Processes a fill result and returns updated fill accumulators,\n\t * the status update to yield (if any), and whether the order is\n\t * fully satisfied.\n\t */\n\tprivate processFillResult(\n\t\tresult: SelectBidResult,\n\t\tcommitment: HexString,\n\t\ttargetAssets: TokenInfo[],\n\t\ttotalFilledAssets: TokenInfo[],\n\t\tremainingAssets: TokenInfo[],\n\t): {\n\t\tupdate: IntentOrderStatusUpdate | null\n\t\tdone: boolean\n\t\ttotalFilledAssets: TokenInfo[]\n\t\tremainingAssets: TokenInfo[]\n\t} {\n\t\tif (result.fillStatus === \"full\") {\n\t\t\ttotalFilledAssets = targetAssets.map((a) => ({ token: a.token, amount: a.amount }))\n\t\t\tremainingAssets = targetAssets.map((a) => ({ token: a.token, amount: 0n }))\n\n\t\t\treturn {\n\t\t\t\tupdate: {\n\t\t\t\t\tstatus: \"FILLED\",\n\t\t\t\t\tcommitment,\n\t\t\t\t\tuserOpHash: result.userOpHash,\n\t\t\t\t\tselectedSolver: result.solverAddress,\n\t\t\t\t\ttransactionHash: result.txnHash,\n\t\t\t\t\ttotalFilledAssets,\n\t\t\t\t\tremainingAssets,\n\t\t\t\t},\n\t\t\t\tdone: true,\n\t\t\t\ttotalFilledAssets,\n\t\t\t\tremainingAssets,\n\t\t\t}\n\t\t}\n\n\t\tif (result.fillStatus === \"partial\") {\n\t\t\tconst filledAssets = result.filledAssets ?? []\n\n\t\t\ttotalFilledAssets = totalFilledAssets.map((a) => {\n\t\t\t\tconst filled = filledAssets.find((f) => f.token === a.token)\n\t\t\t\treturn filled ? { token: a.token, amount: a.amount + filled.amount } : { ...a }\n\t\t\t})\n\n\t\t\tremainingAssets = targetAssets.map((target) => {\n\t\t\t\tconst filled = totalFilledAssets.find((a) => a.token === target.token)\n\t\t\t\tconst filledAmt = filled?.amount ?? 0n\n\t\t\t\treturn {\n\t\t\t\t\ttoken: target.token,\n\t\t\t\t\tamount: filledAmt >= target.amount ? 0n : target.amount - filledAmt,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst fullyFilled = remainingAssets.every((a) => a.amount === 0n)\n\n\t\t\treturn {\n\t\t\t\tupdate: fullyFilled\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstatus: \"FILLED\",\n\t\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\t\tuserOpHash: result.userOpHash,\n\t\t\t\t\t\t\tselectedSolver: result.solverAddress,\n\t\t\t\t\t\t\ttransactionHash: result.txnHash,\n\t\t\t\t\t\t\ttotalFilledAssets,\n\t\t\t\t\t\t\tremainingAssets,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstatus: \"PARTIAL_FILL\",\n\t\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\t\tuserOpHash: result.userOpHash,\n\t\t\t\t\t\t\tselectedSolver: result.solverAddress,\n\t\t\t\t\t\t\ttransactionHash: result.txnHash,\n\t\t\t\t\t\t\tfilledAssets,\n\t\t\t\t\t\t\ttotalFilledAssets,\n\t\t\t\t\t\t\tremainingAssets,\n\t\t\t\t\t\t},\n\t\t\t\tdone: fullyFilled,\n\t\t\t\ttotalFilledAssets,\n\t\t\t\tremainingAssets,\n\t\t\t}\n\t\t}\n\n\t\treturn { update: null, done: false, totalFilledAssets, remainingAssets }\n\t}\n\n\t/**\n\t * Executes an intent order by racing bid polling against the order's\n\t * block deadline. Yields status updates at each lifecycle stage.\n\t *\n\t * **Same-chain:** `AWAITING_BIDS` → `BIDS_RECEIVED` → `BID_SELECTED`\n\t * → (`FILLED` | `PARTIAL_FILL`)* → (`FILLED` | `EXPIRED`)\n\t *\n\t * **Cross-chain:** `AWAITING_BIDS` → `BIDS_RECEIVED` → `BID_SELECTED`\n\t * (terminates — settlement is confirmed async via Hyperbridge)\n\t */\n\tasync *executeOrder(options: ExecuteIntentOrderOptions): AsyncGenerator<IntentOrderStatusUpdate, void> {\n\t\tconst { order, sessionPrivateKey, auctionTimeMs, pollIntervalMs = DEFAULT_POLL_INTERVAL, solver } = options\n\n\t\tconst commitment = order.id as HexString\n\t\tconst isSameChain = order.source === order.destination\n\n\t\tif (!this.ctx.intentsCoprocessor) {\n\t\t\tyield { status: \"FAILED\", error: \"IntentsCoprocessor required for order execution\" }\n\t\t\treturn\n\t\t}\n\n\t\tif (!this.ctx.bundlerUrl) {\n\t\t\tyield { status: \"FAILED\", error: \"Bundler URL not configured\" }\n\t\t\treturn\n\t\t}\n\n\t\tconst usedUserOps = await this.loadUsedUserOps(commitment)\n\t\tconst userOpHashKey = this.createUserOpHasher(order)\n\n\t\tconst targetAssets = order.output.assets.map((a) => ({ token: a.token, amount: a.amount }))\n\t\tlet totalFilledAssets = order.output.assets.map((a) => ({ token: a.token, amount: 0n }))\n\t\tlet remainingAssets = order.output.assets.map((a) => ({ token: a.token, amount: a.amount }))\n\n\t\tconst executionStream = this.executionStream({\n\t\t\torder,\n\t\t\tsessionPrivateKey,\n\t\t\tcommitment,\n\t\t\tauctionTimeMs,\n\t\t\tpollIntervalMs,\n\t\t\tsolver,\n\t\t\tusedUserOps,\n\t\t\tuserOpHashKey,\n\t\t\ttargetAssets,\n\t\t\ttotalFilledAssets,\n\t\t\tremainingAssets,\n\t\t})\n\n\t\tconst deadlineTimeout = this.deadlineStream(order.deadline, commitment)\n\t\tconst combined = mergeRace(deadlineTimeout, executionStream)\n\n\t\ttry {\n\t\t\tfor await (const update of combined) {\n\t\t\t\tyield update\n\n\t\t\t\tif (update.status === \"EXPIRED\" || update.status === \"FILLED\") return\n\t\t\t}\n\t\t} finally {\n\t\t\t// mergeRace does not call .return() on the underlying generators\n\t\t\t// when the consumer exits, so tear them down explicitly to prevent\n\t\t\t// them from running in the background.\n\t\t\tconsole.log(`[OrderExecutor] Tearing down streams for commitment=${commitment}`)\n\t\t\tawait executionStream.return(undefined as never)\n\t\t\tawait deadlineTimeout.return(undefined as never)\n\t\t}\n\t}\n\n\t/**\n\t * Core execution loop that polls for bids, submits UserOperations,\n\t * and tracks fill progress. Yields between each poll iteration so\n\t * that `mergeRace` can interleave the deadline stream.\n\t */\n\tprivate async *executionStream(params: {\n\t\torder: Order\n\t\tsessionPrivateKey?: HexString\n\t\tcommitment: HexString\n\t\tauctionTimeMs: number\n\t\tpollIntervalMs: number\n\t\tsolver?: { address: HexString; timeoutMs: number }\n\t\tusedUserOps: Set<string>\n\t\tuserOpHashKey: (userOp: SelectBidResult[\"userOp\"] | FillerBid[\"userOp\"]) => string\n\t\ttargetAssets: TokenInfo[]\n\t\ttotalFilledAssets: TokenInfo[]\n\t\tremainingAssets: TokenInfo[]\n\t}): AsyncGenerator<IntentOrderStatusUpdate, void> {\n\t\tconst {\n\t\t\torder,\n\t\t\tsessionPrivateKey,\n\t\t\tcommitment,\n\t\t\tauctionTimeMs,\n\t\t\tpollIntervalMs,\n\t\t\tsolver,\n\t\t\tusedUserOps,\n\t\t\tuserOpHashKey,\n\t\t\ttargetAssets,\n\t\t} = params\n\t\tlet { totalFilledAssets, remainingAssets } = params\n\n\t\t// Track per-bid failure counts. A bid is excluded from future\n\t\t// iterations only after it has failed twice.\n\t\tconst MAX_BID_ATTEMPTS = 2\n\t\tconst bidFailCounts = new Map<string, number>()\n\t\tconst isFreshBid = (bid: FillerBid) => {\n\t\t\tconst key = userOpHashKey(bid.userOp)\n\t\t\treturn !usedUserOps.has(key) && (bidFailCounts.get(key) ?? 0) < MAX_BID_ATTEMPTS\n\t\t}\n\n\t\tconst solverLockStartTime = Date.now()\n\t\tyield { status: \"AWAITING_BIDS\", commitment, totalFilledAssets, remainingAssets }\n\n\t\ttry {\n\t\t\t// Poll for bids during the auction period, yielding NEW_BID for each new bid seen\n\t\t\tconst auctionEnd = Date.now() + auctionTimeMs\n\t\t\tconst auctionSeenBids = new Set<string>()\n\t\t\twhile (Date.now() < auctionEnd) {\n\t\t\t\ttry {\n\t\t\t\t\tconst bids = await this.fetchBids({ commitment, solver, solverLockStartTime })\n\t\t\t\t\tconst freshBids = bids.filter((bid) => !usedUserOps.has(userOpHashKey(bid.userOp)))\n\t\t\t\t\tconst newBids = freshBids.filter((bid) => !auctionSeenBids.has(userOpHashKey(bid.userOp)))\n\t\t\t\t\tif (newBids.length > 0) {\n\t\t\t\t\t\tfor (const bid of newBids) {\n\t\t\t\t\t\t\tauctionSeenBids.add(userOpHashKey(bid.userOp))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield { status: \"NEW_BID\", commitment, bidCount: freshBids.length, bids: freshBids }\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Ignore fetch errors during auction, will retry next interval\n\t\t\t\t}\n\t\t\t\tconst remaining = auctionEnd - Date.now()\n\t\t\t\tif (remaining > 0) {\n\t\t\t\t\tawait sleep(Math.min(pollIntervalMs, remaining))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (true) {\n\t\t\t\tlet freshBids: FillerBid[]\n\t\t\t\ttry {\n\t\t\t\t\tconst bids = await this.fetchBids({ commitment, solver, solverLockStartTime })\n\t\t\t\t\tfreshBids = bids.filter(isFreshBid)\n\t\t\t\t} catch {\n\t\t\t\t\tawait sleep(pollIntervalMs)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (freshBids.length === 0) {\n\t\t\t\t\tawait sleep(pollIntervalMs)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tyield { status: \"BIDS_RECEIVED\", commitment, bidCount: freshBids.length, bids: freshBids }\n\n\t\t\t\tlet submitResult: SelectBidResult\n\t\t\t\ttry {\n\t\t\t\t\tsubmitResult = await this.submitBid({\n\t\t\t\t\t\torder,\n\t\t\t\t\t\tfreshBids,\n\t\t\t\t\t\tsessionPrivateKey,\n\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\tusedUserOps,\n\t\t\t\t\t\tuserOpHashKey,\n\t\t\t\t\t})\n\t\t\t\t} catch (err) {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"FAILED\",\n\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\ttotalFilledAssets,\n\t\t\t\t\t\tremainingAssets,\n\t\t\t\t\t\terror: `Failed to select bid and submit: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t\t}\n\t\t\t\t\t// Increment the failure count only for the top-ranked bid\n\t\t\t\t\t// (first after validation & sorting). That is the bid\n\t\t\t\t\t// selectBid would have tried first; the rest should not be\n\t\t\t\t\t// penalised for its failure.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst sorted = await this.bidManager.validateAndSortBids(freshBids, order)\n\t\t\t\t\t\tif (sorted.length > 0) {\n\t\t\t\t\t\t\tconst key = userOpHashKey(sorted[0].bid.userOp)\n\t\t\t\t\t\t\tbidFailCounts.set(key, (bidFailCounts.get(key) ?? 0) + 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// If sorting itself fails, skip counting\n\t\t\t\t\t}\n\t\t\t\t\tawait sleep(pollIntervalMs)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"BID_SELECTED\",\n\t\t\t\t\tcommitment,\n\t\t\t\t\tselectedSolver: submitResult.solverAddress,\n\t\t\t\t\tuserOpHash: submitResult.userOpHash,\n\t\t\t\t\tuserOp: submitResult.userOp,\n\t\t\t\t\ttransactionHash: submitResult.txnHash,\n\t\t\t\t}\n\n\t\t\t\tconst fill = this.processFillResult(\n\t\t\t\t\tsubmitResult,\n\t\t\t\t\tcommitment,\n\t\t\t\t\ttargetAssets,\n\t\t\t\t\ttotalFilledAssets,\n\t\t\t\t\tremainingAssets,\n\t\t\t\t)\n\t\t\t\ttotalFilledAssets = fill.totalFilledAssets\n\t\t\t\tremainingAssets = fill.remainingAssets\n\n\t\t\t\tif (fill.update) {\n\t\t\t\t\tyield fill.update\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tyield {\n\t\t\t\tstatus: \"FAILED\",\n\t\t\t\tcommitment,\n\t\t\t\terror: `Unexpected error: ${err instanceof Error ? err.message : String(err)}`,\n\t\t\t}\n\t\t}\n\t}\n}\n","import { encodeFunctionData, concatHex, parseEventLogs, pad } from \"viem\"\nimport { ABI as IntentGatewayV2ABI } from \"@/abis/IntentGatewayV2\"\nimport EVM_HOST from \"@/abis/evmHost\"\nimport {\n\tgetRequestCommitment,\n\tpostRequestCommitment,\n\tconstructRefundEscrowRequestBody,\n\tencodeWithdrawalRequest,\n\tadjustDecimals,\n\tnormalizeStateMachineId,\n\tparseStateMachineId,\n\twaitForChallengePeriod,\n\tretryPromise,\n\tsleep,\n} from \"@/utils\"\nimport { STORAGE_KEYS } from \"@/storage\"\nimport type { Order, HexString, IGetRequest, IPostRequest, CancelOrderOptions, CancelQuote } from \"@/types\"\nimport type { IGetRequestMessage } from \"@/chain\"\nimport type { IProof } from \"@/chain\"\nimport type { IsmpClient } from \"@/client\"\nimport type { SubstrateChain } from \"@/chain\"\nimport { RequestStatus } from \"@/types\"\nimport type { IntentGatewayContext } from \"./types\"\nimport type { CancelEvent } from \"./types\"\nimport { transformOrderForContract, fetchSourceProof, getFeeToken, convertGasToFeeToken } from \"./utils\"\n\n/**\n * Handles cancellation of IntentGatewayV2 orders from either the source or\n * destination chain.\n *\n * **Source-chain cancellation** (`cancelOrderFromSource`):\n * For same-chain orders, encodes a direct `cancelOrder` call and waits for\n * the `EscrowRefunded` event. For cross-chain orders, fetches a destination\n * state proof, submits a GET request, waits for Hyperbridge finalization, and\n * submits the proof to unlock the escrowed funds.\n *\n * **Destination-chain cancellation** (`cancelOrderFromDest`):\n * Submits a `cancelOrder` call on the destination chain which dispatches an\n * ISMP POST request back to the source chain. Tracks the request through\n * Hyperbridge until the source-chain escrow is refunded.\n *\n * Both paths are resumable: intermediate state (destination proof, GET/POST\n * commitments, source proof) is persisted in `cancellationStorage` so the\n * generator can be re-entered after a crash without re-submitting transactions.\n */\nexport class OrderCanceller {\n\t/**\n\t * @param ctx - Shared IntentsV2 context providing the source and destination\n\t * chain clients, config service, and cancellation storage.\n\t */\n\tconstructor(private readonly ctx: IntentGatewayContext) {}\n\n\t/**\n\t * Returns both the native token cost and the relayer fee for cancelling an\n\t * order. Frontends can use `relayerFee` to approve the ERC-20 spend before\n\t * submitting the cancel transaction.\n\t *\n\t * @param order - The order to quote.\n\t * @param options - Choose the initiation side. Defaults to source-side cancellation.\n\t * @returns `{ nativeValue }` — native token amount (wei) to send as `value`;\n\t * `{ relayerFee }` — relayer incentive denominated in the chain's fee token.\n\t */\n\tasync quoteCancelOrder(order: Order, options: CancelOrderOptions = {}): Promise<CancelQuote> {\n\t\tif (options.from === \"destination\") {\n\t\t\treturn this.quoteCancelFromDest(order)\n\t\t}\n\t\treturn this.quoteCancelFromSource(order)\n\t}\n\n\t/**\n\t * Quotes the native token cost of a source-initiated cross-chain cancellation.\n\t *\n\t * Constructs a mock ISMP GET request for the destination commitment slot and\n\t * calls `quoteNative` on the source host to obtain the dispatch fee.\n\t * Returns 0 for same-chain orders (no ISMP call needed).\n\t *\n\t * @param order - The order to quote.\n\t * @returns The native token dispatch fee in wei.\n\t */\n\tprivate async quoteCancelFromSource(order: Order): Promise<CancelQuote> {\n\t\tif (order.source === order.destination) return { nativeValue: 0n, relayerFee: 0n }\n\n\t\tconst sourceStateMachine = normalizeStateMachineId(order.source)\n\t\tconst height = order.deadline + 1n\n\n\t\tconst destIntentGateway = this.ctx.dest.configService.getIntentGatewayV2Address(\n\t\t\tnormalizeStateMachineId(order.destination),\n\t\t)\n\t\tconst slotHash = await this.ctx.dest.client.readContract({\n\t\t\tabi: IntentGatewayV2ABI,\n\t\t\taddress: destIntentGateway,\n\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\targs: [order.id as HexString],\n\t\t})\n\t\tconst key = concatHex([destIntentGateway as HexString, slotHash as HexString]) as HexString\n\n\t\tconst context = encodeWithdrawalRequest(order, order.user as HexString)\n\n\t\tconst getRequest: IGetRequest = {\n\t\t\tsource: sourceStateMachine,\n\t\t\tdest: normalizeStateMachineId(order.destination),\n\t\t\tfrom: this.ctx.source.configService.getIntentGatewayV2Address(normalizeStateMachineId(order.destination)),\n\t\t\tnonce: await this.ctx.source.getHostNonce(),\n\t\t\theight,\n\t\t\tkeys: [key],\n\t\t\ttimeoutTimestamp: 0n,\n\t\t\tcontext,\n\t\t}\n\n\t\tconst feeInSourceFeeToken = await convertGasToFeeToken(this.ctx, 400_000n, \"source\", sourceStateMachine)\n\t\tconst relayerFee = (feeInSourceFeeToken * 1005n) / 1000n\n\n\t\tconst nativeValue = await this.ctx.source.quoteNative(getRequest, relayerFee)\n\t\treturn { nativeValue, relayerFee }\n\t}\n\n\t/**\n\t * Async generator that cancels an order and streams status events until\n\t * cancellation is complete.\n\t *\n\t * Delegates to `cancelOrderFromSource` or `cancelOrderFromDest` based on\n\t * the `from` parameter.\n\t *\n\t * @param order - The order to cancel.\n\t * @param indexerClient - Indexer client used to stream ISMP request status\n\t * updates and query state-machine heights.\n\t * @param options - Choose the initiation side. Defaults to source-side cancellation.\n\t * @yields {@link CancelEvent} objects describing each stage of the\n\t * cancellation lifecycle.\n\t */\n\tasync *cancelOrder(\n\t\torder: Order,\n\t\tindexerClient: IsmpClient,\n\t\toptions: CancelOrderOptions = {},\n\t): AsyncGenerator<CancelEvent> {\n\t\tconst isSameChain = order.source === order.destination\n\t\tif (options.from === \"destination\" && !isSameChain) {\n\t\t\tyield* this.cancelOrderFromDest(order, indexerClient)\n\t\t\treturn\n\t\t}\n\t\tyield* this.cancelOrderFromSource(order, indexerClient)\n\t}\n\n\t/**\n\t * Async generator that cancels an order by initiating the cancel from the\n\t * source chain.\n\t *\n\t * **Same-chain path:** encodes a direct `cancelOrder` call, yields\n\t * `AWAITING_CANCEL_TRANSACTION`, broadcasts the signed transaction, and\n\t * yields `CANCELLATION_COMPLETE` after confirming the `EscrowRefunded` event.\n\t *\n\t * **Cross-chain path:**\n\t * 1. Fetches (or resumes from cache) a destination finalization proof.\n\t * 2. Yields `AWAITING_CANCEL_TRANSACTION` with the `cancelOrder` calldata\n\t * that includes the destination proof height.\n\t * 3. Extracts the `GetRequestEvent` from the broadcast receipt and persists\n\t * the GET request.\n\t * 4. Streams the GET request status through Hyperbridge, fetching and\n\t * submitting the source proof once `SOURCE_FINALIZED` is reached.\n\t * 5. Cleans up persisted state when `HYPERBRIDGE_FINALIZED` is reached.\n\t *\n\t * @param order - The order to cancel.\n\t * @param indexerClient - Used to stream GET request status and query heights.\n\t * @yields {@link CancelEvent} at each lifecycle stage.\n\t * @throws If the cancel transaction does not contain the expected on-chain event.\n\t */\n\tprivate async *cancelOrderFromSource(order: Order, indexerClient: IsmpClient): AsyncGenerator<CancelEvent> {\n\t\tconst orderId = order.id!\n\t\tconst isSameChain = order.source === order.destination\n\t\tconst intentGatewayAddress = this.ctx.source.configService.getIntentGatewayV2Address(\n\t\t\tnormalizeStateMachineId(order.source),\n\t\t)\n\n\t\tif (isSameChain) {\n\t\t\tconst data = encodeFunctionData({\n\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\tfunctionName: \"cancelOrder\",\n\t\t\t\targs: [transformOrderForContract(order), { relayerFee: 0n, height: 0n }],\n\t\t\t}) as HexString\n\n\t\t\tconst signedTransaction = yield {\n\t\t\t\tstatus: \"AWAITING_CANCEL_TRANSACTION\" as const,\n\t\t\t\tdata,\n\t\t\t\tto: intentGatewayAddress,\n\t\t\t\tvalue: 0n,\n\t\t\t}\n\n\t\t\tconst receipt =\n\t\t\t\tsignedTransaction.length === 66\n\t\t\t\t\t? await this.ctx.source.getTransactionReceipt(signedTransaction)\n\t\t\t\t\t: await this.ctx.source.broadcastTransaction(signedTransaction)\n\t\t\tconst refundEvents = parseEventLogs({\n\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\tlogs: receipt.logs,\n\t\t\t\teventName: \"EscrowRefunded\",\n\t\t\t})\n\t\t\tif (refundEvents.length === 0) {\n\t\t\t\tthrow new Error(\"EscrowRefunded event not found in cancel transaction receipt\")\n\t\t\t}\n\n\t\t\tyield {\n\t\t\t\tstatus: \"CANCELLATION_COMPLETE\" as const,\n\t\t\t\tblockNumber: Number(receipt.blockNumber),\n\t\t\t\ttransactionHash: receipt.transactionHash as HexString,\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tconst hyperbridge = indexerClient.hyperbridge as SubstrateChain\n\t\tconst sourceStateMachine = normalizeStateMachineId(order.source)\n\t\tconst sourceConsensusStateId = this.ctx.source.configService.getConsensusStateId(sourceStateMachine)\n\n\t\tlet destIProof: IProof | null = await this.ctx.cancellationStorage.getItem(STORAGE_KEYS.destProof(orderId))\n\t\tif (!destIProof) {\n\t\t\tdestIProof = yield* this.fetchDestinationProof(order, indexerClient)\n\t\t\tawait this.ctx.cancellationStorage.setItem(STORAGE_KEYS.destProof(orderId), destIProof)\n\t\t} else {\n\t\t\tyield { status: \"DESTINATION_FINALIZED\" as const, proof: destIProof }\n\t\t}\n\n\t\tlet getRequest: IGetRequest | null = await this.ctx.cancellationStorage.getItem(\n\t\t\tSTORAGE_KEYS.getRequest(orderId),\n\t\t)\n\t\tif (!getRequest) {\n\t\t\tconst quote = await this.quoteCancelFromSource(order)\n\t\t\tconst data = encodeFunctionData({\n\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\tfunctionName: \"cancelOrder\",\n\t\t\t\targs: [transformOrderForContract(order), { relayerFee: quote.relayerFee, height: destIProof.height }],\n\t\t\t}) as HexString\n\n\t\t\tconst signedTransaction = yield {\n\t\t\t\tstatus: \"AWAITING_CANCEL_TRANSACTION\" as const,\n\t\t\t\tdata,\n\t\t\t\tto: intentGatewayAddress,\n\t\t\t\tvalue: quote.nativeValue,\n\t\t\t}\n\n\t\t\tconst receipt =\n\t\t\t\tsignedTransaction.length === 66\n\t\t\t\t\t? await this.ctx.source.getTransactionReceipt(signedTransaction)\n\t\t\t\t\t: await this.ctx.source.broadcastTransaction(signedTransaction)\n\n\t\t\tconst events = parseEventLogs({ abi: EVM_HOST.ABI, logs: receipt.logs })\n\t\t\tconst request = events.find((e) => e.eventName === \"GetRequestEvent\")\n\t\t\tif (!request) throw new Error(\"GetRequest missing\")\n\t\t\tgetRequest = request.args as unknown as IGetRequest\n\n\t\t\tawait this.ctx.cancellationStorage.setItem(STORAGE_KEYS.getRequest(orderId), getRequest)\n\n\t\t\tyield {\n\t\t\t\tstatus: \"CANCEL_STARTED\" as const,\n\t\t\t\treceipt,\n\t\t\t}\n\t\t}\n\n\t\tconst commitment = getRequestCommitment({\n\t\t\t...getRequest,\n\t\t\tkeys: [...getRequest.keys],\n\t\t})\n\t\tconst sourceStatusStream = indexerClient.getRequestStatusStream(commitment)\n\n\t\tfor await (const statusUpdate of sourceStatusStream) {\n\t\t\tswitch (statusUpdate.status) {\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"SOURCE_FINALIZED\" as const,\n\t\t\t\t\t\tmetadata: statusUpdate.metadata,\n\t\t\t\t\t}\n\n\t\t\t\t\tconst sourceHeight = BigInt(statusUpdate.metadata.blockNumber)\n\t\t\t\t\tlet sourceIProof: IProof | null = await this.ctx.cancellationStorage.getItem(\n\t\t\t\t\t\tSTORAGE_KEYS.sourceProof(orderId),\n\t\t\t\t\t)\n\t\t\t\t\tif (!sourceIProof) {\n\t\t\t\t\t\tsourceIProof = await fetchSourceProof(\n\t\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\t\tthis.ctx.source,\n\t\t\t\t\t\t\tsourceStateMachine,\n\t\t\t\t\t\t\tsourceConsensusStateId,\n\t\t\t\t\t\t\tsourceHeight,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tawait this.ctx.cancellationStorage.setItem(STORAGE_KEYS.sourceProof(orderId), sourceIProof)\n\t\t\t\t\t}\n\n\t\t\t\t\tawait waitForChallengePeriod(hyperbridge, {\n\t\t\t\t\t\theight: sourceIProof.height,\n\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\tstateId: parseStateMachineId(sourceStateMachine).stateId,\n\t\t\t\t\t\t\tconsensusStateId: sourceConsensusStateId,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tconst getRequestMessage: IGetRequestMessage = {\n\t\t\t\t\t\tkind: \"GetRequest\",\n\t\t\t\t\t\trequests: [getRequest],\n\t\t\t\t\t\tsource: sourceIProof,\n\t\t\t\t\t\tresponse: destIProof,\n\t\t\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this.submitAndConfirmReceipt(hyperbridge, commitment, getRequestMessage)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED:\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"HYPERBRIDGE_DELIVERED\" as const,\n\t\t\t\t\t\tmetadata: statusUpdate.metadata,\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED:\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"HYPERBRIDGE_FINALIZED\" as const,\n\t\t\t\t\t\tmetadata: statusUpdate.metadata,\n\t\t\t\t\t}\n\t\t\t\t\tawait this.ctx.cancellationStorage.removeItem(STORAGE_KEYS.destProof(orderId))\n\t\t\t\t\tawait this.ctx.cancellationStorage.removeItem(STORAGE_KEYS.getRequest(orderId))\n\t\t\t\t\tawait this.ctx.cancellationStorage.removeItem(STORAGE_KEYS.sourceProof(orderId))\n\t\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Quotes the native token cost of a destination-initiated cross-chain cancellation.\n\t *\n\t * Estimates the relayer fee for delivering the refund POST request from the\n\t * destination chain back to the source chain, converts it to the destination\n\t * fee token, and calls `quoteNative` on the destination host.\n\t * Returns 0 for same-chain orders.\n\t *\n\t * @param order - The order to quote.\n\t * @returns The native token dispatch fee in wei.\n\t */\n\tprivate async quoteCancelFromDest(order: Order): Promise<CancelQuote> {\n\t\tif (order.source === order.destination) return { nativeValue: 0n, relayerFee: 0n }\n\n\t\tconst destStateMachine = normalizeStateMachineId(order.destination)\n\t\tconst sourceStateMachine = normalizeStateMachineId(order.source)\n\n\t\tconst destIntentGateway = this.ctx.dest.configService.getIntentGatewayV2Address(destStateMachine)\n\t\tconst sourceIntentGateway = this.ctx.source.configService.getIntentGatewayV2Address(sourceStateMachine)\n\n\t\tconst relayerFee = await this.estimateRelayerFee(sourceStateMachine, destStateMachine)\n\n\t\tconst body = constructRefundEscrowRequestBody(order, order.user as HexString)\n\n\t\tconst postRequest: IPostRequest = {\n\t\t\tsource: destStateMachine,\n\t\t\tdest: sourceStateMachine,\n\t\t\tfrom: destIntentGateway,\n\t\t\tto: sourceIntentGateway,\n\t\t\tnonce: await this.ctx.dest.getHostNonce(),\n\t\t\tbody,\n\t\t\ttimeoutTimestamp: 0n,\n\t\t}\n\n\t\tconst nativeValue = await this.ctx.dest.quoteNative(postRequest, relayerFee)\n\t\treturn { nativeValue, relayerFee }\n\t}\n\n\t/**\n\t * Async generator that cancels an order by initiating from the destination\n\t * chain and streaming status updates until the source-chain escrow is refunded.\n\t *\n\t * Same-chain requests are handled by the top-level router and fall back to\n\t * the direct source-side cancellation path.\n\t *\n\t * **Steps:**\n\t * 1. Yields `AWAITING_CANCEL_TRANSACTION` so the caller can sign and submit\n\t * the cancel transaction on the destination chain.\n\t * 2. Extracts the `PostRequestEvent` commitment and persists it for resumability.\n\t * 3. Streams POST request status through Hyperbridge until `DESTINATION`\n\t * (i.e. the source chain processed the refund).\n\t * 4. Yields `CANCELLATION_COMPLETE` and cleans up persisted state.\n\t *\n\t * @param order - The cross-chain order to cancel.\n\t * @param indexerClient - Used to stream POST request status updates.\n\t * @yields {@link CancelEvent} at each lifecycle stage.\n\t * @throws If the cancel transaction does not contain a `PostRequestEvent`.\n\t */\n\tprivate async *cancelOrderFromDest(order: Order, indexerClient: IsmpClient): AsyncGenerator<CancelEvent> {\n\t\tconst orderId = order.id!\n\n\t\tconst destStateMachine = normalizeStateMachineId(order.destination)\n\t\tconst intentGatewayAddress = this.ctx.dest.configService.getIntentGatewayV2Address(destStateMachine)\n\n\t\tlet commitment: HexString | null = await this.ctx.cancellationStorage.getItem(\n\t\t\tSTORAGE_KEYS.postCommitment(orderId),\n\t\t)\n\n\t\tif (!commitment) {\n\t\t\tconst quote = await this.quoteCancelFromDest(order)\n\t\t\tconst data = encodeFunctionData({\n\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\tfunctionName: \"cancelOrder\",\n\t\t\t\targs: [transformOrderForContract(order), { relayerFee: quote.relayerFee, height: 0n }],\n\t\t\t}) as HexString\n\n\t\t\tconst signedTransaction = yield {\n\t\t\t\tstatus: \"AWAITING_CANCEL_TRANSACTION\" as const,\n\t\t\t\tdata,\n\t\t\t\tto: intentGatewayAddress,\n\t\t\t\tvalue: quote.nativeValue,\n\t\t\t}\n\n\t\t\tconst receipt =\n\t\t\t\tsignedTransaction.length === 66\n\t\t\t\t\t? await this.ctx.dest.getTransactionReceipt(signedTransaction)\n\t\t\t\t\t: await this.ctx.dest.broadcastTransaction(signedTransaction)\n\n\t\t\tyield {\n\t\t\t\tstatus: \"CANCEL_STARTED\" as const,\n\t\t\t\treceipt,\n\t\t\t}\n\n\t\t\tconst events = parseEventLogs({ abi: EVM_HOST.ABI, logs: receipt.logs })\n\t\t\tconst postEvent = events.find((e) => e.eventName === \"PostRequestEvent\")\n\t\t\tif (!postEvent) throw new Error(\"PostRequestEvent not found in cancel transaction receipt\")\n\n\t\t\tconst postArgs = postEvent.args as unknown as IPostRequest\n\t\t\tcommitment = postRequestCommitment(postArgs).commitment\n\n\t\t\tawait this.ctx.cancellationStorage.setItem(STORAGE_KEYS.postCommitment(orderId), commitment)\n\t\t}\n\n\t\tconst statusStream = indexerClient.postRequestStatusStream(commitment)\n\n\t\tfor await (const statusUpdate of statusStream) {\n\t\t\tswitch (statusUpdate.status) {\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED:\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"SOURCE_FINALIZED\" as const,\n\t\t\t\t\t\tmetadata: statusUpdate.metadata,\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED:\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"HYPERBRIDGE_DELIVERED\" as const,\n\t\t\t\t\t\tmetadata: statusUpdate.metadata,\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED:\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"HYPERBRIDGE_FINALIZED\" as const,\n\t\t\t\t\t\tmetadata: statusUpdate.metadata,\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\n\t\t\t\tcase RequestStatus.DESTINATION: {\n\t\t\t\t\tconst deliveryTxHash = statusUpdate.metadata.transactionHash as HexString\n\t\t\t\t\tconst deliveryReceipt = await this.ctx.source.getTransactionReceipt(deliveryTxHash)\n\t\t\t\t\tconst refundEvents = parseEventLogs({\n\t\t\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\t\t\tlogs: deliveryReceipt.logs,\n\t\t\t\t\t\teventName: \"EscrowRefunded\",\n\t\t\t\t\t})\n\t\t\t\t\tif (refundEvents.length === 0) {\n\t\t\t\t\t\tthrow new Error(\"EscrowRefunded event not found in source-chain delivery receipt\")\n\t\t\t\t\t}\n\t\t\t\t\tawait this.ctx.cancellationStorage.removeItem(STORAGE_KEYS.postCommitment(orderId))\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: \"CANCELLATION_COMPLETE\" as const,\n\t\t\t\t\t\tblockNumber: statusUpdate.metadata.blockNumber,\n\t\t\t\t\t\ttransactionHash: deliveryTxHash,\n\t\t\t\t\t}\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Polls for a finalized destination-chain state proof that demonstrates\n\t * the order commitment slot is unset (i.e. the order was not filled before\n\t * the deadline).\n\t *\n\t * Waits until the latest Hyperbridge-tracked state-machine height exceeds\n\t * `order.deadline` (or the last failed probe height) before attempting to\n\t * fetch the proof, then retries on failure.\n\t *\n\t * @param order - The order for which to fetch the destination proof.\n\t * @param indexerClient - Used to query the latest known state-machine height.\n\t * @yields `DESTINATION_FINALIZED` with the proof once it is successfully fetched.\n\t * @returns The fetched {@link IProof} (also yielded).\n\t */\n\tprivate async *fetchDestinationProof(\n\t\torder: Order,\n\t\tindexerClient: IsmpClient,\n\t): AsyncGenerator<CancelEvent, IProof, void> {\n\t\tlet latestHeight = 0n\n\t\tlet lastFailedHeight: bigint | null = null\n\n\t\twhile (true) {\n\t\t\tconst height = await indexerClient.queryLatestStateMachineHeight({\n\t\t\t\tstatemachineId: this.ctx.dest.config.stateMachineId,\n\t\t\t\tchain: indexerClient.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\tlatestHeight = height ?? 0n\n\t\t\tconst shouldFetch =\n\t\t\t\tlastFailedHeight === null ? latestHeight > order.deadline : latestHeight > lastFailedHeight\n\n\t\t\tif (!shouldFetch) {\n\t\t\t\tawait sleep(10000)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst intentGatewayV2Address = this.ctx.dest.configService.getIntentGatewayV2Address(\n\t\t\t\t\tthis.ctx.dest.config.stateMachineId,\n\t\t\t\t)\n\t\t\t\tconst orderId = order.id!\n\t\t\t\tconst slotHash = (await this.ctx.dest.client.readContract({\n\t\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\t\taddress: intentGatewayV2Address,\n\t\t\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\t\t\targs: [orderId as HexString],\n\t\t\t\t})) as HexString\n\n\t\t\t\tconst proofHex = await this.ctx.dest.queryStateProof(latestHeight, [slotHash], intentGatewayV2Address)\n\n\t\t\t\tconst proof: IProof = {\n\t\t\t\t\tconsensusStateId: this.ctx.dest.config.consensusStateId,\n\t\t\t\t\theight: latestHeight,\n\t\t\t\t\tproof: proofHex,\n\t\t\t\t\tstateMachine: this.ctx.dest.config.stateMachineId,\n\t\t\t\t}\n\n\t\t\t\tyield { status: \"DESTINATION_FINALIZED\" as const, proof }\n\t\t\t\treturn proof\n\t\t\t} catch (e) {\n\t\t\t\tlastFailedHeight = latestHeight\n\t\t\t\tawait sleep(10000)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Submits an unsigned GET request message to Hyperbridge and waits until\n\t * the request receipt is confirmed on-chain.\n\t *\n\t * If the initial submission fails, the method waits 30 seconds and then\n\t * retries querying for the receipt up to 10 times with 5-second back-off.\n\t *\n\t * @param hyperbridge - Hyperbridge Substrate chain client.\n\t * @param commitment - The GET request commitment hash used to poll for the receipt.\n\t * @param message - The fully constructed GET request message to submit.\n\t */\n\tprivate async submitAndConfirmReceipt(\n\t\thyperbridge: SubstrateChain,\n\t\tcommitment: HexString,\n\t\tmessage: IGetRequestMessage,\n\t) {\n\t\tlet storageValue = await hyperbridge.queryRequestReceipt(commitment)\n\n\t\tif (!storageValue) {\n\t\t\ttry {\n\t\t\t\tawait hyperbridge.submitUnsigned(message)\n\t\t\t} catch {\n\t\t\t\t// Submission failed, wait and retry\n\t\t\t}\n\n\t\t\tawait sleep(30000)\n\n\t\t\tstorageValue = await retryPromise(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst value = await hyperbridge.queryRequestReceipt(commitment)\n\t\t\t\t\tif (!value) throw new Error(\"Receipt not found\")\n\t\t\t\t\treturn value\n\t\t\t\t},\n\t\t\t\t{ maxRetries: 10, backoffMs: 5000, logMessage: \"Checking for receipt\" },\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Estimates the relayer fee for delivering a POST from dest to source.\n\t * Converts estimated gas on the source chain into the dest chain's fee token.\n\t */\n\tprivate async estimateRelayerFee(sourceChainId: string, destChainId: string): Promise<bigint> {\n\t\tconst POST_REQUEST_GAS = 400_000n\n\n\t\tconst feeInSourceFeeToken = await convertGasToFeeToken(this.ctx, POST_REQUEST_GAS, \"source\", sourceChainId)\n\n\t\tconst sourceFeeToken = await getFeeToken(this.ctx, sourceChainId, this.ctx.source)\n\t\tconst destFeeToken = await getFeeToken(this.ctx, destChainId, this.ctx.dest)\n\t\tconst feeInDestFeeToken = adjustDecimals(feeInSourceFeeToken, sourceFeeToken.decimals, destFeeToken.decimals)\n\n\t\treturn (feeInDestFeeToken * 1005n) / 1000n\n\t}\n}\n","import { encodeFunctionData, decodeFunctionData, concat, keccak256, parseEventLogs } from \"viem\"\nimport { ABI as IntentGatewayV2ABI } from \"@/abis/IntentGatewayV2\"\nimport { ADDRESS_ZERO, bytes32ToBytes20, normalizeStateMachineId, retryPromise } from \"@/utils\"\nimport type {\n\tOrder,\n\tHexString,\n\tPackedUserOperation,\n\tSubmitBidOptions,\n\tFillOptions,\n\tSelectOptions,\n\tFillerBid,\n\tSelectBidResult,\n\tTokenInfo,\n\tERC7821Call,\n} from \"@/types\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { BundlerMethod } from \"./types\"\nimport { CryptoUtils } from \"./CryptoUtils\"\nimport Decimal from \"decimal.js\"\n\n/**\n * Manages the solver bid lifecycle for IntentGatewayV2 orders.\n *\n * Responsibilities include:\n * - Constructing signed `PackedUserOperation` objects that solvers submit to the\n * Hyperbridge coprocessor as bids (`prepareSubmitBid`).\n * - Validating, sorting, simulating, and submitting the best available bid for\n * a given order (`selectBid`).\n * - Pricing bid outputs using on-chain DEX quotes so that the highest-value\n * solver is preferred.\n */\nexport class BidManager {\n\t/**\n\t * @param ctx - Shared IntentsV2 context providing the destination chain\n\t * client, coprocessor, bundler URL, and session-key storage.\n\t * @param crypto - Crypto utilities used for gas packing, UserOp hashing,\n\t * EIP-712 signing, and bundler calls.\n\t */\n\tconstructor(\n\t\tprivate readonly ctx: IntentGatewayContext,\n\t\tprivate readonly crypto: CryptoUtils,\n\t) {}\n\n\t/**\n\t * Constructs a signed `PackedUserOperation` that a solver can submit to the\n\t * Hyperbridge coprocessor as a bid to fill an order.\n\t *\n\t * The solver's signature covers a hash that binds the UserOperation to the\n\t * order commitment and the session key address, so the IntentGatewayV2\n\t * contract can verify the solver's intent on-chain.\n\t *\n\t * @param options - Parameters describing the solver account, gas limits, fee\n\t * market values, and pre-built `callData` for the fill operation.\n\t * @returns A `PackedUserOperation` with the solver's signature prepended\n\t * with the order commitment.\n\t */\n\tasync prepareSubmitBid(options: SubmitBidOptions): Promise<PackedUserOperation> {\n\t\tconst {\n\t\t\torder,\n\t\t\tsolverAccount,\n\t\t\tsolverSigner,\n\t\t\tnonce,\n\t\t\tentryPointAddress,\n\t\t\tcallGasLimit,\n\t\t\tverificationGasLimit,\n\t\t\tpreVerificationGas,\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas,\n\t\t\tcallData,\n\t\t\tpaymasterAndData = \"0x\" as HexString,\n\t\t} = options\n\n\t\tconst chainId = BigInt(\n\t\t\tthis.ctx.dest.client.chain?.id ?? Number.parseInt(this.ctx.dest.config.stateMachineId.split(\"-\")[1]),\n\t\t)\n\n\t\tconst accountGasLimits = CryptoUtils.packGasLimits(verificationGasLimit, callGasLimit)\n\t\tconst gasFees = CryptoUtils.packGasFees(maxPriorityFeePerGas, maxFeePerGas)\n\n\t\tconst userOp: PackedUserOperation = {\n\t\t\tsender: solverAccount,\n\t\t\tnonce,\n\t\t\tinitCode: \"0x\" as HexString,\n\t\t\tcallData,\n\t\t\taccountGasLimits,\n\t\t\tpreVerificationGas,\n\t\t\tgasFees,\n\t\t\tpaymasterAndData,\n\t\t\tsignature: \"0x\" as HexString,\n\t\t}\n\n\t\tconst userOpHash = CryptoUtils.computeUserOpHash(userOp, entryPointAddress, chainId)\n\t\tconst sessionKey = order.session\n\n\t\tconst messageHash = keccak256(concat([userOpHash, order.id as HexString, sessionKey as HexString]))\n\t\tconst solverSignature = await solverSigner.signMessage(messageHash, Number(chainId))\n\n\t\tconst signature = concat([order.id as HexString, solverSignature as HexString]) as HexString\n\n\t\treturn { ...userOp, signature }\n\t}\n\n\t/**\n\t * Selects the best available bid, simulates it on-chain, signs the\n\t * solver-selection EIP-712 message with the session key, and submits the\n\t * UserOperation to the bundler.\n\t *\n\t * **Selection algorithm:**\n\t * 1. Decodes `fillOrder` calldata from each bid's `callData`.\n\t * 2. Sorts bids by output value (single-output: amount; all-stables: normalised\n\t * USD; mixed: DEX-quoted USD; fallback: raw amount).\n\t * 3. Iterates sorted bids, simulating each with `eth_call` until one passes.\n\t * 4. Appends the session-key's `SelectSolver` signature to the solver's\n\t * existing signature and submits via `eth_sendUserOperation`.\n\t * 5. For same-chain orders, waits for the transaction receipt and reads\n\t * `OrderFilled` / `PartialFill` events to determine fill status.\n\t *\n\t * @param order - The placed order for which to select a bid.\n\t * @param bids - Raw bids fetched from the Hyperbridge coprocessor.\n\t * @param sessionPrivateKey - Optional override; if omitted, the key is\n\t * looked up from `sessionKeyStorage` using `order.session`.\n\t * @returns A {@link SelectBidResult} containing the submitted UserOperation,\n\t * its hash, the winning solver address, transaction hash, and fill status.\n\t * @throws If the session key is not found, no valid bids exist, all\n\t * simulations fail, or the bundler rejects the UserOperation.\n\t */\n\tasync selectBid(order: Order, bids: FillerBid[], sessionPrivateKey?: HexString): Promise<SelectBidResult> {\n\t\tconst commitment = order.id as HexString\n\t\tconst sessionKeyAddress = order.session as HexString\n\t\tconsole.log(`[BidManager] selectBid called for commitment=${commitment}, received ${bids.length} bid(s)`)\n\n\t\tconst sessionKeyData = sessionPrivateKey\n\t\t\t? { privateKey: sessionPrivateKey as HexString }\n\t\t\t: await this.ctx.sessionKeyStorage.getSessionKeyByAddress(sessionKeyAddress)\n\t\tif (!sessionKeyData) {\n\t\t\tthrow new Error(\"SessionKey not found for commitment: \" + commitment)\n\t\t}\n\n\t\tif (!this.ctx.bundlerUrl) {\n\t\t\tthrow new Error(\"Bundler URL not configured\")\n\t\t}\n\n\t\tif (!this.ctx.intentsCoprocessor) {\n\t\t\tthrow new Error(\"IntentsCoprocessor required\")\n\t\t}\n\n\t\tconst sortedBids = await this.validateAndSortBids(bids, order)\n\t\tconsole.log(`[BidManager] ${sortedBids.length}/${bids.length} bid(s) passed validation and sorting`)\n\t\tif (sortedBids.length === 0) {\n\t\t\tthrow new Error(\"No valid bids found\")\n\t\t}\n\n\t\tconst intentGatewayV2Address = this.ctx.dest.configService.getIntentGatewayV2Address(\n\t\t\tnormalizeStateMachineId(order.destination),\n\t\t)\n\n\t\tconst domainSeparator = CryptoUtils.getDomainSeparator(\n\t\t\t\"IntentGateway\",\n\t\t\t\"2\",\n\t\t\tBigInt(\n\t\t\t\tthis.ctx.dest.client.chain?.id ?? Number.parseInt(this.ctx.dest.config.stateMachineId.split(\"-\")[1]),\n\t\t\t),\n\t\t\tintentGatewayV2Address,\n\t\t)\n\n\t\tlet selectedBid: { bid: FillerBid; options: FillOptions } | null = null\n\t\tlet sessionSignature: HexString | null = null\n\n\t\tconsole.log(`[BidManager] Simulating ${sortedBids.length} sorted bid(s) to find a valid one`)\n\t\tfor (let idx = 0; idx < sortedBids.length; idx++) {\n\t\t\tconst bidWithOptions = sortedBids[idx]\n\t\t\tconst solverAddress = bidWithOptions.bid.userOp.sender\n\t\t\tconsole.log(`[BidManager] Simulating bid ${idx + 1}/${sortedBids.length} from solver=${solverAddress}`)\n\n\t\t\tconst signature = await CryptoUtils.signSolverSelection(\n\t\t\t\tcommitment,\n\t\t\t\tsolverAddress,\n\t\t\t\tdomainSeparator,\n\t\t\t\tsessionKeyData.privateKey,\n\t\t\t)\n\t\t\tif (!signature) {\n\t\t\t\tconsole.warn(`[BidManager] Bid ${idx + 1}: failed to sign solver selection, skipping`)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst selectOptions: SelectOptions = {\n\t\t\t\tcommitment,\n\t\t\t\tsolver: solverAddress,\n\t\t\t\tsignature,\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.simulate(bidWithOptions.bid, bidWithOptions.options, selectOptions, intentGatewayV2Address)\n\t\t\t\tconsole.log(`[BidManager] Bid ${idx + 1} from solver=${solverAddress}: simulation PASSED`)\n\t\t\t\tselectedBid = bidWithOptions\n\t\t\t\tsessionSignature = signature\n\t\t\t\tbreak\n\t\t\t} catch (err) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[BidManager] Bid ${idx + 1} from solver=${solverAddress}: simulation FAILED: ` +\n\t\t\t\t\t\t`${err instanceof Error ? err.message : String(err)}`,\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif (!selectedBid || !sessionSignature) {\n\t\t\tconsole.error(`[BidManager] All ${sortedBids.length} bid(s) failed simulation for commitment=${commitment}`)\n\t\t\tthrow new Error(\"No bids passed simulation\")\n\t\t}\n\n\t\tconst solverAddress = selectedBid.bid.userOp.sender\n\n\t\tconst finalSignature = concat([\n\t\t\tselectedBid.bid.userOp.signature as import(\"viem\").Hex,\n\t\t\tsessionSignature as import(\"viem\").Hex,\n\t\t]) as HexString\n\n\t\tconst signedUserOp: PackedUserOperation = {\n\t\t\t...selectedBid.bid.userOp,\n\t\t\tsignature: finalSignature,\n\t\t}\n\n\t\tconst entryPointAddress = this.ctx.dest.configService.getEntryPointV08Address(\n\t\t\tnormalizeStateMachineId(order.destination),\n\t\t)\n\t\tconst chainId = BigInt(\n\t\t\tthis.ctx.dest.client.chain?.id ?? Number.parseInt(this.ctx.dest.config.stateMachineId.split(\"-\")[1]),\n\t\t)\n\n\t\tconst bundlerResult = await this.crypto.sendBundler<HexString>(BundlerMethod.ETH_SEND_USER_OPERATION, [\n\t\t\tCryptoUtils.prepareBundlerCall(signedUserOp),\n\t\t\tentryPointAddress,\n\t\t])\n\n\t\tconst userOpHash = bundlerResult\n\n\t\tlet txnHash: HexString | undefined\n\t\tlet fillStatus: \"full\" | \"partial\" | undefined\n\t\tlet filledAssets: TokenInfo[] | undefined\n\t\ttry {\n\t\t\tconst receipt = await retryPromise(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst result = await this.crypto.sendBundler<{\n\t\t\t\t\t\treceipt: { transactionHash: HexString }\n\t\t\t\t\t} | null>(BundlerMethod.ETH_GET_USER_OPERATION_RECEIPT, [userOpHash])\n\t\t\t\t\tif (!result?.receipt?.transactionHash) {\n\t\t\t\t\t\tthrow new Error(\"Receipt not available yet\")\n\t\t\t\t\t}\n\t\t\t\t\treturn result\n\t\t\t\t},\n\t\t\t\t{ maxRetries: 5, backoffMs: 2000, logMessage: \"Fetching user operation receipt\" },\n\t\t\t)\n\t\t\ttxnHash = receipt.receipt.transactionHash\n\n\t\t\tif (order.source === order.destination) {\n\t\t\t\ttry {\n\t\t\t\t\tconst chainReceipt = await this.ctx.dest.client.waitForTransactionReceipt({\n\t\t\t\t\t\thash: txnHash,\n\t\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\t})\n\t\t\t\t\tconst events = parseEventLogs({\n\t\t\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\t\t\tlogs: chainReceipt.logs,\n\t\t\t\t\t\teventName: [\"OrderFilled\", \"PartialFill\"],\n\t\t\t\t\t})\n\n\t\t\t\t\tconst matched = events.find((e) => {\n\t\t\t\t\t\tif (e.eventName === \"OrderFilled\")\n\t\t\t\t\t\t\treturn e.args.commitment.toLowerCase() === commitment.toLowerCase()\n\t\t\t\t\t\tif (e.eventName === \"PartialFill\")\n\t\t\t\t\t\t\treturn e.args.commitment.toLowerCase() === commitment.toLowerCase()\n\t\t\t\t\t\treturn false\n\t\t\t\t\t})\n\n\t\t\t\t\tif (matched?.eventName === \"OrderFilled\") {\n\t\t\t\t\t\tfillStatus = \"full\"\n\t\t\t\t\t} else if (matched?.eventName === \"PartialFill\") {\n\t\t\t\t\t\tfillStatus = \"partial\"\n\t\t\t\t\t\tfilledAssets = (matched.args.outputs ?? []) as TokenInfo[]\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tthrow new Error(\"Failed to determine fill status from logs\")\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// Receipt may not be available\n\t\t\tthrow new Error(`Failed to select bid: ${err instanceof Error ? err.message : String(err)}`)\n\t\t}\n\n\t\treturn {\n\t\t\tuserOp: signedUserOp,\n\t\t\tuserOpHash,\n\t\t\tsolverAddress,\n\t\t\tcommitment,\n\t\t\ttxnHash,\n\t\t\tfillStatus,\n\t\t\tfilledAssets,\n\t\t}\n\t}\n\n\t/**\n\t * Validates and sorts a list of raw bids for the given order.\n\t *\n\t * Delegates to one of three strategies based on the order's output token\n\t * composition:\n\t * - Single output token: sort by offered amount descending.\n\t * - All stable outputs (USDC/USDT): sort by normalised USD value descending.\n\t * - Mixed outputs: sort by DEX-quoted USD value descending, with a raw-amount\n\t * fallback if pricing fails.\n\t *\n\t * @param bids - Raw filler bids from the coprocessor.\n\t * @param order - The placed order whose output spec drives sorting logic.\n\t * @returns Sorted array of `{ bid, options }` pairs ready for simulation.\n\t */\n\tasync validateAndSortBids(\n\t\tbids: FillerBid[],\n\t\torder: Order,\n\t): Promise<{ bid: FillerBid; options: FillOptions }[]> {\n\t\tconst outputs = order.output.assets\n\t\tconst decodedBids = this.decodeBids(bids)\n\n\t\tif (outputs.length <= 1) {\n\t\t\tconsole.log(`[BidManager] Using single-output sorting (1 output asset)`)\n\t\t\treturn this.sortSingleOutput(decodedBids, outputs[0])\n\t\t}\n\n\t\tconst chainId = this.ctx.dest.config.stateMachineId\n\t\tconst allStables = outputs.every((o) => this.isStableToken(bytes32ToBytes20(o.token), chainId))\n\n\t\tif (allStables) {\n\t\t\tconsole.log(`[BidManager] Using all-stables sorting (${outputs.length} stable output assets)`)\n\t\t\treturn this.sortAllStables(decodedBids, outputs, chainId)\n\t\t}\n\n\t\tconsole.log(`[BidManager] Using mixed-output sorting (${outputs.length} output assets, some non-stable)`)\n\t\treturn this.sortMixedOutputs(decodedBids, outputs, chainId)\n\t}\n\n\t/**\n\t * Decodes the `fillOrder` fill-options from each bid's ERC-7821 calldata.\n\t *\n\t * Bids whose calldata cannot be decoded or do not contain a valid\n\t * `fillOrder` call are silently dropped with a warning.\n\t *\n\t * @param bids - Raw bids to decode.\n\t * @returns Array of successfully decoded `{ bid, options }` pairs.\n\t */\n\tprivate decodeBids(bids: FillerBid[]): { bid: FillerBid; options: FillOptions }[] {\n\t\tconst result: { bid: FillerBid; options: FillOptions }[] = []\n\t\tfor (const bid of bids) {\n\t\t\tconst fillOptions = this.decodeBidFillOptions(bid)\n\t\t\tif (fillOptions) {\n\t\t\t\tresult.push({ bid, options: fillOptions })\n\t\t\t} else {\n\t\t\t\tconsole.warn(`[BidManager] Failed to decode fillOptions from bid by solver=${bid.userOp.sender}`)\n\t\t\t}\n\t\t}\n\t\tconsole.log(`[BidManager] Decoded ${result.length}/${bids.length} bid(s) successfully`)\n\t\treturn result\n\t}\n\n\t/**\n\t * Extracts the `FillOptions` struct from a single bid's ERC-7821\n\t * batch calldata by finding and decoding the inner `fillOrder` call.\n\t *\n\t * @param bid - A single filler bid.\n\t * @returns The decoded `FillOptions`, or `null` if extraction fails.\n\t */\n\tprivate decodeBidFillOptions(bid: FillerBid): FillOptions | null {\n\t\ttry {\n\t\t\tconst innerCalls = this.crypto.decodeERC7821Execute(bid.userOp.callData)\n\t\t\tif (!innerCalls || innerCalls.length === 0) return null\n\n\t\t\tfor (const call of innerCalls) {\n\t\t\t\ttry {\n\t\t\t\t\tconst decoded = decodeFunctionData({\n\t\t\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\t\t\tdata: call.data,\n\t\t\t\t\t})\n\t\t\t\t\tif (decoded?.functionName === \"fillOrder\" && decoded.args && decoded.args.length >= 2) {\n\t\t\t\t\t\tconst fillOptions = decoded.args[1] as FillOptions\n\t\t\t\t\t\tif (fillOptions?.outputs?.length > 0) {\n\t\t\t\t\t\t\treturn fillOptions\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// decode failed\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Simulates a bid on-chain by batching the `select` and `fillOrder` calls\n\t * via `eth_call` from the solver's account, using the IntentGatewayV2\n\t * ERC-7821 batch-execute pattern.\n\t *\n\t * The native value forwarded to the simulation is computed from the fill options:\n\t * sum of any native-token (address(0)) output amounts plus the dispatch fee.\n\t *\n\t * @param bid - The filler bid to simulate.\n\t * @param fillOptions - Decoded fill options from the bid's calldata.\n\t * @param selectOptions - The signed solver-selection parameters.\n\t * @param intentGatewayV2Address - Address of the IntentGatewayV2 contract on the destination chain.\n\t * @throws If the `eth_call` simulation reverts or errors.\n\t */\n\tprivate async simulate(\n\t\tbid: FillerBid,\n\t\tfillOptions: FillOptions,\n\t\tselectOptions: SelectOptions,\n\t\tintentGatewayV2Address: HexString,\n\t): Promise<void> {\n\t\tconst solverAddress = bid.userOp.sender\n\n\t\t// Compute the native ETH the fillOrder call requires:\n\t\t// native token outputs (address(0)) + Hyperbridge dispatch fee\n\t\tconst nativeOutputs = fillOptions.outputs.reduce(\n\t\t\t(acc, o) => (bytes32ToBytes20(o.token) === ADDRESS_ZERO ? acc + o.amount : acc),\n\t\t\t0n,\n\t\t)\n\t\tconst simulationValue = nativeOutputs + fillOptions.nativeDispatchFee\n\n\t\tconst selectCalldata = encodeFunctionData({\n\t\t\tabi: IntentGatewayV2ABI,\n\t\t\tfunctionName: \"select\",\n\t\t\targs: [selectOptions],\n\t\t}) as HexString\n\n\t\tconst calls: ERC7821Call[] = [\n\t\t\t{ target: intentGatewayV2Address, value: 0n, data: selectCalldata },\n\t\t\t{ target: solverAddress, value: simulationValue, data: bid.userOp.callData },\n\t\t]\n\t\tconst batchedCalldata = this.crypto.encodeERC7821Execute(calls)\n\n\t\ttry {\n\t\t\tawait this.ctx.dest.client.call({\n\t\t\t\taccount: solverAddress,\n\t\t\t\tto: solverAddress,\n\t\t\t\tdata: batchedCalldata,\n\t\t\t\tvalue: simulationValue,\n\t\t\t})\n\t\t} catch (e: unknown) {\n\t\t\tthrow new Error(`Simulation failed: ${e instanceof Error ? e.message : String(e)}`)\n\t\t}\n\t}\n\n\t/**\n\t * Case A: single output token.\n\t * Filter bids by token match only, sort descending by amount.\n\t * Partial fill bids are allowed — the contract determines fill status.\n\t */\n\tprivate sortSingleOutput(\n\t\tdecodedBids: { bid: FillerBid; options: FillOptions }[],\n\t\trequiredAsset: TokenInfo,\n\t): { bid: FillerBid; options: FillOptions }[] {\n\t\tconst requiredAmount = new Decimal(requiredAsset.amount.toString())\n\t\tconsole.log(\n\t\t\t`[BidManager] sortSingleOutput: required token=${requiredAsset.token}, amount=${requiredAmount.toString()}`,\n\t\t)\n\n\t\tconst validBids: { bid: FillerBid; options: FillOptions; amount: bigint }[] = []\n\n\t\tfor (const { bid, options } of decodedBids) {\n\t\t\tconst bidOutput = options.outputs[0]\n\t\t\tconst bidAmount = new Decimal(bidOutput.amount.toString())\n\n\t\t\tif (bidOutput.token.toLowerCase() !== requiredAsset.token.toLowerCase()) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender} REJECTED: token mismatch ` +\n\t\t\t\t\t\t`(bid=${bidOutput.token}, required=${requiredAsset.token})`,\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (bidAmount.lt(requiredAmount)) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender}: partial fill candidate ` +\n\t\t\t\t\t\t`(bid=${bidAmount.toString()}, required=${requiredAmount.toString()}, ` +\n\t\t\t\t\t\t`covers=${bidAmount.div(requiredAmount).mul(100).toFixed(2)}%)`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender} ACCEPTED: amount=${bidAmount.toString()} ` +\n\t\t\t\t\t\t`(surplus=${bidAmount.minus(requiredAmount).toString()})`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tvalidBids.push({ bid, options, amount: bidOutput.amount })\n\t\t}\n\n\t\tvalidBids.sort((a, b) => {\n\t\t\tconst aAmt = new Decimal(a.amount.toString())\n\t\t\tconst bAmt = new Decimal(b.amount.toString())\n\t\t\treturn bAmt.comparedTo(aAmt)\n\t\t})\n\n\t\treturn validBids.map(({ amount: _, ...rest }) => rest)\n\t}\n\n\t/**\n\t * Case B: all outputs are USDC/USDT.\n\t * Sum normalised USD values (treating each stable as $1) and sort descending.\n\t * Partial fill bids are allowed.\n\t */\n\tprivate sortAllStables(\n\t\tdecodedBids: { bid: FillerBid; options: FillOptions }[],\n\t\torderOutputs: TokenInfo[],\n\t\tchainId: string,\n\t): { bid: FillerBid; options: FillOptions }[] {\n\t\tconst requiredUsd = this.computeStablesUsdValue(orderOutputs, chainId)\n\t\tconsole.log(`[BidManager] sortAllStables: required USD value=${requiredUsd.toString()}`)\n\n\t\tconst validBids: { bid: FillerBid; options: FillOptions; usdValue: Decimal }[] = []\n\n\t\tfor (const { bid, options } of decodedBids) {\n\t\t\tconst bidUsd = this.computeStablesUsdValue(options.outputs, chainId)\n\n\t\t\tif (bidUsd === null) {\n\t\t\t\tconsole.warn(`[BidManager] Bid from solver=${bid.userOp.sender} REJECTED: unable to compute USD value`)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (bidUsd.lt(requiredUsd)) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender}: partial fill candidate ` +\n\t\t\t\t\t\t`(bid=${bidUsd.toString()}, required=${requiredUsd.toString()}, ` +\n\t\t\t\t\t\t`covers=${bidUsd.div(requiredUsd).mul(100).toFixed(2)}%)`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender} ACCEPTED: USD value=${bidUsd.toString()}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tvalidBids.push({ bid, options, usdValue: bidUsd })\n\t\t}\n\n\t\tvalidBids.sort((a, b) => b.usdValue.comparedTo(a.usdValue))\n\t\treturn validBids.map(({ usdValue: _, ...rest }) => rest)\n\t}\n\n\t/**\n\t * Case C: mixed output tokens (at least one non-stable).\n\t * Price every token via on-chain DEX quotes, fall back to raw amounts\n\t * if pricing is unavailable. Partial fill bids are allowed.\n\t */\n\tprivate async sortMixedOutputs(\n\t\tdecodedBids: { bid: FillerBid; options: FillOptions }[],\n\t\torderOutputs: TokenInfo[],\n\t\tchainId: string,\n\t): Promise<{ bid: FillerBid; options: FillOptions }[]> {\n\t\tconst requiredUsd = await this.computeOutputsUsdValue(orderOutputs, chainId)\n\n\t\tif (requiredUsd === null) {\n\t\t\tconsole.warn(\"[BidManager] sortMixedOutputs: output tokens unpriceable, falling back to raw-amount sort\")\n\t\t\treturn this.sortByRawAmountFallback(decodedBids, orderOutputs)\n\t\t}\n\n\t\tconsole.log(`[BidManager] sortMixedOutputs: required USD value=${requiredUsd.toString()}`)\n\t\tconst validBids: { bid: FillerBid; options: FillOptions; usdValue: Decimal }[] = []\n\n\t\tfor (const { bid, options } of decodedBids) {\n\t\t\tconst bidUsd = await this.computeOutputsUsdValue(options.outputs, chainId)\n\n\t\t\tif (bidUsd === null) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender} REJECTED: unable to price mixed outputs`,\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (bidUsd.lt(requiredUsd)) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender}: partial fill candidate ` +\n\t\t\t\t\t\t`(bid=${bidUsd.toString()}, required=${requiredUsd.toString()}, ` +\n\t\t\t\t\t\t`covers=${bidUsd.div(requiredUsd).mul(100).toFixed(2)}%)`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender} ACCEPTED: mixed USD value=${bidUsd.toString()}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tvalidBids.push({ bid, options, usdValue: bidUsd })\n\t\t}\n\n\t\tvalidBids.sort((a, b) => b.usdValue.comparedTo(a.usdValue))\n\t\treturn validBids.map(({ usdValue: _, ...rest }) => rest)\n\t}\n\n\t/**\n\t * Fallback when DEX pricing is unavailable.\n\t * Computes total spread per bid. Bids missing a required token are rejected.\n\t * Bids offering less than required for a token are allowed (partial fill).\n\t * Sorted by total offered amount descending.\n\t */\n\tprivate sortByRawAmountFallback(\n\t\tdecodedBids: { bid: FillerBid; options: FillOptions }[],\n\t\torderOutputs: TokenInfo[],\n\t): { bid: FillerBid; options: FillOptions }[] {\n\t\tconsole.log(\n\t\t\t`[BidManager] sortByRawAmountFallback: checking ${decodedBids.length} bid(s) against ${orderOutputs.length} required output(s)`,\n\t\t)\n\t\tconst validBids: { bid: FillerBid; options: FillOptions; totalOffered: Decimal }[] = []\n\n\t\tfor (const { bid, options } of decodedBids) {\n\t\t\tlet valid = true\n\t\t\tlet totalOffered = new Decimal(0)\n\t\t\tlet rejectReason = \"\"\n\n\t\t\tfor (const required of orderOutputs) {\n\t\t\t\tconst matching = options.outputs.find((o) => o.token.toLowerCase() === required.token.toLowerCase())\n\t\t\t\tif (!matching) {\n\t\t\t\t\tvalid = false\n\t\t\t\t\trejectReason = `missing output token=${required.token}`\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\ttotalOffered = totalOffered.plus(new Decimal(matching.amount.toString()))\n\t\t\t}\n\n\t\t\tif (!valid) {\n\t\t\t\tconsole.warn(`[BidManager] Bid from solver=${bid.userOp.sender} REJECTED (fallback): ${rejectReason}`)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst totalRequired = orderOutputs.reduce(\n\t\t\t\t(acc, o) => acc.plus(new Decimal(o.amount.toString())),\n\t\t\t\tnew Decimal(0),\n\t\t\t)\n\n\t\t\tif (totalOffered.lt(totalRequired)) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender}: partial fill candidate (fallback) ` +\n\t\t\t\t\t\t`(offered=${totalOffered.toString()}, required=${totalRequired.toString()}, ` +\n\t\t\t\t\t\t`covers=${totalOffered.div(totalRequired).mul(100).toFixed(2)}%)`,\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[BidManager] Bid from solver=${bid.userOp.sender} ACCEPTED (fallback): totalOffered=${totalOffered.toString()}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tvalidBids.push({ bid, options, totalOffered })\n\t\t}\n\n\t\tvalidBids.sort((a, b) => b.totalOffered.comparedTo(a.totalOffered))\n\t\treturn validBids.map(({ totalOffered: _, ...rest }) => rest)\n\t}\n\n\t// ── Token classification helpers ──────────────────────────────────\n\n\t/**\n\t * Returns `true` if `tokenAddr` is either USDC or USDT on the given chain.\n\t *\n\t * @param tokenAddr - 20-byte ERC-20 token address (hex).\n\t * @param chainId - State-machine ID of the chain to look up token addresses on.\n\t */\n\tprivate isStableToken(tokenAddr: HexString, chainId: string): boolean {\n\t\tconst configService = this.ctx.dest.configService\n\t\tconst usdc = configService.getUsdcAsset(chainId)\n\t\tconst usdt = configService.getUsdtAsset(chainId)\n\t\tconst normalized = tokenAddr.toLowerCase()\n\t\treturn normalized === usdc.toLowerCase() || normalized === usdt.toLowerCase()\n\t}\n\n\t/**\n\t * Returns the ERC-20 decimal count for a known stable token (USDC or USDT)\n\t * on the given chain.\n\t *\n\t * @param tokenAddr - 20-byte token address (hex).\n\t * @param chainId - State-machine ID of the chain.\n\t * @returns Decimal count (e.g. 6 for USDC on most chains).\n\t */\n\tprivate getStableDecimals(tokenAddr: HexString, chainId: string): number {\n\t\tconst configService = this.ctx.dest.configService\n\t\tif (tokenAddr.toLowerCase() === configService.getUsdcAsset(chainId).toLowerCase()) {\n\t\t\treturn configService.getUsdcDecimals(chainId)\n\t\t}\n\t\treturn configService.getUsdtDecimals(chainId)\n\t}\n\n\t// ── Basket valuation helpers ──────────────────────────────────────\n\n\t/**\n\t * Sums the USD value of a basket of stable tokens (USDC/USDT only),\n\t * normalising each amount by its decimal count and treating each token as $1.\n\t *\n\t * @param outputs - List of token/amount pairs where every token is a stable.\n\t * @param chainId - State-machine ID used to look up decimals.\n\t * @returns Total USD value as a `Decimal`.\n\t */\n\tprivate computeStablesUsdValue(outputs: TokenInfo[], chainId: string): Decimal {\n\t\tlet total = new Decimal(0)\n\t\tfor (const output of outputs) {\n\t\t\tconst tokenAddr = bytes32ToBytes20(output.token)\n\t\t\tconst decimals = this.getStableDecimals(tokenAddr, chainId)\n\t\t\ttotal = total.plus(new Decimal(output.amount.toString()).div(new Decimal(10).pow(decimals)))\n\t\t}\n\t\treturn total\n\t}\n\n\t/**\n\t * Prices every token in the basket via on-chain DEX quotes (token → USDC).\n\t * Stables are valued at $1. Non-stables are quoted through Uniswap\n\t * (direct to USDC, or via WETH→USDC as fallback).\n\t * Returns `null` if any token pricing fails.\n\t */\n\tprivate async computeOutputsUsdValue(\n\t\toutputs: { token: HexString; amount: bigint }[],\n\t\tchainId: string,\n\t): Promise<Decimal | null> {\n\t\tconst configService = this.ctx.dest.configService\n\t\tconst client = this.ctx.dest.client\n\t\tconst usdcAddr = configService.getUsdcAsset(chainId)\n\t\tconst usdcDecimals = configService.getUsdcDecimals(chainId)\n\t\tconst { asset: wethAddr } = configService.getWrappedNativeAssetWithDecimals(chainId)\n\n\t\tlet totalUsd = new Decimal(0)\n\n\t\tfor (const output of outputs) {\n\t\t\tconst tokenAddr = bytes32ToBytes20(output.token)\n\n\t\t\tif (this.isStableToken(tokenAddr, chainId)) {\n\t\t\t\tconst decimals = this.getStableDecimals(tokenAddr, chainId)\n\t\t\t\ttotalUsd = totalUsd.plus(new Decimal(output.amount.toString()).div(new Decimal(10).pow(decimals)))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst usdcAmount = await this.quoteTokenToUsdc(\n\t\t\t\t\ttokenAddr,\n\t\t\t\t\toutput.amount,\n\t\t\t\t\twethAddr,\n\t\t\t\t\tusdcAddr,\n\t\t\t\t\tchainId,\n\t\t\t\t\tclient,\n\t\t\t\t)\n\t\t\t\ttotalUsd = totalUsd.plus(new Decimal(usdcAmount.toString()).div(new Decimal(10).pow(usdcDecimals)))\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t}\n\n\t\treturn totalUsd\n\t}\n\n\t/**\n\t * Gets the USDC-equivalent amount for a non-stable token using on-chain DEX quotes.\n\t * Tries direct token→USDC first, then falls back to token→WETH→USDC.\n\t */\n\tprivate async quoteTokenToUsdc(\n\t\ttokenAddr: HexString,\n\t\tamount: bigint,\n\t\twethAddr: HexString,\n\t\tusdcAddr: HexString,\n\t\tchainId: string,\n\t\tclient: IntentGatewayContext[\"dest\"][\"client\"],\n\t): Promise<bigint> {\n\t\tconst isWethOrNative = tokenAddr.toLowerCase() === wethAddr.toLowerCase() || tokenAddr === ADDRESS_ZERO\n\n\t\tif (isWethOrNative) {\n\t\t\tconst { amountOut, protocol } = await this.ctx.swap.findBestProtocolWithAmountIn(\n\t\t\t\tclient,\n\t\t\t\twethAddr,\n\t\t\t\tusdcAddr,\n\t\t\t\tamount,\n\t\t\t\tchainId,\n\t\t\t)\n\t\t\tif (protocol === null || amountOut === 0n) throw new Error(\"No WETH→USDC liquidity\")\n\t\t\treturn amountOut\n\t\t}\n\n\t\t// Try direct: token → USDC\n\t\ttry {\n\t\t\tconst { amountOut, protocol } = await this.ctx.swap.findBestProtocolWithAmountIn(\n\t\t\t\tclient,\n\t\t\t\ttokenAddr,\n\t\t\t\tusdcAddr,\n\t\t\t\tamount,\n\t\t\t\tchainId,\n\t\t\t)\n\t\t\tif (protocol === null || amountOut === 0n) throw new Error(\"No direct liquidity\")\n\t\t\treturn amountOut\n\t\t} catch {\n\t\t\t// Fallback: token → WETH → USDC\n\t\t\tconst { amountOut: wethOut, protocol: p1 } = await this.ctx.swap.findBestProtocolWithAmountIn(\n\t\t\t\tclient,\n\t\t\t\ttokenAddr,\n\t\t\t\twethAddr,\n\t\t\t\tamount,\n\t\t\t\tchainId,\n\t\t\t)\n\t\t\tif (p1 === null || wethOut === 0n) throw new Error(\"No token→WETH liquidity\")\n\n\t\t\tconst { amountOut: usdcOut, protocol: p2 } = await this.ctx.swap.findBestProtocolWithAmountIn(\n\t\t\t\tclient,\n\t\t\t\twethAddr,\n\t\t\t\tusdcAddr,\n\t\t\t\twethOut,\n\t\t\t\tchainId,\n\t\t\t)\n\t\t\tif (p2 === null || usdcOut === 0n) throw new Error(\"No WETH→USDC liquidity\")\n\t\t\treturn usdcOut\n\t\t}\n\t}\n}\n","const ABI = [\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"admin\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"constructor\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"Expired\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"Filled\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InsufficientNativeToken\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidInput\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"NotExpired\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"Unauthorized\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnauthorizedCall\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnexpectedCall\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnknownOrder\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"WrongChain\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"EscrowRefunded\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"EscrowReleased\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"stateMachineId\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"gateway\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"NewDeploymentAdded\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: true,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"filler\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tname: \"OrderFilled\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"user\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"sourceChain\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"destChain\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"deadline\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"nonce\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"fees\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"beneficiary\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct PaymentInfo[]\",\n\t\t\t\tname: \"outputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"token\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"amount\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\tname: \"inputs\",\n\t\t\t\ttype: \"tuple[]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"callData\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"OrderPlaced\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tanonymous: false,\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tname: \"previous\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tindexed: false,\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tname: \"current\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"ParamsUpdated\",\n\t\ttype: \"event\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"commitment\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"calculateCommitmentSlotHash\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"pure\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"sourceChain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"destChain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo[]\",\n\t\t\t\t\t\tname: \"outputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"callData\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"relayerFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct CancelOptions\",\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"cancelOrder\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"sourceChain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"destChain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo[]\",\n\t\t\t\t\t\tname: \"outputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"callData\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"relayerFee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct FillOptions\",\n\t\t\t\tname: \"options\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"fillOrder\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"host\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"address\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"address\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes\",\n\t\t\t\tname: \"stateMachineId\",\n\t\t\t\ttype: \"bytes\",\n\t\t\t},\n\t\t],\n\t\tname: \"instance\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct IncomingPostRequest\",\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"onAccept\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\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\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\ttype: \"address\",\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\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct GetRequest\",\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},\n\t\t\t\t\t\t\t{\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\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tinternalType: \"struct StorageValue[]\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct GetResponse\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct IncomingGetResponse\",\n\t\t\t\tname: \"incoming\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"onGetResponse\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct GetRequest\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"onGetTimeout\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"onPostRequestTimeout\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\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\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"struct PostRequest\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\t\t\ttype: \"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\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostResponse\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"relayer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct IncomingPostResponse\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"onPostResponse\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct PostResponse\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"onPostResponseTimeout\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"params\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\t\t\tname: \"user\",\n\t\t\t\t\t\ttype: \"bytes32\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"sourceChain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"destChain\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"deadline\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fees\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PaymentInfo[]\",\n\t\t\t\t\t\tname: \"outputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct TokenInfo[]\",\n\t\t\t\t\t\tname: \"inputs\",\n\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"callData\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct Order\",\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tinternalType: \"bytes32\",\n\t\t\t\tname: \"graffiti\",\n\t\t\t\ttype: \"bytes32\",\n\t\t\t},\n\t\t],\n\t\tname: \"placeOrder\",\n\t\toutputs: [],\n\t\tstateMutability: \"payable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchPost\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quote\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchGet\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quote\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchPostResponse\",\n\t\t\t\tname: \"response\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quote\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchPost\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteNative\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"uint64\",\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},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinternalType: \"bytes\",\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},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinternalType: \"struct PostRequest\",\n\t\t\t\t\t\tname: \"request\",\n\t\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"response\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"payer\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchPostResponse\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteNative\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\tname: \"timeout\",\n\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\tname: \"fee\",\n\t\t\t\t\t\ttype: \"uint256\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct DispatchGet\",\n\t\t\t\tname: \"request\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"quoteNative\",\n\t\toutputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"uint256\",\n\t\t\t\tname: \"\",\n\t\t\t\ttype: \"uint256\",\n\t\t\t},\n\t\t],\n\t\tstateMutability: \"view\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tcomponents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"host\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\tname: \"dispatcher\",\n\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tinternalType: \"struct Params\",\n\t\t\t\tname: \"p\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t},\n\t\t],\n\t\tname: \"setParams\",\n\t\toutputs: [],\n\t\tstateMutability: \"nonpayable\",\n\t\ttype: \"function\",\n\t},\n\t{\n\t\tstateMutability: \"payable\",\n\t\ttype: \"receive\",\n\t},\n] as const\n\nexport default { ABI }\n","import { encodeFunctionData, toHex, pad, maxUint256, concat, keccak256, isHex, hexToString } from \"viem\"\nimport { generatePrivateKey, privateKeyToAccount, privateKeyToAddress } from \"viem/accounts\"\nimport { ABI as IntentGatewayV2ABI } from \"@/abis/IntentGatewayV2\"\nimport IntentGateway from \"@/abis/IntentGateway\"\nimport {\n\tADDRESS_ZERO,\n\tbytes32ToBytes20,\n\tbytes20ToBytes32,\n\tERC20Method,\n\tadjustDecimals,\n\tconstructRedeemEscrowRequestBody,\n\tMOCK_ADDRESS,\n\tgetOrFetchStorageSlot,\n\tEvmLanguage,\n\tnormalizeAddressForEvmBytes32,\n} from \"@/utils\"\nimport { orderCommitment } from \"./utils\"\nimport { calculateBalanceMappingLocation } from \"@/utils\"\nimport type {\n\tPackedUserOperation,\n\tEstimateFillOrderParams,\n\tFillOrderEstimate,\n\tFillOptions,\n\tIPostRequest,\n\tDispatchPost,\n\tOrder,\n} from \"@/types\"\nimport type { HexString } from \"@/types\"\nimport type { IntentGatewayContext } from \"./types\"\nimport { BundlerMethod } from \"./types\"\nimport type { BundlerGasEstimate, PimlicoGasPriceEstimate } from \"./types\"\nimport { getFeeToken, transformOrderForContract, convertGasToFeeToken, convertFeeTokenToWei } from \"./utils\"\nimport { CryptoUtils } from \"./CryptoUtils\"\n\n/**\n * Estimates the gas cost for filling an IntentGatewayV2 order and converts it\n * into the source-chain fee token so callers can set `order.fees` accurately.\n *\n * When a bundler URL is configured, estimation uses\n * `eth_estimateUserOperationGas` with realistic state overrides (token\n * balances, allowances, EntryPoint deposits, and optional solver account\n * bytecode). Without a bundler, it falls back to `estimateContractGas`.\n * Bundler-specific gas-price refinement is applied automatically:\n * Pimlico (`pimlico_getUserOperationGasPrice`) when the URL contains\n * `pimlico.io`, and Alchemy (`rundler_maxPriorityFeePerGas`) when the\n * URL contains `alchemy.com`.\n */\nexport class GasEstimator {\n\t/**\n\t * @param ctx - Shared IntentsV2 context providing the source and destination\n\t * chain clients, config service, bundler URL, and solver-code cache.\n\t * @param crypto - Crypto utilities used for UserOp construction, signing,\n\t * gas packing, and bundler calls.\n\t */\n\tconstructor(\n\t\tprivate readonly ctx: IntentGatewayContext,\n\t\tprivate readonly crypto: CryptoUtils,\n\t) {}\n\n\t/**\n\t * Estimates the gas cost for a solver to fill the given order and returns\n\t * a structured estimate with individual gas components and total costs in\n\t * both wei and fee-token units.\n\t *\n\t * **Cross-chain orders:** also estimates the ISMP POST request fee required\n\t * for the solver to trigger source-chain escrow redemption after filling, and\n\t * includes it in `fillOptions.relayerFee` and `fillOptions.nativeDispatchFee`.\n\t *\n\t * **Bundler path:** constructs a mock `PackedUserOperation` signed by an\n\t * ephemeral keypair, applies state overrides, and calls\n\t * `eth_estimateUserOperationGas`. Gas limits are bumped by 5-10% for\n\t * headroom. If the bundler is Pimlico, gas prices are refined with\n\t * `pimlico_getUserOperationGasPrice`.\n\t *\n\t * **Fallback path (no bundler):** calls `estimateContractGas` directly on\n\t * `fillOrder` with state overrides.\n\t *\n\t * @param params - Parameters including the order to estimate and optional\n\t * percentage bumps for `maxPriorityFeePerGas` and `maxFeePerGas`.\n\t * @returns A {@link FillOrderEstimate} containing all gas components,\n\t * EIP-1559 fee values, total cost in wei, and total cost in the source\n\t * chain's fee token.\n\t */\n\tasync estimateFillOrder(params: EstimateFillOrderParams): Promise<FillOrderEstimate> {\n\t\tconst { order } = params\n\t\tconst solverPrivateKey = generatePrivateKey()\n\t\tconst solverAccountAddress = privateKeyToAddress(solverPrivateKey)\n\t\tconst souceStateMachineId = isHex(order.source) ? hexToString(order.source) : order.source\n\t\tconst destStateMachineId = isHex(order.destination) ? hexToString(order.destination) : order.destination\n\t\tconst intentGatewayV2Address = this.ctx.dest.configService.getIntentGatewayV2Address(destStateMachineId)\n\t\tconst entryPointAddress = this.ctx.dest.configService.getEntryPointV08Address(destStateMachineId)\n\t\tconst chainId = BigInt(Number.parseInt(destStateMachineId.split(\"-\")[1]))\n\n\t\tconst totalEthValue = order.output.assets\n\t\t\t.filter((output) => bytes32ToBytes20(output.token) === ADDRESS_ZERO)\n\t\t\t.reduce((sum, output) => sum + output.amount, 0n)\n\n\t\tconst [sourceFeeToken, destFeeToken, gasPrice, latestBlock] = await Promise.all([\n\t\t\tgetFeeToken(this.ctx, this.ctx.source.config.stateMachineId, this.ctx.source),\n\t\t\tgetFeeToken(this.ctx, this.ctx.dest.config.stateMachineId, this.ctx.dest),\n\t\t\tthis.ctx.dest.client.getGasPrice(),\n\t\t\tthis.ctx.dest.client.getBlock({ blockTag: \"latest\" }),\n\t\t])\n\t\tconst baseFeePerGas = latestBlock.baseFeePerGas ?? gasPrice\n\n\t\tconst feeTokenAsBytes32 = bytes20ToBytes32(destFeeToken.address)\n\t\tconst assetsForOverrides = [...order.output.assets]\n\t\tif (!assetsForOverrides.some((asset) => asset.token.toLowerCase() === feeTokenAsBytes32.toLowerCase())) {\n\t\t\tassetsForOverrides.push({ token: feeTokenAsBytes32, amount: 0n })\n\t\t}\n\n\t\tconst isSameChain = souceStateMachineId === destStateMachineId\n\n\t\tconst [stateOverridesResult, crossChainFees] = await Promise.all([\n\t\t\tthis.buildStateOverride({\n\t\t\t\taccountAddress: solverAccountAddress,\n\t\t\t\tchain: destStateMachineId,\n\t\t\t\toutputAssets: assetsForOverrides,\n\t\t\t\tspenderAddress: intentGatewayV2Address,\n\t\t\t\tintentGatewayV2Address,\n\t\t\t\tentryPointAddress,\n\t\t\t}),\n\t\t\tisSameChain\n\t\t\t\t? Promise.resolve({ postRequestFee: 0n, protocolFee: 0n })\n\t\t\t\t: this.estimateCrossChainFees(\n\t\t\t\t\t\tsourceFeeToken,\n\t\t\t\t\t\tdestFeeToken,\n\t\t\t\t\t\tsouceStateMachineId,\n\t\t\t\t\t\tdestStateMachineId,\n\t\t\t\t\t\torder,\n\t\t\t\t\t),\n\t\t])\n\n\t\tconst { viem: stateOverrides, bundler: bundlerStateOverrides } = stateOverridesResult\n\n\t\tconst fillOptions: FillOptions = {\n\t\t\trelayerFee: crossChainFees.postRequestFee,\n\t\t\tnativeDispatchFee: crossChainFees.protocolFee,\n\t\t\toutputs: order.output.assets.map((asset) => ({\n\t\t\t\t...asset,\n\t\t\t\ttoken: normalizeAddressForEvmBytes32(asset.token),\n\t\t\t})),\n\t\t}\n\n\t\tconst totalNativeValue = totalEthValue + fillOptions.nativeDispatchFee\n\n\t\tconst priorityFeeBumpPercent = params.maxPriorityFeePerGasBumpPercent ?? 8\n\t\tconst maxFeeBumpPercent = params.maxFeePerGasBumpPercent ?? 10\n\t\tlet maxPriorityFeePerGas = gasPrice + (gasPrice * BigInt(priorityFeeBumpPercent)) / 100n\n\t\tlet maxFeePerGas = gasPrice + (gasPrice * BigInt(maxFeeBumpPercent)) / 100n\n\n\t\tconst orderForEstimation = { ...order, session: solverAccountAddress }\n\t\tconst commitment = orderCommitment(orderForEstimation)\n\n\t\tconst fillOrderCalldata = encodeFunctionData({\n\t\t\tabi: IntentGatewayV2ABI,\n\t\t\tfunctionName: \"fillOrder\",\n\t\t\targs: [transformOrderForContract(orderForEstimation), fillOptions],\n\t\t}) as HexString\n\n\t\tlet callGasLimit: bigint = 500_000n\n\t\tlet verificationGasLimit: bigint = 100_000n\n\t\tlet preVerificationGas: bigint = 100_000n\n\t\t// Paymaster gas fields default to 0n when the bundler estimate doesn't include them.\n\t\tlet paymasterVerificationGasLimit: bigint = 0n\n\t\tlet paymasterPostOpGasLimit: bigint = 0n\n\n\t\tif (this.ctx.bundlerUrl) {\n\t\t\ttry {\n\t\t\t\tconst callData = this.crypto.encodeERC7821Execute([\n\t\t\t\t\t...(params.prependCalls ?? []),\n\t\t\t\t\t{ target: intentGatewayV2Address, value: totalNativeValue, data: fillOrderCalldata },\n\t\t\t\t])\n\n\t\t\t\tconst accountGasLimits = CryptoUtils.packGasLimits(100_000n, callGasLimit)\n\t\t\t\tconst gasFees = CryptoUtils.packGasFees(maxPriorityFeePerGas, maxFeePerGas)\n\n\t\t\t\tconst nonce = 0n\n\n\t\t\t\tconst preliminaryUserOp: PackedUserOperation = {\n\t\t\t\t\tsender: solverAccountAddress,\n\t\t\t\t\tnonce,\n\t\t\t\t\tinitCode: \"0x\" as HexString,\n\t\t\t\t\tcallData: callData,\n\t\t\t\t\taccountGasLimits,\n\t\t\t\t\tpreVerificationGas: 100_000n,\n\t\t\t\t\tgasFees,\n\t\t\t\t\tpaymasterAndData: \"0x\" as HexString,\n\t\t\t\t\tsignature: \"0x\" as HexString,\n\t\t\t\t}\n\n\t\t\t\tconst userOpHash = CryptoUtils.computeUserOpHash(preliminaryUserOp, entryPointAddress, chainId)\n\t\t\t\tconst messageHash = keccak256(\n\t\t\t\t\tconcat([userOpHash, commitment as HexString, solverAccountAddress as import(\"viem\").Hex]),\n\t\t\t\t)\n\t\t\t\tconst solverSignature = await privateKeyToAccount(solverPrivateKey).signMessage({\n\t\t\t\t\tmessage: { raw: messageHash },\n\t\t\t\t})\n\t\t\t\tconst solverSig = concat([commitment as HexString, solverSignature as import(\"viem\").Hex]) as HexString\n\n\t\t\t\tconst domainSeparator = CryptoUtils.getDomainSeparator(\n\t\t\t\t\t\"IntentGateway\",\n\t\t\t\t\t\"2\",\n\t\t\t\t\tchainId,\n\t\t\t\t\tintentGatewayV2Address,\n\t\t\t\t)\n\t\t\t\tconst sessionSignature = await CryptoUtils.signSolverSelection(\n\t\t\t\t\tcommitment as HexString,\n\t\t\t\t\tsolverAccountAddress,\n\t\t\t\t\tdomainSeparator,\n\t\t\t\t\tsolverPrivateKey,\n\t\t\t\t)\n\n\t\t\t\tpreliminaryUserOp.signature = concat([\n\t\t\t\t\tsolverSig as import(\"viem\").Hex,\n\t\t\t\t\tsessionSignature as import(\"viem\").Hex,\n\t\t\t\t]) as HexString\n\n\t\t\t\tconst bundlerUserOp = CryptoUtils.prepareBundlerCall(preliminaryUserOp)\n\t\t\t\tconst bundlerUrlLower = this.ctx.bundlerUrl.toLowerCase()\n\t\t\t\tconst isPimlico = bundlerUrlLower.includes(\"pimlico.io\")\n\t\t\t\tconst isAlchemy = bundlerUrlLower.includes(\"alchemy.com\")\n\n\t\t\t\tconst bundlerRequests: { method: BundlerMethod; params: unknown[] }[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: BundlerMethod.ETH_ESTIMATE_USER_OPERATION_GAS,\n\t\t\t\t\t\tparams: [bundlerUserOp, entryPointAddress, bundlerStateOverrides],\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t\tif (isPimlico) {\n\t\t\t\t\tbundlerRequests.push({\n\t\t\t\t\t\tmethod: BundlerMethod.PIMLICO_GET_USER_OPERATION_GAS_PRICE,\n\t\t\t\t\t\tparams: [],\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (isAlchemy) {\n\t\t\t\t\tbundlerRequests.push({\n\t\t\t\t\t\tmethod: BundlerMethod.RUNDLER_MAX_PRIORITY_FEE_PER_GAS,\n\t\t\t\t\t\tparams: [],\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tlet gasEstimate: BundlerGasEstimate\n\t\t\t\tlet pimlicoGasPrices: PimlicoGasPriceEstimate | null = null\n\t\t\t\tlet alchemyMaxPriorityFee: HexString | null = null\n\n\t\t\t\ttry {\n\t\t\t\t\tconst batchResults = await this.crypto.sendBundlerBatch<unknown[]>(bundlerRequests)\n\t\t\t\t\tgasEstimate = batchResults[0] as BundlerGasEstimate\n\t\t\t\t\tif (isPimlico && batchResults.length > 1) {\n\t\t\t\t\t\tpimlicoGasPrices = batchResults[1] as PimlicoGasPriceEstimate\n\t\t\t\t\t}\n\t\t\t\t\tif (isAlchemy && batchResults.length > 1) {\n\t\t\t\t\t\talchemyMaxPriorityFee = batchResults[1] as HexString\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tgasEstimate = await this.crypto.sendBundler<BundlerGasEstimate>(\n\t\t\t\t\t\tBundlerMethod.ETH_ESTIMATE_USER_OPERATION_GAS,\n\t\t\t\t\t\t[bundlerUserOp, entryPointAddress, bundlerStateOverrides],\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tcallGasLimit = (BigInt(gasEstimate.callGasLimit) * 160n) / 100n\n\t\t\t\tverificationGasLimit = (BigInt(gasEstimate.verificationGasLimit) * 105n) / 100n\n\t\t\t\tpreVerificationGas = (BigInt(gasEstimate.preVerificationGas) * 105n) / 100n\n\n\t\t\t\tif (gasEstimate.paymasterVerificationGasLimit) {\n\t\t\t\t\tpaymasterVerificationGasLimit = (BigInt(gasEstimate.paymasterVerificationGasLimit) * 105n) / 100n\n\t\t\t\t}\n\t\t\t\tif (gasEstimate.paymasterPostOpGasLimit) {\n\t\t\t\t\tpaymasterPostOpGasLimit = (BigInt(gasEstimate.paymasterPostOpGasLimit) * 105n) / 100n\n\t\t\t\t}\n\n\t\t\t\tif (pimlicoGasPrices) {\n\t\t\t\t\tconst level = pimlicoGasPrices.fast ?? pimlicoGasPrices.standard ?? pimlicoGasPrices.slow ?? null\n\n\t\t\t\t\tif (level) {\n\t\t\t\t\t\tconst pimMaxFeePerGas = BigInt(level.maxFeePerGas)\n\t\t\t\t\t\tconst pimMaxPriorityFeePerGas = BigInt(level.maxPriorityFeePerGas)\n\n\t\t\t\t\t\tmaxFeePerGas = pimMaxFeePerGas + (pimMaxFeePerGas * BigInt(maxFeeBumpPercent)) / 100n\n\t\t\t\t\t\tmaxPriorityFeePerGas =\n\t\t\t\t\t\t\tpimMaxPriorityFeePerGas + (pimMaxPriorityFeePerGas * BigInt(priorityFeeBumpPercent)) / 100n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (alchemyMaxPriorityFee) {\n\t\t\t\t\tconst rundlerPriorityFee = BigInt(alchemyMaxPriorityFee)\n\t\t\t\t\t// Alchemy requires 25% priority fee buffer (0% for Arbitrum)\n\t\t\t\t\tconst isArbitrum = chainId === 42161n\n\t\t\t\t\tconst alchemyPrioBump = isArbitrum ? 0n : 25n\n\t\t\t\t\tmaxPriorityFeePerGas = rundlerPriorityFee + (rundlerPriorityFee * alchemyPrioBump) / 100n\n\t\t\t\t\t// Alchemy recommends 50% base fee buffer\n\t\t\t\t\tconst bufferedBaseFee = baseFeePerGas + (baseFeePerGas * 50n) / 100n\n\t\t\t\t\tmaxFeePerGas = bufferedBaseFee + maxPriorityFeePerGas\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(\"Bundler gas estimation failed, using fallback values:\", e)\n\t\t\t}\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst estimatedGas = await this.ctx.dest.client.estimateContractGas({\n\t\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\t\taddress: intentGatewayV2Address,\n\t\t\t\t\tfunctionName: \"fillOrder\",\n\t\t\t\t\targs: [transformOrderForContract(order), fillOptions],\n\t\t\t\t\taccount: solverAccountAddress,\n\t\t\t\t\tvalue: totalNativeValue,\n\t\t\t\t\tstateOverride: stateOverrides as any,\n\t\t\t\t})\n\t\t\t\tcallGasLimit = (estimatedGas * 105n) / 100n\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(\"fillOrder gas estimation failed, using fallback:\", e)\n\t\t\t}\n\t\t}\n\n\t\tconst totalGas =\n\t\t\tcallGasLimit +\n\t\t\tverificationGasLimit +\n\t\t\tpreVerificationGas +\n\t\t\tpaymasterVerificationGasLimit +\n\t\t\tpaymasterPostOpGasLimit\n\t\tconst rawTotalGasCostWei = totalGas * maxFeePerGas\n\n\t\tconst totalGasInDestFeeToken = await convertGasToFeeToken(\n\t\t\tthis.ctx,\n\t\t\ttotalGas,\n\t\t\t\"dest\",\n\t\t\tdestStateMachineId,\n\t\t\tgasPrice,\n\t\t)\n\t\tconst totalGasInSourceFeeToken = isSameChain\n\t\t\t? totalGasInDestFeeToken\n\t\t\t: adjustDecimals(totalGasInDestFeeToken, destFeeToken.decimals, sourceFeeToken.decimals)\n\n\t\tconst totalGasCostWei = isSameChain\n\t\t\t? rawTotalGasCostWei\n\t\t\t: await convertFeeTokenToWei(this.ctx, totalGasInSourceFeeToken, \"source\", souceStateMachineId)\n\n\t\treturn {\n\t\t\tcallGasLimit,\n\t\t\tverificationGasLimit,\n\t\t\tpreVerificationGas,\n\t\t\tpaymasterVerificationGasLimit,\n\t\t\tpaymasterPostOpGasLimit,\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas,\n\t\t\ttotalGasCostWei,\n\t\t\ttotalGasInFeeToken: totalGasInSourceFeeToken,\n\t\t\tfillOptions,\n\t\t}\n\t}\n\n\t/**\n\t * Estimates cross-chain ISMP POST request fees by running the gas-to-fee-token\n\t * conversion and host nonce fetch in parallel, then quoting the native dispatch cost.\n\t */\n\tprivate async estimateCrossChainFees(\n\t\tsourceFeeToken: { address: HexString; decimals: number },\n\t\tdestFeeToken: { address: HexString; decimals: number },\n\t\tsourceChainId: string,\n\t\tdestChainId: string,\n\t\torder: Order,\n\t): Promise<{ postRequestFee: bigint; protocolFee: bigint }> {\n\t\tconst postRequestGas = 400_000n\n\n\t\tconst [postRequestFeeInSourceFeeToken, nonce] = await Promise.all([\n\t\t\tconvertGasToFeeToken(this.ctx, postRequestGas, \"source\", sourceChainId),\n\t\t\tthis.ctx.dest.getHostNonce(),\n\t\t])\n\n\t\tlet postRequestFeeInDestFeeToken = adjustDecimals(\n\t\t\tpostRequestFeeInSourceFeeToken,\n\t\t\tsourceFeeToken.decimals,\n\t\t\tdestFeeToken.decimals,\n\t\t)\n\n\t\tconst postRequest: IPostRequest = {\n\t\t\tsource: destChainId,\n\t\t\tdest: sourceChainId,\n\t\t\tbody: constructRedeemEscrowRequestBody({ ...order, id: orderCommitment(order) }, MOCK_ADDRESS),\n\t\t\ttimeoutTimestamp: 0n,\n\t\t\tnonce,\n\t\t\tfrom: this.ctx.source.configService.getIntentGatewayV2Address(destChainId),\n\t\t\tto: this.ctx.source.configService.getIntentGatewayV2Address(sourceChainId),\n\t\t}\n\n\t\tlet protocolFeeInNativeToken = await this.quoteNative(postRequest, postRequestFeeInDestFeeToken).catch(() =>\n\t\t\tthis.ctx.dest.quoteNative(postRequest, postRequestFeeInDestFeeToken).catch(() => 0n),\n\t\t)\n\n\t\tprotocolFeeInNativeToken = (protocolFeeInNativeToken * 1005n) / 1000n\n\t\tpostRequestFeeInDestFeeToken = (postRequestFeeInDestFeeToken * 1005n) / 1000n\n\n\t\treturn { postRequestFee: postRequestFeeInDestFeeToken, protocolFee: protocolFeeInNativeToken }\n\t}\n\n\t/**\n\t * Builds EVM state override objects for gas estimation of the `fillOrder`\n\t * call, granting the solver account sufficient balances, allowances, and\n\t * EntryPoint deposits so the estimation does not revert due to missing funds.\n\t *\n\t * Returns two formats of the same overrides:\n\t * - `viem`: array format compatible with viem's `stateOverride` parameter.\n\t * - `bundler`: object format compatible with the ERC-4337 bundler's\n\t * `eth_estimateUserOperationGas` state-override parameter.\n\t *\n\t * Optionally injects known solver account bytecode (from `solverCodeCache`)\n\t * so the mock EOA used for estimation behaves like a real solver smart account.\n\t *\n\t * @param params.accountAddress - Address of the mock solver account.\n\t * @param params.chain - State-machine ID of the destination chain.\n\t * @param params.outputAssets - Token/amount pairs whose balance and allowance\n\t * slots should be overridden.\n\t * @param params.spenderAddress - Address that needs allowance from the solver\n\t * account (i.e. the IntentGatewayV2 contract).\n\t * @param params.intentGatewayV2Address - If provided, overrides slot 5 of\n\t * IntentGatewayV2 with the call-dispatcher address so dispatch calls\n\t * succeed during estimation.\n\t * @param params.entryPointAddress - If provided, overrides the EntryPoint\n\t * deposit mapping to give the solver account a large deposit.\n\t * @returns An object with `viem` and `bundler` state-override collections.\n\t */\n\tasync buildStateOverride(params: {\n\t\taccountAddress: HexString\n\t\tchain: string\n\t\toutputAssets: { token: HexString; amount: bigint }[]\n\t\tspenderAddress: HexString\n\t\tintentGatewayV2Address?: HexString\n\t\tentryPointAddress?: HexString\n\t}): Promise<{\n\t\tviem: { address: HexString; balance?: bigint; stateDiff?: { slot: HexString; value: HexString }[] }[]\n\t\tbundler: Record<string, { balance?: string; stateDiff?: Record<string, string>; code?: string }>\n\t}> {\n\t\tconst { accountAddress, chain, outputAssets, spenderAddress, intentGatewayV2Address, entryPointAddress } =\n\t\t\tparams\n\t\tconst testValue = toHex(maxUint256 / 2n, { size: 32 }) as HexString\n\n\t\tconst viemOverrides: {\n\t\t\taddress: HexString\n\t\t\tbalance?: bigint\n\t\t\tstateDiff?: { slot: HexString; value: HexString }[]\n\t\t}[] = []\n\t\tconst bundlerOverrides: Record<\n\t\t\tstring,\n\t\t\t{ balance?: string; stateDiff?: Record<string, string>; code?: string }\n\t\t> = {}\n\n\t\tif (intentGatewayV2Address) {\n\t\t\tconst paramsSlot5 = pad(toHex(5n), { size: 32 }) as HexString\n\t\t\tconst dispatcherAddress = this.ctx.dest.configService.getCalldispatcherAddress(chain)\n\t\t\tconst newSlot5Value = (\"0x\" + \"0\".repeat(22) + \"00\" + dispatcherAddress.slice(2).toLowerCase()) as HexString\n\n\t\t\tviemOverrides.push({\n\t\t\t\taddress: intentGatewayV2Address,\n\t\t\t\tstateDiff: [{ slot: paramsSlot5, value: newSlot5Value }],\n\t\t\t})\n\t\t\tbundlerOverrides[intentGatewayV2Address] = {\n\t\t\t\tstateDiff: { [paramsSlot5]: newSlot5Value },\n\t\t\t}\n\t\t}\n\n\t\tif (entryPointAddress) {\n\t\t\tconst entryPointDepositSlot = calculateBalanceMappingLocation(0n, accountAddress, EvmLanguage.Solidity)\n\n\t\t\tviemOverrides.push({\n\t\t\t\taddress: entryPointAddress,\n\t\t\t\tstateDiff: [{ slot: entryPointDepositSlot, value: testValue }],\n\t\t\t})\n\t\t\tbundlerOverrides[entryPointAddress] = {\n\t\t\t\tstateDiff: { [entryPointDepositSlot]: testValue },\n\t\t\t}\n\t\t}\n\n\t\tviemOverrides.push({\n\t\t\taddress: accountAddress,\n\t\t\tbalance: maxUint256,\n\t\t})\n\t\tbundlerOverrides[accountAddress] = {\n\t\t\tbalance: testValue,\n\t\t}\n\n\t\tconst tokenResults = await Promise.all(\n\t\t\toutputAssets.map((output) =>\n\t\t\t\tthis.buildTokenOverrides(output.token, accountAddress, spenderAddress, chain, testValue),\n\t\t\t),\n\t\t)\n\t\tfor (const result of tokenResults) {\n\t\t\tif (result) {\n\t\t\t\tviemOverrides.push({ address: result.address, stateDiff: result.viemStateDiffs })\n\t\t\t\tbundlerOverrides[result.address] = { stateDiff: result.bundlerStateDiffs }\n\t\t\t}\n\t\t}\n\n\t\tconst solverAccountContract = this.ctx.dest.configService.getSolverAccountAddress(chain)\n\t\tif (solverAccountContract) {\n\t\t\ttry {\n\t\t\t\tconst cacheKey = solverAccountContract.toLowerCase()\n\t\t\t\tlet solverCode = this.ctx.solverCodeCache.get(cacheKey)\n\n\t\t\t\tif (!solverCode) {\n\t\t\t\t\tsolverCode = await this.ctx.dest.client.getCode({ address: solverAccountContract })\n\t\t\t\t\tif (solverCode && solverCode !== \"0x\") {\n\t\t\t\t\t\tthis.ctx.solverCodeCache.set(cacheKey, solverCode)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (solverCode && solverCode !== \"0x\") {\n\t\t\t\t\tif (!bundlerOverrides[accountAddress]) {\n\t\t\t\t\t\tbundlerOverrides[accountAddress] = {}\n\t\t\t\t\t}\n\t\t\t\t\tbundlerOverrides[accountAddress].code = solverCode\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore\n\t\t\t}\n\t\t}\n\n\t\treturn { viem: viemOverrides, bundler: bundlerOverrides }\n\t}\n\n\t/**\n\t * Resolves the balance and allowance storage slot overrides for a single\n\t * ERC-20 token in parallel. Returns `null` for native-ETH tokens or when\n\t * no slots could be discovered.\n\t */\n\tprivate async buildTokenOverrides(\n\t\ttokenHex: HexString,\n\t\taccountAddress: HexString,\n\t\tspenderAddress: HexString,\n\t\tchain: string,\n\t\ttestValue: HexString,\n\t): Promise<{\n\t\taddress: HexString\n\t\tviemStateDiffs: { slot: HexString; value: HexString }[]\n\t\tbundlerStateDiffs: Record<string, string>\n\t} | null> {\n\t\tconst tokenAddress = bytes32ToBytes20(tokenHex)\n\t\tif (tokenAddress === ADDRESS_ZERO) return null\n\n\t\ttry {\n\t\t\tconst viemStateDiffs: { slot: HexString; value: HexString }[] = []\n\t\t\tconst bundlerStateDiffs: Record<string, string> = {}\n\n\t\t\tconst balanceData = (ERC20Method.BALANCE_OF + bytes20ToBytes32(accountAddress).slice(2)) as HexString\n\t\t\tconst allowanceData = (ERC20Method.ALLOWANCE +\n\t\t\t\tbytes20ToBytes32(accountAddress).slice(2) +\n\t\t\t\tbytes20ToBytes32(spenderAddress).slice(2)) as HexString\n\n\t\t\tconst [balanceSlot, allowanceSlot] = await Promise.all([\n\t\t\t\tgetOrFetchStorageSlot(this.ctx.dest.client, chain, tokenAddress, balanceData),\n\t\t\t\tgetOrFetchStorageSlot(this.ctx.dest.client, chain, tokenAddress, allowanceData).catch(() => undefined),\n\t\t\t])\n\n\t\t\tif (balanceSlot) {\n\t\t\t\tviemStateDiffs.push({ slot: balanceSlot, value: testValue })\n\t\t\t\tbundlerStateDiffs[balanceSlot] = testValue\n\t\t\t}\n\t\t\tif (allowanceSlot) {\n\t\t\t\tviemStateDiffs.push({ slot: allowanceSlot, value: testValue })\n\t\t\t\tbundlerStateDiffs[allowanceSlot] = testValue\n\t\t\t}\n\n\t\t\tif (viemStateDiffs.length === 0) return null\n\n\t\t\treturn { address: tokenAddress, viemStateDiffs, bundlerStateDiffs }\n\t\t} catch {\n\t\t\treturn null\n\t\t}\n\t}\n\n\t/**\n\t * Quotes the native token cost of dispatching an ISMP POST request through\n\t * the IntentGateway (v1) `quoteNative` function.\n\t *\n\t * Uses the v1 IntentGateway ABI (not IntentGatewayV2) because the dispatch\n\t * call is routed through the legacy gateway contract.\n\t *\n\t * @param postRequest - The ISMP POST request to quote.\n\t * @param fee - The relayer fee (in dest fee token) to include in the quote.\n\t * @returns The native token amount required to dispatch the request.\n\t */\n\tprivate async quoteNative(postRequest: IPostRequest, fee: bigint): Promise<bigint> {\n\t\tconst dispatchPost: DispatchPost = {\n\t\t\tdest: toHex(postRequest.dest),\n\t\t\tto: postRequest.to,\n\t\t\tbody: postRequest.body,\n\t\t\ttimeout: postRequest.timeoutTimestamp,\n\t\t\tfee: fee,\n\t\t\tpayer: postRequest.from,\n\t\t}\n\n\t\treturn await this.ctx.dest.client.readContract({\n\t\t\taddress: this.ctx.dest.configService.getIntentGatewayAddress(postRequest.dest),\n\t\t\tabi: IntentGateway.ABI,\n\t\t\tfunctionName: \"quoteNative\",\n\t\t\targs: [dispatchPost],\n\t\t})\n\t}\n}\n","import { isHex, hexToString } from \"viem\"\nimport { ABI as IntentGatewayV2ABI } from \"@/abis/IntentGatewayV2\"\nimport { bytes32ToBytes20 } from \"@/utils\"\nimport { orderCommitment } from \"./utils\"\nimport type { Order, HexString } from \"@/types\"\nimport type { IntentGatewayContext } from \"./types\"\n\n/**\n * Checks the on-chain fill and refund status of IntentGatewayV2 orders.\n *\n * Reads contract storage directly rather than relying on events, so the\n * results are accurate even if the caller misses the confirmation window.\n */\nexport class OrderStatusChecker {\n\t/**\n\t * @param ctx - Shared IntentsV2 context providing the source and destination\n\t * chain clients and config service.\n\t */\n\tconstructor(private readonly ctx: IntentGatewayContext) {}\n\n\t/**\n\t * Checks if a V2 order has been filled by reading the commitment storage slot on the destination chain.\n\t *\n\t * Reads the storage slot returned by `calculateCommitmentSlotHash` on the IntentGatewayV2 contract.\n\t * A non-zero value at that slot means the solver has called `fillOrder` and the order is complete\n\t * from the user's perspective (the beneficiary has received their tokens).\n\t *\n\t * @param order - The V2 order to check. `order.id` is used as the commitment; if not set it is computed.\n\t * @returns True if the order has been filled on the destination chain, false otherwise.\n\t */\n\tasync isOrderFilled(order: Order): Promise<boolean> {\n\t\tconst commitment = (order.id ?? orderCommitment(order)) as HexString\n\t\tconst destStateMachineId = isHex(order.destination)\n\t\t\t? hexToString(order.destination as HexString)\n\t\t\t: order.destination\n\n\t\tconst intentGatewayV2Address = this.ctx.dest.configService.getIntentGatewayV2Address(destStateMachineId)\n\n\t\tconst filledSlot = await this.ctx.dest.client.readContract({\n\t\t\tabi: IntentGatewayV2ABI,\n\t\t\taddress: intentGatewayV2Address,\n\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\targs: [commitment],\n\t\t})\n\n\t\tconst filledStatus = await this.ctx.dest.client.getStorageAt({\n\t\t\taddress: intentGatewayV2Address,\n\t\t\tslot: filledSlot as HexString,\n\t\t})\n\n\t\treturn filledStatus !== \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n\t}\n\n\t/**\n\t * Checks if a V2 order has been refunded by reading the `_orders` mapping on the source chain.\n\t *\n\t * Calls `_orders(commitment, tokenAddress)` for each input token. When the order is placed the\n\t * escrowed amounts are stored there. After a successful refund the contract zeroes them out.\n\t * An order is considered refunded when all escrowed input amounts have been returned (i.e. are 0).\n\t *\n\t * @param order - The V2 order to check. `order.id` is used as the commitment; if not set it is computed.\n\t * @returns True if all escrowed inputs have been returned to the user on the source chain, false otherwise.\n\t */\n\tasync isOrderRefunded(order: Order): Promise<boolean> {\n\t\tif (!order.inputs || order.inputs.length === 0) return false\n\n\t\tconst commitment = (order.id ?? orderCommitment(order)) as HexString\n\t\tconst sourceStateMachineId = isHex(order.source) ? hexToString(order.source as HexString) : order.source\n\n\t\tconst intentGatewayV2Address = this.ctx.source.configService.getIntentGatewayV2Address(sourceStateMachineId)\n\n\t\tfor (const input of order.inputs) {\n\t\t\tconst tokenAddress = bytes32ToBytes20(input.token)\n\t\t\tconst escrowedAmount = await this.ctx.source.client.readContract({\n\t\t\t\tabi: IntentGatewayV2ABI,\n\t\t\t\taddress: intentGatewayV2Address,\n\t\t\t\tfunctionName: \"_orders\",\n\t\t\t\targs: [commitment, tokenAddress],\n\t\t\t})\n\n\t\t\tif (escrowedAmount !== 0n) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n}\n","import { createSessionKeyStorage, createCancellationStorage, createUsedUserOpsStorage } from \"@/storage\"\nimport { Swap } from \"@/utils/swap\"\nimport { type ConsolaInstance, LogLevels, createConsola } from \"consola\"\nimport type { TransactionReceipt } from \"viem\"\nimport type {\n\tOrder,\n\tHexString,\n\tCancelOrderOptions,\n\tCancelQuote,\n\tIndexerQueryClient,\n\tOrderStatus,\n\tOrderWithStatus,\n} from \"@/types\"\nimport type {\n\tPackedUserOperation,\n\tSubmitBidOptions,\n\tEstimateFillOrderParams,\n\tFillOrderEstimate,\n\tIntentOrderStatusUpdate,\n\tSelectBidResult,\n\tFillerBid,\n} from \"@/types\"\nimport type { ResumeIntentOrderOptions } from \"@/types\"\nimport type { IEvmChain } from \"@/chain\"\nimport type { IntentsCoprocessor } from \"@/chains/intentsCoprocessor\"\nimport type { IsmpClient } from \"@/client\"\nimport { _queryOrderInternal } from \"@/queryClient\"\nimport type { IntentGatewayContext } from \"./types\"\nimport type { CancelEvent } from \"./types\"\nimport { CryptoUtils } from \"./CryptoUtils\"\nimport { OrderPlacer } from \"./OrderPlacer\"\nimport { OrderExecutor } from \"./OrderExecutor\"\nimport { OrderCanceller } from \"./OrderCanceller\"\nimport { BidManager } from \"./BidManager\"\nimport { GasEstimator } from \"./GasEstimator\"\nimport { OrderStatusChecker } from \"./OrderStatusChecker\"\nimport type { ERC7821Call } from \"@/types\"\nimport { DEFAULT_GRAFFITI, DEFAULT_POLL_INTERVAL, ADDRESS_ZERO, sleep } from \"@/utils\"\n\n/**\n * High-level facade for the IntentGatewayV2 protocol.\n *\n * `IntentGateway` orchestrates the complete lifecycle of an intent-based\n * cross-chain swap:\n * - **Order placement** — encodes and yields `placeOrder` calldata; caller\n * signs and submits the transaction.\n * - **Order execution** — polls the Hyperbridge coprocessor for solver bids,\n * selects the best bid, and submits an ERC-4337 UserOperation via a bundler.\n * - **Order cancellation** — guides the caller through the source- or\n * destination-initiated cancellation flow, including ISMP proof fetching and\n * Hyperbridge relay.\n * - **Status checks** — reads on-chain storage to determine whether an order\n * has been filled or refunded.\n *\n * Internally delegates to specialised sub-modules: {@link OrderPlacer},\n * {@link OrderExecutor}, {@link OrderCanceller}, {@link BidManager},\n * {@link GasEstimator}, {@link OrderStatusChecker}, and {@link CryptoUtils}.\n *\n * Use `IntentGateway.create()` to obtain an initialised instance.\n */\nexport class IntentGateway {\n\t/** EVM chain on which orders are placed and escrowed. */\n\treadonly source: IEvmChain\n\t/** EVM chain on which solvers fill orders and deliver outputs. */\n\treadonly dest: IEvmChain\n\t/** Optional Hyperbridge coprocessor client for bid fetching and UserOp submission. */\n\treadonly intentsCoprocessor?: IntentsCoprocessor\n\t/** Optional ERC-4337 bundler URL for gas estimation and UserOp broadcasting. */\n\treadonly bundlerUrl?: string\n\n\t/** Shared context object passed to all sub-modules. */\n\tprivate readonly ctx: IntentGatewayContext\n\t/** Crypto and encoding utilities (EIP-712, gas packing, bundler calls). */\n\tprivate readonly _crypto: CryptoUtils\n\t/** Handles `placeOrder` calldata generation and session-key management. */\n\tprivate readonly orderPlacer: OrderPlacer\n\t/** Drives the bid-polling and UserOp-submission loop after order placement. */\n\tprivate readonly orderExecutor: OrderExecutor\n\t/** Manages source- and destination-initiated order cancellation flows. */\n\tprivate readonly orderCanceller: OrderCanceller\n\t/** Reads fill and refund status from on-chain storage. */\n\tprivate readonly orderStatusChecker: OrderStatusChecker\n\t/** Validates, sorts, simulates, and submits solver bids. */\n\tprivate readonly bidManager: BidManager\n\t/** Estimates gas costs for filling an order and converts them to fee-token amounts. */\n\tprivate readonly gasEstimator: GasEstimator\n\n\t/**\n\t * Private constructor — use {@link IntentGateway.create} instead.\n\t *\n\t * Initialises all sub-modules and the shared context, including storage\n\t * adapters, fee-token and solver-code caches, and the DEX-quote utility.\n\t *\n\t * @param source - Source chain client.\n\t * @param dest - Destination chain client.\n\t * @param intentsCoprocessor - Optional coprocessor for bid fetching.\n\t */\n\tprivate constructor(source: IEvmChain, dest: IEvmChain, intentsCoprocessor?: IntentsCoprocessor) {\n\t\tthis.source = source\n\t\tthis.dest = dest\n\t\tthis.intentsCoprocessor = intentsCoprocessor\n\t\tthis.bundlerUrl = dest.bundlerUrl\n\n\t\tconst sessionKeyStorage = createSessionKeyStorage()\n\t\tconst cancellationStorage = createCancellationStorage()\n\t\tconst usedUserOpsStorage = createUsedUserOpsStorage()\n\t\tconst swap = new Swap()\n\t\tconst feeTokenCache = new Map<string, { address: HexString; decimals: number; cachedAt: number }>()\n\t\tconst solverCodeCache = new Map<string, string>()\n\n\t\tthis.ctx = {\n\t\t\tsource,\n\t\t\tdest,\n\t\t\tintentsCoprocessor,\n\t\t\tbundlerUrl: this.bundlerUrl,\n\t\t\tfeeTokenCache,\n\t\t\tsolverCodeCache,\n\t\t\tsessionKeyStorage,\n\t\t\tcancellationStorage,\n\t\t\tusedUserOpsStorage,\n\t\t\tswap,\n\t\t}\n\n\t\tconst crypto = new CryptoUtils(this.ctx)\n\t\tconst bidManager = new BidManager(this.ctx, crypto)\n\t\tconst gasEstimator = new GasEstimator(this.ctx, crypto)\n\n\t\tthis.orderPlacer = new OrderPlacer(this.ctx)\n\t\tthis.orderExecutor = new OrderExecutor(this.ctx, bidManager, crypto)\n\t\tthis.orderCanceller = new OrderCanceller(this.ctx)\n\t\tthis.orderStatusChecker = new OrderStatusChecker(this.ctx)\n\t\tthis.bidManager = bidManager\n\t\tthis.gasEstimator = gasEstimator\n\t\tthis._crypto = crypto\n\t}\n\n\t/**\n\t * Creates an initialized IntentGateway instance.\n\t *\n\t * Fetches the fee tokens for both chains and optionally caches the solver\n\t * account bytecode before returning, so the instance is ready for use\n\t * without additional warm-up calls.\n\t *\n\t * The ERC-4337 bundler URL is read from `dest.bundlerUrl`, set when constructing\n\t * the destination chain via {@link EvmChain.create} or {@link EvmChainParams.bundlerUrl}.\n\t *\n\t * @param source - Source chain for order placement\n\t * @param dest - Destination chain for order fulfillment\n\t * @param intentsCoprocessor - Optional coprocessor for bid fetching and order execution\n\t * @returns Initialized IntentGateway instance\n\t */\n\tstatic async create(\n\t\tsource: IEvmChain,\n\t\tdest: IEvmChain,\n\t\tintentsCoprocessor?: IntentsCoprocessor,\n\t): Promise<IntentGateway> {\n\t\tconst instance = new IntentGateway(source, dest, intentsCoprocessor)\n\t\tawait instance.init()\n\t\treturn instance\n\t}\n\n\t/**\n\t * Pre-warms the fee-token cache for both chains and attempts to load the\n\t * solver account bytecode into the solver-code cache.\n\t *\n\t * Called automatically by {@link IntentGateway.create}; not intended for direct use.\n\t */\n\tprivate async init(): Promise<void> {\n\t\tconst now = Date.now()\n\t\tconst sourceFeeToken = await this.source.getFeeTokenWithDecimals()\n\t\tthis.ctx.feeTokenCache.set(this.source.config.stateMachineId, { ...sourceFeeToken, cachedAt: now })\n\t\tconst destFeeToken = await this.dest.getFeeTokenWithDecimals()\n\t\tthis.ctx.feeTokenCache.set(this.dest.config.stateMachineId, { ...destFeeToken, cachedAt: now })\n\n\t\tconst solverAccountContract = this.dest.configService.getSolverAccountAddress(this.dest.config.stateMachineId)\n\t\tif (solverAccountContract) {\n\t\t\ttry {\n\t\t\t\tconst solverCode = await this.dest.client.getCode({ address: solverAccountContract })\n\t\t\t\tif (solverCode && solverCode !== \"0x\") {\n\t\t\t\t\tthis.ctx.solverCodeCache.set(solverAccountContract.toLowerCase(), solverCode)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Bidirectional async generator that orchestrates the full order lifecycle:\n\t * placement, fee estimation, bid collection, and execution.\n\t *\n\t * **Yield/receive protocol:**\n\t * 1. If `order.fees` is unset or zero, estimates gas and sets `order.fees`\n\t * with a 1% buffer and the wei cost with a 2% buffer for the `value` field.\n\t * 2. Yields `AWAITING_PLACE_ORDER` with `{ to, data, value, sessionPrivateKey }`.\n\t * The caller must sign the transaction and pass it back via `gen.next(signedTx)`.\n\t * 3. Yields `ORDER_PLACED` with the finalised order and transaction hash once\n\t * the `OrderPlaced` event is confirmed.\n\t * 4. Delegates to {@link OrderExecutor.executeOrder} and forwards all\n\t * subsequent status updates until the order is filled, exhausted, or fails.\n\t *\n\t * @param order - The order to place and execute. `order.fees` may be 0; it\n\t * will be estimated automatically if so.\n\t * @param graffiti - Optional bytes32 tag for orderflow attribution /\n\t * revenue share. Defaults to {@link DEFAULT_GRAFFITI}.\n\t * @param options - Optional tuning parameters:\n\t * - `maxPriorityFeePerGasBumpPercent` — bump % for the priority fee estimate (default 8).\n\t * - `maxFeePerGasBumpPercent` — bump % for the max fee estimate (default 10).\n\t * - `auctionTimeMs` — duration in ms to collect bids before selecting the best one.\n\t * - `pollIntervalMs` — interval between bid-polling attempts.\n\t * @yields {@link IntentOrderStatusUpdate} at each lifecycle stage.\n\t * @throws If the `placeOrder` generator behaves unexpectedly, or if gas\n\t * estimation returns zero.\n\t */\n\tasync *execute(\n\t\torder: Order,\n\t\tgraffiti: HexString = DEFAULT_GRAFFITI,\n\t\toptions: {\n\t\t\tauctionTimeMs: number\n\t\t\tmaxPriorityFeePerGasBumpPercent?: number\n\t\t\tmaxFeePerGasBumpPercent?: number\n\t\t\tpollIntervalMs?: number\n\t\t\tsolver?: { address: HexString; timeoutMs: number }\n\t\t},\n\t): AsyncGenerator<IntentOrderStatusUpdate, void, HexString> {\n\t\tlet value: bigint | undefined\n\n\t\tif (!order.fees || order.fees === 0n) {\n\t\t\tconst estimate = await this.gasEstimator.estimateFillOrder({\n\t\t\t\torder,\n\t\t\t\tmaxPriorityFeePerGasBumpPercent: options?.maxPriorityFeePerGasBumpPercent,\n\t\t\t\tmaxFeePerGasBumpPercent: options?.maxFeePerGasBumpPercent,\n\t\t\t})\n\n\t\t\tif (estimate.totalGasCostWei === 0n || estimate.totalGasInFeeToken === 0n) {\n\t\t\t\tthrow new Error(\"Gas estimation failed\")\n\t\t\t}\n\n\t\t\t// Solvers using the same estimate algo will have tighter bounds, so we add a buffer.\n\t\t\tvalue = estimate.totalGasCostWei + (estimate.totalGasCostWei * 2n) / 100n\n\t\t\torder.fees = estimate.totalGasInFeeToken + (estimate.totalGasInFeeToken * 1n) / 100n\n\t\t}\n\n\t\tconst placeOrderGen = this.orderPlacer.placeOrder(order, graffiti)\n\t\tconst placeOrderFirst = await placeOrderGen.next()\n\t\tif (placeOrderFirst.done) {\n\t\t\tthrow new Error(\"placeOrder generator completed without yielding\")\n\t\t}\n\t\tconst { to, data, sessionPrivateKey } = placeOrderFirst.value\n\n\t\tconst signedTransaction = yield { status: \"AWAITING_PLACE_ORDER\", to, data, value, sessionPrivateKey }\n\n\t\tconst placeOrderSecond = await placeOrderGen.next(signedTransaction)\n\t\tif (placeOrderSecond.done === false) {\n\t\t\tthrow new Error(\"placeOrder generator yielded unexpectedly after signing\")\n\t\t}\n\t\tconst { order: finalizedOrder, receipt: placementReceipt } = placeOrderSecond.value as {\n\t\t\torder: Order\n\t\t\treceipt: TransactionReceipt\n\t\t}\n\n\t\tyield { status: \"ORDER_PLACED\", order: finalizedOrder, receipt: placementReceipt }\n\n\t\tfor await (const status of this.orderExecutor.executeOrder({\n\t\t\torder: finalizedOrder,\n\t\t\tsessionPrivateKey,\n\t\t\tauctionTimeMs: options.auctionTimeMs,\n\t\t\tpollIntervalMs: options.pollIntervalMs,\n\t\t\tsolver: options.solver,\n\t\t})) {\n\t\t\tyield status\n\t\t}\n\n\t\treturn\n\t}\n\n\t/**\n\t * Validates that an order has the minimum fields required for post-placement\n\t * resume (i.e. it was previously placed and has an on-chain identity).\n\t *\n\t * @throws If `order.id` or `order.session` is missing or zero-valued.\n\t */\n\tprivate assertOrderCanResume(order: Order): void {\n\t\tif (!order.id) {\n\t\t\tthrow new Error(\"Cannot resume execution without order.id\")\n\t\t}\n\t\tif (!order.session || order.session === ADDRESS_ZERO) {\n\t\t\tthrow new Error(\"Cannot resume execution without order.session\")\n\t\t}\n\t}\n\n\t/**\n\t * Resumes execution of a previously placed order.\n\t *\n\t * Use this method after an app restart or crash to pick up where\n\t * {@link execute} left off. The order must already be placed on-chain\n\t * (i.e. it must have a valid `id` and `session`).\n\t *\n\t * Internally delegates to {@link OrderExecutor.executeOrder} and\n\t * yields the same status updates as the execution phase of {@link execute}:\n\t * `AWAITING_BIDS`, `BIDS_RECEIVED`, `BID_SELECTED`,\n\t * `FILLED`, `PARTIAL_FILL`, `EXPIRED`, or `FAILED`.\n\t *\n\t * Callers may check {@link isOrderFilled} or {@link isOrderRefunded} before\n\t * calling this method to avoid resuming an already-terminal order.\n\t *\n\t * @param order - A previously placed order with a valid `id` and `session`.\n\t * @param options - Optional tuning parameters for bid collection and execution.\n\t * @yields {@link IntentOrderStatusUpdate} at each execution stage.\n\t * @throws If the order is missing required fields for resumption.\n\t */\n\tasync *resume(\n\t\torder: Order,\n\t\toptions: ResumeIntentOrderOptions,\n\t): AsyncGenerator<IntentOrderStatusUpdate, void> {\n\t\tthis.assertOrderCanResume(order)\n\n\t\tfor await (const status of this.orderExecutor.executeOrder({\n\t\t\torder,\n\t\t\tsessionPrivateKey: options.sessionPrivateKey,\n\t\t\tauctionTimeMs: options.auctionTimeMs,\n\t\t\tpollIntervalMs: options.pollIntervalMs,\n\t\t\tsolver: options.solver,\n\t\t})) {\n\t\t\tyield status\n\t\t}\n\t}\n\n\t/**\n\t * Returns both the native token cost and the relayer fee for cancelling an\n\t * order. Use `relayerFee` to approve the ERC-20 spend before submitting.\n\t *\n\t * Delegates to {@link OrderCanceller.quoteCancelOrder}.\n\t *\n\t * @param order - The order to quote cancellation for.\n\t * @param options - Choose the initiation side. Defaults to source-side cancellation.\n\t * @returns `{ nativeValue }` — native token amount (wei) to send as `value`;\n\t * `{ relayerFee }` — relayer incentive denominated in the chain's fee token.\n\t */\n\tasync quoteCancelOrder(order: Order, options: CancelOrderOptions = {}): Promise<CancelQuote> {\n\t\treturn this.orderCanceller.quoteCancelOrder(order, options)\n\t}\n\n\tasync quoteCancelOrderFromSource(order: Order): Promise<CancelQuote> {\n\t\treturn this.orderCanceller.quoteCancelOrder(order, { from: \"source\" })\n\t}\n\n\tasync quoteCancelOrderFromDest(order: Order): Promise<CancelQuote> {\n\t\treturn this.orderCanceller.quoteCancelOrder(order, { from: \"destination\" })\n\t}\n\n\t/**\n\t * Async generator that cancels an order and streams status events until\n\t * cancellation is complete.\n\t *\n\t * Delegates to {@link OrderCanceller.cancelOrder}.\n\t *\n\t * @param order - The order to cancel.\n\t * @param indexerClient - Indexer client used for ISMP request status streaming.\n\t * @param options - Choose the initiation side. Defaults to source-side cancellation.\n\t * @yields {@link CancelEvent} objects describing each cancellation stage.\n\t */\n\tasync *cancelOrder(\n\t\torder: Order,\n\t\tindexerClient: IsmpClient,\n\t\toptions: CancelOrderOptions = {},\n\t): AsyncGenerator<CancelEvent> {\n\t\tyield* this.orderCanceller.cancelOrder(order, indexerClient, options)\n\t}\n\n\tasync *cancelOrderFromSource(order: Order, indexerClient: IsmpClient): AsyncGenerator<CancelEvent> {\n\t\tyield* this.orderCanceller.cancelOrder(order, indexerClient, { from: \"source\" })\n\t}\n\n\tasync *cancelOrderFromDest(order: Order, indexerClient: IsmpClient): AsyncGenerator<CancelEvent> {\n\t\tyield* this.orderCanceller.cancelOrder(order, indexerClient, { from: \"destination\" })\n\t}\n\n\t/**\n\t * Constructs a signed `PackedUserOperation` for a solver to submit as a bid.\n\t *\n\t * Delegates to {@link BidManager.prepareSubmitBid}.\n\t *\n\t * @param options - Bid parameters including order, solver account, gas limits,\n\t * fee market values, and pre-built fill calldata.\n\t * @returns A fully signed `PackedUserOperation` ready for submission.\n\t */\n\tasync prepareSubmitBid(options: SubmitBidOptions): Promise<PackedUserOperation> {\n\t\treturn this.bidManager.prepareSubmitBid(options)\n\t}\n\n\t/**\n\t * Selects the best available bid, simulates it, and submits the UserOperation\n\t * to the bundler.\n\t *\n\t * Delegates to {@link BidManager.selectBid}.\n\t *\n\t * @param order - The placed order to fill.\n\t * @param bids - Raw filler bids fetched from the coprocessor.\n\t * @param sessionPrivateKey - Optional session key override; looked up from\n\t * storage if omitted.\n\t * @returns A {@link SelectBidResult} with the submitted UserOperation, hashes,\n\t * and fill status.\n\t */\n\tasync selectBid(order: Order, bids: FillerBid[], sessionPrivateKey?: HexString): Promise<SelectBidResult> {\n\t\treturn this.bidManager.selectBid(order, bids, sessionPrivateKey)\n\t}\n\n\t/**\n\t * Estimates the gas cost for filling the given order, returning individual\n\t * gas components and fee-token-denominated totals.\n\t *\n\t * Delegates to {@link GasEstimator.estimateFillOrder}.\n\t *\n\t * @param params - Estimation parameters including the order and optional\n\t * gas-price bump percentages.\n\t * @returns A {@link FillOrderEstimate} with all gas components.\n\t */\n\tasync estimateFillOrder(params: EstimateFillOrderParams): Promise<FillOrderEstimate> {\n\t\treturn this.gasEstimator.estimateFillOrder(params)\n\t}\n\n\t/**\n\t * Encodes a list of calls into ERC-7821 `execute` calldata using\n\t * single-batch mode.\n\t *\n\t * Delegates to {@link CryptoUtils.encodeERC7821Execute}.\n\t *\n\t * @param calls - Ordered list of calls to batch.\n\t * @returns ABI-encoded calldata for the ERC-7821 `execute` function.\n\t */\n\tencodeERC7821Execute(calls: ERC7821Call[]): HexString {\n\t\treturn this._crypto.encodeERC7821Execute(calls)\n\t}\n\n\t/**\n\t * Decodes ERC-7821 `execute` calldata back into its constituent calls.\n\t *\n\t * Delegates to {@link CryptoUtils.decodeERC7821Execute}.\n\t *\n\t * @param callData - Hex-encoded calldata to decode.\n\t * @returns Array of decoded {@link ERC7821Call} objects, or `null` on failure.\n\t */\n\tdecodeERC7821Execute(callData: HexString): ERC7821Call[] | null {\n\t\treturn this._crypto.decodeERC7821Execute(callData)\n\t}\n\n\t/**\n\t * Checks whether an order has been filled on the destination chain.\n\t *\n\t * Delegates to {@link OrderStatusChecker.isOrderFilled}.\n\t *\n\t * @param order - The order to check.\n\t * @returns `true` if the order's commitment slot on the destination chain is\n\t * non-zero (i.e. `fillOrder` has been called successfully).\n\t */\n\tasync isOrderFilled(order: Order): Promise<boolean> {\n\t\treturn this.orderStatusChecker.isOrderFilled(order)\n\t}\n\n\t/**\n\t * Checks whether all escrowed inputs for an order have been refunded on the\n\t * source chain.\n\t *\n\t * Delegates to {@link OrderStatusChecker.isOrderRefunded}.\n\t *\n\t * @param order - The order to check.\n\t * @returns `true` if every input token's escrowed amount has been zeroed out\n\t * in the `_orders` mapping on the source chain.\n\t */\n\tasync isOrderRefunded(order: Order): Promise<boolean> {\n\t\treturn this.orderStatusChecker.isOrderRefunded(order)\n\t}\n\n\t// ── Indexer-backed order status tracking ────────────────────────────\n\n\t/**\n\t * Optional indexer context for {@link queryOrder} / {@link orderStatusStream}.\n\t * Configured via {@link withQueryClient}; unset by default since not every\n\t * IntentGateway caller needs indexer access.\n\t */\n\tprivate indexer?: {\n\t\tqueryClient: IndexerQueryClient\n\t\tpollInterval: number\n\t\tlogger: ConsolaInstance\n\t}\n\n\t/**\n\t * Attaches an indexer GraphQL client to this IntentGateway so that\n\t * {@link queryOrder} and {@link orderStatusStream} become available.\n\t * Returns `this` for chaining.\n\t *\n\t * @example\n\t * ```ts\n\t * const gateway = (await IntentGateway.create(source, dest)).withQueryClient(queryClient)\n\t * const order = await gateway.queryOrder(\"0x...\")\n\t * ```\n\t */\n\twithQueryClient(\n\t\tqueryClient: IndexerQueryClient,\n\t\toptions: { pollInterval?: number; tracing?: boolean } = {},\n\t): this {\n\t\tconst logger = createConsola({\n\t\t\tlevel: LogLevels[options.tracing ? \"trace\" : \"info\"],\n\t\t\tformatOptions: { columns: 80, colors: true, compact: true, date: false },\n\t\t})\n\t\tthis.indexer = {\n\t\t\tqueryClient,\n\t\t\tpollInterval: options.pollInterval ?? DEFAULT_POLL_INTERVAL,\n\t\t\tlogger,\n\t\t}\n\t\treturn this\n\t}\n\n\tprivate requireIndexer(): NonNullable<IntentGateway[\"indexer\"]> {\n\t\tif (!this.indexer) {\n\t\t\tthrow new Error(\"IntentGateway: call withQueryClient(queryClient) before using indexer-backed methods\")\n\t\t}\n\t\treturn this.indexer\n\t}\n\n\t/**\n\t * Queries an order by its commitment hash.\n\t *\n\t * Requires a prior call to {@link withQueryClient}.\n\t */\n\tasync queryOrder(commitment: HexString): Promise<OrderWithStatus | undefined> {\n\t\tconst { queryClient, logger } = this.requireIndexer()\n\t\treturn _queryOrderInternal({ commitmentHash: commitment, queryClient, logger })\n\t}\n\n\t/**\n\t * Streams status updates for an order until it reaches a terminal state\n\t * (FILLED, REDEEMED, or REFUNDED).\n\t *\n\t * Requires a prior call to {@link withQueryClient}.\n\t */\n\tasync *orderStatusStream(commitment: HexString): AsyncGenerator<\n\t\t{\n\t\t\tstatus: OrderStatus\n\t\t\tmetadata: {\n\t\t\t\tblockHash: string\n\t\t\t\tblockNumber: number\n\t\t\t\ttransactionHash: string\n\t\t\t\ttimestamp: bigint\n\t\t\t\tfiller?: string\n\t\t\t}\n\t\t},\n\t\tvoid\n\t> {\n\t\tconst { queryClient, pollInterval, logger } = this.requireIndexer()\n\t\tconst streamLogger = logger.withTag(\"[orderStatusStream]\")\n\t\tconst TERMINAL = [\"FILLED\", \"REDEEMED\", \"REFUNDED\"] as const\n\n\t\tlet order: OrderWithStatus | undefined\n\t\twhile (!order) {\n\t\t\tawait sleep(pollInterval)\n\t\t\torder = await _queryOrderInternal({ commitmentHash: commitment, queryClient, logger })\n\t\t}\n\n\t\tstreamLogger.trace(\"`Order` found\")\n\t\tconst latestStatus = order.statuses[order.statuses.length - 1]\n\t\tyield { status: latestStatus.status, metadata: latestStatus.metadata }\n\n\t\tif ((TERMINAL as readonly string[]).includes(latestStatus.status)) return\n\n\t\twhile (true) {\n\t\t\tawait sleep(pollInterval)\n\t\t\tconst updatedOrder = await _queryOrderInternal({ commitmentHash: commitment, queryClient, logger })\n\t\t\tif (!updatedOrder) continue\n\n\t\t\tconst newLatestStatus = updatedOrder.statuses[updatedOrder.statuses.length - 1]\n\t\t\tif (newLatestStatus.status !== latestStatus.status) {\n\t\t\t\tyield { status: newLatestStatus.status, metadata: newLatestStatus.metadata }\n\t\t\t\tif ((TERMINAL as readonly string[]).includes(newLatestStatus.status)) return\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { Address } from \"viem\"\nimport { toHex, encodeAbiParameters, parseAbiParameters } from \"viem\"\nimport { type ConsolaInstance, LogLevels, createConsola } from \"consola\"\nimport { EvmChain } from \"@/chains/evm\"\nimport { SubstrateChain } from \"@/chains/substrate\"\nimport UniswapRouterV2 from \"@/abis/uniswapRouterV2\"\nimport type {\n\tDispatchPost,\n\tHexString,\n\tIndexerQueryClient,\n\tIPostRequest,\n\tTeleportStatus,\n\tTokenGatewayAssetTeleportedWithStatus,\n} from \"@/types\"\nimport { _queryTokenGatewayAssetTeleportedInternal } from \"@/queryClient\"\nimport { DEFAULT_POLL_INTERVAL, normalizeAddressForStateMachine, normalizeStateMachineId, sleep } from \"@/utils\"\n\n/**\n * Result of the quoteNative fee estimation\n */\nexport interface QuoteNativeResult {\n\t/** Total native token cost including relayer fee and protocol fee with 1% buffer */\n\ttotalNativeCost: bigint\n\t/** Relayer fee converted to source chain fee token */\n\trelayerFeeInSourceFeeToken: bigint\n}\n\n/**\n * Parameters for token gateway teleport operations\n */\nexport interface TeleportParams {\n\t/** Amount to be sent */\n\tamount: bigint\n\t/** The token identifier to send */\n\tassetId: HexString\n\t/** Redeem ERC20 on the destination? */\n\tredeem: boolean\n\t/** Recipient address. For EVM destinations, plain 20-byte addresses are accepted and padded internally. */\n\tto: HexString\n\t/** Recipient state machine */\n\tdest: string | Uint8Array\n\t/** Request timeout in seconds */\n\ttimeout: bigint\n\t/** Destination contract call data */\n\tdata?: HexString | Uint8Array\n}\n\n/**\n * TokenGateway class for managing cross-chain token transfers via Hyperbridge\n *\n * This class provides methods to interact with the TokenGateway contract, including\n * estimating fees for cross-chain token teleports.\n *\n * Supports both EVM and Substrate chains as destination.\n *\n * @example\n * ```typescript\n * const tokenGateway = new TokenGateway({\n * source: sourceChain,\n * dest: destChain // Can be EvmChain or SubstrateChain\n * })\n *\n * const teleportParams: TeleportParams = {\n * amount: parseEther(\"1.0\"),\n * assetId: keccak256(toHex(\"USDC\")),\n * redeem: true,\n * to: pad(\"0xRecipientAddress\", { size: 32 }),\n * dest: \"EVM-1\",\n * timeout: 3600n,\n * }\n *\n * // Estimate native cost (relayer fee + protocol fee with 1% buffer)\n * const { totalNativeCost, relayerFeeInSourceFeeToken } = await tokenGateway.quoteNative(teleportParams)\n * console.log(`Total native cost: ${formatEther(totalNativeCost)} ETH`)\n * console.log(`Relayer fee in fee token: ${relayerFeeInSourceFeeToken}`)\n * ```\n */\nexport class TokenGateway {\n\tprivate readonly source: EvmChain\n\tprivate readonly dest: EvmChain | SubstrateChain\n\n\tconstructor(params: { source: EvmChain; dest: EvmChain | SubstrateChain }) {\n\t\tthis.source = params.source\n\t\tthis.dest = params.dest\n\t}\n\n\t/**\n\t * Get the TokenGateway contract address for a given chain\n\t *\n\t * @param chain - The chain identifier (e.g., \"EVM-1\", \"EVM-56\")\n\t * @returns The TokenGateway contract address\n\t */\n\tprivate getTokenGatewayAddress(chain: string | Uint8Array): Address {\n\t\tconst chainStr = normalizeStateMachineId(typeof chain === \"string\" ? chain : new TextDecoder().decode(chain))\n\t\treturn this.source.configService.getTokenGatewayAddress(chainStr)\n\t}\n\n\t/**\n\t * Estimate the native token cost for a token gateway teleport operation.\n\t * This includes both relayer fees and protocol fees for cross-chain delivery.\n\t *\n\t * The relayer fee is automatically estimated for EVM destination chains by:\n\t * 1. Creating a dummy post request with 191 bytes of random data in the body\n\t * 2. Estimating gas for delivery on the destination chain\n\t * 3. Converting the gas estimate to native tokens\n\t * 4. Adding a 1% buffer to the relayer fee for safety margin\n\t *\n\t * For non-EVM destination chains, the relayer fee is set to zero.\n\t *\n\t * The function then constructs a proper post request and calls quoteNative on the\n\t * source chain to get protocol fees (with 1% buffer), converts the relayer fee to\n\t * source chain fee token using Uniswap V2's getAmountsOut, and returns both values.\n\t *\n\t * @param params - The teleport parameters\n\t * @returns Object containing totalNativeCost (with 1% buffer) and relayerFeeInSourceFeeToken\n\t *\n\t * @throws Will throw an error if the contract call fails\n\t *\n\t * @example\n\t * ```typescript\n\t * const params: TeleportParams = {\n\t * amount: parseEther(\"1.0\"),\n\t * assetId: keccak256(toHex(\"USDC\")),\n\t * redeem: true,\n\t * to: pad(\"0xRecipientAddress\", { size: 32 }),\n\t * dest: \"EVM-1\",\n\t * timeout: 3600n,\n\t * data: \"0x\"\n\t * }\n\t *\n\t * const { totalNativeCost, relayerFeeInSourceFeeToken } = await tokenGateway.quoteNative(params)\n\t * console.log(`Total native cost: ${formatEther(totalNativeCost)} ETH`)\n\t * console.log(`Relayer fee in fee token: ${relayerFeeInSourceFeeToken}`)\n\t * ```\n\t */\n\tasync quoteNative(params: TeleportParams): Promise<QuoteNativeResult> {\n\t\t// Convert data to hex if it's Uint8Array, default to empty bytes\n\t\tconst dataHex = params.data ? (typeof params.data === \"string\" ? params.data : toHex(params.data)) : \"0x\"\n\t\tconst destChainId = normalizeStateMachineId(\n\t\t\ttypeof params.dest === \"string\" ? params.dest : new TextDecoder().decode(params.dest),\n\t\t)\n\t\tconst recipient = normalizeAddressForStateMachine(params.to, destChainId)\n\n\t\t// Get the TokenGateway addresses\n\t\tconst sourceTokenGatewayAddress = this.getTokenGatewayAddress(this.source.config.stateMachineId)\n\t\tconst destTokenGatewayAddress = this.getTokenGatewayAddress(params.dest)\n\n\t\tlet relayerFee = 0n\n\n\t\t// Only estimate relayer fee if destination is an EVM chain\n\t\tconst isEvmDest = destChainId.startsWith(\"EVM-\") && this.dest instanceof EvmChain\n\n\t\tif (isEvmDest) {\n\t\t\t// Create a dummy post request with 191 bytes of random data\n\t\t\t// Generate 191 random bytes as hex string (191 * 2 hex chars + 0x prefix)\n\t\t\tconst randomHex =\n\t\t\t\t\"0x\" + Array.from({ length: 191 * 2 }, () => Math.floor(Math.random() * 16).toString(16)).join(\"\")\n\t\t\tconst randomBody = randomHex as HexString\n\n\t\t\tconst dummyPostRequest: IPostRequest = {\n\t\t\t\tsource: this.source.config.stateMachineId,\n\t\t\t\tdest: destChainId,\n\t\t\t\tfrom: sourceTokenGatewayAddress,\n\t\t\t\tto: destTokenGatewayAddress,\n\t\t\t\tnonce: 0n,\n\t\t\t\tbody: randomBody,\n\t\t\t\ttimeoutTimestamp: params.timeout,\n\t\t\t}\n\n\t\t\t// Estimate gas on destination chain (only available for EvmChain)\n\t\t\tconst { gas } = await (this.dest as EvmChain).estimateGas(dummyPostRequest)\n\n\t\t\t// Get current gas price on destination chain\n\t\t\tconst gasPrice = await (this.dest as EvmChain).client.getGasPrice()\n\n\t\t\t// Calculate gas cost in native tokens (gas * gasPrice)\n\t\t\tconst gasCostInNative = gas * gasPrice\n\n\t\t\t// Add 1% buffer to relayer fee\n\t\t\trelayerFee = (gasCostInNative * 101n) / 100n\n\t\t}\n\n\t\t// Now encode the actual teleport body with the calculated relayer fee\n\t\tconst teleportBody = encodeAbiParameters(\n\t\t\tparseAbiParameters(\"uint256, uint256, bytes32, bool, bytes32, bytes\"),\n\t\t\t[\n\t\t\t\tparams.amount,\n\t\t\t\trelayerFee, // Use the calculated relayer fee (0 for non-EVM destinations)\n\t\t\t\tparams.assetId,\n\t\t\t\tparams.redeem,\n\t\t\t\trecipient,\n\t\t\t\tdataHex as `0x${string}`,\n\t\t\t],\n\t\t)\n\n\t\t// Create the actual post request for protocol fee estimation\n\t\tconst postRequest: IPostRequest = {\n\t\t\tsource: this.source.config.stateMachineId,\n\t\t\tdest: destChainId,\n\t\t\tfrom: sourceTokenGatewayAddress,\n\t\t\tto: destTokenGatewayAddress,\n\t\t\tnonce: 0n,\n\t\t\tbody: teleportBody,\n\t\t\ttimeoutTimestamp: params.timeout,\n\t\t}\n\n\t\t// Get protocol fee from source chain by calling quoteNative\n\t\t// This returns the cost in native tokens for dispatching the request\n\t\tconst protocolFeeInNative = await this.source.quoteNative(postRequest, relayerFee)\n\n\t\t// Add 1% buffer to the protocol fee\n\t\tconst protocolFeeWithBuffer = (protocolFeeInNative * 101n) / 100n\n\n\t\t// Convert relayer fee from native to source fee token\n\t\tlet relayerFeeInSourceFeeToken = 0n\n\t\tif (relayerFee > 0n) {\n\t\t\t// Get fee token details from source chain\n\t\t\tconst feeToken = await this.source.getFeeTokenWithDecimals()\n\n\t\t\t// Convert native relayer fee to fee token using Uniswap\n\t\t\trelayerFeeInSourceFeeToken = await this.convertNativeToFeeToken(\n\t\t\t\trelayerFee,\n\t\t\t\tfeeToken.address,\n\t\t\t\tthis.source.config.stateMachineId,\n\t\t\t)\n\t\t}\n\n\t\treturn {\n\t\t\ttotalNativeCost: protocolFeeWithBuffer,\n\t\t\trelayerFeeInSourceFeeToken,\n\t\t}\n\t}\n\n\t/**\n\t * Convert native token amount to fee token amount using Uniswap V2 router\n\t * @private\n\t */\n\tprivate async convertNativeToFeeToken(\n\t\tnativeAmount: bigint,\n\t\tfeeTokenAddress: HexString,\n\t\tchain: string,\n\t): Promise<bigint> {\n\t\tconst v2Router = this.source.configService.getUniswapRouterV2Address(chain)\n\t\tconst WETH = this.source.configService.getWrappedNativeAssetWithDecimals(chain).asset\n\n\t\tconst v2AmountOut = await this.source.client.simulateContract({\n\t\t\taddress: v2Router,\n\t\t\tabi: UniswapRouterV2.ABI,\n\t\t\t// @ts-ignore\n\t\t\tfunctionName: \"getAmountsOut\",\n\t\t\t// @ts-ignore\n\t\t\targs: [nativeAmount, [WETH, feeTokenAddress]],\n\t\t})\n\n\t\treturn v2AmountOut.result[1]\n\t}\n\n\t// ── Indexer-backed asset teleported status tracking ────────────────\n\n\t/**\n\t * Optional indexer context for {@link queryAssetTeleported} /\n\t * {@link assetTeleportedStatusStream}. Configured via {@link withQueryClient}.\n\t */\n\tprivate indexer?: {\n\t\tqueryClient: IndexerQueryClient\n\t\tpollInterval: number\n\t\tlogger: ConsolaInstance\n\t}\n\n\t/**\n\t * Attaches an indexer GraphQL client so {@link queryAssetTeleported} and\n\t * {@link assetTeleportedStatusStream} become available. Returns `this` for chaining.\n\t */\n\twithQueryClient(\n\t\tqueryClient: IndexerQueryClient,\n\t\toptions: { pollInterval?: number; tracing?: boolean } = {},\n\t): this {\n\t\tconst logger = createConsola({\n\t\t\tlevel: LogLevels[options.tracing ? \"trace\" : \"info\"],\n\t\t\tformatOptions: { columns: 80, colors: true, compact: true, date: false },\n\t\t})\n\t\tthis.indexer = {\n\t\t\tqueryClient,\n\t\t\tpollInterval: options.pollInterval ?? DEFAULT_POLL_INTERVAL,\n\t\t\tlogger,\n\t\t}\n\t\treturn this\n\t}\n\n\tprivate requireIndexer(): NonNullable<TokenGateway[\"indexer\"]> {\n\t\tif (!this.indexer) {\n\t\t\tthrow new Error(\n\t\t\t\t\"TokenGateway: call withQueryClient(queryClient) before using indexer-backed methods\",\n\t\t\t)\n\t\t}\n\t\treturn this.indexer\n\t}\n\n\t/**\n\t * Queries a token gateway asset-teleported event by commitment hash.\n\t *\n\t * Requires a prior call to {@link withQueryClient}.\n\t */\n\tasync queryAssetTeleported(\n\t\tcommitment: HexString,\n\t): Promise<TokenGatewayAssetTeleportedWithStatus | undefined> {\n\t\tconst { queryClient, logger } = this.requireIndexer()\n\t\treturn _queryTokenGatewayAssetTeleportedInternal({ commitmentHash: commitment, queryClient, logger })\n\t}\n\n\t/**\n\t * Streams status updates for an asset-teleported event until a terminal\n\t * state (`RECEIVED` or `REFUNDED`).\n\t *\n\t * Requires a prior call to {@link withQueryClient}.\n\t */\n\tasync *assetTeleportedStatusStream(commitment: HexString): AsyncGenerator<\n\t\t{\n\t\t\tstatus: TeleportStatus\n\t\t\tmetadata: { blockHash: string; blockNumber: number; transactionHash: string; timestamp: bigint }\n\t\t},\n\t\tvoid\n\t> {\n\t\tconst { queryClient, pollInterval, logger } = this.requireIndexer()\n\t\tconst streamLogger = logger.withTag(\"[assetTeleportedStatusStream]\")\n\t\tstreamLogger.trace(`Starting stream for commitment ${commitment}`)\n\n\t\tconst TERMINAL = [\"RECEIVED\", \"REFUNDED\"] as const\n\t\tlet lastStatus: TeleportStatus | undefined\n\t\tlet lastBlockNumber: number | undefined\n\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tconst teleport = await _queryTokenGatewayAssetTeleportedInternal({\n\t\t\t\t\tcommitmentHash: commitment,\n\t\t\t\t\tqueryClient,\n\t\t\t\t\tlogger,\n\t\t\t\t})\n\t\t\t\tif (!teleport) {\n\t\t\t\t\tawait sleep(pollInterval)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst statuses = teleport.statuses\n\t\t\t\tif (statuses.length === 0) {\n\t\t\t\t\tawait sleep(pollInterval)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst latestStatus = statuses[statuses.length - 1]\n\t\t\t\tif (lastStatus === latestStatus.status && lastBlockNumber === latestStatus.metadata.blockNumber) {\n\t\t\t\t\tawait sleep(pollInterval)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlastStatus = latestStatus.status\n\t\t\t\tlastBlockNumber = latestStatus.metadata.blockNumber\n\n\t\t\t\tyield latestStatus\n\n\t\t\t\tif ((TERMINAL as readonly string[]).includes(latestStatus.status)) break\n\n\t\t\t\tawait sleep(pollInterval)\n\t\t\t} catch (error) {\n\t\t\t\tstreamLogger.error(\"Error in asset teleported status stream:\", error)\n\t\t\t\tawait sleep(pollInterval)\n\t\t\t}\n\t\t}\n\t}\n}\n","import IntentGatewayABI from \"@/abis/IntentGateway\"\nimport EVM_HOST from \"@/abis/evmHost\"\nimport type { DecodedOrderPlacedLog, DecodedPostRequestEvent, DecodedPostResponseEvent, HexString } from \"@/types\"\nimport { parseEventLogs, type Hex } from \"viem\"\n\n/**\n * Extracts the IntentGateway OrderPlaced event from a transaction hash.\n * @param client - A viem PublicClient-compatible instance\n * @param txHash - Transaction hash\n * @returns Decoded OrderPlaced event or undefined if not found\n */\nexport async function getOrderPlacedFromTx(\n\tclient: { getTransactionReceipt: (args: { hash: Hex }) => Promise<{ logs: any[] }> },\n\ttxHash: HexString,\n): Promise<DecodedOrderPlacedLog | undefined> {\n\tconst receipt = await client.getTransactionReceipt({ hash: txHash as Hex })\n\tconst events = parseEventLogs({\n\t\tabi: IntentGatewayABI.ABI,\n\t\tlogs: receipt.logs,\n\t}) as unknown as DecodedOrderPlacedLog[]\n\treturn events.find((e) => e.eventName === \"OrderPlaced\")\n}\n\n/**\n * Extracts the EvmHost PostRequestEvent from a transaction hash.\n * @param client - A viem PublicClient-compatible instance\n * @param txHash - Transaction hash\n * @returns Decoded PostRequestEvent or undefined if not found\n */\nexport async function getPostRequestEventFromTx(\n\tclient: { getTransactionReceipt: (args: { hash: Hex }) => Promise<{ logs: any[] }> },\n\ttxHash: HexString,\n): Promise<DecodedPostRequestEvent | undefined> {\n\tconst receipt = await client.getTransactionReceipt({ hash: txHash as Hex })\n\tconst events = parseEventLogs({ abi: EVM_HOST.ABI, logs: receipt.logs }) as unknown as DecodedPostRequestEvent[]\n\treturn events.find((e) => e.eventName === \"PostRequestEvent\")\n}\n\n/**\n * Extracts the EvmHost PostResponseEvent from a transaction hash.\n * @param client - A viem PublicClient-compatible instance\n * @param txHash - Transaction hash\n * @returns Decoded PostResponseEvent or undefined if not found\n */\nexport async function getPostResponseEventFromTx(\n\tclient: { getTransactionReceipt: (args: { hash: Hex }) => Promise<{ logs: any[] }> },\n\ttxHash: HexString,\n): Promise<DecodedPostResponseEvent | undefined> {\n\tconst receipt = await client.getTransactionReceipt({ hash: txHash as Hex })\n\tconst events = parseEventLogs({ abi: EVM_HOST.ABI, logs: receipt.logs }) as unknown as DecodedPostResponseEvent[]\n\treturn events.find((e) => e.eventName === \"PostResponseEvent\")\n}\n","import { convertStateMachineIdToEnum } from \"@/chain\"\nimport type { HexString } from \"@/types\"\nimport { H256, StateMachine } from \"@/utils/substrate\"\nimport type { ApiPromise } from \"@polkadot/api\"\nimport type { SignerOptions, SubmittableExtrinsic } from \"@polkadot/api/types\"\nimport type { Option as PolakdotOption } from \"@polkadot/types\"\nimport type { EventRecord, StorageData } from \"@polkadot/types/interfaces\"\nimport type { ISubmittableResult } from \"@polkadot/types/types\"\nimport { keccakAsU8a, xxhashAsU8a } from \"@polkadot/util-crypto\"\nimport { Option, Struct, Vector, bool, u8, u64, u128 } from \"scale-ts\"\nimport { bytesToHex, hexToBytes } from \"viem\"\nimport type { HyperbridgeTxEvents } from \"./xcmGateway\"\nimport { normalizeAddressForStateMachine, normalizeStateMachineId } from \"@/utils\"\n\nexport type Params = {\n\t/** Asset symbol for the teleport operation */\n\tsymbol: string\n\t/**\n\t * Destination state machine identifier (e.g., \"EVM-1\", \"SUBSTRATE-cere\")\n\t * that specifies the target blockchain or network\n\t */\n\tdestination: string\n\t/**\n\t * Recipient address in hexadecimal format where the assets will be sent\n\t * on the destination chain\n\t */\n\trecipient: HexString\n\t/**\n\t * Amount of tokens to teleport, represented as a bigint to handle\n\t * large numeric values precisely\n\t */\n\tamount: bigint\n\t/**\n\t * Request timeout in block numbers or timestamp, after which the\n\t * teleport operation will be considered failed\n\t */\n\ttimeout: bigint\n\t/**\n\t * Address of the token gateway contract on the destination chain\n\t * that will process the teleported assets\n\t */\n\ttokenGatewayAddress: Uint8Array\n\t/**\n\t * Fee paid to relayers who process the cross-chain transaction,\n\t * represented as a bigint\n\t */\n\trelayerFee: bigint\n\t/**\n\t * Optional call data to be executed on the destination chain\n\t * as part of the teleport operation\n\t */\n\tcallData?: Uint8Array\n\t/**\n\t * Flag indicating whether to automatically redeem the tokens\n\t * for erc20\n\t */\n\tredeem: boolean\n}\n\nconst TeleportParams = Struct({\n\t/// StateMachine\n\tdestination: StateMachine,\n\t/// Recipient\n\trecepient: H256,\n\t/// Amount\n\tamount: u128,\n\t/// Request timeout\n\ttimeout: u64,\n\t/// Token gateway address\n\ttokenGatewayAddress: Vector(u8),\n\t/// Relayer fee\n\trelayerFee: u128,\n\t/// Call data\n\tcallData: Option(Vector(u8)),\n\t/// Redeem\n\tredeem: bool,\n})\n\nasync function fetchLocalAssetId(params: { api: ApiPromise; assetId: Uint8Array }) {\n\tconst { api, assetId } = params\n\n\t// twox_128\n\tconst palletPrefix = xxhashAsU8a(\"TokenGateway\", 128)\n\t// twox_128\n\tconst storagePrefix = xxhashAsU8a(\"LocalAssets\", 128)\n\n\tconst full_key = new Uint8Array([...palletPrefix, ...storagePrefix, ...assetId])\n\n\tconst hexKey = bytesToHex(full_key)\n\n\t// read account balance\n\n\tconst storage_value: PolakdotOption<StorageData> = (await api.rpc.state.getStorage(\n\t\thexKey,\n\t)) as PolakdotOption<StorageData>\n\n\tif (storage_value.isSome) {\n\t\tconst assetId = storage_value.value.toU8a()\n\n\t\treturn assetId\n\t}\n\n\treturn null\n}\n\n/**\n * Teleports assets from Substrate to other chains via the token gateway\n *\n * Note: There is no guarantee that both Dispatched and Finalized events will be yielded.\n * Consumers should listen for either one of these events instead of expecting both.\n *\n *\n * @param apiPromise - Polkadot API instance\n * @param who - SS58Address\n * @param params - Teleport parameters\n * @param params.symbol - Asset symbol\n * @param params.destination - Target state machine ID\n * @param params.recipient - Recipient address\n * @param params.amount - Amount to teleport\n * @param params.timeout - Operation timeout\n * @param params.extrinsics - An array of SubmittableExtrinsic to prepend to the teleport transaction\n * @param params.tokenGatewayAddress - Gateway contract address\n * @param options - Signer options\n * @param params.relayerFee - Fee for the relayer\n * @param params.redeem - Whether to redeem on arrival\n * @param params.callData - Optional additional call data\n * @yields {HyperbridgeTxEvents} Stream of events indicating transaction status\n * @throws Error when asset ID is unknown or transaction fails\n */\nexport async function teleport(teleport_param: {\n\twho: string\n\tparams: Params\n\tapiPromise: ApiPromise\n\toptions: Partial<SignerOptions>\n\textrinsics?: Array<SubmittableExtrinsic<\"promise\", ISubmittableResult>>\n}): Promise<ReadableStream<HyperbridgeTxEvents>> {\n\tconst { params, apiPromise, extrinsics = [] } = teleport_param\n\n\tconst assetId = keccakAsU8a(params.symbol)\n\n\t// Fetch scale encoded local asset id\n\tconst scaleEncodedAssetId = await fetchLocalAssetId({ api: apiPromise, assetId })\n\n\tif (scaleEncodedAssetId === null) {\n\t\tthrow new Error(\"Unknown asset id provided\")\n\t}\n\n\tconst destinationStateMachine = normalizeStateMachineId(params.destination)\n\tconst destination = convertStateMachineIdToEnum(destinationStateMachine)\n\n\tconst recipient = hexToBytes(normalizeAddressForStateMachine(params.recipient, destinationStateMachine))\n\n\tconst teleportParams = {\n\t\tdestination: destination,\n\t\trecepient: Array.from(recipient),\n\t\tamount: params.amount,\n\t\ttimeout: BigInt(params.timeout),\n\t\ttokenGatewayAddress: Array.from(params.tokenGatewayAddress),\n\t\trelayerFee: BigInt(params.relayerFee),\n\t\tredeem: params.redeem,\n\t\tcallData: params.callData ? Array.from(params.callData) : undefined,\n\t}\n\n\tconst encoded = TeleportParams.enc(teleportParams)\n\tconst fullCallData = new Uint8Array([...scaleEncodedAssetId, ...encoded])\n\n\tconst token_gateway_extrinsics = apiPromise.tx.tokenGateway.teleport(fullCallData)\n\n\tconst tx =\n\t\textrinsics.length === 0\n\t\t\t? token_gateway_extrinsics\n\t\t\t: apiPromise.tx.utility.batchAll([...extrinsics, token_gateway_extrinsics])\n\n\tlet unsub = () => {}\n\tlet closed = false\n\n\tconst stream = new ReadableStream<HyperbridgeTxEvents>(\n\t\t{\n\t\t\tasync start(controller) {\n\t\t\t\tunsub = await tx.signAndSend(teleport_param.who, teleport_param.options, async (result) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { isInBlock, isError, dispatchError, txHash, isFinalized, status } = result\n\t\t\t\t\t\tconst events = result.events as ISubmittableResult[\"events\"]\n\n\t\t\t\t\t\tif (isError) {\n\t\t\t\t\t\t\tconsole.error(\"Transaction failed: \", dispatchError)\n\t\t\t\t\t\t\tcontroller.enqueue({ kind: \"Error\", error: dispatchError })\n\t\t\t\t\t\t\tunsub?.()\n\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\tclosed = true\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (status.type === \"Ready\") {\n\t\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t\tkind: \"Ready\",\n\t\t\t\t\t\t\t\ttransaction_hash: txHash.toHex(),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isInBlock || isFinalized) {\n\t\t\t\t\t\t\tconst commitment_hash = readIsmpCommitmentHash(events)\n\t\t\t\t\t\t\tconst blockHash = isInBlock ? status.asInBlock.toHex() : status.asFinalized.toHex()\n\n\t\t\t\t\t\t\tif (!commitment_hash) {\n\t\t\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t\t\tkind: \"Error\",\n\t\t\t\t\t\t\t\t\terror: new Error(\"Commitment Hash missing\"),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\treturn controller.close()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst header = await apiPromise.rpc.chain.getHeader(blockHash)\n\n\t\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t\tkind: isInBlock ? \"Dispatched\" : \"Finalized\",\n\t\t\t\t\t\t\t\ttransaction_hash: txHash.toHex(),\n\t\t\t\t\t\t\t\tblock_number: header.number.toBigInt(),\n\t\t\t\t\t\t\t\tcommitment: commitment_hash,\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tif (isFinalized) {\n\t\t\t\t\t\t\t\tunsub?.()\n\t\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\t\tclosed = true\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\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t// For some unknown reason the call back is called again after unsubscribing, this check prevents it from trying to push an event to the closed stream\n\t\t\t\t\t\tif (closed) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\tkind: \"Error\",\n\t\t\t\t\t\t\terror: String(err),\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\tcancel: () => unsub?.(),\n\t\t},\n\t\t{\n\t\t\thighWaterMark: 3,\n\t\t\tsize: () => 1,\n\t\t},\n\t)\n\n\treturn stream\n}\n\nfunction readIsmpCommitmentHash(events: EventRecord[]): HexString | undefined {\n\tfor (const record of events) {\n\t\tconst { event } = record\n\n\t\tif (event.section === \"ismp\" && event.method === \"Request\") {\n\t\t\tconst commitment = event.data[3].toHex()\n\n\t\t\tif (!commitment) return\n\n\t\t\treturn commitment\n\t\t}\n\t}\n}\n","import type { HexString } from \"@/types\"\nimport { StateMachine } from \"@/utils\"\nimport type { ApiPromise } from \"@polkadot/api\"\nimport type { SignerOptions } from \"@polkadot/api/types\"\nimport { hexToU8a, u8aToHex } from \"@polkadot/util\"\nimport { decodeAddress, keccakAsHex } from \"@polkadot/util-crypto\"\nimport { Bytes, Struct, u64 } from \"scale-ts\"\nimport { parseUnits } from \"viem\"\n\nconst MultiAccount = Struct({\n\tsubstrate_account: Bytes(32),\n\tevm_account: Bytes(20),\n\tdest_state_machine: StateMachine,\n\ttimeout: u64,\n\taccount_nonce: u64,\n})\n\nexport type HyperbridgeTxEvents =\n\t| {\n\t\t\tkind: \"Ready\"\n\t\t\ttransaction_hash: HexString\n\t\t\tmessage_id?: HexString\n\t }\n\t| {\n\t\t\tkind: \"Dispatched\"\n\t\t\ttransaction_hash: HexString\n\t\t\tblock_number: bigint\n\t\t\tmessage_id?: HexString\n\t\t\tcommitment: HexString\n\t }\n\t| {\n\t\t\tkind: \"Finalized\"\n\t\t\ttransaction_hash: HexString\n\t\t\tmessage_id?: HexString\n\t\t\tblock_number?: bigint\n\t\t\tcommitment?: HexString\n\t }\n\t| {\n\t\t\tkind: \"Error\"\n\t\t\terror: unknown\n\t }\n\nconst DECIMALS = 10\n/**\n * Parameters for teleporting DOT from AssetHub to EVM-based destination\n */\nexport type XcmGatewayParams = {\n\t/**\n\t * Destination state machine ID (chain ID) where assets will be teleported to\n\t * This value identifies the specific EVM chain in the destination network\n\t */\n\tdestination: number\n\n\t/**\n\t * The recipient address on the destination chain (in hex format)\n\t * This is the EVM address that will receive the teleported assets\n\t */\n\trecipient: HexString\n\n\t/**\n\t * Amount of DOT to teleport\n\t * This will be converted to the appropriate format internally\n\t */\n\tamount: number\n\n\t/**\n\t * Request timeout value in blocks or timestamp\n\t * Specifies how long the teleport request remains valid before expiring\n\t */\n\ttimeout: bigint\n\n\t/**\n\t * The parachain ID of the Hyperbridge\n\t */\n\tparaId: number\n}\n\n/**\n * Teleports DOT tokens from AssetHub to Hyperbridge parachain\n * using XCM V3 with transferAssetsUsingTypeAndThen.\n *\n * This function uses transferAssetsUsingTypeAndThen to construct XCM V3 transfers with a custom\n * beneficiary structure that embeds Hyperbridge-specific parameters (sender account, recipient EVM address,\n * timeout, and nonce) within an X4 junction. The beneficiary is wrapped in a DepositAsset XCM V3 instruction\n * that deposits all transferred assets. The assets are transferred using LocalReserve transfer type.\n *\n * It handles the complete lifecycle of a teleport operation:\n * 1. Encoding Hyperbridge parameters into the beneficiary X4 junction\n * 2. Wrapping the beneficiary in a DepositAsset XCM V3 instruction using sourceApi.createType\n * 3. Constructing the XCM V3 transfer transaction using polkadotXcm.transferAssetsUsingTypeAndThen\n * 4. Transaction signing and broadcasting\n * 5. Yielding events about transaction status through a ReadableStream\n *\n * Note: There is no guarantee that both Dispatched and Finalized events will be yielded.\n * Consumers should listen for either one of these events instead of expecting both.\n *\n * @param sourceApi - Polkadot API instance connected to AssetHub\n * @param who - Sender's SS58Address address\n * @param options - Transaction signing options\n * @param params - Teleport parameters including destination, recipient, amount, timeout, and paraId\n * @yields {HyperbridgeTxEvents} Stream of events indicating transaction status\n */\nexport async function teleportDot(param_: {\n\tsourceApi: ApiPromise\n\twho: string\n\txcmGatewayParams: XcmGatewayParams\n\toptions: Partial<SignerOptions>\n}): Promise<ReadableStream<HyperbridgeTxEvents>> {\n\tconst { sourceApi, who, options, xcmGatewayParams: params } = param_\n\tconst { nonce: accountNonce } = (await sourceApi.query.system.account(who)) as any\n\n\tconst encoded_message = MultiAccount.enc({\n\t\tsubstrate_account: decodeAddress(who),\n\t\tevm_account: hexToU8a(params.recipient),\n\t\tdest_state_machine: { tag: \"Evm\", value: params.destination },\n\t\ttimeout: params.timeout,\n\t\taccount_nonce: accountNonce,\n\t})\n\n\tconst message_id = keccakAsHex(encoded_message)\n\n\t// Set up the custom beneficiary with embedded Hyperbridge parameters\n\tconst beneficiary = {\n\t\tV4: {\n\t\t\tparents: 0,\n\t\t\tinterior: {\n\t\t\t\tX4: [\n\t\t\t\t\t{\n\t\t\t\t\t\tAccountId32: {\n\t\t\t\t\t\t\tid: u8aToHex(decodeAddress(who)),\n\t\t\t\t\t\t\tnetwork: null,\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\tAccountKey20: {\n\t\t\t\t\t\t\tnetwork: {\n\t\t\t\t\t\t\t\tEthereum: {\n\t\t\t\t\t\t\t\t\tchainId: params.destination,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tkey: params.recipient,\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\tGeneralIndex: params.timeout,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tGeneralIndex: accountNonce,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t}\n\n\t// AssetHub -> Hyperbridge parachain destination and assets\n\tconst destination = {\n\t\tV4: {\n\t\t\tparents: 1,\n\t\t\tinterior: {\n\t\t\t\tX1: [{ Parachain: params.paraId }],\n\t\t\t},\n\t\t},\n\t}\n\n\tconst assets = {\n\t\tV4: [\n\t\t\t{\n\t\t\t\tid: {\n\t\t\t\t\tparents: 1,\n\t\t\t\t\tinterior: \"Here\",\n\t\t\t\t},\n\t\t\t\tfun: {\n\t\t\t\t\tFungible: parseUnits(params.amount.toString(), DECIMALS),\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t}\n\n\tconst weightLimit = \"Unlimited\"\n\n\t// Fee asset ID must be wrapped with V4 version header as VersionedAssetId\n\tconst feeAssetId = {\n\t\tV4: assets.V4[0].id,\n\t}\n\n\t// Wrap beneficiary in DepositAsset XCM instruction as required by transferAssetsUsingTypeAndThen\n\t// This instruction deposits all transferred assets to the custom beneficiary\n\tconst customXcmOnDest = {\n\t\tV4: [\n\t\t\t{\n\t\t\t\tDepositAsset: {\n\t\t\t\t\tassets: {\n\t\t\t\t\t\tWild: {\n\t\t\t\t\t\t\tAllCounted: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tbeneficiary: beneficiary.V4,\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t}\n\n\t// Use transferAssetsUsingTypeAndThen for AssetHub -> Hyperbridge transfer\n\t// This method allows us to specify custom beneficiary with embedded Hyperbridge parameters\n\t// TransferType: LocalReserve means assets are held in reserve on the source chain (AssetHub)\n\tconst tx = sourceApi.tx.polkadotXcm.transferAssetsUsingTypeAndThen(\n\t\tdestination,\n\t\tassets,\n\t\t{ LocalReserve: null }, // Assets transfer type\n\t\tfeeAssetId, // Fee asset ID wrapped as VersionedAssetId\n\t\t{ LocalReserve: null }, // Remote fee transfer type\n\t\tcustomXcmOnDest, // XCM instruction with DepositAsset containing custom beneficiary\n\t\tweightLimit,\n\t)\n\n\tlet closed = false\n\t// Create the stream to report events\n\tlet unsubscribe: () => void\n\tconst stream = new ReadableStream<HyperbridgeTxEvents>(\n\t\t{\n\t\t\tasync start(controller) {\n\t\t\t\tunsubscribe = await tx.signAndSend(who, options, async (result: any) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { status, dispatchError, txHash } = result\n\n\t\t\t\t\t\tif (dispatchError) {\n\t\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t\tkind: \"Error\",\n\t\t\t\t\t\t\t\terror: `Error watching extrinsic: ${dispatchError.toString()}`,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tunsubscribe?.()\n\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\tclosed = true\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (status.isReady) {\n\t\t\t\t\t\t\t// Send tx hash as soon as it is available\n\t\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t\tkind: \"Ready\",\n\t\t\t\t\t\t\t\ttransaction_hash: txHash.toHex(),\n\t\t\t\t\t\t\t\tmessage_id,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else if (status.isInBlock || status.isFinalized) {\n\t\t\t\t\t\t\t// Send event with the status kind (either Dispatched or Finalized)\n\t\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t\tkind: \"Finalized\",\n\t\t\t\t\t\t\t\ttransaction_hash: txHash.toHex(),\n\t\t\t\t\t\t\t\tmessage_id,\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t// We can end the stream because indexer only indexes finalized events from hyperbridge\n\t\t\t\t\t\t\tclosed = true\n\t\t\t\t\t\t\tunsubscribe?.()\n\t\t\t\t\t\t\tcontroller.close()\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t// For some unknown reason the call back is called again after unsubscribing, this check prevents it from trying to push an event to the closed stream\n\t\t\t\t\t\tif (closed) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\tkind: \"Error\",\n\t\t\t\t\t\t\terror: String(err),\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\tcancel() {\n\t\t\t\t// This is called if the reader cancels,\n\t\t\t\tunsubscribe?.()\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\thighWaterMark: 3,\n\t\t\tsize: () => 1,\n\t\t},\n\t)\n\n\treturn stream\n}\n"]}