@hyperbridge/sdk 1.4.9 → 1.4.10

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/ckb-mmr-wasm/dist/web/web.js","../../src/types/index.ts","../../src/abis/evmHost.ts","../../src/abis/handler.ts","../../src/configs/chain.ts","../../src/configs/ChainConfigService.ts","../../src/utils/mmr.ts","../../src/utils/substrate.ts","../../src/utils.ts","../../src/utils/exceptions.ts","../../src/abis/uniswapRouterV2.ts","../../src/chains/evm.ts","../../src/chains/substrate.ts","../../src/chain.ts","../../src/queries.ts","../../src/query-client.ts","../../src/client.ts","../../src/abis/IntentGateway.ts","../../src/storage/drivers/browser.ts","../../src/storage/index.ts","../../src/abis/uniswapV3Quoter.ts","../../src/abis/uniswapV4Quoter.ts","../../src/abis/universalRouter.ts","../../src/abis/permit2.ts","../../src/utils/swap.ts","../../src/protocols/intents.ts","../../src/utils/txEvents.ts","../../src/utils/tokenGateway.ts","../../src/utils/xcmGateway.ts"],"names":["ptr","HyperClientStatus","OrderStatus","TeleportStatus","RequestKind","ABI","Chains","env","generate_root_with_proof","encodePacked","wasm","Request","Response","toHex","hexToBytes","ERC20Method","client","mainnet","arbitrum","base","bsc","bscTestnet","gnosisChiado","polygon","unichain","bytesToHex","encoded","message","keccak256","Vector","u8","toBytes","match","createConsola","LogLevels","request","pad","timeout","teleport","key","maxUint256","encodeAbiParameters","encodeFunctionData","erc20Abi","amountInV2","transactions","amountInV3","bestV3Fee","amountInV4","bestV4Fee","amountOutV2","amountOutV3","amountOutV4","concatHex","hexToString","parseEventLogs","Struct","u64","Option","assetId","keccakAsU8a","assets","parseUnits"],"mappings":"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","file":"index.js","sourcesContent":["let wasm;\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_export_0.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\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 let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passArray8ToWasm0(calldata_bytes, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.generate_root_with_proof(ptr0, len0, tree_size);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_0.set(idx, obj);\n return idx;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n const ptr = malloc(array.length * 4, 4) >>> 0;\n for (let i = 0; i < array.length; i++) {\n const add = addToExternrefTable0(array[i]);\n getDataViewMemory0().setUint32(ptr + 4 * i, add, true);\n }\n WASM_VECTOR_LEN = array.length;\n return ptr;\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 const ptr0 = passStringToWasm0(root_hex, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayJsValueToWasm0(proof_hex, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passArray8ToWasm0(calldata_bytes, wasm.__wbindgen_malloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.verify_proof(ptr0, len0, ptr1, len1, mmr_size, leaf_position, ptr2, len2);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] !== 0;\n}\n\nconst KeccakMergeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_keccakmerge_free(ptr >>> 0, 1));\n\nexport class KeccakMerge {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n KeccakMergeFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_keccakmerge_free(ptr, 0);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_0;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('web_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import type { ConsolaInstance } from \"consola\"\nimport type { GraphQLClient } from \"graphql-request\"\nimport type { ContractFunctionArgs, Hex, Log } from \"viem\"\nimport type HandlerV1 from \"@/abis/handler\"\nimport type { IChain } from \"@/chain\"\n\nexport type EstimateGasCallData = ContractFunctionArgs<\n\ttypeof HandlerV1.ABI,\n\t\"nonpayable\" | \"payable\",\n\t\"handlePostRequests\"\n>\n\nexport type HexString = `0x${string}`\n\nexport interface IConfig {\n\t// confuration object for the source chain\n\tsource: IEvmConfig | ISubstrateConfig\n\t// confuration object for the destination chain\n\tdest: IEvmConfig | ISubstrateConfig\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\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 TokenGatewayAssetTeleportedResponse {\n\ttokenGatewayAssetTeleporteds: {\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\trequests: {\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\tgetRequests: {\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\trequests: {\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\tassetTeleported: AssetTeleported\n}\n\nexport interface StateMachineIdParams {\n\tstateId: { Evm?: number; Substrate?: HexString; Polkadot?: number; Kusama?: number }\n\tconsensusStateId: HexString\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 address of the ERC20 token\n\t * address(0) is used as a sentinel for the native token\n\t */\n\ttoken: HexString\n\n\t/**\n\t * The amount of the token\n\t */\n\tamount: bigint\n}\n\n/**\n * Represents payment information for an order\n */\nexport interface PaymentInfo extends TokenInfo {\n\t/**\n\t * The address to receive the output tokens\n\t */\n\tbeneficiary: HexString\n}\n\n/**\n * Represents an order in the IntentGateway\n */\nexport interface Order {\n\t/**\n\t * The unique identifier for the order\n\t */\n\tid?: string\n\n\t/**\n\t * The address of the user who is initiating the transfer\n\t */\n\tuser: HexString\n\n\t/**\n\t * The state machine identifier of the origin chain\n\t */\n\tsourceChain: string\n\n\t/**\n\t * The state machine identifier of the destination chain\n\t */\n\tdestChain: string\n\n\t/**\n\t * The block number by which the order must be filled on the destination chain\n\t */\n\tdeadline: bigint\n\n\t/**\n\t * The nonce of the order\n\t */\n\tnonce: bigint\n\n\t/**\n\t * Represents the dispatch fees associated with the IntentGateway\n\t */\n\tfees: bigint\n\n\t/**\n\t * The tokens that the filler will provide\n\t */\n\toutputs: PaymentInfo[]\n\n\t/**\n\t * The tokens that are escrowed for the filler\n\t */\n\tinputs: TokenInfo[]\n\n\t/**\n\t * A bytes array to store the calls if any\n\t */\n\tcallData: HexString\n\n\t// Additional Data\n\t/**\n\t * The transaction hash of the order\n\t */\n\ttransactionHash?: HexString\n}\n\nexport interface DecodedOrderPlacedLog extends Log {\n\teventName: string\n\targs: {\n\t\tuser: HexString\n\t\tsourceChain: Hex\n\t\tdestChain: Hex\n\t\tdeadline: bigint\n\t\tnonce: bigint\n\t\tfees: bigint\n\t\toutputs: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t\tbeneficiary: HexString\n\t\t}>\n\t\tinputs: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t}>\n\t\tcallData: HexString\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 filling an order\n */\nexport interface FillOptions {\n\t/**\n\t * The fee paid to the relayer for processing transactions\n\t */\n\trelayerFee: bigint\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\n/**\n * Configuration for the IntentFiller\n */\nexport interface FillerConfig {\n\t/**\n\t * Policy for determining confirmation requirements\n\t */\n\tconfirmationPolicy: {\n\t\tgetConfirmationBlocks: (chainId: number, amountUsd: number) => number\n\t}\n\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\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\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: HexString\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\nexport interface TokenRegistry {\n\tid: string\n\tname: string\n\tsymbol: string\n\taddress?: string\n\tupdateFrequencySeconds: number\n\tlastUpdatedAt: bigint\n\tcreatedAt: Date\n}\n\nexport interface TokenRegistryResponse {\n\ttokenRegistries: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tname: string\n\t\t\tsymbol: string\n\t\t\taddress: string\n\t\t\tupdateFrequencySeconds: number\n\t\t\tlastUpdatedAt: bigint\n\t\t\tcreatedAt: string\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","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\tname: \"ChallengePeriodNotElapsed\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"ConsensusClientExpired\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"DuplicateMessage\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"HostFrozen\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidMessageDestination\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidProof\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"MessageNotTimedOut\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"MessageTimedOut\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"StateCommitmentNotFound\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnknownMessage\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IIsmpHost\",\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 IIsmpHost\",\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\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: \"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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"stateMachineId\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"height\",\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 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{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"proof\",\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 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 IIsmpHost\",\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\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: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\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{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"multiproof\",\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: \"leafCount\",\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 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{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\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{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"key\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tinternalType: \"struct 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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"index\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"kIndex\",\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 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 IIsmpHost\",\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\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: \"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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"stateMachineId\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"height\",\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 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{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"proof\",\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 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 IIsmpHost\",\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\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: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\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{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"multiproof\",\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: \"leafCount\",\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 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\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"index\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"kIndex\",\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 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 IIsmpHost\",\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{\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: \"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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"stateMachineId\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"height\",\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 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{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"proof\",\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 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 IIsmpHost\",\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\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: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\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{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"multiproof\",\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: \"leafCount\",\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 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{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tname: \"response\",\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],\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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"index\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"kIndex\",\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 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: \"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] as const\n\nexport default { ABI }\n","import { Chain, bscTestnet, gnosisChiado, sepolia, mainnet, bsc, base, arbitrum, polygon, unichain } from \"viem/chains\"\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\tBASE_MAINNET = \"EVM-8453\",\n\tPOLYGON_MAINNET = \"EVM-137\",\n\tUNICHAIN_MAINNET = \"EVM-130\",\n}\n\ntype AddressMap = {\n\t[key: string]: {\n\t\t[K in Chains]?: `0x${string}`\n\t}\n}\n\ntype RpcMap = Record<Chains, string>\n\nexport const chainIds = {\n\t[Chains.BSC_CHAPEL]: 97,\n\t[Chains.GNOSIS_CHIADO]: 10200,\n\t[Chains.HYPERBRIDGE_GARGANTUA]: 4009,\n\t[Chains.SEPOLIA]: 11155111,\n\t[Chains.MAINNET]: 1,\n\t[Chains.BSC_MAINNET]: 56,\n\t[Chains.ARBITRUM_MAINNET]: 42161,\n\t[Chains.BASE_MAINNET]: 8453,\n\t[Chains.POLYGON_MAINNET]: 137,\n\t[Chains.UNICHAIN_MAINNET]: 130,\n} as const\n\nexport type ChainId = typeof chainIds\n\nexport const viemChains: Record<string, Chain> = {\n\t\"97\": bscTestnet,\n\t\"10200\": gnosisChiado,\n\t\"11155111\": sepolia,\n\t\"1\": mainnet,\n\t\"56\": bsc,\n\t\"42161\": arbitrum,\n\t\"8453\": base,\n\t\"137\": polygon,\n\t\"130\": unichain,\n}\n\nexport const WrappedNativeDecimals = {\n\t[Chains.BSC_CHAPEL]: 18,\n\t[Chains.GNOSIS_CHIADO]: 18,\n\t[Chains.SEPOLIA]: 18,\n\t[Chains.MAINNET]: 18,\n\t[Chains.BSC_MAINNET]: 18,\n\t[Chains.ARBITRUM_MAINNET]: 18,\n\t[Chains.BASE_MAINNET]: 18,\n\t[Chains.POLYGON_MAINNET]: 18,\n\t[Chains.UNICHAIN_MAINNET]: 18,\n}\n\nexport const assets = {\n\t[Chains.BSC_CHAPEL]: {\n\t\tWETH: \"0xae13d989dac2f0debff460ac112a837c89baa7cd\".toLowerCase(),\n\t\tDAI: \"0x1938165569A5463327fb206bE06d8D9253aa06b7\".toLowerCase(),\n\t\tUSDC: \"0xC625ec7D30A4b1AAEfb1304610CdAcD0d606aC92\".toLowerCase(),\n\t\tUSDT: \"0xc043f483373072f7f27420d6e7d7ad269c018e18\".toLowerCase(),\n\t},\n\t[Chains.GNOSIS_CHIADO]: {\n\t\tWETH: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDC: \"0x50B1d3c7c073c9caa1Ef207365A2c9C976bD70b9\".toLowerCase(),\n\t\tDAI: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDT: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t},\n\t[Chains.SEPOLIA]: {\n\t\tWETH: \"0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9\".toLowerCase(),\n\t\tUSDC: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDT: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tDAI: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t},\n\t[Chains.MAINNET]: {\n\t\tWETH: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\".toLowerCase(),\n\t\tDAI: \"0x6B175474E89094C44Da98b954EedeAC495271d0F\".toLowerCase(),\n\t\tUSDC: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\".toLowerCase(),\n\t\tUSDT: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\".toLowerCase(),\n\t},\n\t[Chains.BSC_MAINNET]: {\n\t\tWETH: \"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\".toLowerCase(),\n\t\tDAI: \"0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3\".toLowerCase(),\n\t\tUSDC: \"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d\".toLowerCase(),\n\t\tUSDT: \"0x55d398326f99059fF775485246999027B3197955\".toLowerCase(),\n\t},\n\t[Chains.ARBITRUM_MAINNET]: {\n\t\tWETH: \"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\".toLowerCase(),\n\t\tDAI: \"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\".toLowerCase(),\n\t\tUSDC: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\".toLowerCase(),\n\t\tUSDT: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\".toLowerCase(),\n\t},\n\t[Chains.BASE_MAINNET]: {\n\t\tWETH: \"0x4200000000000000000000000000000000000006\".toLowerCase(),\n\t\tDAI: \"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\".toLowerCase(),\n\t\tUSDC: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\".toLowerCase(),\n\t\tUSDT: \"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2\".toLowerCase(),\n\t},\n\t[Chains.POLYGON_MAINNET]: {\n\t\tWETH: \"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\".toLowerCase(),\n\t\tDAI: \"0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063\".toLowerCase(),\n\t\tUSDC: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\".toLowerCase(),\n\t\tUSDT: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\".toLowerCase(),\n\t},\n\t[Chains.UNICHAIN_MAINNET]: {\n\t\tWETH: \"0x4200000000000000000000000000000000000006\".toLowerCase(),\n\t\tDAI: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDC: \"0x078d782b760474a361dda0af3839290b0ef57ad6\".toLowerCase(),\n\t\tUSDT: \"0x9151434b16b9763660705744891fa906f660ecc5\".toLowerCase(),\n\t},\n}\n\nexport const addresses: AddressMap = {\n\tIntentGateway: {\n\t\t[Chains.BSC_CHAPEL]: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t[Chains.SEPOLIA]: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t[Chains.MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.BSC_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.BASE_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t},\n\tHost: {\n\t\t[Chains.BSC_CHAPEL]: \"0x8Aa0Dea6D675d785A882967Bf38183f6117C09b7\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x58a41b89f4871725e5d898d98ef4bf917601c5eb\",\n\t\t[Chains.SEPOLIA]: \"0x2EdB74C269948b60ec1000040E104cef0eABaae8\",\n\t\t[Chains.MAINNET]: \"0x792A6236AF69787C40cF76b69B4c8c7B28c4cA20\",\n\t\t[Chains.BSC_MAINNET]: \"0x24B5d421Ec373FcA57325dd2F0C074009Af021F7\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xE05AFD4Eb2ce6d65c40e1048381BD0Ef8b4B299e\",\n\t\t[Chains.BASE_MAINNET]: \"0x6FFe92e4d7a9D589549644544780e6725E84b248\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xD8d3db17C1dF65b301D45C84405CcAC1395C559a\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x2A17C1c3616Bbc33FCe5aF5B965F166ba76cEDAf\",\n\t},\n\tUniswapRouter02: {\n\t\t[Chains.BSC_CHAPEL]: \"0x9639379819420704457B07A0C33B678D9E0F8Df0\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.SEPOLIA]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n\t\t[Chains.BSC_MAINNET]: \"0x10ED43C718714eb63d5aA57B78B54704E256024E\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24\",\n\t\t[Chains.BASE_MAINNET]: \"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xd2f9496824951D5237cC71245D659E48d0d5f9E8\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x284f11109359a7e1306c3e447ef14d38400063ff\",\n\t},\n\tUniswapV2Factory: {\n\t\t[Chains.BSC_CHAPEL]: \"0x12e036669DA18F4A2777853d6e2136b32AceEC86\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.SEPOLIA]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f\",\n\t\t[Chains.BSC_MAINNET]: \"0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9\",\n\t\t[Chains.BASE_MAINNET]: \"0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x1F98400000000000000000000000000000000002\",\n\t},\n\tUniswapV3Factory: {\n\t\t[Chains.BSC_CHAPEL]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.SEPOLIA]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t[Chains.BSC_MAINNET]: \"0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t[Chains.BASE_MAINNET]: \"0x33128a8fC17869897dcE68Ed026d694621f6FDfD\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t},\n\tUniversalRouter: {\n\t\t[Chains.BSC_CHAPEL]: \"0xcc6d5ece3d4a57245bf5a2f64f3ed9179b81f714\",\n\t\t[Chains.MAINNET]: \"0x66a9893cc07d91d95644aedd05d03f95e1dba8af\",\n\t\t[Chains.BSC_MAINNET]: \"0xd9C500DfF816a1Da21A48A732d3498Bf09dc9AEB\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xa51afafe0263b40edaef0df8781ea9aa03e381a3\",\n\t\t[Chains.BASE_MAINNET]: \"0x6ff5693b99212da76ad316178a184ab56d299b43\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x1095692a6237d83c6a72f3f5efedb9a670c49223\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0xef740bf23acae26f6492b10de645d6b98dc8eaf3\",\n\t},\n\tUniswapV3Quoter: {\n\t\t[Chains.BSC_CHAPEL]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t[Chains.BSC_MAINNET]: \"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t[Chains.BASE_MAINNET]: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x385a5cf5f83e99f7bb2852b6a19c3538b9fa7658\",\n\t},\n\tUniswapV4Quoter: {\n\t\t[Chains.BSC_CHAPEL]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203\",\n\t\t[Chains.BSC_MAINNET]: \"0xd0737C9762912dD34c3271197E362Aa736Df0926\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x3972c00f7ed4885e145823eb7c655375d275a1c5\",\n\t\t[Chains.BASE_MAINNET]: \"0x0d5e0f971ed27fbff6c2837bf31316121532048d\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203\",\n\t},\n\tCalldispatcher: {\n\t\t[Chains.SEPOLIA]: \"0xC7f13b6D03A0A7F3239d38897503E90553ABe155\",\n\t\t[Chains.MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.BSC_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.BASE_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t},\n\tPermit2: {\n\t\t[Chains.MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.BSC_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.BASE_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t},\n}\n\nexport const createRpcUrls = (env: NodeJS.ProcessEnv): RpcMap => ({\n\t[Chains.BSC_CHAPEL]: env.BSC_CHAPEL || \"https://bnb-testnet.api.onfinality.io/public\",\n\t[Chains.GNOSIS_CHIADO]: env.GNOSIS_CHIADO || \"https://gnosis-chiado-rpc.publicnode.com\",\n\t[Chains.HYPERBRIDGE_GARGANTUA]: env.HYPERBRIDGE_GARGANTUA || \"\",\n\t[Chains.SEPOLIA]: env.SEPOLIA || \"https://1rpc.io/sepolia\",\n\t[Chains.MAINNET]: env.ETH_MAINNET || \"https://eth-mainnet.g.alchemy.com/v2/demo\",\n\t[Chains.BSC_MAINNET]: env.BSC_MAINNET || \"https://binance.llamarpc.com\",\n\t[Chains.ARBITRUM_MAINNET]: env.ARBITRUM_MAINNET || \"https://arbitrum-one.public.blastapi.io\",\n\t[Chains.BASE_MAINNET]: env.BASE_MAINNET || \"https://base-mainnet.public.blastapi.io\",\n\t[Chains.POLYGON_MAINNET]: env.POLYGON_MAINNET || \"https://polygon-bor-rpc.publicnode.com\",\n\t[Chains.UNICHAIN_MAINNET]: env.UNICHAIN_MAINNET || \"https://unichain.api.onfinality.io/public\",\n})\n\nexport const consensusStateIds = {\n\t[Chains.BSC_CHAPEL]: \"BSC0\",\n\t[Chains.GNOSIS_CHIADO]: \"GNO0\",\n\t[Chains.HYPERBRIDGE_GARGANTUA]: \"PAS0\",\n\t[Chains.SEPOLIA]: \"ETH0\",\n\t[Chains.MAINNET]: \"ETH0\",\n\t[Chains.BSC_MAINNET]: \"BSC0\",\n\t[Chains.ARBITRUM_MAINNET]: \"ETH0\",\n\t[Chains.BASE_MAINNET]: \"ETH0\",\n\t[Chains.POLYGON_MAINNET]: \"POLY\",\n\t[Chains.UNICHAIN_MAINNET]: \"ETH0\",\n}\n\nexport const coingeckoIds = {\n\t[Chains.BSC_CHAPEL]: \"binance-smart-chain\",\n\t[Chains.GNOSIS_CHIADO]: \"gnosis\",\n\t[Chains.HYPERBRIDGE_GARGANTUA]: \"hyperbridge\",\n\t[Chains.SEPOLIA]: \"ethereum\",\n\t[Chains.MAINNET]: \"ethereum\",\n\t[Chains.BSC_MAINNET]: \"binance-smart-chain\",\n\t[Chains.ARBITRUM_MAINNET]: \"arbitrum-one\",\n\t[Chains.BASE_MAINNET]: \"base\",\n\t[Chains.POLYGON_MAINNET]: \"polygon-pos\",\n\t[Chains.UNICHAIN_MAINNET]: \"ethereum\",\n}\n\nexport const popularTokens = {\n\t[Chains.BSC_CHAPEL]: [\n\t\t\"0xae13d989dac2f0debff460ac112a837c89baa7cd\",\n\t\t\"0xC625ec7D30A4b1AAEfb1304610CdAcD0d606aC92\",\n\t\t\"0xc043f483373072f7f27420d6e7d7ad269c018e18\",\n\t\t\"0x1938165569A5463327fb206bE06d8D9253aa06b7\",\n\t],\n\t[Chains.GNOSIS_CHIADO]: [\"0x50B1d3c7c073c9caa1Ef207365A2c9C976bD70b9\"],\n\t[Chains.SEPOLIA]: [\"0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9\"],\n\t[Chains.MAINNET]: [\n\t\t\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n\t\t\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n\t\t\"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n\t\t\"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n\t],\n\t[Chains.BSC_MAINNET]: [\n\t\t\"0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82\",\n\t\t\"0x000Ae314E2A2172a039B26378814C252734f556A\",\n\t\t\"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d\",\n\t\t\"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\",\n\t\t\"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d\",\n\t\t\"0x55d398326f99059fF775485246999027B3197955\",\n\t\t\"0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3\",\n\t],\n\t[Chains.ARBITRUM_MAINNET]: [\n\t\t\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\n\t\t\"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n\t\t\"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n\t\t\"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\",\n\t],\n\t[Chains.BASE_MAINNET]: [\n\t\t\"0x4200000000000000000000000000000000000006\",\n\t\t\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n\t\t\"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2\",\n\t\t\"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\",\n\t],\n\t[Chains.POLYGON_MAINNET]: [\n\t\t\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\n\t\t\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n\t\t\"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n\t\t\"0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063\",\n\t],\n\t[Chains.UNICHAIN_MAINNET]: [\n\t\t\"0x4200000000000000000000000000000000000006\",\n\t\t\"0x078d782b760474a361dda0af3839290b0ef57ad6\",\n\t\t\"0x9151434b16b9763660705744891fa906f660ecc5\",\n\t\t\"0x0000000000000000000000000000000000000000\",\n\t],\n}\n","import { toHex } from \"viem\"\nimport type { ChainConfig, HexString } from \"@/types\"\nimport {\n\taddresses,\n\tassets,\n\tchainIds,\n\tconsensusStateIds,\n\tcoingeckoIds,\n\tChains,\n\tWrappedNativeDecimals,\n\tcreateRpcUrls,\n} from \"@/configs/chain\"\n\nexport class ChainConfigService {\n\tprivate rpcUrls: Record<Chains, string>\n\n\tconstructor(env: NodeJS.ProcessEnv = process.env) {\n\t\tthis.rpcUrls = createRpcUrls(env)\n\t}\n\n\tgetChainConfig(chain: string): ChainConfig {\n\t\treturn {\n\t\t\tchainId: chainIds[chain as keyof typeof chainIds],\n\t\t\trpcUrl: this.rpcUrls[chain as Chains],\n\t\t\tintentGatewayAddress: this.getIntentGatewayAddress(chain),\n\t\t}\n\t}\n\n\tgetIntentGatewayAddress(chain: string): `0x${string}` {\n\t\treturn addresses.IntentGateway[chain as keyof typeof addresses.IntentGateway]! as `0x${string}`\n\t}\n\n\tgetHostAddress(chain: string): `0x${string}` {\n\t\treturn addresses.Host[chain as keyof typeof addresses.Host]! as `0x${string}`\n\t}\n\n\tgetWrappedNativeAssetWithDecimals(chain: string): { asset: HexString; decimals: number } {\n\t\treturn {\n\t\t\tasset: assets[chain as keyof typeof assets].WETH as HexString,\n\t\t\tdecimals: WrappedNativeDecimals[chain as keyof typeof WrappedNativeDecimals],\n\t\t}\n\t}\n\n\tgetDaiAsset(chain: string): HexString {\n\t\treturn assets[chain as keyof typeof assets].DAI as HexString\n\t}\n\n\tgetUsdtAsset(chain: string): HexString {\n\t\treturn assets[chain as keyof typeof assets].USDT as HexString\n\t}\n\n\tgetUsdcAsset(chain: string): HexString {\n\t\treturn assets[chain as keyof typeof assets].USDC as HexString\n\t}\n\n\tgetChainId(chain: string): number {\n\t\treturn chainIds[chain as keyof typeof chainIds]\n\t}\n\n\tgetConsensusStateId(chain: string): HexString {\n\t\treturn toHex(consensusStateIds[chain as keyof typeof consensusStateIds])\n\t}\n\n\tgetHyperbridgeChainId(): number {\n\t\treturn chainIds[Chains.HYPERBRIDGE_GARGANTUA]\n\t}\n\n\tgetRpcUrl(chain: string): string {\n\t\treturn this.rpcUrls[chain as Chains]\n\t}\n\n\tgetUniswapRouterV2Address(chain: string): HexString {\n\t\treturn addresses.UniswapRouter02[chain as keyof typeof addresses.UniswapRouter02]! as HexString\n\t}\n\n\tgetUniswapV2FactoryAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV2Factory[chain as keyof typeof addresses.UniswapV2Factory]! as HexString\n\t}\n\n\tgetUniswapV3FactoryAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV3Factory[chain as keyof typeof addresses.UniswapV3Factory]! as HexString\n\t}\n\n\tgetUniversalRouterAddress(chain: string): HexString {\n\t\treturn addresses.UniversalRouter[chain as keyof typeof addresses.UniversalRouter]! as HexString\n\t}\n\n\tgetUniswapV3QuoterAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV3Quoter[chain as keyof typeof addresses.UniswapV3Quoter]! as HexString\n\t}\n\n\tgetUniswapV4QuoterAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV4Quoter[chain as keyof typeof addresses.UniswapV4Quoter]! as HexString\n\t}\n\n\tgetPermit2Address(chain: string): HexString {\n\t\treturn addresses.Permit2[chain as keyof typeof addresses.Permit2]! as HexString\n\t}\n\n\tgetCoingeckoId(chain: string): string | undefined {\n\t\treturn coingeckoIds[chain as keyof typeof coingeckoIds]\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 addresses.Calldispatcher[chain as keyof typeof addresses.Calldispatcher]! as HexString\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 * Gets peak position for a given height\n */\nfunction getPeakPosByHeight(height: number): bigint {\n\treturn (1n << BigInt(height + 1)) - 2n\n}\n\n/**\n * Gets the height and position of the leftmost peak\n */\nfunction leftPeakHeightPos(mmrSize: bigint): [number, bigint] {\n\tlet height = 1\n\tlet prevPos = 0n\n\tlet pos = getPeakPosByHeight(height)\n\n\twhile (pos < mmrSize) {\n\t\theight += 1\n\t\tprevPos = pos\n\t\tpos = getPeakPosByHeight(height)\n\t}\n\n\treturn [height - 1, prevPos]\n}\n\n/**\n * Gets the right peak at a given height and position\n */\nfunction getRightPeak(initialHeight: number, initialPos: bigint, mmrSize: bigint): [number, bigint] | null {\n\tlet height = initialHeight\n\tlet pos = initialPos\n\n\t// move to right sibling pos\n\tpos += siblingOffset(height)\n\n\t// loop until we find a pos in mmr\n\twhile (pos > mmrSize - 1n) {\n\t\tif (height === 0) {\n\t\t\treturn null\n\t\t}\n\t\t// move to left child\n\t\tpos -= parentOffset(height - 1)\n\t\theight -= 1\n\t}\n\n\treturn [height, pos]\n}\n\n/**\n * Gets all peaks in the MMR\n */\nfunction getPeaks(mmrSize: bigint): bigint[] {\n\tconst positions: bigint[] = []\n\tlet [height, pos] = leftPeakHeightPos(mmrSize)\n\n\tpositions.push(pos)\n\n\twhile (height > 0) {\n\t\tconst peak = getRightPeak(height, pos, mmrSize)\n\t\tif (!peak) break\n\t\t;[height, pos] = peak\n\t\tpositions.push(pos)\n\t}\n\n\treturn positions\n}\n\n/**\n * Checks if a number consists of all ones in its binary representation\n */\nfunction allOnes(num: bigint): boolean {\n\tif (num === 0n) return false\n\treturn num\n\t\t.toString(2)\n\t\t.split(\"\")\n\t\t.every((bit) => bit === \"1\")\n}\n\n/**\n * Calculates the position after jumping left in the tree\n */\nfunction jumpLeft(pos: bigint): bigint {\n\tconst bitLength = pos.toString(2).length\n\tconst mostSignificantBits = 1n << BigInt(bitLength - 1)\n\treturn pos - (mostSignificantBits - 1n)\n}\n\n/**\n * Calculates the height of a position in the tree\n */\nfunction posHeightInTree(initialPos: bigint): number {\n\tlet pos = initialPos + 1n\n\n\twhile (!allOnes(pos)) {\n\t\tpos = jumpLeft(pos)\n\t}\n\n\treturn pos.toString(2).length - 1\n}\n\n/**\n * Calculates the parent offset for a given height\n */\nfunction parentOffset(height: number): bigint {\n\treturn 2n << BigInt(height)\n}\n\n/**\n * Calculates the sibling offset for a given height\n */\nfunction siblingOffset(height: number): bigint {\n\treturn (2n << BigInt(height)) - 1n\n}\n\n/**\n * Takes elements from a vector while they satisfy a predicate\n */\nfunction takeWhileVec<T>(v: T[], p: (item: T) => boolean): T[] {\n\tconst index = v.findIndex((item) => !p(item))\n\tif (index === -1) {\n\t\tconst result = [...v]\n\t\tv.length = 0\n\t\treturn result\n\t}\n\treturn v.splice(0, index)\n}\n\n/**\n * Converts a node's MMR position to its k-index\n * @param leaves - Array of leaf positions\n * @param mmrSize - Size of the MMR\n * @returns Array of tuples containing position and k-index\n */\nexport function mmrPositionToKIndex(initialLeaves: bigint[], mmrSize: bigint): Array<[bigint, bigint]> {\n\tconst leaves = [...initialLeaves]\n\tconst peaks = getPeaks(mmrSize)\n\tconst leavesWithKIndices: Array<[bigint, bigint]> = []\n\n\tfor (const peak of peaks) {\n\t\tconst peakLeaves = takeWhileVec(leaves, (pos) => pos <= peak)\n\n\t\tif (peakLeaves.length > 0) {\n\t\t\tfor (const pos of peakLeaves) {\n\t\t\t\tconst height = posHeightInTree(peak)\n\t\t\t\tlet index = 0n\n\t\t\t\tlet parentPos = peak\n\n\t\t\t\tfor (let h = height; h >= 1; h--) {\n\t\t\t\t\tconst leftChild = parentPos - parentOffset(h - 1)\n\t\t\t\t\tconst rightChild = leftChild + siblingOffset(h - 1)\n\t\t\t\t\tindex *= 2n\n\n\t\t\t\t\tif (leftChild >= pos) {\n\t\t\t\t\t\tparentPos = leftChild\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentPos = rightChild\n\t\t\t\t\t\tindex += 1n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tleavesWithKIndices.push([pos, index])\n\t\t\t}\n\t\t}\n\t}\n\n\treturn leavesWithKIndices\n}\n\n/**\n * Calculate the total size of MMR (number of nodes) from the number of leaves.\n * @param numberOfLeaves - The number of leaves in the MMR\n * @returns The total size of the MMR (total number of nodes)\n */\nexport function calculateMMRSize(numberOfLeaves: bigint): bigint {\n\tconst numberOfPeaks = numberOfLeaves.toString(2).split(\"1\").length - 1\n\treturn 2n * numberOfLeaves - BigInt(numberOfPeaks)\n}\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 * - kIndex: The k-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; kIndex: 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, leaf_positions, 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\tconst [[, kIndex]] = mmrPositionToKIndex(leaf_positions, BigInt(mmr_size))\n\n\treturn {\n\t\troot: root as HexString,\n\t\tproof: proof as HexString[],\n\t\tindex: treeSize - 1n,\n\t\tkIndex,\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 { Struct, Vector, u8, u64, Tuple, Enum, _void, u32, Option } 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.\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 {\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\thexToBytes,\n\tkeccak256,\n\ttoHex,\n} from \"viem\"\nimport evmHost from \"./abis/evmHost\"\nimport handler from \"./abis/handler\"\nimport { type IChain, getStateCommitmentFieldSlot } from \"./chain\"\nimport { _queryRequestInternal } from \"./query-client\"\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\nexport function orderCommitment(order: Order): HexString {\n\tconst encodedOrder = encodeAbiParameters(\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"user\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"sourceChain\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"destChain\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"deadline\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"nonce\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fees\", type: \"uint256\" },\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\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\t{ name: \"beneficiary\", type: \"bytes32\" },\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\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\t{ name: \"callData\", type: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\t[\n\t\t\t{\n\t\t\t\tuser: order.user,\n\t\t\t\tsourceChain: order.sourceChain.startsWith(\"0x\")\n\t\t\t\t\t? (order.sourceChain as `0x${string}`)\n\t\t\t\t\t: toHex(order.sourceChain),\n\t\t\t\tdestChain: order.destChain.startsWith(\"0x\")\n\t\t\t\t\t? (order.destChain as `0x${string}`)\n\t\t\t\t\t: toHex(order.destChain),\n\t\t\t\tdeadline: order.deadline,\n\t\t\t\tnonce: order.nonce,\n\t\t\t\tfees: order.fees,\n\t\t\t\toutputs: order.outputs,\n\t\t\t\tinputs: order.inputs,\n\t\t\t\tcallData: order.callData,\n\t\t\t},\n\t\t],\n\t)\n\n\treturn keccak256(encodedOrder)\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 === ADDRESS_ZERO) {\n\t\treturn ADDRESS_ZERO\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\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 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, kIndex, 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\tkIndex,\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 * 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, beneficiary: HexString): HexString {\n\tconst commitment = order.id as HexString\n\tconst inputs = order.inputs\n\n\t// RequestKind.RedeemEscrow is 0 as defined in the contract\n\tconst requestKind = encodePacked([\"uint8\"], [RequestKind.RedeemEscrow])\n\n\tconst requestBody = {\n\t\tcommitment: commitment as HexString,\n\t\tbeneficiary: bytes20ToBytes32(beneficiary),\n\t\ttokens: inputs,\n\t}\n\n\tconst encodedRequestBody = 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[requestBody],\n\t)\n\n\treturn concatHex([requestKind, encodedRequestBody]) as HexString\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\n/**\n * Maps testnet identifiers to mainnet identifiers for price lookup\n * @param identifier - The original token identifier (symbol or contract address)\n * @returns The mapped mainnet identifier\n */\nexport function mapToValidCoingeckoId(identifier: string): string {\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\tdefault:\n\t\t\treturn identifier\n\t}\n}\n\nexport async function fetchPrice(identifier: string, chainId = 1, apiKey?: string): Promise<number> {\n\tconst mappedIdentifier = mapToValidCoingeckoId(identifier)\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 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 * 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\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 adjustFeeDecimals(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 * 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","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","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} from \"viem/chains\"\n\nimport { flatten, zip } from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport type { GetProofParameters, Hex } from \"viem\"\n\nimport EvmHost from \"@/abis/evmHost\"\nimport evmHost from \"@/abis/evmHost\"\nimport HandlerV1 from \"@/abis/handler\"\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\tMmrProof,\n\tSubstrateStateProof,\n\tcalculateMMRSize,\n\tgenerateRootWithProof,\n\tmmrPositionToKIndex,\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}\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 * 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}\n\n/**\n * Encapsulates an EVM chain.\n */\nexport class EvmChain implements IChain {\n\tprivate publicClient: PublicClient\n\tprivate chainConfigService: ChainConfigService\n\n\tconstructor(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\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}\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// 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 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 * 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 * 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\tconst [[, kIndex]] = mmrPositionToKIndex(\n\t\t\t\t\t\t\t[leafIndexAndPos?.pos],\n\t\t\t\t\t\t\tcalculateMMRSize(mmrProof.leafCount),\n\t\t\t\t\t\t)\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\tkIndex,\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: HandlerV1.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: HandlerV1.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\tconst [[, kIndex]] = mmrPositionToKIndex(\n\t\t\t\t\t\t\t[leafIndexAndPos?.pos],\n\t\t\t\t\t\t\tcalculateMMRSize(mmrProof.leafCount),\n\t\t\t\t\t\t)\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\tkIndex,\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: HandlerV1.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: \"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, kIndex, 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\tkIndex,\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: HandlerV1.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: HandlerV1.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\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 new EvmChain({\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\nfunction 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","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} 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\tconstructor(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\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 * connect: 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: {\n\t\t\t\t\t\t\t\thasher: keccakAsU8a,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgargantua: {\n\t\t\t\t\t\t\t\thasher: keccakAsU8a,\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\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 * @returns The state proof as a hexadecimal string.\n\t */\n\tasync queryStateProof(at: bigint, keys: 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 consensusStateIdToBytes = hexToBytes(stateMachineId.consensusStateId)\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decodedConsensusStateId = decoder.decode(consensusStateIdToBytes)\n\n\t\tconst payload = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: decodedConsensusStateId,\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 consensusStateIdToBytes = hexToBytes(stateMachineHeight.id.consensusStateId)\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decodedConsensusStateId = decoder.decode(consensusStateIdToBytes)\n\n\t\tconst stateMachineId = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: decodedConsensusStateId,\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 consensusStateIdToBytes = hexToBytes(stateMachineId.consensusStateId)\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decodedConsensusStateId = decoder.decode(consensusStateIdToBytes)\n\n\t\tconst payload = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: decodedConsensusStateId,\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 * Returns the index of a pallet by its name, by looking up the pallets in the runtime metadata.\n\t * @param {string} name - The name of the pallet.\n\t * @returns {number} The index of the pallet.\n\t */\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\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.exhaustive()\n\t} catch (error) {\n\t\tthrow new Error(\"Failed to encode ISMP message\", { cause: error })\n\t}\n}\n","import { EvmChain, SubstrateChain } from \"@/chain\"\nimport type {\n\tGetResponseStorageValues,\n\tHexString,\n\tIEvmConfig,\n\tIGetRequest,\n\tIMessage,\n\tIPostRequest,\n\tISubstrateConfig,\n\tStateMachineHeight,\n\tStateMachineIdParams,\n} from \"@/types\"\nimport { isEvmChain, isSubstrateChain } from \"@/utils\"\nimport { ExpectedError } from \"./utils/exceptions\"\n\nexport * from \"@/chains/evm\"\nexport * from \"@/chains/substrate\"\n\n/**\n * Type representing an ISMP message.\n */\nexport type IIsmpMessage = IRequestMessage | ITimeoutPostRequestMessage | IGetResponseMessage | IGetRequestMessage\n\nexport interface IRequestMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"PostRequest\"\n\t/**\n\t * The requests to be posted.\n\t */\n\trequests: IPostRequest[]\n\t/**\n\t * The proof of the requests.\n\t */\n\tproof: IProof\n\t/**\n\t * The signer of the message.\n\t */\n\tsigner: HexString\n}\n\nexport interface IGetRequestMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"GetRequest\"\n\t/**\n\t * The requests to be posted.\n\t */\n\trequests: IGetRequest[]\n\t/**\n\t * The proof of the requests from the source chain.\n\t */\n\tsource: IProof\n\t/**\n\t * The proof of the response from the target chain\n\t */\n\tresponse: IProof\n\t/**\n\t * The signer of the message.\n\t */\n\tsigner: HexString\n}\n\nexport interface IGetResponse {\n\t/**\n\t * The request that triggered this response.\n\t */\n\tget: IGetRequest\n\t/**\n\t * The response message.\n\t */\n\tvalues: GetResponseStorageValues[]\n}\n\nexport interface IGetResponseMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"GetResponse\"\n\t/**\n\t * The responses to be posted.\n\t */\n\tresponses: IGetResponse[]\n\t/**\n\t * The proof of the responses.\n\t */\n\tproof: IProof\n\t/**\n\t * The signer of the message.\n\t */\n\tsigner: HexString\n}\n\nexport interface ITimeoutPostRequestMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"TimeoutPostRequest\"\n\n\t/**\n\t * The requests to be posted.\n\t */\n\trequests: IPostRequest[]\n\n\t/**\n\t * The proof of the requests.\n\t */\n\tproof: IProof\n}\n\nexport interface IProof {\n\t/**\n\t * The height of the proof.\n\t */\n\theight: bigint\n\t/**\n\t * The state machine identifier of the proof.\n\t */\n\tstateMachine: string\n\n\t/**\n\t * The associated consensus state identifier of the proof.\n\t */\n\tconsensusStateId: string\n\n\t/**\n\t * The encoded storage proof\n\t */\n\tproof: HexString\n}\n\n/**\n * Interface representing a chain.\n */\nexport interface IChain {\n\t/**\n\t * Returns the configuration for this chain\n\t */\n\tget config(): IEvmConfig | ISubstrateConfig\n\n\t/*\n\t * Returns the current timestamp of the chain in seconds.\n\t */\n\ttimestamp(): Promise<bigint>\n\n\t/**\n\t * Returns the state trie key for the request-receipt storage item for the given request commitment.\n\t */\n\trequestReceiptKey(commitment: HexString): HexString\n\n\t/**\n\t * Query and return the request-receipt for the given request commitment.\n\t */\n\tqueryRequestReceipt(commitment: HexString): Promise<HexString | undefined>\n\n\t/**\n\t * Query and return the encoded storage proof for the provided keys at the given height.\n\t */\n\tqueryStateProof(at: bigint, keys: HexString[]): Promise<HexString>\n\n\t/*\n\t * Query and return the encoded storage proof for requests\n\t */\n\tqueryProof(message: IMessage, counterparty: string, at?: bigint): Promise<HexString>\n\n\t/*\n\t * Encode an ISMP message into the appropriate calldata for this chain.\n\t */\n\tencode(message: IIsmpMessage): HexString\n\n\t/**\n\t * Get the latest state machine height for a given state machine ID.\n\t */\n\tlatestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint>\n\n\t/**\n\t * Get the challenge period for a given state machine ID.\n\t */\n\tchallengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint>\n\n\t/**\n\t * Get the update time for a statemachine height.\n\t */\n\tstateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint>\n}\n\n/**\n * Returns the chain interface for a given state machine identifier\n * @param chainConfig - Chain configuration\n * @returns Chain interface\n */\nexport async function getChain(chainConfig: IEvmConfig | ISubstrateConfig): Promise<IChain> {\n\tif (isEvmChain(chainConfig.stateMachineId)) {\n\t\tconst config = chainConfig as IEvmConfig\n\t\tconst chainId = Number.parseInt(chainConfig.stateMachineId.split(\"-\")[1])\n\t\tconst evmChain = new EvmChain({\n\t\t\tchainId,\n\t\t\trpcUrl: config.rpcUrl,\n\t\t\thost: config.host,\n\t\t\tconsensusStateId: config.consensusStateId,\n\t\t})\n\n\t\treturn evmChain\n\t}\n\n\tif (isSubstrateChain(chainConfig.stateMachineId)) {\n\t\tconst config = chainConfig as ISubstrateConfig\n\t\tconst substrateChain = new SubstrateChain(config)\n\n\t\tawait substrateChain.connect()\n\n\t\treturn substrateChain\n\t}\n\n\tthrow new ExpectedError(`Unsupported chain: ${chainConfig.stateMachineId}`)\n}\n","export const POST_REQUEST_STATUS = `\n query RequestStatusM($hash: String!) {\n requests(\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 getRequests(\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 status\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 assetTeleported(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 tokenGatewayAssetTeleporteds(\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\nexport const TOKEN_REGISTRY = `\nquery TokenRegistry($symbol: String!) {\n tokenRegistries(\n filter: { symbol: { equalTo: $symbol } }\n ) {\n nodes {\n id\n name\n symbol\n address\n updateFrequencySeconds\n lastUpdatedAt\n createdAt\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\tTOKEN_REGISTRY,\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\tTokenRegistry,\n\tTokenRegistryResponse,\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?.assetTeleported) {\n\t\t\t\tthrow new Error(`AssetTeleportedEvent not found for ${id}`)\n\t\t\t}\n\n\t\t\treturn response.assetTeleported\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.tokenGatewayAssetTeleporteds.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.requests.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.getRequests.nodes[0]) return\n\n\tlogger.trace(\"`Request` found\")\n\n\tconst statuses = response.getRequests.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.getRequests.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\ntype TokenRegistryQueryParams = {\n\tsymbol: string\n\tqueryClient: IndexerQueryClient\n\tlogger?: ConsolaInstance\n}\n\nexport async function _queryTokenRegistryInternal(\n\tparams: TokenRegistryQueryParams,\n): Promise<TokenRegistry | 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<TokenRegistryResponse>(TOKEN_REGISTRY, { 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 'TokenRegistry' by Symbol(${symbol})`,\n\t\t},\n\t)\n\n\tconst item = response.tokenRegistries.nodes?.[0]\n\tif (!item) return\n\n\tlogger.trace(\"`TokenRegistry` found\")\n\n\treturn {\n\t\tid: item.id,\n\t\tname: item.name,\n\t\tsymbol: item.symbol,\n\t\taddress: item.address,\n\t\tupdateFrequencySeconds: item.updateFrequencySeconds,\n\t\tlastUpdatedAt: item.lastUpdatedAt,\n\t\tcreatedAt: new Date(item.createdAt),\n\t}\n}\n","import { type ConsolaInstance, LogLevels, createConsola } from \"consola\"\nimport { isNil, maxBy } from \"lodash-es\"\nimport { pad, toHex } from \"viem\"\n\n// @ts-ignore\nimport mergeRace from \"@async-generator/merge-race\"\n\nimport type {\n\tAssetTeleported,\n\tAssetTeleportedResponse,\n\tBlockMetadata,\n\tClientConfig,\n\tGetRequestResponse,\n\tGetRequestWithStatus,\n\tGetResponseByRequestIdResponse,\n\tHexString,\n\tIEvmConfig,\n\tIHyperbridgeConfig,\n\tISubstrateConfig,\n\tOrderWithStatus,\n\tPostRequestStatus,\n\tPostRequestTimeoutStatus,\n\tPostRequestWithStatus,\n\tRequestStatusKey,\n\tRequestStatusWithMetadata,\n\tResponseCommitmentWithValues,\n\tRetryConfig,\n\tStateMachineResponse,\n\tStateMachineUpdate,\n\tTimeoutStatusKey,\n\tTokenGatewayAssetTeleportedWithStatus,\n} from \"@/types\"\n\nimport { type IChain, type SubstrateChain, getChain } from \"@/chain\"\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 {\n\tCOMBINED_STATUS_WEIGHTS,\n\tDEFAULT_POLL_INTERVAL,\n\tREQUEST_STATUS_WEIGHTS,\n\tTIMEOUT_STATUS_WEIGHTS,\n\tdateStringtoTimestamp,\n\tparseStateMachineId,\n\tpostRequestCommitment,\n\tretryPromise,\n\tsleep,\n\twaitForChallengePeriod,\n} from \"@/utils\"\nimport {\n\t_queryGetRequestInternal,\n\t_queryOrderInternal,\n\t_queryRequestInternal,\n\t_queryTokenGatewayAssetTeleportedInternal,\n} from \"./query-client\"\n\nimport { OrderStatus, RequestStatus, TeleportStatus, TimeoutStatus } from \"@/types\"\n\nimport type { IndexerQueryClient } from \"@/types\"\nimport { AbortSignalInternal, ExpectedError } from \"./utils/exceptions\"\n\n/**\n * Helper function to create chain configuration from legacy config format\n * This helps migrate from the old config format to the new IChain-based format\n *\n * @param config - Legacy configuration object (IEvmConfig, ISubstrateConfig, or IHyperbridgeConfig)\n * @returns Promise resolving to chain configuration with IChain instance\n */\nexport async function createChain(config: IEvmConfig | ISubstrateConfig | IHyperbridgeConfig): Promise<IChain> {\n\t// For hyperbridge config, we need to add the hasher\n\tconst chainConfig = \"wsUrl\" in config && !(\"hasher\" in config) ? { ...config, hasher: \"Keccak\" as const } : config\n\n\treturn await getChain(chainConfig as IEvmConfig | ISubstrateConfig)\n}\n\n/**\n * Helper function to create IndexerClient with legacy config format\n * @deprecated Use the constructor with IChain instances directly for better performance\n *\n * @param config - Legacy configuration with IEvmConfig/ISubstrateConfig/IHyperbridgeConfig\n * @returns Promise resolving to IndexerClient instance\n */\nexport async function createIndexerClient(config: {\n\tpollInterval?: number\n\tqueryClient: IndexerQueryClient\n\ttracing?: boolean\n\tsource: IEvmConfig | ISubstrateConfig\n\tdest: IEvmConfig | ISubstrateConfig\n\thyperbridge: IHyperbridgeConfig\n}): Promise<IndexerClient> {\n\tconst [source, dest, hyperbridge] = await Promise.all([\n\t\tcreateChain(config.source),\n\t\tcreateChain(config.dest),\n\t\tcreateChain(config.hyperbridge),\n\t])\n\n\treturn new IndexerClient({\n\t\tpollInterval: config.pollInterval,\n\t\tqueryClient: config.queryClient,\n\t\ttracing: config.tracing,\n\t\tsource,\n\t\tdest,\n\t\thyperbridge,\n\t})\n}\n\n/**\n * IndexerClient provides methods for interacting with the Hyperbridge indexer.\n *\n * This client facilitates querying and tracking cross-chain requests and their status\n * through the Hyperbridge protocol. It supports:\n *\n * - Querying state machine updates by block height or timestamp\n * - Retrieving request status information by transaction hash\n * - Monitoring request status changes through streaming interfaces\n * - Handling request timeout flows and related proof generation\n * - Tracking request finalization across source and destination chains\n *\n * The client implements automatic retries with exponential backoff for network\n * resilience and provides both simple query methods and advanced streaming\n * interfaces for real-time status tracking.\n *\n * The URLs provided in the configuration must point to archive nodes to allow the client to query for storage proofs\n * of potentially much older blocks. Regular nodes only store the state for recent blocks and will not be able\n * to provide the necessary proofs for cross-chain verification, especially in timeout scenarios.\n *\n * @example\n * ```typescript\n * // New approach: Create IChain instances directly\n * const sourceChain = new EvmChain({\n * chainId: 1,\n * rpcUrl: \"https://eth-rpc.com\",\n * host: \"0x87ea45..\",\n * consensusStateId: \"ETH0\"\n * })\n * const destChain = new EvmChain({\n * chainId: 42161,\n * rpcUrl: \"https://arb-rpc.com\",\n * host: \"0x87ea42345..\",\n * consensusStateId: \"ARB0\"\n * })\n * const hyperbridgeChain = new SubstrateChain({\n * stateMachineId: \"POLKADOT-3367\",\n * wsUrl: \"ws://localhost:9944\",\n * hasher: \"Keccak\",\n * consensusStateId: \"DOT0\"\n * })\n * await hyperbridgeChain.connect()\n *\n * const client = new IndexerClient({\n * queryClient: queryClient,\n * pollInterval: 2000,\n * source: sourceChain,\n * dest: destChain,\n * hyperbridge: hyperbridgeChain\n * });\n *\n * // Legacy approach: Use the helper function (deprecated)\n * const client = await createIndexerClient({\n * queryClient: queryClient,\n * pollInterval: 2000,\n * source: {\n * stateMachineId: \"EVM-1\",\n * consensusStateId: \"ETH0\",\n * rpcUrl: \"https://eth-rpc.com\",\n * host: \"0x87ea45..\"\n * },\n * dest: {\n * stateMachineId: \"EVM-42161\",\n * consensusStateId: \"ETH0\",\n * rpcUrl: \"https://arb-rpc.com\",\n * host: \"0x87ea42345..\"\n * },\n * hyperbridge: {\n * stateMachineId: \"POLKADOT-3367\",\n * consensusStateId: \"DOT0\",\n * wsUrl: \"ws://localhost:9944\"\n * }\n * });\n *\n * // Query a request status\n * const status = await client.queryRequestWithStatus(\"0x1234...\");\n *\n * // Stream status updates\n * for await (const update of client.postRequestStatusStream(\"0x1234...\")) {\n * console.log(`Request status: ${update.status}`);\n * }\n * ```\n */\nexport class IndexerClient {\n\t/**\n\t * GraphQL client used for making requests to the indexer\n\t */\n\tprivate client: IndexerQueryClient\n\n\t/**\n\t * Configuration for the IndexerClient including URLs, poll intervals, and chain-specific settings\n\t */\n\tprivate config: ClientConfig\n\n\tprivate logger: ConsolaInstance\n\n\t/**\n\t * Default configuration for retry behavior when network requests fail\n\t * - maxRetries: Maximum number of retry attempts before failing\n\t * - backoffMs: Initial backoff time in milliseconds (doubles with each retry)\n\t */\n\tprivate defaultRetryConfig: RetryConfig = {\n\t\tmaxRetries: 3,\n\t\tbackoffMs: 1000,\n\t}\n\n\t/**\n\t * Creates a new IndexerClient instance\n\t */\n\tconstructor(config: PartialClientConfig) {\n\t\tthis.client = config.queryClient\n\t\tthis.config = {\n\t\t\tpollInterval: DEFAULT_POLL_INTERVAL,\n\t\t\t...config,\n\t\t}\n\t\tthis.logger = createConsola({\n\t\t\tlevel: LogLevels[config.tracing ? \"trace\" : \"info\"],\n\t\t\tformatOptions: {\n\t\t\t\tcolumns: 80,\n\t\t\t\tcolors: true,\n\t\t\t\tcompact: true,\n\t\t\t\tdate: false,\n\t\t\t},\n\t\t})\n\t}\n\n\t/**\n\t * Get the source chain instance\n\t */\n\tget source(): IChain {\n\t\treturn this.config.source\n\t}\n\n\t/**\n\t * Get the destination chain instance\n\t */\n\tget dest(): IChain {\n\t\treturn this.config.dest\n\t}\n\n\t/**\n\t * Get the hyperbridge chain instance\n\t */\n\tget hyperbridge(): IChain {\n\t\treturn this.config.hyperbridge\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 * @params statemachineId - ID of the state machine\n\t * @params height - Starting block height\n\t * @params chain - The identifier for the chain where the state machine update should be queried (corresponds to a stateMachineId)\n\t * @returns Closest state machine update\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\tthis.withRetry(\n\t\t\t\t() => {\n\t\t\t\t\treturn this.client.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\t},\n\t\t\t\t{ logger: logger, logMessage: `${message} (ASC)` },\n\t\t\t),\n\t\t\tthis.withRetry(\n\t\t\t\t() => {\n\t\t\t\t\treturn this.client.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\t},\n\t\t\t\t{ logger: logger, logMessage: `${message} (DESC)` },\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) {\n\t\t\treturn undefined\n\t\t}\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(\"Response >\", combined)\n\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 * @params statemachineId - ID of the state machine\n\t * @params timestamp - Starting block timestamp\n\t * @params chain - The identifier for the chain where the state machine update should be queried (corresponds to a stateMachineId)\n\t * @returns Closest state machine update\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\t\tconst message = `querying StateMachineId(${statemachineId}) update by Timestamp(${commitmentTimestamp}) in Chain(${chain})`\n\n\t\tconst response = await this.withRetry(\n\t\t\t() =>\n\t\t\t\tthis.client.request<StateMachineResponse>(STATE_MACHINE_UPDATES_BY_TIMESTAMP, {\n\t\t\t\t\tstatemachineId,\n\t\t\t\t\tcommitmentTimestamp: commitmentTimestamp.toString(),\n\t\t\t\t\tchain,\n\t\t\t\t}),\n\t\t\t{ logger, logMessage: message },\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 * @params statemachineId - ID of the state machine\n\t * @params chain - The identifier for the chain where the state machine update should be queried (corresponds to a stateMachineId)\n\t * @returns Latest height or undefined if no updates found\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\t\tconst message = `querying latest StateMachineId(${statemachineId}) height in chain Chain(${chain})`\n\n\t\tconst response = await this.withRetry(\n\t\t\t() => {\n\t\t\t\treturn this.client.request<StateMachineResponse>(LATEST_STATE_MACHINE_UPDATE, {\n\t\t\t\t\tstatemachineId,\n\t\t\t\t\tchain,\n\t\t\t\t})\n\t\t\t},\n\t\t\t{ logger: logger, logMessage: message },\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 request by CommitmentHash\n\t *\n\t * @param commitment_hash - Can be commitment\n\t * @returns Latest status and block metadata of the request\n\t */\n\tasync queryPostRequest(commitment_hash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\treturn _queryRequestInternal({\n\t\t\tcommitmentHash: commitment_hash,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Queries a request by any of its associated hashes and returns it alongside its statuses\n\t * Statuses will be one of SOURCE, HYPERBRIDGE_DELIVERED and DESTINATION\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns Latest status and block metadata of the request\n\t */\n\tasync queryGetRequest(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\treturn _queryGetRequestInternal({\n\t\t\tcommitmentHash: hash,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.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 * @param requestId - The ID of the request to find the associated response for\n\t * @returns The response associated with the given request ID, or undefined if not found\n\t */\n\tasync queryResponseByRequestId(requestId: string): Promise<ResponseCommitmentWithValues | undefined> {\n\t\tconst response = await this.withRetry(() =>\n\t\t\tthis.client.request<GetResponseByRequestIdResponse>(GET_RESPONSE_BY_REQUEST_ID, {\n\t\t\t\trequestId,\n\t\t\t}),\n\t\t)\n\n\t\t// If no responses are found or nodes array is empty, return undefined\n\t\tif (!response.getResponses.nodes.length) return undefined\n\n\t\t// Return just the first response\n\t\tconst firstResponse = response.getResponses.nodes[0]\n\n\t\treturn {\n\t\t\tcommitment: firstResponse.commitment,\n\t\t\tvalues: firstResponse.responseMessage,\n\t\t}\n\t}\n\n\t/**\n\t * Enhances a request with finality events by querying state machine updates.\n\t *\n\t * This method augments a request object with additional inferred status events\n\t * that represent chain finality confirmations. It adds:\n\t * - SOURCE_FINALIZED: When the source chain has finalized the request\n\t * - HYPERBRIDGE_FINALIZED: When Hyperbridge has finalized the delivery confirmation\n\t *\n\t * The method also generates appropriate calldata for submitting cross-chain proofs\n\t * when applicable.\n\t *\n\t * @param request - The request to enhance with finality events\n\t * @returns The request with finality events added\n\t * @private\n\t */\n\tprivate async addRequestFinalityEvents(request: PostRequestWithStatus): Promise<PostRequestWithStatus> {\n\t\tconst events: RequestStatusWithMetadata[] = []\n\n\t\tconst addFinalityEvents = (request: PostRequestWithStatus) => {\n\t\t\tthis.logger.trace(`Added ${events.length} \\`Request\\` finality events`, events)\n\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.config.hyperbridge.config.stateMachineId) {\n\t\t\t// the first status contains the blocknumber of the initial request\n\t\t\thyperbridgeDelivered = request.statuses[0]\n\t\t} else {\n\t\t\t// we assume there's always a SOURCE event which contains the blocknumber of the initial request\n\t\t\tconst sourceFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: request.source,\n\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\tchain: this.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\t// no finality event found, return request as is\n\t\t\tif (!sourceFinality) return addFinalityEvents(request)\n\n\t\t\t// Insert finality event into request.statuses at index 1\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\t// check if there's a hyperbridge delivered event\n\t\t\thyperbridgeDelivered = request.statuses.find((item) => item.status === RequestStatus.HYPERBRIDGE_DELIVERED)\n\n\t\t\tif (!hyperbridgeDelivered) return addFinalityEvents(request)\n\t\t}\n\n\t\t// no need to query finality event if destination is hyperbridge\n\t\tif (request.dest === this.config.hyperbridge.config.stateMachineId) {\n\t\t\treturn addFinalityEvents(request)\n\t\t}\n\n\t\tconst hyperbridgeFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: this.config.hyperbridge.config.stateMachineId,\n\t\t\theight: hyperbridgeDelivered.metadata.blockNumber,\n\t\t\tchain: request.dest,\n\t\t})\n\n\t\tif (!hyperbridgeFinality) return addFinalityEvents(request)\n\n\t\t// check if request receipt exists on destination chain\n\t\tconst destChain = this.config.dest\n\t\tconst hyperbridge = this.config.hyperbridge\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.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.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\tevents.push({\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\n\t\treturn addFinalityEvents(request)\n\t}\n\n\t/**\n\t * Adds timeout finality events to a request by querying for relevant timeout proofs and\n\t * chain state necessary for timeout processing.\n\t *\n\t * This method enhances a request object with additional status events related to the\n\t * timeout flow, including:\n\t * - PENDING_TIMEOUT: When a request has passed its timeout timestamp\n\t * - DESTINATION_FINALIZED: When the destination chain has finalized the timeout timestamp\n\t * - HYPERBRIDGE_FINALIZED_TIMEOUT: When hyperbridge has finalized the timeout state\n\t *\n\t * The method also generates appropriate calldata for submitting timeout proofs.\n\t *\n\t * @param request - Request to fill timeout events for\n\t * @returns Request with timeout events filled in, including any proof calldata for timeout submissions\n\t * @private\n\t */\n\tprivate async addTimeoutFinalityEvents(request: PostRequestWithStatus): Promise<PostRequestWithStatus> {\n\t\t// check if request receipt exists on destination chain\n\t\tconst destChain = this.config.dest\n\t\tconst hyperbridge = this.config.hyperbridge\n\t\tconst events: RequestStatusWithMetadata[] = []\n\t\tconst commitment = postRequestCommitment(request).commitment\n\t\tconst reciept = await destChain.queryRequestReceipt(commitment)\n\t\tconst destTimestamp = await destChain.timestamp()\n\n\t\tconst addTimeoutEvents = (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) {\n\t\t\t// Early exit for requests with no timeout configured\n\t\t\t// This prevents unnecessary timeout processing and expensive chain queries\n\t\t\t// The events array is still empty at this point, so no timeout events are added\n\t\t\treturn addTimeoutEvents(request)\n\t\t}\n\n\t\t// request not timed out\n\t\tif (reciept || request.timeoutTimestamp > destTimestamp) {\n\t\t\treturn addTimeoutEvents(request)\n\t\t}\n\n\t\tconst is_finished = request.statuses.find((item) => item.status === RequestStatus.DESTINATION)\n\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) => {\n\t\t\treturn item.status === RequestStatus.HYPERBRIDGE_DELIVERED\n\t\t})\n\n\t\tlet hyperbridgeFinalized: StateMachineUpdate | undefined\n\t\tif (!delivered) {\n\t\t\t// either the request was never delivered to hyperbridge\n\t\t\t// or hyperbridge was the destination of the request\n\t\t\thyperbridgeFinalized = await this.queryStateMachineUpdateByTimestamp({\n\t\t\t\tstatemachineId: this.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.queryStateMachineUpdateByTimestamp({\n\t\t\t\tstatemachineId: request.dest,\n\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\tchain: this.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\tif (!destFinalized) return addTimeoutEvents(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\t// if the source is the hyperbridge state machine, no further action is needed\n\t\t\t// use the timeout stream to timeout on hyperbridge\n\t\t\tif (request.source === this.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 addTimeoutEvents(request)\n\t\t\thyperbridgeFinalized = await this.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: this.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 addTimeoutEvents(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.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.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.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 addTimeoutEvents(request)\n\t}\n\n\t/**\n\t * Queries a request returns it alongside its statuses,\n\t * including any finalization events.\n\t * @param hash - Commitment hash\n\t * @returns Full request data with all inferred status events, including SOURCE_FINALIZED and HYPERBRIDGE_FINALIZED\n\t * @remarks Unlike queryRequest(), this method adds derived finalization status events by querying state machine updates\n\t */\n\tasync queryRequestWithStatus(hash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\tlet request = await this.queryPostRequest(hash)\n\n\t\tif (!request) return\n\t\trequest = await this.addRequestFinalityEvents(request)\n\t\trequest = await this.addTimeoutFinalityEvents(request)\n\n\t\t// ensure all statuses are sorted by weight\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\n\t\treturn request\n\t}\n\n\t/**\n\t * Queries a GET request and returns it alongside its statuses,\n\t * including any finalization events.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns Full GET request data with all inferred status events, including SOURCE_FINALIZED and HYPERBRIDGE_FINALIZED\n\t * @remarks Unlike queryGetRequest(), this method adds derived finalization status events by querying state machine updates\n\t */\n\tasync queryGetRequestWithStatus(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\tlet request = await this.queryGetRequest(hash)\n\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\n\t\treturn request\n\t}\n\n\t/**\n\t * Enhances a GET request with finality events by querying state machine updates.\n\t *\n\t * This method augments a GET request object with additional inferred status events\n\t * that represent chain finality confirmations. It adds:\n\t * - SOURCE_FINALIZED: When the source chain has finalized the request\n\t * - HYPERBRIDGE_FINALIZED: When Hyperbridge has finalized the delivery confirmation and response is ready\n\t *\n\t * The method also generates appropriate calldata for submitting cross-chain proofs\n\t * when applicable.\n\t *\n\t * @param request - The GET request to enhance with finality events\n\t * @returns The request with finality events added\n\t * @private\n\t */\n\tprivate async addGetRequestFinalityEvents(request: GetRequestWithStatus): Promise<GetRequestWithStatus> {\n\t\tconst events: RequestStatusWithMetadata[] = []\n\n\t\tconst addFinalityEvents = (request: GetRequestWithStatus) => {\n\t\t\tthis.logger.trace(`Added ${events.length} \\`GetRequest\\` finality events`, events)\n\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.config.hyperbridge.config.stateMachineId) {\n\t\t\thyperbridgeDelivered = request.statuses[0]\n\t\t\treturn addFinalityEvents(request)\n\t\t} else {\n\t\t\tconst sourceFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: request.source,\n\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\tchain: this.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\tif (!sourceFinality) return addFinalityEvents(request)\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\n\t\t\tif (!hyperbridgeDelivered) return addFinalityEvents(request)\n\t\t}\n\n\t\tconst hyperbridgeFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: this.config.hyperbridge.config.stateMachineId,\n\t\t\theight: hyperbridgeDelivered.metadata.blockNumber,\n\t\t\tchain: request.source,\n\t\t})\n\n\t\tif (!hyperbridgeFinality) return addFinalityEvents(request)\n\n\t\tconst sourceChain = this.config.source\n\t\tconst hyperbridge = this.config.hyperbridge\n\n\t\ttry {\n\t\t\tconst response = await this.queryResponseByRequestId(request.commitment)\n\n\t\t\tif (!response) return addFinalityEvents(request)\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\tBigInt(hyperbridgeFinality.height),\n\t\t\t)\n\n\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\tkind: \"GetResponse\",\n\t\t\t\tproof: {\n\t\t\t\t\tstateMachine: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\tconsensusStateId: this.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\tproof,\n\t\t\t\t\theight: BigInt(hyperbridgeFinality.height),\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\tevents.push({\n\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: hyperbridgeFinality.blockHash,\n\t\t\t\t\tblockNumber: hyperbridgeFinality.height,\n\t\t\t\t\ttransactionHash: hyperbridgeFinality.transactionHash,\n\t\t\t\t\ttimestamp: hyperbridgeFinality.timestamp,\n\t\t\t\t\tcalldata,\n\t\t\t\t},\n\t\t\t})\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 addFinalityEvents(request)\n\t}\n\n\t/**\n\t * Create a Stream of status updates for a post request.\n\t * Stream ends when either the request reaches the destination or times out.\n\t * If the stream yields TimeoutStatus.PENDING_TIMEOUT, use postRequestTimeoutStream() to begin timeout processing.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.postRequestStatusStream(hash)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\n\t *\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 this.waitOrAbort({\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t\t})\n\n\t\t\tlogger.trace(\"`Request` found\")\n\t\t\tconst chain = this.config.dest\n\t\t\tconst timeoutStream =\n\t\t\t\trequest.timeoutTimestamp > 0n ? this.timeoutStream(request.timeoutTimestamp, chain) : undefined\n\t\t\tconst statusStream = this.postRequestStatusStreamInternal(hash, controller.signal)\n\n\t\t\tlogger.trace(\"Listening for events\")\n\t\t\tconst combined = timeoutStream ? mergeRace(timeoutStream, statusStream) : statusStream\n\n\t\t\tlogger.trace(\"Listening for events\")\n\t\t\tlet item = await combined.next()\n\n\t\t\twhile (!item.done) {\n\t\t\t\tlogger.trace(`Yielding Event(${item.value.status})`)\n\n\t\t\t\tyield item.value\n\t\t\t\titem = await combined.next()\n\t\t\t}\n\n\t\t\tlogger.trace(\"Streaming complete\")\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t\tcontroller.abort()\n\t\treturn\n\t}\n\n\t/*\n\t * Returns a generator that will yield true if the request is timed out\n\t * If the request does not have a timeout, it will never yield\n\t * @param request - Request to timeout\n\t */\n\tasync *timeoutStream(timeoutTimestamp: bigint, chain: IChain): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tconst logger = this.logger.withTag(\"[timeoutStream()]\")\n\n\t\tif (timeoutTimestamp > 0n) {\n\t\t\tlet timestamp = await chain.timestamp()\n\n\t\t\twhile (timestamp < timeoutTimestamp) {\n\t\t\t\tlogger.trace(\"Comparing timeout timestamps\", { control: timeoutTimestamp, latest: timestamp })\n\n\t\t\t\tconst diff = BigInt(timeoutTimestamp) - BigInt(timestamp)\n\t\t\t\tawait this.sleep_for(Number(diff))\n\t\t\t\ttimestamp = await chain.timestamp()\n\t\t\t}\n\n\t\t\tyield {\n\t\t\t\tstatus: TimeoutStatus.PENDING_TIMEOUT,\n\t\t\t\tmetadata: { blockHash: \"0x\", blockNumber: 0, transactionHash: \"0x\" },\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t/**\n\t * Create a Stream of status updates\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t */\n\tprivate async *postRequestStatusStreamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tlet request = await this.waitOrAbort({ signal, promise: () => this.queryPostRequest(hash) })\n\n\t\tlet status: RequestStatusKey =\n\t\t\trequest.source === this.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\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\n\t\tif (!latest_request) return\n\n\t\t// start with the latest status\n\t\tstatus = latest_request\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\t// request has been dispatched from source chain\n\t\t\t\tcase RequestStatus.SOURCE: {\n\t\t\t\t\tconst sourceUpdate = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.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.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\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\t// finality proofs for request has been verified on Hyperbridge\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\t// wait for the request to be delivered on Hyperbridge\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t\t\t\t\tpredicate: (request) => !request || request.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.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\t// the request has been verified and aggregated on Hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED: {\n\t\t\t\t\t// Get the latest state machine update for hyperbridge on the destination chain\n\t\t\t\t\tconst hyperbridgeFinalized = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => {\n\t\t\t\t\t\t\tconst stateMachineId = this.config.hyperbridge.config.stateMachineId\n\t\t\t\t\t\t\tconst index = request.source === stateMachineId ? 0 : 1\n\n\t\t\t\t\t\t\treturn this.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\tstatemachineId: stateMachineId,\n\t\t\t\t\t\t\t\theight: request.statuses[index].metadata.blockNumber,\n\t\t\t\t\t\t\t\tchain: request.dest,\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 destChain = this.config.dest\n\t\t\t\t\tconst hyperbridge = this.config.hyperbridge\n\n\t\t\t\t\tconst safeFetchProof = async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst proof_hex = await hyperbridge.queryProof(\n\t\t\t\t\t\t\t\t{ Requests: [postRequestCommitment(request).commitment] },\n\t\t\t\t\t\t\t\trequest.dest,\n\t\t\t\t\t\t\t\tBigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\treturn { data: proof_hex, error: null }\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treturn { error: err as unknown, data: null }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst proof = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.withRetry(safeFetchProof, {\n\t\t\t\t\t\t\t\tbackoffMs: 2000,\n\t\t\t\t\t\t\t\tmaxRetries: 6, // <-- should fail after 2mins\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tif (proof.data === null) {\n\t\t\t\t\t\tthis.logger.error(\"Failed to fetch proof:\", proof.error)\n\n\t\t\t\t\t\tthrow proof.error\n\t\t\t\t\t}\n\n\t\t\t\t\tconst calldata = destChain.encode({\n\t\t\t\t\t\tkind: \"PostRequest\",\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tstateMachine: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\t\t\tproof: proof.data,\n\t\t\t\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequests: [request],\n\t\t\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst { stateId } = parseStateMachineId(this.config.hyperbridge.config.stateMachineId)\n\n\t\t\t\t\tawait waitForChallengePeriod(destChain, {\n\t\t\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\tstateId,\n\t\t\t\t\t\t\tconsensusStateId: toHex(this.config.hyperbridge.config.consensusStateId),\n\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.HYPERBRIDGE_FINALIZED,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\t\t\t\tblockNumber: hyperbridgeFinalized.height,\n\t\t\t\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\t\t\t\ttimestamp: hyperbridgeFinalized.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 = RequestStatus.HYPERBRIDGE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// request has been finalized by hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED: {\n\t\t\t\t\t// wait for the request to be delivered to the destination\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t\t\t\t\tpredicate: (request) =>\n\t\t\t\t\t\t\t!request || !request.statuses.find((s) => s.status === RequestStatus.DESTINATION),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst index = request.source === this.config.hyperbridge.config.stateMachineId ? 1 : 2\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[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\tprivate sleep_for(duration: number): Promise<void> {\n\t\tthis.logger.trace(`Sleeping for ${duration}ms`)\n\t\treturn sleep(duration)\n\t}\n\n\tprivate sleep_for_interval(): Promise<void> {\n\t\treturn this.sleep_for(this.config.pollInterval)\n\t}\n\n\t/**\n\t * Create a Stream of status updates for a get request.\n\t * Stream ends when either the request reaches the destination or times out.\n\t * If the stream yields TimeoutStatus.PENDING_TIMEOUT, use postRequestTimeoutStream() to begin timeout processing.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.getRequestStatusStream(hash)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\n\t *\n\t */\n\tasync *getRequestStatusStream(hash: HexString): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tconst controller = new AbortController()\n\t\t// wait for request to be created\n\t\ttry {\n\t\t\tconst request = await this.waitOrAbort({\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tpromise: () => this.queryGetRequest(hash),\n\t\t\t})\n\n\t\t\tconst chain = this.config.dest\n\t\t\tconst timeoutStream =\n\t\t\t\trequest.timeoutTimestamp > 0n ? this.timeoutStream(request.timeoutTimestamp, chain) : undefined\n\t\t\tconst statusStream = this.getRequestStatusStreamInternal(hash, controller.signal)\n\t\t\tconst combined = timeoutStream ? mergeRace(timeoutStream, 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)) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t\tcontroller.abort()\n\t\treturn\n\t}\n\n\t/**\n\t * Create a Stream of status updates\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t */\n\tprivate async *getRequestStatusStreamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tlet request = await this.waitOrAbort({ signal, promise: () => this.queryGetRequest(hash) })\n\n\t\tlet status: RequestStatusKey | undefined =\n\t\t\trequest.source === this.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\n\t\t// start with the latest status\n\t\tstatus = maxBy([status, latestMetadata.status as RequestStatusKey], (item) => REQUEST_STATUS_WEIGHTS[item])\n\n\t\tif (!status) return\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\t// request has been dispatched from source chain\n\t\t\t\tcase RequestStatus.SOURCE: {\n\t\t\t\t\tconst sourceUpdate = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.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.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\t// finality proofs for request has been verified on Hyperbridge\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\t// wait for the request to be delivered on Hyperbridge\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryGetRequest(hash),\n\t\t\t\t\t\tpredicate: (request) => !request || request.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.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\t// the request has been verified and aggregated on Hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED: {\n\t\t\t\t\t// If Hyperbridge was the source, the request is already complete\n\t\t\t\t\tif (request.source === this.config.hyperbridge.config.stateMachineId) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t// Get the latest state machine update for hyperbridge on the destination chain\n\t\t\t\t\tconst hyperbridgeFinalized = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\tstatemachineId: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t\theight: request.statuses[1].metadata.blockNumber,\n\t\t\t\t\t\t\t\tchain: request.source,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst sourceChain = this.config.source\n\t\t\t\t\tconst hyperbridge = this.config.hyperbridge\n\n\t\t\t\t\tconst response = await this.queryResponseByRequestId(hash)\n\n\t\t\t\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t\t\t\t{ Responses: [response?.commitment as HexString] },\n\t\t\t\t\t\trequest.source,\n\t\t\t\t\t\tBigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\t\t\tkind: \"GetResponse\",\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tstateMachine: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tresponses: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tget: request,\n\t\t\t\t\t\t\t\tvalues: request.keys.map((key, index) => ({\n\t\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\t\tvalue: (response?.values[index] as HexString) || \"0x\",\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\tsigner: pad(\"0x\"),\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\t\t\t\tblockNumber: hyperbridgeFinalized.height,\n\t\t\t\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\t\t\t\ttimestamp: hyperbridgeFinalized.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 = RequestStatus.HYPERBRIDGE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// request has been finalized by hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED: {\n\t\t\t\t\t// If Hyperbridge was the source, the request is already complete\n\t\t\t\t\tif (request.source === this.config.hyperbridge.config.stateMachineId) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\t// wait for the request to be delivered to the destination\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryGetRequest(hash),\n\t\t\t\t\t\tpredicate: (request) =>\n\t\t\t\t\t\t\t!request || !request.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 * Create a Stream of status updates for a timed out post request.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.postRequestTimeoutStream(hash)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\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.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 timeoutStream = this.postRequestTimeoutStreamInternal(hash, controller.signal)\n\n\t\t\tlogger.trace(\"Listening for timeout events\")\n\t\t\tlet item = await timeoutStream.next()\n\t\t\twhile (!item.done) {\n\t\t\t\tlogger.trace(`Yielding Timeout Event(${item.value.status})`)\n\n\t\t\t\tyield item.value\n\t\t\t\titem = await timeoutStream.next()\n\t\t\t}\n\n\t\t\tlogger.trace(\"Streaming complete\")\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t\tcontroller.abort()\n\t\treturn\n\t}\n\n\t/**\n\t * Create a Stream of status updates for a timed out post request.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t */\n\tasync *postRequestTimeoutStreamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<PostRequestTimeoutStatus, void> {\n\t\tconst request = await this.waitOrAbort({\n\t\t\tsignal,\n\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t})\n\n\t\tconst destChain = this.config.dest\n\n\t\t// if the destination is hyperbridge, then just wait for hyperbridge finality\n\t\tlet status: TimeoutStatusKey =\n\t\t\trequest.dest === this.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.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\n\t\tif (!latest_request) {\n\t\t\treturn\n\t\t}\n\n\t\t// we're always interested in the latest status\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.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 this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.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.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.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.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.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\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: {\n\t\t\t\t\t\t\tstateId,\n\t\t\t\t\t\t\tconsensusStateId: toHex(this.config.dest.config.consensusStateId),\n\t\t\t\t\t\t},\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.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.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 {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash,\n\t\t\t\t\t\t\ttransactionHash,\n\t\t\t\t\t\t\tblockNumber,\n\t\t\t\t\t\t\ttimestamp,\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 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\t// if request was never delivered to Hyperbridge\n\t\t\t\t\t\t// then query for any state machine update > requestTimestamp\n\t\t\t\t\t\tupdate = await this.waitOrAbort({\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.queryStateMachineUpdateByTimestamp({\n\t\t\t\t\t\t\t\t\tstatemachineId: this.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 this.waitOrAbort({\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.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: (timeout) => !timeout || timeout?.status !== TimeoutStatus.HYPERBRIDGE_TIMED_OUT,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tupdate = await this.waitOrAbort({\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.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\t\tstatemachineId: this.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.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.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.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.config.hyperbridge.config.stateMachineId)\n\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: {\n\t\t\t\t\t\t\tstateId,\n\t\t\t\t\t\t\tconsensusStateId: toHex(this.config.hyperbridge.config.consensusStateId),\n\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.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\t// wait for the request to be timed out on the source\n\t\t\t\t\tconst delivered = await this.waitOrAbort({\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.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 * Executes an async operation with exponential backoff retry\n\t * @param operation - Async function to execute\n\t * @param retryConfig - Optional retry configuration\n\t * @returns Result of the operation\n\t * @throws Last encountered error after all retries are exhausted\n\t *\n\t * @example\n\t * const result = await this.withRetry(() => this.queryStatus(hash));\n\t */\n\tprivate async withRetry<T>(operation: () => Promise<T>, retryConfig: Partial<RetryConfig> = {}): Promise<T> {\n\t\treturn retryPromise(operation, {\n\t\t\t...this.defaultRetryConfig,\n\t\t\t...retryConfig,\n\t\t})\n\t}\n\n\t/**\n\t * Query for an order by its commitment hash\n\t * @param commitment - The commitment hash of the order\n\t * @returns The order with its status if found, undefined otherwise\n\t */\n\tasync queryOrder(commitment: HexString): Promise<OrderWithStatus | undefined> {\n\t\treturn _queryOrderInternal({\n\t\t\tcommitmentHash: commitment,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Create a Stream of status updates for an order.\n\t * Stream ends when the order reaches a terminal state (FILLED, REDEEMED, or REFUNDED).\n\t * @param commitment - The commitment hash of the order\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.orderStatusStream(commitment)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\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 logger = this.logger.withTag(\"[orderStatusStream]\")\n\n\t\tlet order: OrderWithStatus | undefined\n\n\t\twhile (!order) {\n\t\t\tawait this.sleep_for_interval()\n\t\t\torder = await _queryOrderInternal({\n\t\t\t\tcommitmentHash: commitment,\n\t\t\t\tqueryClient: this.client,\n\t\t\t\tlogger: this.logger,\n\t\t\t})\n\t\t}\n\n\t\tlogger.trace(\"`Order` found\")\n\t\t// Yield initial status\n\t\tconst latestStatus = order.statuses[order.statuses.length - 1]\n\t\tyield {\n\t\t\tstatus: latestStatus.status,\n\t\t\tmetadata: latestStatus.metadata,\n\t\t}\n\n\t\t// If we're already in a terminal state, end the stream\n\t\tif ([OrderStatus.FILLED, OrderStatus.REDEEMED, OrderStatus.REFUNDED].includes(latestStatus.status)) {\n\t\t\treturn\n\t\t}\n\n\t\twhile (true) {\n\t\t\tawait this.sleep_for_interval()\n\t\t\tconst updatedOrder = await _queryOrderInternal({\n\t\t\t\tcommitmentHash: commitment,\n\t\t\t\tqueryClient: this.client,\n\t\t\t\tlogger: this.logger,\n\t\t\t})\n\n\t\t\tif (!updatedOrder) continue\n\n\t\t\tconst newLatestStatus = updatedOrder.statuses[updatedOrder.statuses.length - 1]\n\n\t\t\tif (newLatestStatus.status !== latestStatus.status) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: newLatestStatus.status,\n\t\t\t\t\tmetadata: newLatestStatus.metadata,\n\t\t\t\t}\n\n\t\t\t\tif ([OrderStatus.FILLED, OrderStatus.REDEEMED, OrderStatus.REFUNDED].includes(newLatestStatus.status)) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync *tokenGatewayAssetTeleportedStatusStream(commitment: HexString): AsyncGenerator<\n\t\t{\n\t\t\tstatus: TeleportStatus\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}\n\t\t},\n\t\tvoid\n\t> {\n\t\tconst logger = this.logger.withTag(\"[tokenGatewayAssetTeleportedStatusStream]\")\n\t\tlogger.trace(`Starting stream for token gateway asset teleported with commitment ${commitment}`)\n\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 this.queryTokenGatewayAssetTeleported(commitment)\n\t\t\t\tif (!teleport) {\n\t\t\t\t\tlogger.trace(\"No teleport found, waiting...\")\n\t\t\t\t\tawait this.sleep_for_interval()\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\tlogger.trace(\"No statuses found, waiting...\")\n\t\t\t\t\tawait this.sleep_for_interval()\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Find the latest status that we haven't seen yet\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\tlogger.trace(\"No new status, waiting...\")\n\t\t\t\t\tawait this.sleep_for_interval()\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\t// If we've reached a final status, end the stream\n\t\t\t\tif (\n\t\t\t\t\tlatestStatus.status === TeleportStatus.RECEIVED ||\n\t\t\t\t\tlatestStatus.status === TeleportStatus.REFUNDED\n\t\t\t\t) {\n\t\t\t\t\tlogger.trace(\"Final status reached, ending stream\")\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tawait this.sleep_for_interval()\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error in token gateway asset teleported status stream:\", error)\n\t\t\t\tawait this.sleep_for_interval()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async queryTokenGatewayAssetTeleported(\n\t\tcommitment: HexString,\n\t): Promise<TokenGatewayAssetTeleportedWithStatus | undefined> {\n\t\treturn _queryTokenGatewayAssetTeleportedInternal({\n\t\t\tcommitmentHash: commitment,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Aggregate transactions with commitment.\n\t * @param commitment\n\t * @returns an object containing the transaction hash, block hash, block number, timestamp.\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.config.source.config\n\n\t\t// check if request receipt exists on source chain\n\t\tconst sourceChain = this.config.source\n\t\tconst hyperbridge = this.config.hyperbridge as SubstrateChain\n\n\t\tlogger.trace(\"Querying post request with commitment hash\")\n\t\tconst request = await this.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: consensusStateId as HexString,\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.config.hyperbridge.config.stateMachineId,\n\t\t\tlatestStateMachineHeight,\n\t\t)\n\n\t\tlogger.trace(\"Construct Extrinsic and Submit Unsigned\")\n\t\tconst calldata = await hyperbridge.submitUnsigned({\n\t\t\tkind: \"PostRequest\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: this.config.source.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.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\n\t\treturn calldata\n\t}\n\n\tasync waitOrAbort<T>(params: {\n\t\tsignal: AbortSignal\n\t\tpromise: () => Promise<T>\n\t\tpredicate?: (a: T) => boolean\n\t}): Promise<NonNullable<T>> {\n\t\tconst { predicate = (e) => isNil(e) } = params\n\n\t\tconst _abort = () => {\n\t\t\tif (params.signal.aborted) {\n\t\t\t\tthrow new AbortSignalInternal(\"Terminated request in 'waitOrAbort'\")\n\t\t\t}\n\t\t}\n\n\t\twhile (true) {\n\t\t\t_abort()\n\t\t\tawait this.sleep_for_interval()\n\t\t\t_abort()\n\t\t\tconst _data = await params.promise()\n\t\t\t_abort()\n\n\t\t\tif (predicate(_data)) continue\n\t\t\treturn _data as NonNullable<T>\n\t\t}\n\t}\n}\n\ninterface PartialClientConfig extends Omit<ClientConfig, \"pollInterval\"> {\n\tpollInterval?: number\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","// @ts-expect-error upstream driver types have export path resolution\nimport indexedDBDriver from \"unstorage/drivers/indexedb\"\n// @ts-expect-error upstream driver types have export path resolution\nimport localStorageDriver from \"unstorage/drivers/localstorage\"\nimport type { LoadDriver } from \"../types\"\n\nconst BASE_KEY = \"hyperbridge/sdk/proof\"\n\nexport const loadDriver: LoadDriver = ({ key }) => {\n\tif (key === \"localstorage\") {\n\t\treturn localStorageDriver({ base: BASE_KEY })\n\t}\n\n\tif (key === \"indexeddb\") {\n\t\treturn indexedDBDriver({ base: BASE_KEY })\n\t}\n\n\tconsole.warn(\n\t\t`Hyperbridge/SDK/BrowserDriver: Unexpected storage driver: ${key}. Driver can't be loaded in the browser environment.`,\n\t)\n\n\treturn null\n}\n","import { createStorage } from \"unstorage\"\n// @ts-expect-error failed to resolve types\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, 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})\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 {\n\tPublicClient,\n\tmaxUint256,\n\tencodeAbiParameters,\n\tparseAbiParameters,\n\tparseAbiItem,\n\tencodePacked,\n\tencodeFunctionData,\n\terc20Abi,\n} from \"viem\"\nimport { ADDRESS_ZERO, ChainConfigService, HexString, Transaction } from \"..\"\nimport UniswapRouterV2 from \"@/abis/uniswapRouterV2\"\nimport UniswapV3Quoter from \"@/abis/uniswapV3Quoter\"\nimport { UNISWAP_V4_QUOTER_ABI } from \"@/abis/uniswapV4Quoter\"\nimport universalRouter from \"@/abis/universalRouter\"\nimport { UniversalRouterCommands } from \"@/utils\"\nimport { PERMIT2_ABI } from \"@/abis/permit2\"\nimport { popularTokens } from \"@/configs/chain\"\n\nconst COMMON_FEE_TIERS = [100, 500, 2500, 3000, 10000]\n\nexport class Swap {\n\tprivate chainConfigService: ChainConfigService\n\tconstructor() {\n\t\tthis.chainConfigService = new ChainConfigService()\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 = popularTokens[evmChainID as keyof typeof popularTokens]\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","import { Decimal } from \"decimal.js\"\nimport {\n\tconcatHex,\n\tencodeAbiParameters,\n\tformatUnits,\n\thexToString,\n\tmaxUint256,\n\tpad,\n\tparseEventLogs,\n\tparseUnits,\n\ttoHex,\n} from \"viem\"\nimport EVM_HOST from \"@/abis/evmHost\"\nimport IntentGatewayABI from \"@/abis/IntentGateway\"\nimport { type IGetRequestMessage, type IProof, requestCommitmentKey, type SubstrateChain } from \"@/chain\"\nimport type { EvmChain } from \"@/chains/evm\"\nimport type { IndexerClient } from \"@/client\"\nimport { createCancellationStorage, STORAGE_KEYS } from \"@/storage\"\nimport {\n\ttype DispatchPost,\n\ttype FillOptions,\n\ttype HexString,\n\ttype IGetRequest,\n\ttype IPostRequest,\n\ttype Order,\n\tRequestStatus,\n\ttype RequestStatusWithMetadata,\n} from \"@/types\"\nimport {\n\tADDRESS_ZERO,\n\tadjustFeeDecimals,\n\tbytes20ToBytes32,\n\tbytes32ToBytes20,\n\tconstructRedeemEscrowRequestBody,\n\tERC20Method,\n\tfetchPrice,\n\tgetGasPriceFromEtherscan,\n\tgetRequestCommitment,\n\tgetStorageSlot,\n\tMOCK_ADDRESS,\n\tmaxBigInt,\n\torderCommitment,\n\tparseStateMachineId,\n\tretryPromise,\n\tsleep,\n\tUSE_ETHERSCAN_CHAINS,\n\twaitForChallengePeriod,\n} from \"@/utils\"\nimport { Swap } from \"@/utils/swap\"\n\n/**\n * IntentGateway handles cross-chain intent operations between EVM chains.\n * It provides functionality for estimating fill orders, finding optimal swap protocols,\n * and checking order statuses across different chains.\n */\nexport class IntentGateway {\n\tpublic readonly swap: Swap\n\tprivate readonly storage = createCancellationStorage()\n\t/**\n\t * Optional custom IntentGateway address for the destination chain.\n\t * If set, this address will be used when fetching destination proofs in `cancelOrder`.\n\t * If not set, uses the default address from the chain configuration.\n\t * This allows using different IntentGateway contract versions (e.g., old vs new contracts).\n\t */\n\tpublic destIntentGatewayAddress?: HexString\n\n\t/**\n\t * Creates a new IntentGateway instance for cross-chain operations.\n\t * @param source - The source EVM chain\n\t * @param dest - The destination EVM chain\n\t * @param destIntentGatewayAddress - Optional custom IntentGateway address for the destination chain.\n\t * If provided, this address will be used when fetching destination proofs in `cancelOrder`.\n\t * If not provided, uses the default address from the chain configuration.\n\t */\n\tconstructor(\n\t\tpublic readonly source: EvmChain,\n\t\tpublic readonly dest: EvmChain,\n\t\tdestIntentGatewayAddress?: HexString,\n\t) {\n\t\tthis.swap = new Swap()\n\t\tthis.destIntentGatewayAddress = destIntentGatewayAddress\n\t}\n\n\t/**\n\t * Estimates the total cost required to fill an order, including gas fees, relayer fees,\n\t * protocol fees, and swap operations.\n\t *\n\t * @param order - The order to estimate fill costs for\n\t * @returns An object containing the estimated cost in both fee token and native token, plus the post request calldata\n\t */\n\tasync estimateFillOrder(order: Order): Promise<{\n\t\torder: Order\n\t\tfeeTokenAmount: bigint\n\t\tnativeTokenAmount: bigint\n\t\tpostRequestCalldata: HexString\n\t}> {\n\t\t// Order with commitment and stringified chains\n\t\tconst orderWithCommitment = transformOrder(order)\n\n\t\tconst postRequest: IPostRequest = {\n\t\t\tsource: orderWithCommitment.destChain,\n\t\t\tdest: orderWithCommitment.sourceChain,\n\t\t\tbody: constructRedeemEscrowRequestBody(orderWithCommitment, MOCK_ADDRESS),\n\t\t\ttimeoutTimestamp: 0n,\n\t\t\tnonce: await this.source.getHostNonce(),\n\t\t\tfrom: this.source.configService.getIntentGatewayAddress(orderWithCommitment.destChain),\n\t\t\tto: this.source.configService.getIntentGatewayAddress(orderWithCommitment.sourceChain),\n\t\t}\n\n\t\tconst { decimals: sourceChainFeeTokenDecimals } = await this.source.getFeeTokenWithDecimals()\n\n\t\tconst { address: destChainFeeTokenAddress, decimals: destChainFeeTokenDecimals } =\n\t\t\tawait this.dest.getFeeTokenWithDecimals()\n\n\t\tconst { gas: postGasEstimate, postRequestCalldata } = await this.source.estimateGas(postRequest)\n\n\t\tconst postGasEstimateInSourceFeeToken = await this.convertGasToFeeToken(\n\t\t\tpostGasEstimate,\n\t\t\t\"source\",\n\t\t\torderWithCommitment.sourceChain,\n\t\t)\n\n\t\tconst minRelayerFee = 5n * 10n ** BigInt(sourceChainFeeTokenDecimals - 2)\n\t\tconst postGasWithIncentive = postGasEstimateInSourceFeeToken + (postGasEstimateInSourceFeeToken * 1n) / 100n\n\t\tconst relayerFeeInSourceFeeToken = maxBigInt(postGasWithIncentive, minRelayerFee)\n\n\t\tconst relayerFeeInDestFeeToken = adjustFeeDecimals(\n\t\t\trelayerFeeInSourceFeeToken,\n\t\t\tsourceChainFeeTokenDecimals,\n\t\t\tdestChainFeeTokenDecimals,\n\t\t)\n\n\t\tconst fillOptions: FillOptions = {\n\t\t\trelayerFee: relayerFeeInDestFeeToken,\n\t\t}\n\n\t\tconst totalEthValue = orderWithCommitment.outputs\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 intentGatewayAddress = this.source.configService.getIntentGatewayAddress(orderWithCommitment.destChain)\n\t\tconst testValue = toHex(maxUint256 / 2n)\n\n\t\tconst orderOverrides = await Promise.all(\n\t\t\torderWithCommitment.outputs.map(async (output) => {\n\t\t\t\tconst tokenAddress = bytes32ToBytes20(output.token)\n\n\t\t\t\tif (tokenAddress === ADDRESS_ZERO) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst stateDiffs = []\n\n\t\t\t\t\tconst balanceData = ERC20Method.BALANCE_OF + bytes20ToBytes32(MOCK_ADDRESS).slice(2)\n\t\t\t\t\tconst balanceSlot = await getStorageSlot(this.dest.client, tokenAddress, balanceData as HexString)\n\t\t\t\t\tstateDiffs.push({ slot: balanceSlot as HexString, value: testValue })\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst allowanceData =\n\t\t\t\t\t\t\tERC20Method.ALLOWANCE +\n\t\t\t\t\t\t\tbytes20ToBytes32(MOCK_ADDRESS).slice(2) +\n\t\t\t\t\t\t\tbytes20ToBytes32(intentGatewayAddress).slice(2)\n\t\t\t\t\t\tconst allowanceSlot = await getStorageSlot(\n\t\t\t\t\t\t\tthis.dest.client,\n\t\t\t\t\t\t\ttokenAddress,\n\t\t\t\t\t\t\tallowanceData as HexString,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tstateDiffs.push({\n\t\t\t\t\t\t\tslot: allowanceSlot as HexString,\n\t\t\t\t\t\t\tvalue: testValue,\n\t\t\t\t\t\t})\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.warn(`Could not find allowance slot for token ${tokenAddress}:`, e)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { address: tokenAddress, stateDiff: stateDiffs }\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(`Could not find balance slot for token ${tokenAddress}:`, e)\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}),\n\t\t).then((results) => results.filter(Boolean))\n\n\t\tconst stateOverrides = [\n\t\t\t// Mock address with ETH balance so that any chain estimation runs\n\t\t\t// even when the address doesn't hold any native token in that chain\n\t\t\t{\n\t\t\t\taddress: MOCK_ADDRESS,\n\t\t\t\tbalance: maxUint256,\n\t\t\t},\n\t\t\t...orderOverrides.map((override) => ({\n\t\t\t\taddress: override!.address,\n\t\t\t\tstateDiff: override!.stateDiff,\n\t\t\t})),\n\t\t]\n\n\t\tlet destChainFillGas = 0n\n\t\ttry {\n\t\t\tlet protocolFeeInNativeToken = await this.quoteNative(postRequest, relayerFeeInDestFeeToken).catch(() =>\n\t\t\t\tthis.dest.quoteNative(postRequest, relayerFeeInDestFeeToken).catch(() => 0n),\n\t\t\t)\n\t\t\tprotocolFeeInNativeToken = protocolFeeInNativeToken + (protocolFeeInNativeToken * 50n) / 10000n\n\n\t\t\tdestChainFillGas = await this.dest.client.estimateContractGas({\n\t\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\tfunctionName: \"fillOrder\",\n\t\t\t\targs: [order as any, fillOptions as any],\n\t\t\t\taccount: MOCK_ADDRESS,\n\t\t\t\tvalue: totalEthValue + protocolFeeInNativeToken,\n\t\t\t\tstateOverride: stateOverrides as any,\n\t\t\t})\n\t\t} catch {\n\t\t\tconsole.warn(\n\t\t\t\t`Could not estimate gas for fill order with native token as fees for chain ${orderWithCommitment.destChain}, now trying with fee token as fees`,\n\t\t\t)\n\n\t\t\tconst destFeeTokenBalanceData = ERC20Method.BALANCE_OF + bytes20ToBytes32(MOCK_ADDRESS).slice(2)\n\t\t\tconst destFeeTokenBalanceSlot = await getStorageSlot(\n\t\t\t\tthis.dest.client,\n\t\t\t\tdestChainFeeTokenAddress,\n\t\t\t\tdestFeeTokenBalanceData as HexString,\n\t\t\t)\n\t\t\tconst destFeeTokenAllowanceData =\n\t\t\t\tERC20Method.ALLOWANCE +\n\t\t\t\tbytes20ToBytes32(MOCK_ADDRESS).slice(2) +\n\t\t\t\tbytes20ToBytes32(intentGatewayAddress).slice(2)\n\t\t\tconst destFeeTokenAllowanceSlot = await getStorageSlot(\n\t\t\t\tthis.dest.client,\n\t\t\t\tdestChainFeeTokenAddress,\n\t\t\t\tdestFeeTokenAllowanceData as HexString,\n\t\t\t)\n\t\t\tconst feeTokenStateDiffs = [\n\t\t\t\t{ slot: destFeeTokenBalanceSlot, value: testValue },\n\t\t\t\t{ slot: destFeeTokenAllowanceSlot, value: testValue },\n\t\t\t]\n\n\t\t\tstateOverrides.push({\n\t\t\t\taddress: destChainFeeTokenAddress,\n\t\t\t\tstateDiff: feeTokenStateDiffs as any,\n\t\t\t})\n\n\t\t\tdestChainFillGas = await this.dest.client.estimateContractGas({\n\t\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\tfunctionName: \"fillOrder\",\n\t\t\t\targs: [order as any, fillOptions as any],\n\t\t\t\taccount: MOCK_ADDRESS,\n\t\t\t\tvalue: totalEthValue,\n\t\t\t\tstateOverride: stateOverrides as any,\n\t\t\t})\n\t\t}\n\n\t\tconst fillGasInDestFeeToken = await this.convertGasToFeeToken(\n\t\t\tdestChainFillGas,\n\t\t\t\"dest\",\n\t\t\torderWithCommitment.destChain,\n\t\t)\n\t\tconst fillGasInSourceFeeToken = adjustFeeDecimals(\n\t\t\tfillGasInDestFeeToken,\n\t\t\tdestChainFeeTokenDecimals,\n\t\t\tsourceChainFeeTokenDecimals,\n\t\t)\n\n\t\tconst protocolFeeInSourceFeeToken = adjustFeeDecimals(\n\t\t\tawait this.dest.quote(postRequest),\n\t\t\tdestChainFeeTokenDecimals,\n\t\t\tsourceChainFeeTokenDecimals,\n\t\t)\n\n\t\tlet totalEstimateInSourceFeeToken =\n\t\t\tfillGasInSourceFeeToken + protocolFeeInSourceFeeToken + relayerFeeInSourceFeeToken\n\n\t\tlet totalNativeTokenAmount = await this.convertFeeTokenToNative(\n\t\t\ttotalEstimateInSourceFeeToken,\n\t\t\t\"source\",\n\t\t\torderWithCommitment.sourceChain,\n\t\t)\n\n\t\tif ([orderWithCommitment.destChain, orderWithCommitment.sourceChain].includes(\"EVM-1\")) {\n\t\t\ttotalEstimateInSourceFeeToken =\n\t\t\t\ttotalEstimateInSourceFeeToken + (totalEstimateInSourceFeeToken * 3000n) / 10000n\n\t\t\ttotalNativeTokenAmount = totalNativeTokenAmount + (totalNativeTokenAmount * 3200n) / 10000n\n\t\t} else {\n\t\t\ttotalEstimateInSourceFeeToken =\n\t\t\t\ttotalEstimateInSourceFeeToken + (totalEstimateInSourceFeeToken * 250n) / 10000n\n\t\t\ttotalNativeTokenAmount = totalNativeTokenAmount + (totalNativeTokenAmount * 350n) / 10000n\n\t\t}\n\t\treturn {\n\t\t\torder: {\n\t\t\t\t...order,\n\t\t\t\tfees: totalEstimateInSourceFeeToken,\n\t\t\t},\n\t\t\tfeeTokenAmount: totalEstimateInSourceFeeToken,\n\t\t\tnativeTokenAmount: totalNativeTokenAmount,\n\t\t\tpostRequestCalldata,\n\t\t}\n\t}\n\n\t/**\n\t * Converts fee token amounts back to the equivalent amount in native token.\n\t * Uses USD pricing to convert between fee token amounts and native token costs.\n\t *\n\t * @param feeTokenAmount - The amount in fee token (DAI)\n\t * @param getQuoteIn - Whether to use \"source\" or \"dest\" chain for the conversion\n\t * @param evmChainID - The EVM chain ID in format \"EVM-{id}\"\n\t * @returns The fee token amount converted to native token amount\n\t * @private\n\t */\n\tprivate async convertFeeTokenToNative(\n\t\tfeeTokenAmount: bigint,\n\t\tgetQuoteIn: \"source\" | \"dest\",\n\t\tevmChainID: string,\n\t): Promise<bigint> {\n\t\tconst client = this[getQuoteIn].client\n\t\tconst wethAsset = this[getQuoteIn].configService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst feeToken = await this[getQuoteIn].getFeeTokenWithDecimals()\n\n\t\ttry {\n\t\t\tconst { amountOut } = await this.swap.findBestProtocolWithAmountIn(\n\t\t\t\tthis[getQuoteIn].client,\n\t\t\t\tfeeToken.address,\n\t\t\t\twethAsset,\n\t\t\t\tfeeTokenAmount,\n\t\t\t\tevmChainID,\n\t\t\t\t{ selectedProtocol: \"v2\" },\n\t\t\t)\n\n\t\t\tif (amountOut === 0n) {\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\treturn amountOut\n\t\t} catch {\n\t\t\t// Testnet block\n\t\t\tconst nativeCurrency = client.chain?.nativeCurrency\n\t\t\tconst chainId = Number.parseInt(evmChainID.split(\"-\")[1])\n\t\t\tconst feeTokenAmountDecimal = new Decimal(formatUnits(feeTokenAmount, feeToken.decimals))\n\t\t\tconst nativeTokenPriceUsd = new Decimal(await fetchPrice(nativeCurrency?.symbol!, chainId))\n\t\t\tconst totalCostInNativeToken = feeTokenAmountDecimal.dividedBy(nativeTokenPriceUsd)\n\t\t\treturn parseUnits(totalCostInNativeToken.toFixed(nativeCurrency?.decimals!), nativeCurrency?.decimals!)\n\t\t}\n\t}\n\n\t/**\n\t * Converts gas costs to the equivalent amount in the fee token (DAI).\n\t * Uses USD pricing to convert between native token gas costs and fee token amounts.\n\t *\n\t * @param gasEstimate - The estimated gas units\n\t * @param gasEstimateIn - Whether to use \"source\" or \"dest\" chain for the conversion\n\t * @param evmChainID - The EVM chain ID in format \"EVM-{id}\"\n\t * @returns The gas cost converted to fee token amount\n\t * @private\n\t */\n\tprivate async convertGasToFeeToken(\n\t\tgasEstimate: bigint,\n\t\tgasEstimateIn: \"source\" | \"dest\",\n\t\tevmChainID: string,\n\t): Promise<bigint> {\n\t\tconst client = this[gasEstimateIn].client\n\t\tconst useEtherscan = USE_ETHERSCAN_CHAINS.has(evmChainID)\n\t\tconst etherscanApiKey = useEtherscan ? this[gasEstimateIn].configService.getEtherscanApiKey() : undefined\n\t\tconst gasPrice =\n\t\t\tuseEtherscan && etherscanApiKey\n\t\t\t\t? await retryPromise(() => getGasPriceFromEtherscan(evmChainID, etherscanApiKey), {\n\t\t\t\t\t\tmaxRetries: 3,\n\t\t\t\t\t\tbackoffMs: 250,\n\t\t\t\t\t}).catch(async () => {\n\t\t\t\t\t\tconsole.warn({ evmChainID }, \"Error getting gas price from etherscan, using client's gas price\")\n\t\t\t\t\t\treturn await client.getGasPrice()\n\t\t\t\t\t})\n\t\t\t\t: await client.getGasPrice()\n\t\tconst gasCostInWei = gasEstimate * gasPrice\n\t\tconst wethAddr = this[gasEstimateIn].configService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst feeToken = await this[gasEstimateIn].getFeeTokenWithDecimals()\n\n\t\ttry {\n\t\t\tconst { amountOut } = await this.swap.findBestProtocolWithAmountIn(\n\t\t\t\tthis[gasEstimateIn].client,\n\t\t\t\twethAddr,\n\t\t\t\tfeeToken.address,\n\t\t\t\tgasCostInWei,\n\t\t\t\tevmChainID,\n\t\t\t\t{ selectedProtocol: \"v2\" },\n\t\t\t)\n\t\t\tif (amountOut === 0n) {\n\t\t\t\tconsole.log(\"Amount out not found\")\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\treturn amountOut\n\t\t} catch {\n\t\t\t// Testnet block\n\t\t\tconst nativeCurrency = client.chain?.nativeCurrency\n\t\t\tconst chainId = Number.parseInt(evmChainID.split(\"-\")[1])\n\t\t\tconst gasCostInToken = new Decimal(formatUnits(gasCostInWei, nativeCurrency?.decimals!))\n\t\t\tconst tokenPriceUsd = await fetchPrice(nativeCurrency?.symbol!, chainId)\n\t\t\tconst gasCostUsd = gasCostInToken.times(tokenPriceUsd)\n\t\t\tconst feeTokenPriceUsd = new Decimal(1) // stable coin\n\t\t\tconst gasCostInFeeToken = gasCostUsd.dividedBy(feeTokenPriceUsd)\n\t\t\treturn parseUnits(gasCostInFeeToken.toFixed(feeToken.decimals), feeToken.decimals)\n\t\t}\n\t}\n\n\t/**\n\t * Gets a quote for the native token cost of dispatching a post request.\n\t *\n\t * @param postRequest - The post request to quote\n\t * @param fee - The fee amount in fee token\n\t * @returns The native token amount required\n\t */\n\tasync 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\tconst quoteNative = await this.dest.client.readContract({\n\t\t\taddress: this.dest.configService.getIntentGatewayAddress(postRequest.dest),\n\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\tfunctionName: \"quoteNative\",\n\t\t\targs: [dispatchPost] as any,\n\t\t})\n\n\t\treturn quoteNative\n\t}\n\n\t/**\n\t * Checks if an order has been filled by verifying the commitment status on-chain.\n\t * Reads the storage slot corresponding to the order's commitment hash.\n\t *\n\t * @param order - The order to check\n\t * @returns True if the order has been filled, false otherwise\n\t */\n\tasync isOrderFilled(order: Order): Promise<boolean> {\n\t\torder = transformOrder(order)\n\t\tconst intentGatewayAddress = this.source.configService.getIntentGatewayAddress(order.destChain)\n\n\t\tconst filledSlot = await this.dest.client.readContract({\n\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\taddress: intentGatewayAddress,\n\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\targs: [order.id as HexString],\n\t\t})\n\n\t\tconst filledStatus = await this.dest.client.getStorageAt({\n\t\t\taddress: intentGatewayAddress,\n\t\t\tslot: filledSlot,\n\t\t})\n\t\treturn filledStatus !== \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n\t}\n\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\tconsole.log(\"No receipt found. Attempting to submit...\")\n\t\t\ttry {\n\t\t\t\tawait hyperbridge.submitUnsigned(message)\n\t\t\t} catch {\n\t\t\t\tconsole.warn(\"Submission failed. Awaiting network confirmation...\")\n\t\t\t}\n\n\t\t\tconsole.log(\"Waiting for network state update...\")\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\n\t\tconsole.log(\"Hyperbridge Receipt confirmed.\")\n\t}\n\n\t/**\n\t * Returns the native token amount required to dispatch a cancellation GET request for the given order.\n\t * Internally constructs the IGetRequest and calls quoteNative.\n\t */\n\tasync quoteCancelNative(order: Order): Promise<bigint> {\n\t\tconst orderWithCommitment = transformOrder(order)\n\n\t\tconst height = (orderWithCommitment.deadline as bigint) + 1n\n\n\t\tconst destIntentGateway = this.dest.configService.getIntentGatewayAddress(orderWithCommitment.destChain)\n\t\tconst slotHash = await this.dest.client.readContract({\n\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\taddress: destIntentGateway,\n\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\targs: [orderWithCommitment.id as HexString],\n\t\t})\n\t\tconst key = concatHex([destIntentGateway as HexString, slotHash as HexString]) as HexString\n\n\t\tconst context = encodeAbiParameters(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tname: \"requestBody\",\n\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t{ name: \"commitment\", type: \"bytes32\" },\n\t\t\t\t\t\t{ name: \"beneficiary\", type: \"bytes32\" },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"tokens\",\n\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t{ name: \"token\", type: \"bytes32\" },\n\t\t\t\t\t\t\t\t{ name: \"amount\", type: \"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\t[\n\t\t\t\t{\n\t\t\t\t\tcommitment: orderWithCommitment.id as HexString,\n\t\t\t\t\tbeneficiary: orderWithCommitment.user as HexString,\n\t\t\t\t\ttokens: orderWithCommitment.inputs,\n\t\t\t\t},\n\t\t\t],\n\t\t) as HexString\n\n\t\tconst getRequest: IGetRequest = {\n\t\t\tsource: orderWithCommitment.sourceChain,\n\t\t\tdest: orderWithCommitment.destChain,\n\t\t\tfrom: this.source.configService.getIntentGatewayAddress(orderWithCommitment.destChain),\n\t\t\tnonce: await this.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\treturn await this.source.quoteNative(getRequest, 0n)\n\t}\n\n\t/**\n\t * Cancels an order through the cross-chain protocol by generating and submitting proofs.\n\t * This is an async generator function that yields status updates throughout the cancellation process.\n\t *\n\t * The cancellation process involves:\n\t * 1. Fetching proof from the destination chain that the order exists\n\t * 2. Creating a GET request to retrieve the order state\n\t * 3. Waiting for the source chain to finalize the request\n\t * 4. Fetching proof from the source chain\n\t * 5. Waiting for the challenge period to complete\n\t * 6. Submitting the request message to Hyperbridge\n\t * 7. Monitoring until Hyperbridge finalizes the cancellation\n\t *\n\t * @param order - The order to cancel, containing source/dest chains, deadline, and other order details\n\t * @param indexerClient - Client for querying the indexer and interacting with Hyperbridge\n\t *\n\t * @yields {CancelEvent} Status updates during the cancellation process:\n\t * - DESTINATION_FINALIZED: Destination proof has been obtained\n\t * - AWAITING_GET_REQUEST: Waiting for GET request to be provided\n\t * - SOURCE_FINALIZED: Source chain has finalized the request\n\t * - HYPERBRIDGE_DELIVERED: Hyperbridge has delivered the request\n\t * - HYPERBRIDGE_FINALIZED: Cancellation is complete\n\t *\n\t * @throws {Error} If GET request is not provided when needed\n\t *\n\t * @example\n\t * ```typescript\n\t * // Using default IntentGateway address\n\t * const intentGateway = new IntentGateway(sourceChain, destChain);\n\t * const cancelStream = intentGateway.cancelOrder(order, indexerClient);\n\t *\n\t * // Using custom IntentGateway address (e.g., for old contract version)\n\t * const intentGateway = new IntentGateway(\n\t * sourceChain,\n\t * destChain,\n\t * \"0xd54165e45926720b062C192a5bacEC64d5bB08DA\"\n\t * );\n\t * const cancelStream = intentGateway.cancelOrder(order, indexerClient);\n\t *\n\t * // Or set it after instantiation\n\t * const intentGateway = new IntentGateway(sourceChain, destChain);\n\t * intentGateway.destIntentGatewayAddress = \"0xd54165e45926720b062C192a5bacEC64d5bB08DA\";\n\t * const cancelStream = intentGateway.cancelOrder(order, indexerClient);\n\t *\n\t * for await (const event of cancelStream) {\n\t * switch (event.status) {\n\t * case 'SOURCE_FINALIZED':\n\t * console.log('Source finalized at block:', event.data.metadata.blockNumber);\n\t * break;\n\t * case 'HYPERBRIDGE_FINALIZED':\n\t * console.log('Cancellation complete');\n\t * break;\n\t * }\n\t * }\n\t * ```\n\t */\n\tasync *cancelOrder(order: Order, indexerClient: IndexerClient): AsyncGenerator<CancelEvent> {\n\t\tconst orderId = orderCommitment(order)\n\n\t\tconst hyperbridge = indexerClient.hyperbridge as SubstrateChain\n\t\tconst sourceStateMachine = hexToString(order.sourceChain as HexString)\n\t\tconst sourceConsensusStateId = this.source.configService.getConsensusStateId(sourceStateMachine)\n\n\t\tlet destIProof: IProof | null = await this.storage.getItem(STORAGE_KEYS.destProof(orderId))\n\t\tif (!destIProof) {\n\t\t\tdestIProof = yield* this.fetchDestinationProof(order, indexerClient)\n\t\t\tawait this.storage.setItem(STORAGE_KEYS.destProof(orderId), destIProof)\n\t\t} else {\n\t\t\tyield { status: \"DESTINATION_FINALIZED\", data: { proof: destIProof } }\n\t\t}\n\n\t\tlet getRequest: IGetRequest | null = await this.storage.getItem(STORAGE_KEYS.getRequest(orderId))\n\t\tif (!getRequest) {\n\t\t\tconst transactionHash = yield {\n\t\t\t\tstatus: \"AWAITING_GET_REQUEST\",\n\t\t\t\tdata: undefined,\n\t\t\t}\n\t\t\tconst receipt = await this.source.client.getTransactionReceipt({\n\t\t\t\thash: transactionHash,\n\t\t\t})\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.storage.setItem(STORAGE_KEYS.getRequest(orderId), getRequest)\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\tif (statusUpdate.status === RequestStatus.SOURCE_FINALIZED) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"SOURCE_FINALIZED\",\n\t\t\t\t\tdata: { metadata: statusUpdate.metadata },\n\t\t\t\t}\n\n\t\t\t\tconst sourceHeight = BigInt(statusUpdate.metadata.blockNumber)\n\t\t\t\tlet sourceIProof: IProof | null = await this.storage.getItem(STORAGE_KEYS.sourceProof(orderId))\n\t\t\t\tif (!sourceIProof) {\n\t\t\t\t\tsourceIProof = await fetchSourceProof(\n\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\tthis.source,\n\t\t\t\t\t\tsourceStateMachine,\n\t\t\t\t\t\tsourceConsensusStateId,\n\t\t\t\t\t\tsourceHeight,\n\t\t\t\t\t)\n\t\t\t\t\tawait this.storage.setItem(STORAGE_KEYS.sourceProof(orderId), sourceIProof)\n\t\t\t\t}\n\n\t\t\t\tawait waitForChallengePeriod(hyperbridge, {\n\t\t\t\t\theight: sourceIProof.height,\n\t\t\t\t\tid: {\n\t\t\t\t\t\tstateId: parseStateMachineId(sourceStateMachine).stateId,\n\t\t\t\t\t\tconsensusStateId: sourceConsensusStateId,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tconst getRequestMessage: IGetRequestMessage = {\n\t\t\t\t\tkind: \"GetRequest\",\n\t\t\t\t\trequests: [getRequest],\n\t\t\t\t\tsource: sourceIProof,\n\t\t\t\t\tresponse: destIProof,\n\t\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t\t}\n\n\t\t\t\tawait this.submitAndConfirmReceipt(hyperbridge, commitment, getRequestMessage)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (statusUpdate.status === RequestStatus.HYPERBRIDGE_DELIVERED) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"HYPERBRIDGE_DELIVERED\",\n\t\t\t\t\tdata: statusUpdate as RequestStatusWithMetadata,\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (statusUpdate.status === RequestStatus.HYPERBRIDGE_FINALIZED) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"HYPERBRIDGE_FINALIZED\",\n\t\t\t\t\tdata: statusUpdate as RequestStatusWithMetadata,\n\t\t\t\t}\n\t\t\t\tawait this.storage.removeItem(STORAGE_KEYS.destProof(orderId))\n\t\t\t\tawait this.storage.removeItem(STORAGE_KEYS.getRequest(orderId))\n\t\t\t\tawait this.storage.removeItem(STORAGE_KEYS.sourceProof(orderId))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetches proof for the destination chain.\n\t * @param order - The order to fetch proof for\n\t * @param indexerClient - Client for querying the indexer\n\t */\n\tprivate async *fetchDestinationProof(\n\t\torder: Order,\n\t\tindexerClient: IndexerClient,\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.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 intentGatewayAddress =\n\t\t\t\t\tthis.destIntentGatewayAddress ??\n\t\t\t\t\tthis.dest.configService.getIntentGatewayAddress(this.dest.config.stateMachineId)\n\t\t\t\tconst orderId = orderCommitment(order)\n\t\t\t\tconst slotHash = await this.dest.client.readContract({\n\t\t\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\t\t\targs: [orderId],\n\t\t\t\t})\n\n\t\t\t\tconst proofHex = await this.dest.queryStateProof(latestHeight, [slotHash], intentGatewayAddress)\n\n\t\t\t\tconst proof: IProof = {\n\t\t\t\t\tconsensusStateId: this.dest.config.consensusStateId,\n\t\t\t\t\theight: latestHeight,\n\t\t\t\t\tproof: proofHex,\n\t\t\t\t\tstateMachine: this.dest.config.stateMachineId,\n\t\t\t\t}\n\n\t\t\t\tyield { status: \"DESTINATION_FINALIZED\", data: { 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\n/**\n * Transforms an Order object into the format expected by the smart contract.\n * Converts chain IDs to hex format and restructures input/output arrays.\n *\n * @param order - The order to transform\n * @returns The order in contract-compatible format\n */\nfunction transformOrder(order: Order) {\n\treturn {\n\t\t...order,\n\t\tid: orderCommitment(order),\n\t\tsourceChain: hexToString(order.sourceChain as HexString),\n\t\tdestChain: hexToString(order.destChain as HexString),\n\t}\n}\n\n/**\n * Fetches proof for the source chain.\n */\nasync function fetchSourceProof(\n\tcommitment: HexString,\n\tsource: EvmChain,\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\ninterface CancelEventMap {\n\tDESTINATION_FINALIZED: { proof: IProof }\n\tAWAITING_GET_REQUEST: undefined\n\tSOURCE_FINALIZED: { metadata: { blockNumber: number } }\n\tHYPERBRIDGE_DELIVERED: RequestStatusWithMetadata\n\tHYPERBRIDGE_FINALIZED: RequestStatusWithMetadata\n\tSOURCE_PROOF_RECEIVED: IProof\n}\n\ntype CancelEvent = {\n\t[K in keyof CancelEventMap]: { status: K; data: CancelEventMap[K] }\n}[keyof CancelEventMap]\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 { hexToBytes, pad, bytesToHex } from \"viem\"\nimport type { ApiPromise } from \"@polkadot/api\"\nimport { Struct, Vector, u8, u64, _void, Option, u128, bool } from \"scale-ts\"\nimport { H256, StateMachine } from \"@/utils/substrate\"\nimport type { HexString } from \"@/types\"\nimport { convertStateMachineIdToEnum } from \"@/chain\"\nimport { keccakAsU8a, xxhashAsU8a } from \"@polkadot/util-crypto\"\nimport type { Option as PolakdotOption } from \"@polkadot/types\"\nimport type { EventRecord, StorageData } from \"@polkadot/types/interfaces\"\nimport type { SignerOptions } from \"@polkadot/api/types\"\nimport type { HyperbridgeTxEvents } from \"./xcmGateway\"\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/// Receipient\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.tokenGatewayAddress - Gateway contract address\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 * @param options - Signer options\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}): Promise<ReadableStream<HyperbridgeTxEvents>> {\n\tconst { who, options, params, apiPromise } = teleport_param\n\n\tconst substrateComplianceAddr = (address: HexString, stateMachine: string) => {\n\t\tif (stateMachine.startsWith(\"EVM-\")) return pad(address, { size: 32, dir: \"left\" })\n\n\t\treturn address\n\t}\n\n\tconst assetId = keccakAsU8a(params.symbol)\n\n\t// Fetch scale encoded local asset id\n\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 destination = convertStateMachineIdToEnum(params.destination)\n\n\tconst recipient = hexToBytes(substrateComplianceAddr(params.recipient, params.destination))\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 tx = apiPromise.tx.tokenGateway.teleport(fullCallData)\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(who, 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\t// @ts-expect-error Type Mismatch\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"]}
1
+ {"version":3,"sources":["../../src/utils/ckb-mmr-wasm/dist/web/web.js","../../src/types/index.ts","../../src/abis/evmHost.ts","../../src/abis/handler.ts","../../src/configs/chain.ts","../../src/configs/ChainConfigService.ts","../../src/utils/mmr.ts","../../src/utils/substrate.ts","../../src/utils.ts","../../src/utils/exceptions.ts","../../src/abis/uniswapRouterV2.ts","../../src/chains/evm.ts","../../src/chains/substrate.ts","../../src/chain.ts","../../src/queries.ts","../../src/query-client.ts","../../src/client.ts","../../src/abis/IntentGateway.ts","../../src/storage/drivers/browser.ts","../../src/storage/index.ts","../../src/abis/uniswapV3Quoter.ts","../../src/abis/uniswapV4Quoter.ts","../../src/abis/universalRouter.ts","../../src/abis/permit2.ts","../../src/utils/swap.ts","../../src/protocols/intents.ts","../../src/utils/txEvents.ts","../../src/utils/tokenGateway.ts","../../src/utils/xcmGateway.ts"],"names":["ptr","HyperClientStatus","OrderStatus","TeleportStatus","RequestKind","ABI","Chains","env","generate_root_with_proof","encodePacked","wasm","Request","Response","toHex","hexToBytes","ERC20Method","client","mainnet","arbitrum","base","bsc","bscTestnet","gnosisChiado","polygon","unichain","bytesToHex","encoded","message","keccak256","Vector","u8","toBytes","match","createConsola","LogLevels","request","pad","timeout","teleport","key","maxUint256","encodeAbiParameters","encodeFunctionData","erc20Abi","amountInV2","transactions","amountInV3","bestV3Fee","amountInV4","bestV4Fee","amountOutV2","amountOutV3","amountOutV4","concatHex","hexToString","parseEventLogs","Struct","u64","Option","assetId","keccakAsU8a","assets","parseUnits"],"mappings":"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","file":"index.js","sourcesContent":["let wasm;\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_export_0.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\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 let deferred3_0;\n let deferred3_1;\n try {\n const ptr0 = passArray8ToWasm0(calldata_bytes, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.generate_root_with_proof(ptr0, len0, tree_size);\n var ptr2 = ret[0];\n var len2 = ret[1];\n if (ret[3]) {\n ptr2 = 0; len2 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_0.set(idx, obj);\n return idx;\n}\n\nfunction passArrayJsValueToWasm0(array, malloc) {\n const ptr = malloc(array.length * 4, 4) >>> 0;\n for (let i = 0; i < array.length; i++) {\n const add = addToExternrefTable0(array[i]);\n getDataViewMemory0().setUint32(ptr + 4 * i, add, true);\n }\n WASM_VECTOR_LEN = array.length;\n return ptr;\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 const ptr0 = passStringToWasm0(root_hex, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArrayJsValueToWasm0(proof_hex, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passArray8ToWasm0(calldata_bytes, wasm.__wbindgen_malloc);\n const len2 = WASM_VECTOR_LEN;\n const ret = wasm.verify_proof(ptr0, len0, ptr1, len1, mmr_size, leaf_position, ptr2, len2);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] !== 0;\n}\n\nconst KeccakMergeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_keccakmerge_free(ptr >>> 0, 1));\n\nexport class KeccakMerge {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n KeccakMergeFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_keccakmerge_free(ptr, 0);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_0;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('web_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import type { ConsolaInstance } from \"consola\"\nimport type { GraphQLClient } from \"graphql-request\"\nimport type { ContractFunctionArgs, Hex, Log } from \"viem\"\nimport type HandlerV1 from \"@/abis/handler\"\nimport type { IChain } from \"@/chain\"\n\nexport type EstimateGasCallData = ContractFunctionArgs<\n\ttypeof HandlerV1.ABI,\n\t\"nonpayable\" | \"payable\",\n\t\"handlePostRequests\"\n>\n\nexport type HexString = `0x${string}`\n\nexport interface IConfig {\n\t// confuration object for the source chain\n\tsource: IEvmConfig | ISubstrateConfig\n\t// confuration object for the destination chain\n\tdest: IEvmConfig | ISubstrateConfig\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\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 TokenGatewayAssetTeleportedResponse {\n\ttokenGatewayAssetTeleporteds: {\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\trequests: {\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\tgetRequests: {\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\trequests: {\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\tassetTeleported: AssetTeleported\n}\n\nexport interface StateMachineIdParams {\n\tstateId: { Evm?: number; Substrate?: HexString; Polkadot?: number; Kusama?: number }\n\tconsensusStateId: HexString\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 address of the ERC20 token\n\t * address(0) is used as a sentinel for the native token\n\t */\n\ttoken: HexString\n\n\t/**\n\t * The amount of the token\n\t */\n\tamount: bigint\n}\n\n/**\n * Represents payment information for an order\n */\nexport interface PaymentInfo extends TokenInfo {\n\t/**\n\t * The address to receive the output tokens\n\t */\n\tbeneficiary: HexString\n}\n\n/**\n * Represents an order in the IntentGateway\n */\nexport interface Order {\n\t/**\n\t * The unique identifier for the order\n\t */\n\tid?: string\n\n\t/**\n\t * The address of the user who is initiating the transfer\n\t */\n\tuser: HexString\n\n\t/**\n\t * The state machine identifier of the origin chain\n\t */\n\tsourceChain: string\n\n\t/**\n\t * The state machine identifier of the destination chain\n\t */\n\tdestChain: string\n\n\t/**\n\t * The block number by which the order must be filled on the destination chain\n\t */\n\tdeadline: bigint\n\n\t/**\n\t * The nonce of the order\n\t */\n\tnonce: bigint\n\n\t/**\n\t * Represents the dispatch fees associated with the IntentGateway\n\t */\n\tfees: bigint\n\n\t/**\n\t * The tokens that the filler will provide\n\t */\n\toutputs: PaymentInfo[]\n\n\t/**\n\t * The tokens that are escrowed for the filler\n\t */\n\tinputs: TokenInfo[]\n\n\t/**\n\t * A bytes array to store the calls if any\n\t */\n\tcallData: HexString\n\n\t// Additional Data\n\t/**\n\t * The transaction hash of the order\n\t */\n\ttransactionHash?: HexString\n}\n\nexport interface DecodedOrderPlacedLog extends Log {\n\teventName: string\n\targs: {\n\t\tuser: HexString\n\t\tsourceChain: Hex\n\t\tdestChain: Hex\n\t\tdeadline: bigint\n\t\tnonce: bigint\n\t\tfees: bigint\n\t\toutputs: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t\tbeneficiary: HexString\n\t\t}>\n\t\tinputs: Array<{\n\t\t\ttoken: HexString\n\t\t\tamount: bigint\n\t\t}>\n\t\tcallData: HexString\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 filling an order\n */\nexport interface FillOptions {\n\t/**\n\t * The fee paid to the relayer for processing transactions\n\t */\n\trelayerFee: bigint\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\n/**\n * Configuration for the IntentFiller\n */\nexport interface FillerConfig {\n\t/**\n\t * Policy for determining confirmation requirements\n\t */\n\tconfirmationPolicy: {\n\t\tgetConfirmationBlocks: (chainId: number, amountUsd: number) => number\n\t}\n\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\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\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: HexString\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\nexport interface TokenRegistry {\n\tid: string\n\tname: string\n\tsymbol: string\n\taddress?: string\n\tupdateFrequencySeconds: number\n\tlastUpdatedAt: bigint\n\tcreatedAt: Date\n}\n\nexport interface TokenRegistryResponse {\n\ttokenRegistries: {\n\t\tnodes: Array<{\n\t\t\tid: string\n\t\t\tname: string\n\t\t\tsymbol: string\n\t\t\taddress: string\n\t\t\tupdateFrequencySeconds: number\n\t\t\tlastUpdatedAt: bigint\n\t\t\tcreatedAt: string\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","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\tname: \"ChallengePeriodNotElapsed\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"ConsensusClientExpired\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"DuplicateMessage\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"HostFrozen\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidMessageDestination\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"InvalidProof\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"MessageNotTimedOut\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"MessageTimedOut\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"StateCommitmentNotFound\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [],\n\t\tname: \"UnknownMessage\",\n\t\ttype: \"error\",\n\t},\n\t{\n\t\tinputs: [\n\t\t\t{\n\t\t\t\tinternalType: \"contract IIsmpHost\",\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 IIsmpHost\",\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\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: \"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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"stateMachineId\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"height\",\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 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{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"proof\",\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 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 IIsmpHost\",\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\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: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\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{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"multiproof\",\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: \"leafCount\",\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 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{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"address\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"address\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"keys\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes[]\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"context\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\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{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"key\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"value\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tinternalType: \"struct 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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"index\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"kIndex\",\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 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 IIsmpHost\",\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\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: \"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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"stateMachineId\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"height\",\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 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{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"proof\",\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 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 IIsmpHost\",\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\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: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\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{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"multiproof\",\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: \"leafCount\",\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 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\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"index\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"kIndex\",\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 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 IIsmpHost\",\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{\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: \"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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"stateMachineId\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"height\",\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 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{\n\t\t\t\t\t\tinternalType: \"bytes[]\",\n\t\t\t\t\t\tname: \"proof\",\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 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 IIsmpHost\",\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"stateMachineId\",\n\t\t\t\t\t\t\t\t\t\ttype: \"uint256\",\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: \"uint256\",\n\t\t\t\t\t\t\t\t\t\tname: \"height\",\n\t\t\t\t\t\t\t\t\t\ttype: \"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\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{\n\t\t\t\t\t\t\t\tinternalType: \"bytes32[]\",\n\t\t\t\t\t\t\t\tname: \"multiproof\",\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: \"leafCount\",\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 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{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"source\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"dest\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"nonce\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"from\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"to\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"timeoutTimestamp\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"uint64\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t\tname: \"body\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"bytes\",\n\t\t\t\t\t\t\t\t\t\t\t},\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{\n\t\t\t\t\t\t\t\t\t\tinternalType: \"bytes\",\n\t\t\t\t\t\t\t\t\t\tname: \"response\",\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],\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{\n\t\t\t\t\t\t\t\tinternalType: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"index\",\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: \"uint256\",\n\t\t\t\t\t\t\t\tname: \"kIndex\",\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 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: \"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] as const\n\nexport default { ABI }\n","import { Chain, bscTestnet, gnosisChiado, sepolia, mainnet, bsc, base, arbitrum, polygon, unichain } from \"viem/chains\"\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\tBASE_MAINNET = \"EVM-8453\",\n\tPOLYGON_MAINNET = \"EVM-137\",\n\tUNICHAIN_MAINNET = \"EVM-130\",\n}\n\ntype AddressMap = {\n\t[key: string]: {\n\t\t[K in Chains]?: `0x${string}`\n\t}\n}\n\ntype RpcMap = Record<Chains, string>\n\nexport const chainIds = {\n\t[Chains.BSC_CHAPEL]: 97,\n\t[Chains.GNOSIS_CHIADO]: 10200,\n\t[Chains.HYPERBRIDGE_GARGANTUA]: 4009,\n\t[Chains.SEPOLIA]: 11155111,\n\t[Chains.MAINNET]: 1,\n\t[Chains.BSC_MAINNET]: 56,\n\t[Chains.ARBITRUM_MAINNET]: 42161,\n\t[Chains.BASE_MAINNET]: 8453,\n\t[Chains.POLYGON_MAINNET]: 137,\n\t[Chains.UNICHAIN_MAINNET]: 130,\n} as const\n\nexport type ChainId = typeof chainIds\n\nexport const viemChains: Record<string, Chain> = {\n\t\"97\": bscTestnet,\n\t\"10200\": gnosisChiado,\n\t\"11155111\": sepolia,\n\t\"1\": mainnet,\n\t\"56\": bsc,\n\t\"42161\": arbitrum,\n\t\"8453\": base,\n\t\"137\": polygon,\n\t\"130\": unichain,\n}\n\nexport const WrappedNativeDecimals = {\n\t[Chains.BSC_CHAPEL]: 18,\n\t[Chains.GNOSIS_CHIADO]: 18,\n\t[Chains.SEPOLIA]: 18,\n\t[Chains.MAINNET]: 18,\n\t[Chains.BSC_MAINNET]: 18,\n\t[Chains.ARBITRUM_MAINNET]: 18,\n\t[Chains.BASE_MAINNET]: 18,\n\t[Chains.POLYGON_MAINNET]: 18,\n\t[Chains.UNICHAIN_MAINNET]: 18,\n}\n\nexport const assets = {\n\t[Chains.BSC_CHAPEL]: {\n\t\tWETH: \"0xae13d989dac2f0debff460ac112a837c89baa7cd\".toLowerCase(),\n\t\tDAI: \"0x1938165569A5463327fb206bE06d8D9253aa06b7\".toLowerCase(),\n\t\tUSDC: \"0xC625ec7D30A4b1AAEfb1304610CdAcD0d606aC92\".toLowerCase(),\n\t\tUSDT: \"0xc043f483373072f7f27420d6e7d7ad269c018e18\".toLowerCase(),\n\t},\n\t[Chains.GNOSIS_CHIADO]: {\n\t\tWETH: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDC: \"0x50B1d3c7c073c9caa1Ef207365A2c9C976bD70b9\".toLowerCase(),\n\t\tDAI: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDT: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t},\n\t[Chains.SEPOLIA]: {\n\t\tWETH: \"0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9\".toLowerCase(),\n\t\tUSDC: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDT: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tDAI: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t},\n\t[Chains.MAINNET]: {\n\t\tWETH: \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\".toLowerCase(),\n\t\tDAI: \"0x6B175474E89094C44Da98b954EedeAC495271d0F\".toLowerCase(),\n\t\tUSDC: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\".toLowerCase(),\n\t\tUSDT: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\".toLowerCase(),\n\t},\n\t[Chains.BSC_MAINNET]: {\n\t\tWETH: \"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\".toLowerCase(),\n\t\tDAI: \"0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3\".toLowerCase(),\n\t\tUSDC: \"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d\".toLowerCase(),\n\t\tUSDT: \"0x55d398326f99059fF775485246999027B3197955\".toLowerCase(),\n\t},\n\t[Chains.ARBITRUM_MAINNET]: {\n\t\tWETH: \"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\".toLowerCase(),\n\t\tDAI: \"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\".toLowerCase(),\n\t\tUSDC: \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\".toLowerCase(),\n\t\tUSDT: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\".toLowerCase(),\n\t},\n\t[Chains.BASE_MAINNET]: {\n\t\tWETH: \"0x4200000000000000000000000000000000000006\".toLowerCase(),\n\t\tDAI: \"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\".toLowerCase(),\n\t\tUSDC: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\".toLowerCase(),\n\t\tUSDT: \"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2\".toLowerCase(),\n\t},\n\t[Chains.POLYGON_MAINNET]: {\n\t\tWETH: \"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\".toLowerCase(),\n\t\tDAI: \"0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063\".toLowerCase(),\n\t\tUSDC: \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\".toLowerCase(),\n\t\tUSDT: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\".toLowerCase(),\n\t},\n\t[Chains.UNICHAIN_MAINNET]: {\n\t\tWETH: \"0x4200000000000000000000000000000000000006\".toLowerCase(),\n\t\tDAI: \"0x0000000000000000000000000000000000000000\".toLowerCase(),\n\t\tUSDC: \"0x078d782b760474a361dda0af3839290b0ef57ad6\".toLowerCase(),\n\t\tUSDT: \"0x9151434b16b9763660705744891fa906f660ecc5\".toLowerCase(),\n\t},\n}\n\nexport const addresses: AddressMap = {\n\tIntentGateway: {\n\t\t[Chains.BSC_CHAPEL]: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t[Chains.SEPOLIA]: \"0x016b6ffC9f890d1e28f9Fdb9eaDA776b02F89509\",\n\t\t[Chains.MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.BSC_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.BASE_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x1a4ee689a004b10210a1df9f24a387ea13359acf\",\n\t},\n\tHost: {\n\t\t[Chains.BSC_CHAPEL]: \"0x8Aa0Dea6D675d785A882967Bf38183f6117C09b7\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x58a41b89f4871725e5d898d98ef4bf917601c5eb\",\n\t\t[Chains.SEPOLIA]: \"0x2EdB74C269948b60ec1000040E104cef0eABaae8\",\n\t\t[Chains.MAINNET]: \"0x792A6236AF69787C40cF76b69B4c8c7B28c4cA20\",\n\t\t[Chains.BSC_MAINNET]: \"0x24B5d421Ec373FcA57325dd2F0C074009Af021F7\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xE05AFD4Eb2ce6d65c40e1048381BD0Ef8b4B299e\",\n\t\t[Chains.BASE_MAINNET]: \"0x6FFe92e4d7a9D589549644544780e6725E84b248\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xD8d3db17C1dF65b301D45C84405CcAC1395C559a\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x2A17C1c3616Bbc33FCe5aF5B965F166ba76cEDAf\",\n\t},\n\tUniswapRouter02: {\n\t\t[Chains.BSC_CHAPEL]: \"0x9639379819420704457B07A0C33B678D9E0F8Df0\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.SEPOLIA]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n\t\t[Chains.BSC_MAINNET]: \"0x10ED43C718714eb63d5aA57B78B54704E256024E\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24\",\n\t\t[Chains.BASE_MAINNET]: \"0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xd2f9496824951D5237cC71245D659E48d0d5f9E8\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x284f11109359a7e1306c3e447ef14d38400063ff\",\n\t},\n\tUniswapV2Factory: {\n\t\t[Chains.BSC_CHAPEL]: \"0x12e036669DA18F4A2777853d6e2136b32AceEC86\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.SEPOLIA]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f\",\n\t\t[Chains.BSC_MAINNET]: \"0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xf1D7CC64Fb4452F05c498126312eBE29f30Fbcf9\",\n\t\t[Chains.BASE_MAINNET]: \"0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x1F98400000000000000000000000000000000002\",\n\t},\n\tUniswapV3Factory: {\n\t\t[Chains.BSC_CHAPEL]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.GNOSIS_CHIADO]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.SEPOLIA]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t[Chains.BSC_MAINNET]: \"0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t[Chains.BASE_MAINNET]: \"0x33128a8fC17869897dcE68Ed026d694621f6FDfD\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x1F98431c8aD98523631AE4a59f267346ea31F984\",\n\t},\n\tUniversalRouter: {\n\t\t[Chains.BSC_CHAPEL]: \"0xcc6d5ece3d4a57245bf5a2f64f3ed9179b81f714\",\n\t\t[Chains.MAINNET]: \"0x66a9893cc07d91d95644aedd05d03f95e1dba8af\",\n\t\t[Chains.BSC_MAINNET]: \"0xd9C500DfF816a1Da21A48A732d3498Bf09dc9AEB\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xa51afafe0263b40edaef0df8781ea9aa03e381a3\",\n\t\t[Chains.BASE_MAINNET]: \"0x6ff5693b99212da76ad316178a184ab56d299b43\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x1095692a6237d83c6a72f3f5efedb9a670c49223\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0xef740bf23acae26f6492b10de645d6b98dc8eaf3\",\n\t},\n\tUniswapV3Quoter: {\n\t\t[Chains.BSC_CHAPEL]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t[Chains.BSC_MAINNET]: \"0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t[Chains.BASE_MAINNET]: \"0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x61fFE014bA17989E743c5F6cB21bF9697530B21e\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x385a5cf5f83e99f7bb2852b6a19c3538b9fa7658\",\n\t},\n\tUniswapV4Quoter: {\n\t\t[Chains.BSC_CHAPEL]: \"0x0000000000000000000000000000000000000000\",\n\t\t[Chains.MAINNET]: \"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203\",\n\t\t[Chains.BSC_MAINNET]: \"0xd0737C9762912dD34c3271197E362Aa736Df0926\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x3972c00f7ed4885e145823eb7c655375d275a1c5\",\n\t\t[Chains.BASE_MAINNET]: \"0x0d5e0f971ed27fbff6c2837bf31316121532048d\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xb3d5c3dfc3a7aebff71895a7191796bffc2c81b9\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203\",\n\t},\n\tCalldispatcher: {\n\t\t[Chains.SEPOLIA]: \"0xC7f13b6D03A0A7F3239d38897503E90553ABe155\",\n\t\t[Chains.MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.BSC_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.BASE_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.POLYGON_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0xc71251c8b3e7b02697a84363eef6dce8dfbdf333\",\n\t},\n\tPermit2: {\n\t\t[Chains.MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.BSC_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.ARBITRUM_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.BASE_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.POLYGON_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t\t[Chains.UNICHAIN_MAINNET]: \"0x000000000022D473030F116dDEE9F6B43aC78BA3\",\n\t},\n}\n\nexport const createRpcUrls = (env: NodeJS.ProcessEnv): RpcMap => ({\n\t[Chains.BSC_CHAPEL]: env.BSC_CHAPEL || \"https://bnb-testnet.api.onfinality.io/public\",\n\t[Chains.GNOSIS_CHIADO]: env.GNOSIS_CHIADO || \"https://gnosis-chiado-rpc.publicnode.com\",\n\t[Chains.HYPERBRIDGE_GARGANTUA]: env.HYPERBRIDGE_GARGANTUA || \"\",\n\t[Chains.SEPOLIA]: env.SEPOLIA || \"https://1rpc.io/sepolia\",\n\t[Chains.MAINNET]: env.ETH_MAINNET || \"https://eth-mainnet.g.alchemy.com/v2/demo\",\n\t[Chains.BSC_MAINNET]: env.BSC_MAINNET || \"https://binance.llamarpc.com\",\n\t[Chains.ARBITRUM_MAINNET]: env.ARBITRUM_MAINNET || \"https://arbitrum-one.public.blastapi.io\",\n\t[Chains.BASE_MAINNET]: env.BASE_MAINNET || \"https://base-mainnet.public.blastapi.io\",\n\t[Chains.POLYGON_MAINNET]: env.POLYGON_MAINNET || \"https://polygon-bor-rpc.publicnode.com\",\n\t[Chains.UNICHAIN_MAINNET]: env.UNICHAIN_MAINNET || \"https://unichain.api.onfinality.io/public\",\n})\n\nexport const consensusStateIds = {\n\t[Chains.BSC_CHAPEL]: \"BSC0\",\n\t[Chains.GNOSIS_CHIADO]: \"GNO0\",\n\t[Chains.HYPERBRIDGE_GARGANTUA]: \"PAS0\",\n\t[Chains.SEPOLIA]: \"ETH0\",\n\t[Chains.MAINNET]: \"ETH0\",\n\t[Chains.BSC_MAINNET]: \"BSC0\",\n\t[Chains.ARBITRUM_MAINNET]: \"ETH0\",\n\t[Chains.BASE_MAINNET]: \"ETH0\",\n\t[Chains.POLYGON_MAINNET]: \"POLY\",\n\t[Chains.UNICHAIN_MAINNET]: \"ETH0\",\n}\n\nexport const coingeckoIds = {\n\t[Chains.BSC_CHAPEL]: \"binance-smart-chain\",\n\t[Chains.GNOSIS_CHIADO]: \"gnosis\",\n\t[Chains.HYPERBRIDGE_GARGANTUA]: \"hyperbridge\",\n\t[Chains.SEPOLIA]: \"ethereum\",\n\t[Chains.MAINNET]: \"ethereum\",\n\t[Chains.BSC_MAINNET]: \"binance-smart-chain\",\n\t[Chains.ARBITRUM_MAINNET]: \"arbitrum-one\",\n\t[Chains.BASE_MAINNET]: \"base\",\n\t[Chains.POLYGON_MAINNET]: \"polygon-pos\",\n\t[Chains.UNICHAIN_MAINNET]: \"ethereum\",\n}\n\nexport const popularTokens = {\n\t[Chains.BSC_CHAPEL]: [\n\t\t\"0xae13d989dac2f0debff460ac112a837c89baa7cd\",\n\t\t\"0xC625ec7D30A4b1AAEfb1304610CdAcD0d606aC92\",\n\t\t\"0xc043f483373072f7f27420d6e7d7ad269c018e18\",\n\t\t\"0x1938165569A5463327fb206bE06d8D9253aa06b7\",\n\t],\n\t[Chains.GNOSIS_CHIADO]: [\"0x50B1d3c7c073c9caa1Ef207365A2c9C976bD70b9\"],\n\t[Chains.SEPOLIA]: [\"0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9\"],\n\t[Chains.MAINNET]: [\n\t\t\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n\t\t\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n\t\t\"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n\t\t\"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n\t],\n\t[Chains.BSC_MAINNET]: [\n\t\t\"0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82\",\n\t\t\"0x000Ae314E2A2172a039B26378814C252734f556A\",\n\t\t\"0x8d0d000ee44948fc98c9b98a4fa4921476f08b0d\",\n\t\t\"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\",\n\t\t\"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d\",\n\t\t\"0x55d398326f99059fF775485246999027B3197955\",\n\t\t\"0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3\",\n\t],\n\t[Chains.ARBITRUM_MAINNET]: [\n\t\t\"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\n\t\t\"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n\t\t\"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n\t\t\"0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1\",\n\t],\n\t[Chains.BASE_MAINNET]: [\n\t\t\"0x4200000000000000000000000000000000000006\",\n\t\t\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n\t\t\"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2\",\n\t\t\"0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb\",\n\t],\n\t[Chains.POLYGON_MAINNET]: [\n\t\t\"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\n\t\t\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n\t\t\"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n\t\t\"0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063\",\n\t],\n\t[Chains.UNICHAIN_MAINNET]: [\n\t\t\"0x4200000000000000000000000000000000000006\",\n\t\t\"0x078d782b760474a361dda0af3839290b0ef57ad6\",\n\t\t\"0x9151434b16b9763660705744891fa906f660ecc5\",\n\t\t\"0x0000000000000000000000000000000000000000\",\n\t],\n}\n","import { toHex } from \"viem\"\nimport type { ChainConfig, HexString } from \"@/types\"\nimport {\n\taddresses,\n\tassets,\n\tchainIds,\n\tconsensusStateIds,\n\tcoingeckoIds,\n\tChains,\n\tWrappedNativeDecimals,\n\tcreateRpcUrls,\n} from \"@/configs/chain\"\n\nexport class ChainConfigService {\n\tprivate rpcUrls: Record<Chains, string>\n\n\tconstructor(env: NodeJS.ProcessEnv = process.env) {\n\t\tthis.rpcUrls = createRpcUrls(env)\n\t}\n\n\tgetChainConfig(chain: string): ChainConfig {\n\t\treturn {\n\t\t\tchainId: chainIds[chain as keyof typeof chainIds],\n\t\t\trpcUrl: this.rpcUrls[chain as Chains],\n\t\t\tintentGatewayAddress: this.getIntentGatewayAddress(chain),\n\t\t}\n\t}\n\n\tgetIntentGatewayAddress(chain: string): `0x${string}` {\n\t\treturn addresses.IntentGateway[chain as keyof typeof addresses.IntentGateway]! as `0x${string}`\n\t}\n\n\tgetHostAddress(chain: string): `0x${string}` {\n\t\treturn addresses.Host[chain as keyof typeof addresses.Host]! as `0x${string}`\n\t}\n\n\tgetWrappedNativeAssetWithDecimals(chain: string): { asset: HexString; decimals: number } {\n\t\treturn {\n\t\t\tasset: assets[chain as keyof typeof assets].WETH as HexString,\n\t\t\tdecimals: WrappedNativeDecimals[chain as keyof typeof WrappedNativeDecimals],\n\t\t}\n\t}\n\n\tgetDaiAsset(chain: string): HexString {\n\t\treturn assets[chain as keyof typeof assets].DAI as HexString\n\t}\n\n\tgetUsdtAsset(chain: string): HexString {\n\t\treturn assets[chain as keyof typeof assets].USDT as HexString\n\t}\n\n\tgetUsdcAsset(chain: string): HexString {\n\t\treturn assets[chain as keyof typeof assets].USDC as HexString\n\t}\n\n\tgetChainId(chain: string): number {\n\t\treturn chainIds[chain as keyof typeof chainIds]\n\t}\n\n\tgetConsensusStateId(chain: string): HexString {\n\t\treturn toHex(consensusStateIds[chain as keyof typeof consensusStateIds])\n\t}\n\n\tgetHyperbridgeChainId(): number {\n\t\treturn chainIds[Chains.HYPERBRIDGE_GARGANTUA]\n\t}\n\n\tgetRpcUrl(chain: string): string {\n\t\treturn this.rpcUrls[chain as Chains]\n\t}\n\n\tgetUniswapRouterV2Address(chain: string): HexString {\n\t\treturn addresses.UniswapRouter02[chain as keyof typeof addresses.UniswapRouter02]! as HexString\n\t}\n\n\tgetUniswapV2FactoryAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV2Factory[chain as keyof typeof addresses.UniswapV2Factory]! as HexString\n\t}\n\n\tgetUniswapV3FactoryAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV3Factory[chain as keyof typeof addresses.UniswapV3Factory]! as HexString\n\t}\n\n\tgetUniversalRouterAddress(chain: string): HexString {\n\t\treturn addresses.UniversalRouter[chain as keyof typeof addresses.UniversalRouter]! as HexString\n\t}\n\n\tgetUniswapV3QuoterAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV3Quoter[chain as keyof typeof addresses.UniswapV3Quoter]! as HexString\n\t}\n\n\tgetUniswapV4QuoterAddress(chain: string): HexString {\n\t\treturn addresses.UniswapV4Quoter[chain as keyof typeof addresses.UniswapV4Quoter]! as HexString\n\t}\n\n\tgetPermit2Address(chain: string): HexString {\n\t\treturn addresses.Permit2[chain as keyof typeof addresses.Permit2]! as HexString\n\t}\n\n\tgetCoingeckoId(chain: string): string | undefined {\n\t\treturn coingeckoIds[chain as keyof typeof coingeckoIds]\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 addresses.Calldispatcher[chain as keyof typeof addresses.Calldispatcher]! as HexString\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 * Gets peak position for a given height\n */\nfunction getPeakPosByHeight(height: number): bigint {\n\treturn (1n << BigInt(height + 1)) - 2n\n}\n\n/**\n * Gets the height and position of the leftmost peak\n */\nfunction leftPeakHeightPos(mmrSize: bigint): [number, bigint] {\n\tlet height = 1\n\tlet prevPos = 0n\n\tlet pos = getPeakPosByHeight(height)\n\n\twhile (pos < mmrSize) {\n\t\theight += 1\n\t\tprevPos = pos\n\t\tpos = getPeakPosByHeight(height)\n\t}\n\n\treturn [height - 1, prevPos]\n}\n\n/**\n * Gets the right peak at a given height and position\n */\nfunction getRightPeak(initialHeight: number, initialPos: bigint, mmrSize: bigint): [number, bigint] | null {\n\tlet height = initialHeight\n\tlet pos = initialPos\n\n\t// move to right sibling pos\n\tpos += siblingOffset(height)\n\n\t// loop until we find a pos in mmr\n\twhile (pos > mmrSize - 1n) {\n\t\tif (height === 0) {\n\t\t\treturn null\n\t\t}\n\t\t// move to left child\n\t\tpos -= parentOffset(height - 1)\n\t\theight -= 1\n\t}\n\n\treturn [height, pos]\n}\n\n/**\n * Gets all peaks in the MMR\n */\nfunction getPeaks(mmrSize: bigint): bigint[] {\n\tconst positions: bigint[] = []\n\tlet [height, pos] = leftPeakHeightPos(mmrSize)\n\n\tpositions.push(pos)\n\n\twhile (height > 0) {\n\t\tconst peak = getRightPeak(height, pos, mmrSize)\n\t\tif (!peak) break\n\t\t;[height, pos] = peak\n\t\tpositions.push(pos)\n\t}\n\n\treturn positions\n}\n\n/**\n * Checks if a number consists of all ones in its binary representation\n */\nfunction allOnes(num: bigint): boolean {\n\tif (num === 0n) return false\n\treturn num\n\t\t.toString(2)\n\t\t.split(\"\")\n\t\t.every((bit) => bit === \"1\")\n}\n\n/**\n * Calculates the position after jumping left in the tree\n */\nfunction jumpLeft(pos: bigint): bigint {\n\tconst bitLength = pos.toString(2).length\n\tconst mostSignificantBits = 1n << BigInt(bitLength - 1)\n\treturn pos - (mostSignificantBits - 1n)\n}\n\n/**\n * Calculates the height of a position in the tree\n */\nfunction posHeightInTree(initialPos: bigint): number {\n\tlet pos = initialPos + 1n\n\n\twhile (!allOnes(pos)) {\n\t\tpos = jumpLeft(pos)\n\t}\n\n\treturn pos.toString(2).length - 1\n}\n\n/**\n * Calculates the parent offset for a given height\n */\nfunction parentOffset(height: number): bigint {\n\treturn 2n << BigInt(height)\n}\n\n/**\n * Calculates the sibling offset for a given height\n */\nfunction siblingOffset(height: number): bigint {\n\treturn (2n << BigInt(height)) - 1n\n}\n\n/**\n * Takes elements from a vector while they satisfy a predicate\n */\nfunction takeWhileVec<T>(v: T[], p: (item: T) => boolean): T[] {\n\tconst index = v.findIndex((item) => !p(item))\n\tif (index === -1) {\n\t\tconst result = [...v]\n\t\tv.length = 0\n\t\treturn result\n\t}\n\treturn v.splice(0, index)\n}\n\n/**\n * Converts a node's MMR position to its k-index\n * @param leaves - Array of leaf positions\n * @param mmrSize - Size of the MMR\n * @returns Array of tuples containing position and k-index\n */\nexport function mmrPositionToKIndex(initialLeaves: bigint[], mmrSize: bigint): Array<[bigint, bigint]> {\n\tconst leaves = [...initialLeaves]\n\tconst peaks = getPeaks(mmrSize)\n\tconst leavesWithKIndices: Array<[bigint, bigint]> = []\n\n\tfor (const peak of peaks) {\n\t\tconst peakLeaves = takeWhileVec(leaves, (pos) => pos <= peak)\n\n\t\tif (peakLeaves.length > 0) {\n\t\t\tfor (const pos of peakLeaves) {\n\t\t\t\tconst height = posHeightInTree(peak)\n\t\t\t\tlet index = 0n\n\t\t\t\tlet parentPos = peak\n\n\t\t\t\tfor (let h = height; h >= 1; h--) {\n\t\t\t\t\tconst leftChild = parentPos - parentOffset(h - 1)\n\t\t\t\t\tconst rightChild = leftChild + siblingOffset(h - 1)\n\t\t\t\t\tindex *= 2n\n\n\t\t\t\t\tif (leftChild >= pos) {\n\t\t\t\t\t\tparentPos = leftChild\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentPos = rightChild\n\t\t\t\t\t\tindex += 1n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tleavesWithKIndices.push([pos, index])\n\t\t\t}\n\t\t}\n\t}\n\n\treturn leavesWithKIndices\n}\n\n/**\n * Calculate the total size of MMR (number of nodes) from the number of leaves.\n * @param numberOfLeaves - The number of leaves in the MMR\n * @returns The total size of the MMR (total number of nodes)\n */\nexport function calculateMMRSize(numberOfLeaves: bigint): bigint {\n\tconst numberOfPeaks = numberOfLeaves.toString(2).split(\"1\").length - 1\n\treturn 2n * numberOfLeaves - BigInt(numberOfPeaks)\n}\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 * - kIndex: The k-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; kIndex: 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, leaf_positions, 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\tconst [[, kIndex]] = mmrPositionToKIndex(leaf_positions, BigInt(mmr_size))\n\n\treturn {\n\t\troot: root as HexString,\n\t\tproof: proof as HexString[],\n\t\tindex: treeSize - 1n,\n\t\tkIndex,\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 { Struct, Vector, u8, u64, Tuple, Enum, _void, u32, Option } 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.\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 {\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\thexToBytes,\n\tkeccak256,\n\ttoHex,\n} from \"viem\"\nimport evmHost from \"./abis/evmHost\"\nimport handler from \"./abis/handler\"\nimport { type IChain, getStateCommitmentFieldSlot } from \"./chain\"\nimport { _queryRequestInternal } from \"./query-client\"\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\nexport function orderCommitment(order: Order): HexString {\n\tconst encodedOrder = encodeAbiParameters(\n\t\t[\n\t\t\t{\n\t\t\t\tname: \"order\",\n\t\t\t\ttype: \"tuple\",\n\t\t\t\tcomponents: [\n\t\t\t\t\t{ name: \"user\", type: \"bytes32\" },\n\t\t\t\t\t{ name: \"sourceChain\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"destChain\", type: \"bytes\" },\n\t\t\t\t\t{ name: \"deadline\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"nonce\", type: \"uint256\" },\n\t\t\t\t\t{ name: \"fees\", type: \"uint256\" },\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\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\t{ name: \"beneficiary\", type: \"bytes32\" },\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\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\t{ name: \"callData\", type: \"bytes\" },\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\t[\n\t\t\t{\n\t\t\t\tuser: order.user,\n\t\t\t\tsourceChain: order.sourceChain.startsWith(\"0x\")\n\t\t\t\t\t? (order.sourceChain as `0x${string}`)\n\t\t\t\t\t: toHex(order.sourceChain),\n\t\t\t\tdestChain: order.destChain.startsWith(\"0x\")\n\t\t\t\t\t? (order.destChain as `0x${string}`)\n\t\t\t\t\t: toHex(order.destChain),\n\t\t\t\tdeadline: order.deadline,\n\t\t\t\tnonce: order.nonce,\n\t\t\t\tfees: order.fees,\n\t\t\t\toutputs: order.outputs,\n\t\t\t\tinputs: order.inputs,\n\t\t\t\tcallData: order.callData,\n\t\t\t},\n\t\t],\n\t)\n\n\treturn keccak256(encodedOrder)\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 === ADDRESS_ZERO) {\n\t\treturn ADDRESS_ZERO\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\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 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, kIndex, 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\tkIndex,\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 * 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, beneficiary: HexString): HexString {\n\tconst commitment = order.id as HexString\n\tconst inputs = order.inputs\n\n\t// RequestKind.RedeemEscrow is 0 as defined in the contract\n\tconst requestKind = encodePacked([\"uint8\"], [RequestKind.RedeemEscrow])\n\n\tconst requestBody = {\n\t\tcommitment: commitment as HexString,\n\t\tbeneficiary: bytes20ToBytes32(beneficiary),\n\t\ttokens: inputs,\n\t}\n\n\tconst encodedRequestBody = 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[requestBody],\n\t)\n\n\treturn concatHex([requestKind, encodedRequestBody]) as HexString\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\n/**\n * Maps testnet identifiers to mainnet identifiers for price lookup\n * @param identifier - The original token identifier (symbol or contract address)\n * @returns The mapped mainnet identifier\n */\nexport function mapToValidCoingeckoId(identifier: string): string {\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\tdefault:\n\t\t\treturn identifier\n\t}\n}\n\nexport async function fetchPrice(identifier: string, chainId = 1, apiKey?: string): Promise<number> {\n\tconst mappedIdentifier = mapToValidCoingeckoId(identifier)\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 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 * 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\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 adjustFeeDecimals(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 * 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","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","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} from \"viem/chains\"\n\nimport { flatten, zip } from \"lodash-es\"\nimport { match } from \"ts-pattern\"\nimport type { GetProofParameters, Hex } from \"viem\"\n\nimport EvmHost from \"@/abis/evmHost\"\nimport evmHost from \"@/abis/evmHost\"\nimport HandlerV1 from \"@/abis/handler\"\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\tMmrProof,\n\tSubstrateStateProof,\n\tcalculateMMRSize,\n\tgenerateRootWithProof,\n\tmmrPositionToKIndex,\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}\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 * 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}\n\n/**\n * Encapsulates an EVM chain.\n */\nexport class EvmChain implements IChain {\n\tprivate publicClient: PublicClient\n\tprivate chainConfigService: ChainConfigService\n\n\tconstructor(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\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}\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// 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 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 * 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 * 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\tconst [[, kIndex]] = mmrPositionToKIndex(\n\t\t\t\t\t\t\t[leafIndexAndPos?.pos],\n\t\t\t\t\t\t\tcalculateMMRSize(mmrProof.leafCount),\n\t\t\t\t\t\t)\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\tkIndex,\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: HandlerV1.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: HandlerV1.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\tconst [[, kIndex]] = mmrPositionToKIndex(\n\t\t\t\t\t\t\t[leafIndexAndPos?.pos],\n\t\t\t\t\t\t\tcalculateMMRSize(mmrProof.leafCount),\n\t\t\t\t\t\t)\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\tkIndex,\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: HandlerV1.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: \"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, kIndex, 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\tkIndex,\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: HandlerV1.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: HandlerV1.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\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 new EvmChain({\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\nfunction 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","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} 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\tconstructor(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\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 * connect: 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: {\n\t\t\t\t\t\t\t\thasher: keccakAsU8a,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgargantua: {\n\t\t\t\t\t\t\t\thasher: keccakAsU8a,\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\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 * @returns The state proof as a hexadecimal string.\n\t */\n\tasync queryStateProof(at: bigint, keys: 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 consensusStateIdToBytes = hexToBytes(stateMachineId.consensusStateId)\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decodedConsensusStateId = decoder.decode(consensusStateIdToBytes)\n\n\t\tconst payload = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: decodedConsensusStateId,\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 consensusStateIdToBytes = hexToBytes(stateMachineHeight.id.consensusStateId)\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decodedConsensusStateId = decoder.decode(consensusStateIdToBytes)\n\n\t\tconst stateMachineId = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: decodedConsensusStateId,\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 consensusStateIdToBytes = hexToBytes(stateMachineId.consensusStateId)\n\t\tconst decoder = new TextDecoder(\"utf-8\")\n\t\tconst decodedConsensusStateId = decoder.decode(consensusStateIdToBytes)\n\n\t\tconst payload = {\n\t\t\tstate_id,\n\t\t\tconsensus_state_id: decodedConsensusStateId,\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 * Returns the index of a pallet by its name, by looking up the pallets in the runtime metadata.\n\t * @param {string} name - The name of the pallet.\n\t * @returns {number} The index of the pallet.\n\t */\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\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.exhaustive()\n\t} catch (error) {\n\t\tthrow new Error(\"Failed to encode ISMP message\", { cause: error })\n\t}\n}\n","import { EvmChain, SubstrateChain } from \"@/chain\"\nimport type {\n\tGetResponseStorageValues,\n\tHexString,\n\tIEvmConfig,\n\tIGetRequest,\n\tIMessage,\n\tIPostRequest,\n\tISubstrateConfig,\n\tStateMachineHeight,\n\tStateMachineIdParams,\n} from \"@/types\"\nimport { isEvmChain, isSubstrateChain } from \"@/utils\"\nimport { ExpectedError } from \"./utils/exceptions\"\n\nexport * from \"@/chains/evm\"\nexport * from \"@/chains/substrate\"\n\n/**\n * Type representing an ISMP message.\n */\nexport type IIsmpMessage = IRequestMessage | ITimeoutPostRequestMessage | IGetResponseMessage | IGetRequestMessage\n\nexport interface IRequestMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"PostRequest\"\n\t/**\n\t * The requests to be posted.\n\t */\n\trequests: IPostRequest[]\n\t/**\n\t * The proof of the requests.\n\t */\n\tproof: IProof\n\t/**\n\t * The signer of the message.\n\t */\n\tsigner: HexString\n}\n\nexport interface IGetRequestMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"GetRequest\"\n\t/**\n\t * The requests to be posted.\n\t */\n\trequests: IGetRequest[]\n\t/**\n\t * The proof of the requests from the source chain.\n\t */\n\tsource: IProof\n\t/**\n\t * The proof of the response from the target chain\n\t */\n\tresponse: IProof\n\t/**\n\t * The signer of the message.\n\t */\n\tsigner: HexString\n}\n\nexport interface IGetResponse {\n\t/**\n\t * The request that triggered this response.\n\t */\n\tget: IGetRequest\n\t/**\n\t * The response message.\n\t */\n\tvalues: GetResponseStorageValues[]\n}\n\nexport interface IGetResponseMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"GetResponse\"\n\t/**\n\t * The responses to be posted.\n\t */\n\tresponses: IGetResponse[]\n\t/**\n\t * The proof of the responses.\n\t */\n\tproof: IProof\n\t/**\n\t * The signer of the message.\n\t */\n\tsigner: HexString\n}\n\nexport interface ITimeoutPostRequestMessage {\n\t/**\n\t * The kind of message.\n\t */\n\tkind: \"TimeoutPostRequest\"\n\n\t/**\n\t * The requests to be posted.\n\t */\n\trequests: IPostRequest[]\n\n\t/**\n\t * The proof of the requests.\n\t */\n\tproof: IProof\n}\n\nexport interface IProof {\n\t/**\n\t * The height of the proof.\n\t */\n\theight: bigint\n\t/**\n\t * The state machine identifier of the proof.\n\t */\n\tstateMachine: string\n\n\t/**\n\t * The associated consensus state identifier of the proof.\n\t */\n\tconsensusStateId: string\n\n\t/**\n\t * The encoded storage proof\n\t */\n\tproof: HexString\n}\n\n/**\n * Interface representing a chain.\n */\nexport interface IChain {\n\t/**\n\t * Returns the configuration for this chain\n\t */\n\tget config(): IEvmConfig | ISubstrateConfig\n\n\t/*\n\t * Returns the current timestamp of the chain in seconds.\n\t */\n\ttimestamp(): Promise<bigint>\n\n\t/**\n\t * Returns the state trie key for the request-receipt storage item for the given request commitment.\n\t */\n\trequestReceiptKey(commitment: HexString): HexString\n\n\t/**\n\t * Query and return the request-receipt for the given request commitment.\n\t */\n\tqueryRequestReceipt(commitment: HexString): Promise<HexString | undefined>\n\n\t/**\n\t * Query and return the encoded storage proof for the provided keys at the given height.\n\t */\n\tqueryStateProof(at: bigint, keys: HexString[]): Promise<HexString>\n\n\t/*\n\t * Query and return the encoded storage proof for requests\n\t */\n\tqueryProof(message: IMessage, counterparty: string, at?: bigint): Promise<HexString>\n\n\t/*\n\t * Encode an ISMP message into the appropriate calldata for this chain.\n\t */\n\tencode(message: IIsmpMessage): HexString\n\n\t/**\n\t * Get the latest state machine height for a given state machine ID.\n\t */\n\tlatestStateMachineHeight(stateMachineId: StateMachineIdParams): Promise<bigint>\n\n\t/**\n\t * Get the challenge period for a given state machine ID.\n\t */\n\tchallengePeriod(stateMachineId: StateMachineIdParams): Promise<bigint>\n\n\t/**\n\t * Get the update time for a statemachine height.\n\t */\n\tstateMachineUpdateTime(stateMachineHeight: StateMachineHeight): Promise<bigint>\n}\n\n/**\n * Returns the chain interface for a given state machine identifier\n * @param chainConfig - Chain configuration\n * @returns Chain interface\n */\nexport async function getChain(chainConfig: IEvmConfig | ISubstrateConfig): Promise<IChain> {\n\tif (isEvmChain(chainConfig.stateMachineId)) {\n\t\tconst config = chainConfig as IEvmConfig\n\t\tconst chainId = Number.parseInt(chainConfig.stateMachineId.split(\"-\")[1])\n\t\tconst evmChain = new EvmChain({\n\t\t\tchainId,\n\t\t\trpcUrl: config.rpcUrl,\n\t\t\thost: config.host,\n\t\t\tconsensusStateId: config.consensusStateId,\n\t\t})\n\n\t\treturn evmChain\n\t}\n\n\tif (isSubstrateChain(chainConfig.stateMachineId)) {\n\t\tconst config = chainConfig as ISubstrateConfig\n\t\tconst substrateChain = new SubstrateChain(config)\n\n\t\tawait substrateChain.connect()\n\n\t\treturn substrateChain\n\t}\n\n\tthrow new ExpectedError(`Unsupported chain: ${chainConfig.stateMachineId}`)\n}\n","export const POST_REQUEST_STATUS = `\n query RequestStatusM($hash: String!) {\n requests(\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 getRequests(\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 status\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 assetTeleported(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 tokenGatewayAssetTeleporteds(\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\nexport const TOKEN_REGISTRY = `\nquery TokenRegistry($symbol: String!) {\n tokenRegistries(\n filter: { symbol: { equalTo: $symbol } }\n ) {\n nodes {\n id\n name\n symbol\n address\n updateFrequencySeconds\n lastUpdatedAt\n createdAt\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\tTOKEN_REGISTRY,\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\tTokenRegistry,\n\tTokenRegistryResponse,\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?.assetTeleported) {\n\t\t\t\tthrow new Error(`AssetTeleportedEvent not found for ${id}`)\n\t\t\t}\n\n\t\t\treturn response.assetTeleported\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.tokenGatewayAssetTeleporteds.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.requests.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.getRequests.nodes[0]) return\n\n\tlogger.trace(\"`Request` found\")\n\n\tconst statuses = response.getRequests.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.getRequests.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\ntype TokenRegistryQueryParams = {\n\tsymbol: string\n\tqueryClient: IndexerQueryClient\n\tlogger?: ConsolaInstance\n}\n\nexport async function _queryTokenRegistryInternal(\n\tparams: TokenRegistryQueryParams,\n): Promise<TokenRegistry | 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<TokenRegistryResponse>(TOKEN_REGISTRY, { 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 'TokenRegistry' by Symbol(${symbol})`,\n\t\t},\n\t)\n\n\tconst item = response.tokenRegistries.nodes?.[0]\n\tif (!item) return\n\n\tlogger.trace(\"`TokenRegistry` found\")\n\n\treturn {\n\t\tid: item.id,\n\t\tname: item.name,\n\t\tsymbol: item.symbol,\n\t\taddress: item.address,\n\t\tupdateFrequencySeconds: item.updateFrequencySeconds,\n\t\tlastUpdatedAt: item.lastUpdatedAt,\n\t\tcreatedAt: new Date(item.createdAt),\n\t}\n}\n","import { type ConsolaInstance, LogLevels, createConsola } from \"consola\"\nimport { isNil, maxBy } from \"lodash-es\"\nimport { pad, toHex } from \"viem\"\n\n// @ts-ignore\nimport mergeRace from \"@async-generator/merge-race\"\n\nimport type {\n\tAssetTeleported,\n\tAssetTeleportedResponse,\n\tBlockMetadata,\n\tClientConfig,\n\tGetRequestResponse,\n\tGetRequestWithStatus,\n\tGetResponseByRequestIdResponse,\n\tHexString,\n\tIEvmConfig,\n\tIHyperbridgeConfig,\n\tISubstrateConfig,\n\tOrderWithStatus,\n\tPostRequestStatus,\n\tPostRequestTimeoutStatus,\n\tPostRequestWithStatus,\n\tRequestStatusKey,\n\tRequestStatusWithMetadata,\n\tResponseCommitmentWithValues,\n\tRetryConfig,\n\tStateMachineResponse,\n\tStateMachineUpdate,\n\tTimeoutStatusKey,\n\tTokenGatewayAssetTeleportedWithStatus,\n} from \"@/types\"\n\nimport { type IChain, type SubstrateChain, getChain } from \"@/chain\"\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 {\n\tCOMBINED_STATUS_WEIGHTS,\n\tDEFAULT_POLL_INTERVAL,\n\tREQUEST_STATUS_WEIGHTS,\n\tTIMEOUT_STATUS_WEIGHTS,\n\tdateStringtoTimestamp,\n\tparseStateMachineId,\n\tpostRequestCommitment,\n\tretryPromise,\n\tsleep,\n\twaitForChallengePeriod,\n} from \"@/utils\"\nimport {\n\t_queryGetRequestInternal,\n\t_queryOrderInternal,\n\t_queryRequestInternal,\n\t_queryTokenGatewayAssetTeleportedInternal,\n} from \"./query-client\"\n\nimport { OrderStatus, RequestStatus, TeleportStatus, TimeoutStatus } from \"@/types\"\n\nimport type { IndexerQueryClient } from \"@/types\"\nimport { AbortSignalInternal, ExpectedError } from \"./utils/exceptions\"\n\n/**\n * Helper function to create chain configuration from legacy config format\n * This helps migrate from the old config format to the new IChain-based format\n *\n * @param config - Legacy configuration object (IEvmConfig, ISubstrateConfig, or IHyperbridgeConfig)\n * @returns Promise resolving to chain configuration with IChain instance\n */\nexport async function createChain(config: IEvmConfig | ISubstrateConfig | IHyperbridgeConfig): Promise<IChain> {\n\t// For hyperbridge config, we need to add the hasher\n\tconst chainConfig = \"wsUrl\" in config && !(\"hasher\" in config) ? { ...config, hasher: \"Keccak\" as const } : config\n\n\treturn await getChain(chainConfig as IEvmConfig | ISubstrateConfig)\n}\n\n/**\n * Helper function to create IndexerClient with legacy config format\n * @deprecated Use the constructor with IChain instances directly for better performance\n *\n * @param config - Legacy configuration with IEvmConfig/ISubstrateConfig/IHyperbridgeConfig\n * @returns Promise resolving to IndexerClient instance\n */\nexport async function createIndexerClient(config: {\n\tpollInterval?: number\n\tqueryClient: IndexerQueryClient\n\ttracing?: boolean\n\tsource: IEvmConfig | ISubstrateConfig\n\tdest: IEvmConfig | ISubstrateConfig\n\thyperbridge: IHyperbridgeConfig\n}): Promise<IndexerClient> {\n\tconst [source, dest, hyperbridge] = await Promise.all([\n\t\tcreateChain(config.source),\n\t\tcreateChain(config.dest),\n\t\tcreateChain(config.hyperbridge),\n\t])\n\n\treturn new IndexerClient({\n\t\tpollInterval: config.pollInterval,\n\t\tqueryClient: config.queryClient,\n\t\ttracing: config.tracing,\n\t\tsource,\n\t\tdest,\n\t\thyperbridge,\n\t})\n}\n\n/**\n * IndexerClient provides methods for interacting with the Hyperbridge indexer.\n *\n * This client facilitates querying and tracking cross-chain requests and their status\n * through the Hyperbridge protocol. It supports:\n *\n * - Querying state machine updates by block height or timestamp\n * - Retrieving request status information by transaction hash\n * - Monitoring request status changes through streaming interfaces\n * - Handling request timeout flows and related proof generation\n * - Tracking request finalization across source and destination chains\n *\n * The client implements automatic retries with exponential backoff for network\n * resilience and provides both simple query methods and advanced streaming\n * interfaces for real-time status tracking.\n *\n * The URLs provided in the configuration must point to archive nodes to allow the client to query for storage proofs\n * of potentially much older blocks. Regular nodes only store the state for recent blocks and will not be able\n * to provide the necessary proofs for cross-chain verification, especially in timeout scenarios.\n *\n * @example\n * ```typescript\n * // New approach: Create IChain instances directly\n * const sourceChain = new EvmChain({\n * chainId: 1,\n * rpcUrl: \"https://eth-rpc.com\",\n * host: \"0x87ea45..\",\n * consensusStateId: \"ETH0\"\n * })\n * const destChain = new EvmChain({\n * chainId: 42161,\n * rpcUrl: \"https://arb-rpc.com\",\n * host: \"0x87ea42345..\",\n * consensusStateId: \"ARB0\"\n * })\n * const hyperbridgeChain = new SubstrateChain({\n * stateMachineId: \"POLKADOT-3367\",\n * wsUrl: \"ws://localhost:9944\",\n * hasher: \"Keccak\",\n * consensusStateId: \"DOT0\"\n * })\n * await hyperbridgeChain.connect()\n *\n * const client = new IndexerClient({\n * queryClient: queryClient,\n * pollInterval: 2000,\n * source: sourceChain,\n * dest: destChain,\n * hyperbridge: hyperbridgeChain\n * });\n *\n * // Legacy approach: Use the helper function (deprecated)\n * const client = await createIndexerClient({\n * queryClient: queryClient,\n * pollInterval: 2000,\n * source: {\n * stateMachineId: \"EVM-1\",\n * consensusStateId: \"ETH0\",\n * rpcUrl: \"https://eth-rpc.com\",\n * host: \"0x87ea45..\"\n * },\n * dest: {\n * stateMachineId: \"EVM-42161\",\n * consensusStateId: \"ETH0\",\n * rpcUrl: \"https://arb-rpc.com\",\n * host: \"0x87ea42345..\"\n * },\n * hyperbridge: {\n * stateMachineId: \"POLKADOT-3367\",\n * consensusStateId: \"DOT0\",\n * wsUrl: \"ws://localhost:9944\"\n * }\n * });\n *\n * // Query a request status\n * const status = await client.queryRequestWithStatus(\"0x1234...\");\n *\n * // Stream status updates\n * for await (const update of client.postRequestStatusStream(\"0x1234...\")) {\n * console.log(`Request status: ${update.status}`);\n * }\n * ```\n */\nexport class IndexerClient {\n\t/**\n\t * GraphQL client used for making requests to the indexer\n\t */\n\tprivate client: IndexerQueryClient\n\n\t/**\n\t * Configuration for the IndexerClient including URLs, poll intervals, and chain-specific settings\n\t */\n\tprivate config: ClientConfig\n\n\tprivate logger: ConsolaInstance\n\n\t/**\n\t * Default configuration for retry behavior when network requests fail\n\t * - maxRetries: Maximum number of retry attempts before failing\n\t * - backoffMs: Initial backoff time in milliseconds (doubles with each retry)\n\t */\n\tprivate defaultRetryConfig: RetryConfig = {\n\t\tmaxRetries: 3,\n\t\tbackoffMs: 1000,\n\t}\n\n\t/**\n\t * Creates a new IndexerClient instance\n\t */\n\tconstructor(config: PartialClientConfig) {\n\t\tthis.client = config.queryClient\n\t\tthis.config = {\n\t\t\tpollInterval: DEFAULT_POLL_INTERVAL,\n\t\t\t...config,\n\t\t}\n\t\tthis.logger = createConsola({\n\t\t\tlevel: LogLevels[config.tracing ? \"trace\" : \"info\"],\n\t\t\tformatOptions: {\n\t\t\t\tcolumns: 80,\n\t\t\t\tcolors: true,\n\t\t\t\tcompact: true,\n\t\t\t\tdate: false,\n\t\t\t},\n\t\t})\n\t}\n\n\t/**\n\t * Get the source chain instance\n\t */\n\tget source(): IChain {\n\t\treturn this.config.source\n\t}\n\n\t/**\n\t * Get the destination chain instance\n\t */\n\tget dest(): IChain {\n\t\treturn this.config.dest\n\t}\n\n\t/**\n\t * Get the hyperbridge chain instance\n\t */\n\tget hyperbridge(): IChain {\n\t\treturn this.config.hyperbridge\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 * @params statemachineId - ID of the state machine\n\t * @params height - Starting block height\n\t * @params chain - The identifier for the chain where the state machine update should be queried (corresponds to a stateMachineId)\n\t * @returns Closest state machine update\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\tthis.withRetry(\n\t\t\t\t() => {\n\t\t\t\t\treturn this.client.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\t},\n\t\t\t\t{ logger: logger, logMessage: `${message} (ASC)` },\n\t\t\t),\n\t\t\tthis.withRetry(\n\t\t\t\t() => {\n\t\t\t\t\treturn this.client.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\t},\n\t\t\t\t{ logger: logger, logMessage: `${message} (DESC)` },\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) {\n\t\t\treturn undefined\n\t\t}\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(\"Response >\", combined)\n\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 * @params statemachineId - ID of the state machine\n\t * @params timestamp - Starting block timestamp\n\t * @params chain - The identifier for the chain where the state machine update should be queried (corresponds to a stateMachineId)\n\t * @returns Closest state machine update\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\t\tconst message = `querying StateMachineId(${statemachineId}) update by Timestamp(${commitmentTimestamp}) in Chain(${chain})`\n\n\t\tconst response = await this.withRetry(\n\t\t\t() =>\n\t\t\t\tthis.client.request<StateMachineResponse>(STATE_MACHINE_UPDATES_BY_TIMESTAMP, {\n\t\t\t\t\tstatemachineId,\n\t\t\t\t\tcommitmentTimestamp: commitmentTimestamp.toString(),\n\t\t\t\t\tchain,\n\t\t\t\t}),\n\t\t\t{ logger, logMessage: message },\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 * @params statemachineId - ID of the state machine\n\t * @params chain - The identifier for the chain where the state machine update should be queried (corresponds to a stateMachineId)\n\t * @returns Latest height or undefined if no updates found\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\t\tconst message = `querying latest StateMachineId(${statemachineId}) height in chain Chain(${chain})`\n\n\t\tconst response = await this.withRetry(\n\t\t\t() => {\n\t\t\t\treturn this.client.request<StateMachineResponse>(LATEST_STATE_MACHINE_UPDATE, {\n\t\t\t\t\tstatemachineId,\n\t\t\t\t\tchain,\n\t\t\t\t})\n\t\t\t},\n\t\t\t{ logger: logger, logMessage: message },\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 request by CommitmentHash\n\t *\n\t * @param commitment_hash - Can be commitment\n\t * @returns Latest status and block metadata of the request\n\t */\n\tasync queryPostRequest(commitment_hash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\treturn _queryRequestInternal({\n\t\t\tcommitmentHash: commitment_hash,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Queries a request by any of its associated hashes and returns it alongside its statuses\n\t * Statuses will be one of SOURCE, HYPERBRIDGE_DELIVERED and DESTINATION\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns Latest status and block metadata of the request\n\t */\n\tasync queryGetRequest(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\treturn _queryGetRequestInternal({\n\t\t\tcommitmentHash: hash,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.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 * @param requestId - The ID of the request to find the associated response for\n\t * @returns The response associated with the given request ID, or undefined if not found\n\t */\n\tasync queryResponseByRequestId(requestId: string): Promise<ResponseCommitmentWithValues | undefined> {\n\t\tconst response = await this.withRetry(() =>\n\t\t\tthis.client.request<GetResponseByRequestIdResponse>(GET_RESPONSE_BY_REQUEST_ID, {\n\t\t\t\trequestId,\n\t\t\t}),\n\t\t)\n\n\t\t// If no responses are found or nodes array is empty, return undefined\n\t\tif (!response.getResponses.nodes.length) return undefined\n\n\t\t// Return just the first response\n\t\tconst firstResponse = response.getResponses.nodes[0]\n\n\t\treturn {\n\t\t\tcommitment: firstResponse.commitment,\n\t\t\tvalues: firstResponse.responseMessage,\n\t\t}\n\t}\n\n\t/**\n\t * Enhances a request with finality events by querying state machine updates.\n\t *\n\t * This method augments a request object with additional inferred status events\n\t * that represent chain finality confirmations. It adds:\n\t * - SOURCE_FINALIZED: When the source chain has finalized the request\n\t * - HYPERBRIDGE_FINALIZED: When Hyperbridge has finalized the delivery confirmation\n\t *\n\t * The method also generates appropriate calldata for submitting cross-chain proofs\n\t * when applicable.\n\t *\n\t * @param request - The request to enhance with finality events\n\t * @returns The request with finality events added\n\t * @private\n\t */\n\tprivate async addRequestFinalityEvents(request: PostRequestWithStatus): Promise<PostRequestWithStatus> {\n\t\tconst events: RequestStatusWithMetadata[] = []\n\n\t\tconst addFinalityEvents = (request: PostRequestWithStatus) => {\n\t\t\tthis.logger.trace(`Added ${events.length} \\`Request\\` finality events`, events)\n\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.config.hyperbridge.config.stateMachineId) {\n\t\t\t// the first status contains the blocknumber of the initial request\n\t\t\thyperbridgeDelivered = request.statuses[0]\n\t\t} else {\n\t\t\t// we assume there's always a SOURCE event which contains the blocknumber of the initial request\n\t\t\tconst sourceFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: request.source,\n\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\tchain: this.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\t// no finality event found, return request as is\n\t\t\tif (!sourceFinality) return addFinalityEvents(request)\n\n\t\t\t// Insert finality event into request.statuses at index 1\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\t// check if there's a hyperbridge delivered event\n\t\t\thyperbridgeDelivered = request.statuses.find((item) => item.status === RequestStatus.HYPERBRIDGE_DELIVERED)\n\n\t\t\tif (!hyperbridgeDelivered) return addFinalityEvents(request)\n\t\t}\n\n\t\t// no need to query finality event if destination is hyperbridge\n\t\tif (request.dest === this.config.hyperbridge.config.stateMachineId) {\n\t\t\treturn addFinalityEvents(request)\n\t\t}\n\n\t\tconst hyperbridgeFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: this.config.hyperbridge.config.stateMachineId,\n\t\t\theight: hyperbridgeDelivered.metadata.blockNumber,\n\t\t\tchain: request.dest,\n\t\t})\n\n\t\tif (!hyperbridgeFinality) return addFinalityEvents(request)\n\n\t\t// check if request receipt exists on destination chain\n\t\tconst destChain = this.config.dest\n\t\tconst hyperbridge = this.config.hyperbridge\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.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.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\tevents.push({\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\n\t\treturn addFinalityEvents(request)\n\t}\n\n\t/**\n\t * Adds timeout finality events to a request by querying for relevant timeout proofs and\n\t * chain state necessary for timeout processing.\n\t *\n\t * This method enhances a request object with additional status events related to the\n\t * timeout flow, including:\n\t * - PENDING_TIMEOUT: When a request has passed its timeout timestamp\n\t * - DESTINATION_FINALIZED: When the destination chain has finalized the timeout timestamp\n\t * - HYPERBRIDGE_FINALIZED_TIMEOUT: When hyperbridge has finalized the timeout state\n\t *\n\t * The method also generates appropriate calldata for submitting timeout proofs.\n\t *\n\t * @param request - Request to fill timeout events for\n\t * @returns Request with timeout events filled in, including any proof calldata for timeout submissions\n\t * @private\n\t */\n\tprivate async addTimeoutFinalityEvents(request: PostRequestWithStatus): Promise<PostRequestWithStatus> {\n\t\t// check if request receipt exists on destination chain\n\t\tconst destChain = this.config.dest\n\t\tconst hyperbridge = this.config.hyperbridge\n\t\tconst events: RequestStatusWithMetadata[] = []\n\t\tconst commitment = postRequestCommitment(request).commitment\n\t\tconst reciept = await destChain.queryRequestReceipt(commitment)\n\t\tconst destTimestamp = await destChain.timestamp()\n\n\t\tconst addTimeoutEvents = (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) {\n\t\t\t// Early exit for requests with no timeout configured\n\t\t\t// This prevents unnecessary timeout processing and expensive chain queries\n\t\t\t// The events array is still empty at this point, so no timeout events are added\n\t\t\treturn addTimeoutEvents(request)\n\t\t}\n\n\t\t// request not timed out\n\t\tif (reciept || request.timeoutTimestamp > destTimestamp) {\n\t\t\treturn addTimeoutEvents(request)\n\t\t}\n\n\t\tconst is_finished = request.statuses.find((item) => item.status === RequestStatus.DESTINATION)\n\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) => {\n\t\t\treturn item.status === RequestStatus.HYPERBRIDGE_DELIVERED\n\t\t})\n\n\t\tlet hyperbridgeFinalized: StateMachineUpdate | undefined\n\t\tif (!delivered) {\n\t\t\t// either the request was never delivered to hyperbridge\n\t\t\t// or hyperbridge was the destination of the request\n\t\t\thyperbridgeFinalized = await this.queryStateMachineUpdateByTimestamp({\n\t\t\t\tstatemachineId: this.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.queryStateMachineUpdateByTimestamp({\n\t\t\t\tstatemachineId: request.dest,\n\t\t\t\tcommitmentTimestamp: request.timeoutTimestamp,\n\t\t\t\tchain: this.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\tif (!destFinalized) return addTimeoutEvents(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\t// if the source is the hyperbridge state machine, no further action is needed\n\t\t\t// use the timeout stream to timeout on hyperbridge\n\t\t\tif (request.source === this.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 addTimeoutEvents(request)\n\t\t\thyperbridgeFinalized = await this.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: this.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 addTimeoutEvents(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.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.config.hyperbridge.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.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 addTimeoutEvents(request)\n\t}\n\n\t/**\n\t * Queries a request returns it alongside its statuses,\n\t * including any finalization events.\n\t * @param hash - Commitment hash\n\t * @returns Full request data with all inferred status events, including SOURCE_FINALIZED and HYPERBRIDGE_FINALIZED\n\t * @remarks Unlike queryRequest(), this method adds derived finalization status events by querying state machine updates\n\t */\n\tasync queryRequestWithStatus(hash: HexString): Promise<PostRequestWithStatus | undefined> {\n\t\tlet request = await this.queryPostRequest(hash)\n\n\t\tif (!request) return\n\t\trequest = await this.addRequestFinalityEvents(request)\n\t\trequest = await this.addTimeoutFinalityEvents(request)\n\n\t\t// ensure all statuses are sorted by weight\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\n\t\treturn request\n\t}\n\n\t/**\n\t * Queries a GET request and returns it alongside its statuses,\n\t * including any finalization events.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns Full GET request data with all inferred status events, including SOURCE_FINALIZED and HYPERBRIDGE_FINALIZED\n\t * @remarks Unlike queryGetRequest(), this method adds derived finalization status events by querying state machine updates\n\t */\n\tasync queryGetRequestWithStatus(hash: HexString): Promise<GetRequestWithStatus | undefined> {\n\t\tlet request = await this.queryGetRequest(hash)\n\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\n\t\treturn request\n\t}\n\n\t/**\n\t * Enhances a GET request with finality events by querying state machine updates.\n\t *\n\t * This method augments a GET request object with additional inferred status events\n\t * that represent chain finality confirmations. It adds:\n\t * - SOURCE_FINALIZED: When the source chain has finalized the request\n\t * - HYPERBRIDGE_FINALIZED: When Hyperbridge has finalized the delivery confirmation and response is ready\n\t *\n\t * The method also generates appropriate calldata for submitting cross-chain proofs\n\t * when applicable.\n\t *\n\t * @param request - The GET request to enhance with finality events\n\t * @returns The request with finality events added\n\t * @private\n\t */\n\tprivate async addGetRequestFinalityEvents(request: GetRequestWithStatus): Promise<GetRequestWithStatus> {\n\t\tconst events: RequestStatusWithMetadata[] = []\n\n\t\tconst addFinalityEvents = (request: GetRequestWithStatus) => {\n\t\t\tthis.logger.trace(`Added ${events.length} \\`GetRequest\\` finality events`, events)\n\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.config.hyperbridge.config.stateMachineId) {\n\t\t\thyperbridgeDelivered = request.statuses[0]\n\t\t\treturn addFinalityEvents(request)\n\t\t} else {\n\t\t\tconst sourceFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\t\tstatemachineId: request.source,\n\t\t\t\theight: request.statuses[0].metadata.blockNumber,\n\t\t\t\tchain: this.config.hyperbridge.config.stateMachineId,\n\t\t\t})\n\n\t\t\tif (!sourceFinality) return addFinalityEvents(request)\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\n\t\t\tif (!hyperbridgeDelivered) return addFinalityEvents(request)\n\t\t}\n\n\t\tconst hyperbridgeFinality = await this.queryStateMachineUpdateByHeight({\n\t\t\tstatemachineId: this.config.hyperbridge.config.stateMachineId,\n\t\t\theight: hyperbridgeDelivered.metadata.blockNumber,\n\t\t\tchain: request.source,\n\t\t})\n\n\t\tif (!hyperbridgeFinality) return addFinalityEvents(request)\n\n\t\tconst sourceChain = this.config.source\n\t\tconst hyperbridge = this.config.hyperbridge\n\n\t\ttry {\n\t\t\tconst response = await this.queryResponseByRequestId(request.commitment)\n\n\t\t\tif (!response) return addFinalityEvents(request)\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\tBigInt(hyperbridgeFinality.height),\n\t\t\t)\n\n\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\tkind: \"GetResponse\",\n\t\t\t\tproof: {\n\t\t\t\t\tstateMachine: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\tconsensusStateId: this.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\tproof,\n\t\t\t\t\theight: BigInt(hyperbridgeFinality.height),\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\tevents.push({\n\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblockHash: hyperbridgeFinality.blockHash,\n\t\t\t\t\tblockNumber: hyperbridgeFinality.height,\n\t\t\t\t\ttransactionHash: hyperbridgeFinality.transactionHash,\n\t\t\t\t\ttimestamp: hyperbridgeFinality.timestamp,\n\t\t\t\t\tcalldata,\n\t\t\t\t},\n\t\t\t})\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 addFinalityEvents(request)\n\t}\n\n\t/**\n\t * Create a Stream of status updates for a post request.\n\t * Stream ends when either the request reaches the destination or times out.\n\t * If the stream yields TimeoutStatus.PENDING_TIMEOUT, use postRequestTimeoutStream() to begin timeout processing.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.postRequestStatusStream(hash)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\n\t *\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 this.waitOrAbort({\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t\t})\n\n\t\t\tlogger.trace(\"`Request` found\")\n\t\t\tconst chain = this.config.dest\n\t\t\tconst timeoutStream =\n\t\t\t\trequest.timeoutTimestamp > 0n ? this.timeoutStream(request.timeoutTimestamp, chain) : undefined\n\t\t\tconst statusStream = this.postRequestStatusStreamInternal(hash, controller.signal)\n\n\t\t\tlogger.trace(\"Listening for events\")\n\t\t\tconst combined = timeoutStream ? mergeRace(timeoutStream, statusStream) : statusStream\n\n\t\t\tlogger.trace(\"Listening for events\")\n\t\t\tlet item = await combined.next()\n\n\t\t\twhile (!item.done) {\n\t\t\t\tlogger.trace(`Yielding Event(${item.value.status})`)\n\n\t\t\t\tyield item.value\n\t\t\t\titem = await combined.next()\n\t\t\t}\n\n\t\t\tlogger.trace(\"Streaming complete\")\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t\tcontroller.abort()\n\t\treturn\n\t}\n\n\t/*\n\t * Returns a generator that will yield true if the request is timed out\n\t * If the request does not have a timeout, it will never yield\n\t * @param request - Request to timeout\n\t */\n\tasync *timeoutStream(timeoutTimestamp: bigint, chain: IChain): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tconst logger = this.logger.withTag(\"[timeoutStream()]\")\n\n\t\tif (timeoutTimestamp > 0n) {\n\t\t\tlet timestamp = await chain.timestamp()\n\n\t\t\twhile (timestamp < timeoutTimestamp) {\n\t\t\t\tlogger.trace(\"Comparing timeout timestamps\", { control: timeoutTimestamp, latest: timestamp })\n\n\t\t\t\tconst diff = BigInt(timeoutTimestamp) - BigInt(timestamp)\n\t\t\t\tawait this.sleep_for(Number(diff))\n\t\t\t\ttimestamp = await chain.timestamp()\n\t\t\t}\n\n\t\t\tyield {\n\t\t\t\tstatus: TimeoutStatus.PENDING_TIMEOUT,\n\t\t\t\tmetadata: { blockHash: \"0x\", blockNumber: 0, transactionHash: \"0x\" },\n\t\t\t}\n\n\t\t\treturn\n\t\t}\n\t}\n\n\t/**\n\t * Create a Stream of status updates\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t */\n\tprivate async *postRequestStatusStreamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tlet request = await this.waitOrAbort({ signal, promise: () => this.queryPostRequest(hash) })\n\n\t\tlet status: RequestStatusKey =\n\t\t\trequest.source === this.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\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\n\t\tif (!latest_request) return\n\n\t\t// start with the latest status\n\t\tstatus = latest_request\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\t// request has been dispatched from source chain\n\t\t\t\tcase RequestStatus.SOURCE: {\n\t\t\t\t\tconst sourceUpdate = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.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.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\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\t// finality proofs for request has been verified on Hyperbridge\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\t// wait for the request to be delivered on Hyperbridge\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t\t\t\t\tpredicate: (request) => !request || request.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.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\t// the request has been verified and aggregated on Hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED: {\n\t\t\t\t\t// Get the latest state machine update for hyperbridge on the destination chain\n\t\t\t\t\tconst hyperbridgeFinalized = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => {\n\t\t\t\t\t\t\tconst stateMachineId = this.config.hyperbridge.config.stateMachineId\n\t\t\t\t\t\t\tconst index = request.source === stateMachineId ? 0 : 1\n\n\t\t\t\t\t\t\treturn this.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\tstatemachineId: stateMachineId,\n\t\t\t\t\t\t\t\theight: request.statuses[index].metadata.blockNumber,\n\t\t\t\t\t\t\t\tchain: request.dest,\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 destChain = this.config.dest\n\t\t\t\t\tconst hyperbridge = this.config.hyperbridge\n\n\t\t\t\t\tconst safeFetchProof = async () => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst proof_hex = await hyperbridge.queryProof(\n\t\t\t\t\t\t\t\t{ Requests: [postRequestCommitment(request).commitment] },\n\t\t\t\t\t\t\t\trequest.dest,\n\t\t\t\t\t\t\t\tBigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\treturn { data: proof_hex, error: null }\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treturn { error: err as unknown, data: null }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst proof = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.withRetry(safeFetchProof, {\n\t\t\t\t\t\t\t\tbackoffMs: 2000,\n\t\t\t\t\t\t\t\tmaxRetries: 6, // <-- should fail after 2mins\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tif (proof.data === null) {\n\t\t\t\t\t\tthis.logger.error(\"Failed to fetch proof:\", proof.error)\n\n\t\t\t\t\t\tthrow proof.error\n\t\t\t\t\t}\n\n\t\t\t\t\tconst calldata = destChain.encode({\n\t\t\t\t\t\tkind: \"PostRequest\",\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tstateMachine: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\t\t\tproof: proof.data,\n\t\t\t\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequests: [request],\n\t\t\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst { stateId } = parseStateMachineId(this.config.hyperbridge.config.stateMachineId)\n\n\t\t\t\t\tawait waitForChallengePeriod(destChain, {\n\t\t\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\tstateId,\n\t\t\t\t\t\t\tconsensusStateId: toHex(this.config.hyperbridge.config.consensusStateId),\n\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.HYPERBRIDGE_FINALIZED,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\t\t\t\tblockNumber: hyperbridgeFinalized.height,\n\t\t\t\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\t\t\t\ttimestamp: hyperbridgeFinalized.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 = RequestStatus.HYPERBRIDGE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// request has been finalized by hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED: {\n\t\t\t\t\t// wait for the request to be delivered to the destination\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t\t\t\t\tpredicate: (request) =>\n\t\t\t\t\t\t\t!request || !request.statuses.find((s) => s.status === RequestStatus.DESTINATION),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst index = request.source === this.config.hyperbridge.config.stateMachineId ? 1 : 2\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[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\tprivate sleep_for(duration: number): Promise<void> {\n\t\tthis.logger.trace(`Sleeping for ${duration}ms`)\n\t\treturn sleep(duration)\n\t}\n\n\tprivate sleep_for_interval(): Promise<void> {\n\t\treturn this.sleep_for(this.config.pollInterval)\n\t}\n\n\t/**\n\t * Create a Stream of status updates for a get request.\n\t * Stream ends when either the request reaches the destination or times out.\n\t * If the stream yields TimeoutStatus.PENDING_TIMEOUT, use postRequestTimeoutStream() to begin timeout processing.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.getRequestStatusStream(hash)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\n\t *\n\t */\n\tasync *getRequestStatusStream(hash: HexString): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tconst controller = new AbortController()\n\t\t// wait for request to be created\n\t\ttry {\n\t\t\tconst request = await this.waitOrAbort({\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tpromise: () => this.queryGetRequest(hash),\n\t\t\t})\n\n\t\t\tconst chain = this.config.dest\n\t\t\tconst timeoutStream =\n\t\t\t\trequest.timeoutTimestamp > 0n ? this.timeoutStream(request.timeoutTimestamp, chain) : undefined\n\t\t\tconst statusStream = this.getRequestStatusStreamInternal(hash, controller.signal)\n\t\t\tconst combined = timeoutStream ? mergeRace(timeoutStream, 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)) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t\tcontroller.abort()\n\t\treturn\n\t}\n\n\t/**\n\t * Create a Stream of status updates\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t */\n\tprivate async *getRequestStatusStreamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<RequestStatusWithMetadata, void> {\n\t\tlet request = await this.waitOrAbort({ signal, promise: () => this.queryGetRequest(hash) })\n\n\t\tlet status: RequestStatusKey | undefined =\n\t\t\trequest.source === this.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\n\t\t// start with the latest status\n\t\tstatus = maxBy([status, latestMetadata.status as RequestStatusKey], (item) => REQUEST_STATUS_WEIGHTS[item])\n\n\t\tif (!status) return\n\n\t\twhile (true) {\n\t\t\tswitch (status) {\n\t\t\t\t// request has been dispatched from source chain\n\t\t\t\tcase RequestStatus.SOURCE: {\n\t\t\t\t\tconst sourceUpdate = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.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.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\t// finality proofs for request has been verified on Hyperbridge\n\t\t\t\tcase RequestStatus.SOURCE_FINALIZED: {\n\t\t\t\t\t// wait for the request to be delivered on Hyperbridge\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryGetRequest(hash),\n\t\t\t\t\t\tpredicate: (request) => !request || request.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.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\t// the request has been verified and aggregated on Hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_DELIVERED: {\n\t\t\t\t\t// If Hyperbridge was the source, the request is already complete\n\t\t\t\t\tif (request.source === this.config.hyperbridge.config.stateMachineId) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\t// Get the latest state machine update for hyperbridge on the destination chain\n\t\t\t\t\tconst hyperbridgeFinalized = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\tstatemachineId: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\t\theight: request.statuses[1].metadata.blockNumber,\n\t\t\t\t\t\t\t\tchain: request.source,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\n\t\t\t\t\tconst sourceChain = this.config.source\n\t\t\t\t\tconst hyperbridge = this.config.hyperbridge\n\n\t\t\t\t\tconst response = await this.queryResponseByRequestId(hash)\n\n\t\t\t\t\tconst proof = await hyperbridge.queryProof(\n\t\t\t\t\t\t{ Responses: [response?.commitment as HexString] },\n\t\t\t\t\t\trequest.source,\n\t\t\t\t\t\tBigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t)\n\n\t\t\t\t\tconst calldata = sourceChain.encode({\n\t\t\t\t\t\tkind: \"GetResponse\",\n\t\t\t\t\t\tproof: {\n\t\t\t\t\t\t\tstateMachine: this.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.config.hyperbridge.config.consensusStateId,\n\t\t\t\t\t\t\tproof,\n\t\t\t\t\t\t\theight: BigInt(hyperbridgeFinalized.height),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tresponses: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tget: request,\n\t\t\t\t\t\t\t\tvalues: request.keys.map((key, index) => ({\n\t\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\t\tvalue: (response?.values[index] as HexString) || \"0x\",\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\tsigner: pad(\"0x\"),\n\t\t\t\t\t})\n\n\t\t\t\t\tyield {\n\t\t\t\t\t\tstatus: RequestStatus.HYPERBRIDGE_FINALIZED,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash: hyperbridgeFinalized.blockHash,\n\t\t\t\t\t\t\tblockNumber: hyperbridgeFinalized.height,\n\t\t\t\t\t\t\ttransactionHash: hyperbridgeFinalized.transactionHash,\n\t\t\t\t\t\t\ttimestamp: hyperbridgeFinalized.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 = RequestStatus.HYPERBRIDGE_FINALIZED\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t// request has been finalized by hyperbridge\n\t\t\t\tcase RequestStatus.HYPERBRIDGE_FINALIZED: {\n\t\t\t\t\t// If Hyperbridge was the source, the request is already complete\n\t\t\t\t\tif (request.source === this.config.hyperbridge.config.stateMachineId) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\t// wait for the request to be delivered to the destination\n\t\t\t\t\trequest = await this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () => this.queryGetRequest(hash),\n\t\t\t\t\t\tpredicate: (request) =>\n\t\t\t\t\t\t\t!request || !request.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 * Create a Stream of status updates for a timed out post request.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.postRequestTimeoutStream(hash)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\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.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 timeoutStream = this.postRequestTimeoutStreamInternal(hash, controller.signal)\n\n\t\t\tlogger.trace(\"Listening for timeout events\")\n\t\t\tlet item = await timeoutStream.next()\n\t\t\twhile (!item.done) {\n\t\t\t\tlogger.trace(`Yielding Timeout Event(${item.value.status})`)\n\n\t\t\t\tyield item.value\n\t\t\t\titem = await timeoutStream.next()\n\t\t\t}\n\n\t\t\tlogger.trace(\"Streaming complete\")\n\t\t} catch (error) {\n\t\t\tif (!AbortSignalInternal.isError(error)) {\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t\tcontroller.abort()\n\t\treturn\n\t}\n\n\t/**\n\t * Create a Stream of status updates for a timed out post request.\n\t * @param hash - Can be commitment, hyperbridge tx hash, source tx hash, destination tx hash, or timeout tx hash\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t */\n\tasync *postRequestTimeoutStreamInternal(\n\t\thash: HexString,\n\t\tsignal: AbortSignal,\n\t): AsyncGenerator<PostRequestTimeoutStatus, void> {\n\t\tconst request = await this.waitOrAbort({\n\t\t\tsignal,\n\t\t\tpromise: () => this.queryPostRequest(hash),\n\t\t})\n\n\t\tconst destChain = this.config.dest\n\n\t\t// if the destination is hyperbridge, then just wait for hyperbridge finality\n\t\tlet status: TimeoutStatusKey =\n\t\t\trequest.dest === this.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.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\n\t\tif (!latest_request) {\n\t\t\treturn\n\t\t}\n\n\t\t// we're always interested in the latest status\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.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 this.waitOrAbort({\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t\tpromise: () =>\n\t\t\t\t\t\t\tthis.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.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.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.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.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\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: {\n\t\t\t\t\t\t\tstateId,\n\t\t\t\t\t\t\tconsensusStateId: toHex(this.config.dest.config.consensusStateId),\n\t\t\t\t\t\t},\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.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.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 {\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tblockHash,\n\t\t\t\t\t\t\ttransactionHash,\n\t\t\t\t\t\t\tblockNumber,\n\t\t\t\t\t\t\ttimestamp,\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 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\t// if request was never delivered to Hyperbridge\n\t\t\t\t\t\t// then query for any state machine update > requestTimestamp\n\t\t\t\t\t\tupdate = await this.waitOrAbort({\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.queryStateMachineUpdateByTimestamp({\n\t\t\t\t\t\t\t\t\tstatemachineId: this.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 this.waitOrAbort({\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.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: (timeout) => !timeout || timeout?.status !== TimeoutStatus.HYPERBRIDGE_TIMED_OUT,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tupdate = await this.waitOrAbort({\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.queryStateMachineUpdateByHeight({\n\t\t\t\t\t\t\t\t\tstatemachineId: this.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.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.config.hyperbridge.config.stateMachineId,\n\t\t\t\t\t\t\tconsensusStateId: this.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.config.hyperbridge.config.stateMachineId)\n\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: {\n\t\t\t\t\t\t\tstateId,\n\t\t\t\t\t\t\tconsensusStateId: toHex(this.config.hyperbridge.config.consensusStateId),\n\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.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\t// wait for the request to be timed out on the source\n\t\t\t\t\tconst delivered = await this.waitOrAbort({\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.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 * Executes an async operation with exponential backoff retry\n\t * @param operation - Async function to execute\n\t * @param retryConfig - Optional retry configuration\n\t * @returns Result of the operation\n\t * @throws Last encountered error after all retries are exhausted\n\t *\n\t * @example\n\t * const result = await this.withRetry(() => this.queryStatus(hash));\n\t */\n\tprivate async withRetry<T>(operation: () => Promise<T>, retryConfig: Partial<RetryConfig> = {}): Promise<T> {\n\t\treturn retryPromise(operation, {\n\t\t\t...this.defaultRetryConfig,\n\t\t\t...retryConfig,\n\t\t})\n\t}\n\n\t/**\n\t * Query for an order by its commitment hash\n\t * @param commitment - The commitment hash of the order\n\t * @returns The order with its status if found, undefined otherwise\n\t */\n\tasync queryOrder(commitment: HexString): Promise<OrderWithStatus | undefined> {\n\t\treturn _queryOrderInternal({\n\t\t\tcommitmentHash: commitment,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Create a Stream of status updates for an order.\n\t * Stream ends when the order reaches a terminal state (FILLED, REDEEMED, or REFUNDED).\n\t * @param commitment - The commitment hash of the order\n\t * @returns AsyncGenerator that emits status updates until a terminal state is reached\n\t * @example\n\t *\n\t * let client = new IndexerClient(config)\n\t * let stream = client.orderStatusStream(commitment)\n\t *\n\t * // you can use a for-await-of loop\n\t * for await (const status of stream) {\n\t * console.log(status)\n\t * }\n\t *\n\t * // you can also use a while loop\n\t * while (true) {\n\t * const status = await stream.next()\n\t * if (status.done) {\n\t * break\n\t * }\n\t * console.log(status.value)\n\t * }\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 logger = this.logger.withTag(\"[orderStatusStream]\")\n\n\t\tlet order: OrderWithStatus | undefined\n\n\t\twhile (!order) {\n\t\t\tawait this.sleep_for_interval()\n\t\t\torder = await _queryOrderInternal({\n\t\t\t\tcommitmentHash: commitment,\n\t\t\t\tqueryClient: this.client,\n\t\t\t\tlogger: this.logger,\n\t\t\t})\n\t\t}\n\n\t\tlogger.trace(\"`Order` found\")\n\t\t// Yield initial status\n\t\tconst latestStatus = order.statuses[order.statuses.length - 1]\n\t\tyield {\n\t\t\tstatus: latestStatus.status,\n\t\t\tmetadata: latestStatus.metadata,\n\t\t}\n\n\t\t// If we're already in a terminal state, end the stream\n\t\tif ([OrderStatus.FILLED, OrderStatus.REDEEMED, OrderStatus.REFUNDED].includes(latestStatus.status)) {\n\t\t\treturn\n\t\t}\n\n\t\twhile (true) {\n\t\t\tawait this.sleep_for_interval()\n\t\t\tconst updatedOrder = await _queryOrderInternal({\n\t\t\t\tcommitmentHash: commitment,\n\t\t\t\tqueryClient: this.client,\n\t\t\t\tlogger: this.logger,\n\t\t\t})\n\n\t\t\tif (!updatedOrder) continue\n\n\t\t\tconst newLatestStatus = updatedOrder.statuses[updatedOrder.statuses.length - 1]\n\n\t\t\tif (newLatestStatus.status !== latestStatus.status) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: newLatestStatus.status,\n\t\t\t\t\tmetadata: newLatestStatus.metadata,\n\t\t\t\t}\n\n\t\t\t\tif ([OrderStatus.FILLED, OrderStatus.REDEEMED, OrderStatus.REFUNDED].includes(newLatestStatus.status)) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync *tokenGatewayAssetTeleportedStatusStream(commitment: HexString): AsyncGenerator<\n\t\t{\n\t\t\tstatus: TeleportStatus\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}\n\t\t},\n\t\tvoid\n\t> {\n\t\tconst logger = this.logger.withTag(\"[tokenGatewayAssetTeleportedStatusStream]\")\n\t\tlogger.trace(`Starting stream for token gateway asset teleported with commitment ${commitment}`)\n\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 this.queryTokenGatewayAssetTeleported(commitment)\n\t\t\t\tif (!teleport) {\n\t\t\t\t\tlogger.trace(\"No teleport found, waiting...\")\n\t\t\t\t\tawait this.sleep_for_interval()\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\tlogger.trace(\"No statuses found, waiting...\")\n\t\t\t\t\tawait this.sleep_for_interval()\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Find the latest status that we haven't seen yet\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\tlogger.trace(\"No new status, waiting...\")\n\t\t\t\t\tawait this.sleep_for_interval()\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\t// If we've reached a final status, end the stream\n\t\t\t\tif (\n\t\t\t\t\tlatestStatus.status === TeleportStatus.RECEIVED ||\n\t\t\t\t\tlatestStatus.status === TeleportStatus.REFUNDED\n\t\t\t\t) {\n\t\t\t\t\tlogger.trace(\"Final status reached, ending stream\")\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tawait this.sleep_for_interval()\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error in token gateway asset teleported status stream:\", error)\n\t\t\t\tawait this.sleep_for_interval()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async queryTokenGatewayAssetTeleported(\n\t\tcommitment: HexString,\n\t): Promise<TokenGatewayAssetTeleportedWithStatus | undefined> {\n\t\treturn _queryTokenGatewayAssetTeleportedInternal({\n\t\t\tcommitmentHash: commitment,\n\t\t\tqueryClient: this.client,\n\t\t\tlogger: this.logger,\n\t\t})\n\t}\n\n\t/**\n\t * Aggregate transactions with commitment.\n\t * @param commitment\n\t * @returns an object containing the transaction hash, block hash, block number, timestamp.\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.config.source.config\n\n\t\t// check if request receipt exists on source chain\n\t\tconst sourceChain = this.config.source\n\t\tconst hyperbridge = this.config.hyperbridge as SubstrateChain\n\n\t\tlogger.trace(\"Querying post request with commitment hash\")\n\t\tconst request = await this.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: consensusStateId as HexString,\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.config.hyperbridge.config.stateMachineId,\n\t\t\tlatestStateMachineHeight,\n\t\t)\n\n\t\tlogger.trace(\"Construct Extrinsic and Submit Unsigned\")\n\t\tconst calldata = await hyperbridge.submitUnsigned({\n\t\t\tkind: \"PostRequest\",\n\t\t\tproof: {\n\t\t\t\tstateMachine: this.config.source.config.stateMachineId,\n\t\t\t\tconsensusStateId: this.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\n\t\treturn calldata\n\t}\n\n\tasync waitOrAbort<T>(params: {\n\t\tsignal: AbortSignal\n\t\tpromise: () => Promise<T>\n\t\tpredicate?: (a: T) => boolean\n\t}): Promise<NonNullable<T>> {\n\t\tconst { predicate = (e) => isNil(e) } = params\n\n\t\tconst _abort = () => {\n\t\t\tif (params.signal.aborted) {\n\t\t\t\tthrow new AbortSignalInternal(\"Terminated request in 'waitOrAbort'\")\n\t\t\t}\n\t\t}\n\n\t\twhile (true) {\n\t\t\t_abort()\n\t\t\tawait this.sleep_for_interval()\n\t\t\t_abort()\n\t\t\tconst _data = await params.promise()\n\t\t\t_abort()\n\n\t\t\tif (predicate(_data)) continue\n\t\t\treturn _data as NonNullable<T>\n\t\t}\n\t}\n}\n\ninterface PartialClientConfig extends Omit<ClientConfig, \"pollInterval\"> {\n\tpollInterval?: number\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","// @ts-expect-error upstream driver types have export path resolution\nimport indexedDBDriver from \"unstorage/drivers/indexedb\"\n// @ts-expect-error upstream driver types have export path resolution\nimport localStorageDriver from \"unstorage/drivers/localstorage\"\nimport type { LoadDriver } from \"../types\"\n\nconst BASE_KEY = \"hyperbridge/sdk/proof\"\n\nexport const loadDriver: LoadDriver = ({ key }) => {\n\tif (key === \"localstorage\") {\n\t\treturn localStorageDriver({ base: BASE_KEY })\n\t}\n\n\tif (key === \"indexeddb\") {\n\t\treturn indexedDBDriver({ base: BASE_KEY })\n\t}\n\n\tconsole.warn(\n\t\t`Hyperbridge/SDK/BrowserDriver: Unexpected storage driver: ${key}. Driver can't be loaded in the browser environment.`,\n\t)\n\n\treturn null\n}\n","import { createStorage } from \"unstorage\"\n// @ts-expect-error failed to resolve types\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, 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})\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 {\n\tPublicClient,\n\tmaxUint256,\n\tencodeAbiParameters,\n\tparseAbiParameters,\n\tparseAbiItem,\n\tencodePacked,\n\tencodeFunctionData,\n\terc20Abi,\n} from \"viem\"\nimport { ADDRESS_ZERO, ChainConfigService, HexString, Transaction } from \"..\"\nimport UniswapRouterV2 from \"@/abis/uniswapRouterV2\"\nimport UniswapV3Quoter from \"@/abis/uniswapV3Quoter\"\nimport { UNISWAP_V4_QUOTER_ABI } from \"@/abis/uniswapV4Quoter\"\nimport universalRouter from \"@/abis/universalRouter\"\nimport { UniversalRouterCommands } from \"@/utils\"\nimport { PERMIT2_ABI } from \"@/abis/permit2\"\nimport { popularTokens } from \"@/configs/chain\"\n\nconst COMMON_FEE_TIERS = [100, 500, 2500, 3000, 10000]\n\nexport class Swap {\n\tprivate chainConfigService: ChainConfigService\n\tconstructor() {\n\t\tthis.chainConfigService = new ChainConfigService()\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 = popularTokens[evmChainID as keyof typeof popularTokens]\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","import { Decimal } from \"decimal.js\"\nimport {\n\tconcatHex,\n\tencodeAbiParameters,\n\tformatUnits,\n\thexToString,\n\tkeccak256,\n\tmaxUint256,\n\tpad,\n\tparseEventLogs,\n\tparseUnits,\n\ttoHex,\n} from \"viem\"\nimport EVM_HOST from \"@/abis/evmHost\"\nimport IntentGatewayABI from \"@/abis/IntentGateway\"\nimport { type IGetRequestMessage, type IProof, requestCommitmentKey, type SubstrateChain } from \"@/chain\"\nimport type { EvmChain } from \"@/chains/evm\"\nimport type { IndexerClient } from \"@/client\"\nimport { createCancellationStorage, STORAGE_KEYS } from \"@/storage\"\nimport {\n\ttype DispatchPost,\n\ttype FillOptions,\n\ttype HexString,\n\ttype IGetRequest,\n\ttype IPostRequest,\n\ttype Order,\n\tRequestStatus,\n\ttype RequestStatusWithMetadata,\n} from \"@/types\"\nimport {\n\tADDRESS_ZERO,\n\tadjustFeeDecimals,\n\tbytes20ToBytes32,\n\tbytes32ToBytes20,\n\tconstructRedeemEscrowRequestBody,\n\tERC20Method,\n\tfetchPrice,\n\tgetGasPriceFromEtherscan,\n\tgetRequestCommitment,\n\tgetStorageSlot,\n\tMOCK_ADDRESS,\n\tmaxBigInt,\n\torderCommitment,\n\tparseStateMachineId,\n\tretryPromise,\n\tsleep,\n\tUSE_ETHERSCAN_CHAINS,\n\twaitForChallengePeriod,\n} from \"@/utils\"\nimport { Swap } from \"@/utils/swap\"\n\n/**\n * IntentGateway handles cross-chain intent operations between EVM chains.\n * It provides functionality for estimating fill orders, finding optimal swap protocols,\n * and checking order statuses across different chains.\n */\nexport class IntentGateway {\n\tpublic readonly swap: Swap\n\tprivate readonly storage = createCancellationStorage()\n\t/**\n\t * Optional custom IntentGateway address for the destination chain.\n\t * If set, this address will be used when fetching destination proofs in `cancelOrder`.\n\t * If not set, uses the default address from the chain configuration.\n\t * This allows using different IntentGateway contract versions (e.g., old vs new contracts).\n\t */\n\tpublic destIntentGatewayAddress?: HexString\n\n\t/**\n\t * Creates a new IntentGateway instance for cross-chain operations.\n\t * @param source - The source EVM chain\n\t * @param dest - The destination EVM chain\n\t * @param destIntentGatewayAddress - Optional custom IntentGateway address for the destination chain.\n\t * If provided, this address will be used when fetching destination proofs in `cancelOrder`.\n\t * If not provided, uses the default address from the chain configuration.\n\t */\n\tconstructor(\n\t\tpublic readonly source: EvmChain,\n\t\tpublic readonly dest: EvmChain,\n\t\tdestIntentGatewayAddress?: HexString,\n\t) {\n\t\tthis.swap = new Swap()\n\t\tthis.destIntentGatewayAddress = destIntentGatewayAddress\n\t}\n\n\t/**\n\t * Estimates the total cost required to fill an order, including gas fees, relayer fees,\n\t * protocol fees, and swap operations.\n\t *\n\t * @param order - The order to estimate fill costs for\n\t * @returns An object containing the estimated cost in both fee token and native token, plus the post request calldata\n\t */\n\tasync estimateFillOrder(order: Order): Promise<{\n\t\torder: Order\n\t\tfeeTokenAmount: bigint\n\t\tnativeTokenAmount: bigint\n\t\tpostRequestCalldata: HexString\n\t}> {\n\t\t// Order with commitment and stringified chains\n\t\tconst orderWithCommitment = transformOrder(order)\n\n\t\tconst postRequest: IPostRequest = {\n\t\t\tsource: orderWithCommitment.destChain,\n\t\t\tdest: orderWithCommitment.sourceChain,\n\t\t\tbody: constructRedeemEscrowRequestBody(orderWithCommitment, MOCK_ADDRESS),\n\t\t\ttimeoutTimestamp: 0n,\n\t\t\tnonce: await this.source.getHostNonce(),\n\t\t\tfrom: this.source.configService.getIntentGatewayAddress(orderWithCommitment.destChain),\n\t\t\tto: this.source.configService.getIntentGatewayAddress(orderWithCommitment.sourceChain),\n\t\t}\n\n\t\tconst { decimals: sourceChainFeeTokenDecimals } = await this.source.getFeeTokenWithDecimals()\n\n\t\tconst { address: destChainFeeTokenAddress, decimals: destChainFeeTokenDecimals } =\n\t\t\tawait this.dest.getFeeTokenWithDecimals()\n\n\t\tconst { gas: postGasEstimate, postRequestCalldata } = await this.source.estimateGas(postRequest)\n\n\t\tconst postGasEstimateInSourceFeeToken = await this.convertGasToFeeToken(\n\t\t\tpostGasEstimate,\n\t\t\t\"source\",\n\t\t\torderWithCommitment.sourceChain,\n\t\t)\n\n\t\tconst minRelayerFee = 5n * 10n ** BigInt(sourceChainFeeTokenDecimals - 2)\n\t\tconst postGasWithIncentive = postGasEstimateInSourceFeeToken + (postGasEstimateInSourceFeeToken * 1n) / 100n\n\t\tconst relayerFeeInSourceFeeToken = maxBigInt(postGasWithIncentive, minRelayerFee)\n\n\t\tconst relayerFeeInDestFeeToken = adjustFeeDecimals(\n\t\t\trelayerFeeInSourceFeeToken,\n\t\t\tsourceChainFeeTokenDecimals,\n\t\t\tdestChainFeeTokenDecimals,\n\t\t)\n\n\t\tconst fillOptions: FillOptions = {\n\t\t\trelayerFee: relayerFeeInDestFeeToken,\n\t\t}\n\n\t\tconst totalEthValue = orderWithCommitment.outputs\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 intentGatewayAddress = this.source.configService.getIntentGatewayAddress(orderWithCommitment.destChain)\n\t\tconst testValue = toHex(maxUint256 / 2n)\n\n\t\tconst orderOverrides = await Promise.all(\n\t\t\torderWithCommitment.outputs.map(async (output) => {\n\t\t\t\tconst tokenAddress = bytes32ToBytes20(output.token)\n\n\t\t\t\tif (tokenAddress === ADDRESS_ZERO) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst stateDiffs = []\n\n\t\t\t\t\tconst balanceData = ERC20Method.BALANCE_OF + bytes20ToBytes32(MOCK_ADDRESS).slice(2)\n\t\t\t\t\tconst balanceSlot = await getStorageSlot(this.dest.client, tokenAddress, balanceData as HexString)\n\t\t\t\t\tstateDiffs.push({ slot: balanceSlot as HexString, value: testValue })\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst allowanceData =\n\t\t\t\t\t\t\tERC20Method.ALLOWANCE +\n\t\t\t\t\t\t\tbytes20ToBytes32(MOCK_ADDRESS).slice(2) +\n\t\t\t\t\t\t\tbytes20ToBytes32(intentGatewayAddress).slice(2)\n\t\t\t\t\t\tconst allowanceSlot = await getStorageSlot(\n\t\t\t\t\t\t\tthis.dest.client,\n\t\t\t\t\t\t\ttokenAddress,\n\t\t\t\t\t\t\tallowanceData as HexString,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tstateDiffs.push({\n\t\t\t\t\t\t\tslot: allowanceSlot as HexString,\n\t\t\t\t\t\t\tvalue: testValue,\n\t\t\t\t\t\t})\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.warn(`Could not find allowance slot for token ${tokenAddress}:`, e)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { address: tokenAddress, stateDiff: stateDiffs }\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn(`Could not find balance slot for token ${tokenAddress}:`, e)\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}),\n\t\t).then((results) => results.filter(Boolean))\n\n\t\tconst stateOverrides = [\n\t\t\t// Mock address with ETH balance so that any chain estimation runs\n\t\t\t// even when the address doesn't hold any native token in that chain\n\t\t\t{\n\t\t\t\taddress: MOCK_ADDRESS,\n\t\t\t\tbalance: maxUint256,\n\t\t\t},\n\t\t\t...orderOverrides.map((override) => ({\n\t\t\t\taddress: override!.address,\n\t\t\t\tstateDiff: override!.stateDiff,\n\t\t\t})),\n\t\t]\n\n\t\tlet destChainFillGas = 0n\n\t\ttry {\n\t\t\tlet protocolFeeInNativeToken = await this.quoteNative(postRequest, relayerFeeInDestFeeToken).catch(() =>\n\t\t\t\tthis.dest.quoteNative(postRequest, relayerFeeInDestFeeToken).catch(() => 0n),\n\t\t\t)\n\t\t\tprotocolFeeInNativeToken = protocolFeeInNativeToken + (protocolFeeInNativeToken * 50n) / 10000n\n\n\t\t\tdestChainFillGas = await this.dest.client.estimateContractGas({\n\t\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\tfunctionName: \"fillOrder\",\n\t\t\t\targs: [order as any, fillOptions as any],\n\t\t\t\taccount: MOCK_ADDRESS,\n\t\t\t\tvalue: totalEthValue + protocolFeeInNativeToken,\n\t\t\t\tstateOverride: stateOverrides as any,\n\t\t\t})\n\t\t} catch {\n\t\t\tconsole.warn(\n\t\t\t\t`Could not estimate gas for fill order with native token as fees for chain ${orderWithCommitment.destChain}, now trying with fee token as fees`,\n\t\t\t)\n\n\t\t\tconst destFeeTokenBalanceData = ERC20Method.BALANCE_OF + bytes20ToBytes32(MOCK_ADDRESS).slice(2)\n\t\t\tconst destFeeTokenBalanceSlot = await getStorageSlot(\n\t\t\t\tthis.dest.client,\n\t\t\t\tdestChainFeeTokenAddress,\n\t\t\t\tdestFeeTokenBalanceData as HexString,\n\t\t\t)\n\t\t\tconst destFeeTokenAllowanceData =\n\t\t\t\tERC20Method.ALLOWANCE +\n\t\t\t\tbytes20ToBytes32(MOCK_ADDRESS).slice(2) +\n\t\t\t\tbytes20ToBytes32(intentGatewayAddress).slice(2)\n\t\t\tconst destFeeTokenAllowanceSlot = await getStorageSlot(\n\t\t\t\tthis.dest.client,\n\t\t\t\tdestChainFeeTokenAddress,\n\t\t\t\tdestFeeTokenAllowanceData as HexString,\n\t\t\t)\n\t\t\tconst feeTokenStateDiffs = [\n\t\t\t\t{ slot: destFeeTokenBalanceSlot, value: testValue },\n\t\t\t\t{ slot: destFeeTokenAllowanceSlot, value: testValue },\n\t\t\t]\n\n\t\t\tstateOverrides.push({\n\t\t\t\taddress: destChainFeeTokenAddress,\n\t\t\t\tstateDiff: feeTokenStateDiffs as any,\n\t\t\t})\n\n\t\t\tdestChainFillGas = await this.dest.client.estimateContractGas({\n\t\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\tfunctionName: \"fillOrder\",\n\t\t\t\targs: [order as any, fillOptions as any],\n\t\t\t\taccount: MOCK_ADDRESS,\n\t\t\t\tvalue: totalEthValue,\n\t\t\t\tstateOverride: stateOverrides as any,\n\t\t\t})\n\t\t}\n\n\t\tconst fillGasInDestFeeToken = await this.convertGasToFeeToken(\n\t\t\tdestChainFillGas,\n\t\t\t\"dest\",\n\t\t\torderWithCommitment.destChain,\n\t\t)\n\t\tconst fillGasInSourceFeeToken = adjustFeeDecimals(\n\t\t\tfillGasInDestFeeToken,\n\t\t\tdestChainFeeTokenDecimals,\n\t\t\tsourceChainFeeTokenDecimals,\n\t\t)\n\n\t\tconst protocolFeeInSourceFeeToken = adjustFeeDecimals(\n\t\t\tawait this.dest.quote(postRequest),\n\t\t\tdestChainFeeTokenDecimals,\n\t\t\tsourceChainFeeTokenDecimals,\n\t\t)\n\n\t\tlet totalEstimateInSourceFeeToken =\n\t\t\tfillGasInSourceFeeToken + protocolFeeInSourceFeeToken + relayerFeeInSourceFeeToken\n\n\t\tlet totalNativeTokenAmount = await this.convertFeeTokenToNative(\n\t\t\ttotalEstimateInSourceFeeToken,\n\t\t\t\"source\",\n\t\t\torderWithCommitment.sourceChain,\n\t\t)\n\n\t\tif ([orderWithCommitment.destChain, orderWithCommitment.sourceChain].includes(\"EVM-1\")) {\n\t\t\ttotalEstimateInSourceFeeToken =\n\t\t\t\ttotalEstimateInSourceFeeToken + (totalEstimateInSourceFeeToken * 3000n) / 10000n\n\t\t\ttotalNativeTokenAmount = totalNativeTokenAmount + (totalNativeTokenAmount * 3200n) / 10000n\n\t\t} else {\n\t\t\ttotalEstimateInSourceFeeToken =\n\t\t\t\ttotalEstimateInSourceFeeToken + (totalEstimateInSourceFeeToken * 250n) / 10000n\n\t\t\ttotalNativeTokenAmount = totalNativeTokenAmount + (totalNativeTokenAmount * 350n) / 10000n\n\t\t}\n\t\treturn {\n\t\t\torder: {\n\t\t\t\t...order,\n\t\t\t\tfees: totalEstimateInSourceFeeToken,\n\t\t\t},\n\t\t\tfeeTokenAmount: totalEstimateInSourceFeeToken,\n\t\t\tnativeTokenAmount: totalNativeTokenAmount,\n\t\t\tpostRequestCalldata,\n\t\t}\n\t}\n\n\t/**\n\t * Converts fee token amounts back to the equivalent amount in native token.\n\t * Uses USD pricing to convert between fee token amounts and native token costs.\n\t *\n\t * @param feeTokenAmount - The amount in fee token (DAI)\n\t * @param getQuoteIn - Whether to use \"source\" or \"dest\" chain for the conversion\n\t * @param evmChainID - The EVM chain ID in format \"EVM-{id}\"\n\t * @returns The fee token amount converted to native token amount\n\t * @private\n\t */\n\tprivate async convertFeeTokenToNative(\n\t\tfeeTokenAmount: bigint,\n\t\tgetQuoteIn: \"source\" | \"dest\",\n\t\tevmChainID: string,\n\t): Promise<bigint> {\n\t\tconst client = this[getQuoteIn].client\n\t\tconst wethAsset = this[getQuoteIn].configService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst feeToken = await this[getQuoteIn].getFeeTokenWithDecimals()\n\n\t\ttry {\n\t\t\tconst { amountOut } = await this.swap.findBestProtocolWithAmountIn(\n\t\t\t\tthis[getQuoteIn].client,\n\t\t\t\tfeeToken.address,\n\t\t\t\twethAsset,\n\t\t\t\tfeeTokenAmount,\n\t\t\t\tevmChainID,\n\t\t\t\t{ selectedProtocol: \"v2\" },\n\t\t\t)\n\n\t\t\tif (amountOut === 0n) {\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\treturn amountOut\n\t\t} catch {\n\t\t\t// Testnet block\n\t\t\tconst nativeCurrency = client.chain?.nativeCurrency\n\t\t\tconst chainId = Number.parseInt(evmChainID.split(\"-\")[1])\n\t\t\tconst feeTokenAmountDecimal = new Decimal(formatUnits(feeTokenAmount, feeToken.decimals))\n\t\t\tconst nativeTokenPriceUsd = new Decimal(await fetchPrice(nativeCurrency?.symbol!, chainId))\n\t\t\tconst totalCostInNativeToken = feeTokenAmountDecimal.dividedBy(nativeTokenPriceUsd)\n\t\t\treturn parseUnits(totalCostInNativeToken.toFixed(nativeCurrency?.decimals!), nativeCurrency?.decimals!)\n\t\t}\n\t}\n\n\t/**\n\t * Converts gas costs to the equivalent amount in the fee token (DAI).\n\t * Uses USD pricing to convert between native token gas costs and fee token amounts.\n\t *\n\t * @param gasEstimate - The estimated gas units\n\t * @param gasEstimateIn - Whether to use \"source\" or \"dest\" chain for the conversion\n\t * @param evmChainID - The EVM chain ID in format \"EVM-{id}\"\n\t * @returns The gas cost converted to fee token amount\n\t * @private\n\t */\n\tprivate async convertGasToFeeToken(\n\t\tgasEstimate: bigint,\n\t\tgasEstimateIn: \"source\" | \"dest\",\n\t\tevmChainID: string,\n\t): Promise<bigint> {\n\t\tconst client = this[gasEstimateIn].client\n\t\tconst useEtherscan = USE_ETHERSCAN_CHAINS.has(evmChainID)\n\t\tconst etherscanApiKey = useEtherscan ? this[gasEstimateIn].configService.getEtherscanApiKey() : undefined\n\t\tconst gasPrice =\n\t\t\tuseEtherscan && etherscanApiKey\n\t\t\t\t? await retryPromise(() => getGasPriceFromEtherscan(evmChainID, etherscanApiKey), {\n\t\t\t\t\t\tmaxRetries: 3,\n\t\t\t\t\t\tbackoffMs: 250,\n\t\t\t\t\t}).catch(async () => {\n\t\t\t\t\t\tconsole.warn({ evmChainID }, \"Error getting gas price from etherscan, using client's gas price\")\n\t\t\t\t\t\treturn await client.getGasPrice()\n\t\t\t\t\t})\n\t\t\t\t: await client.getGasPrice()\n\t\tconst gasCostInWei = gasEstimate * gasPrice\n\t\tconst wethAddr = this[gasEstimateIn].configService.getWrappedNativeAssetWithDecimals(evmChainID).asset\n\t\tconst feeToken = await this[gasEstimateIn].getFeeTokenWithDecimals()\n\n\t\ttry {\n\t\t\tconst { amountOut } = await this.swap.findBestProtocolWithAmountIn(\n\t\t\t\tthis[gasEstimateIn].client,\n\t\t\t\twethAddr,\n\t\t\t\tfeeToken.address,\n\t\t\t\tgasCostInWei,\n\t\t\t\tevmChainID,\n\t\t\t\t{ selectedProtocol: \"v2\" },\n\t\t\t)\n\t\t\tif (amountOut === 0n) {\n\t\t\t\tconsole.log(\"Amount out not found\")\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\treturn amountOut\n\t\t} catch {\n\t\t\t// Testnet block\n\t\t\tconst nativeCurrency = client.chain?.nativeCurrency\n\t\t\tconst chainId = Number.parseInt(evmChainID.split(\"-\")[1])\n\t\t\tconst gasCostInToken = new Decimal(formatUnits(gasCostInWei, nativeCurrency?.decimals!))\n\t\t\tconst tokenPriceUsd = await fetchPrice(nativeCurrency?.symbol!, chainId)\n\t\t\tconst gasCostUsd = gasCostInToken.times(tokenPriceUsd)\n\t\t\tconst feeTokenPriceUsd = new Decimal(1) // stable coin\n\t\t\tconst gasCostInFeeToken = gasCostUsd.dividedBy(feeTokenPriceUsd)\n\t\t\treturn parseUnits(gasCostInFeeToken.toFixed(feeToken.decimals), feeToken.decimals)\n\t\t}\n\t}\n\n\t/**\n\t * Gets a quote for the native token cost of dispatching a post request.\n\t *\n\t * @param postRequest - The post request to quote\n\t * @param fee - The fee amount in fee token\n\t * @returns The native token amount required\n\t */\n\tasync 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\tconst quoteNative = await this.dest.client.readContract({\n\t\t\taddress: this.dest.configService.getIntentGatewayAddress(postRequest.dest),\n\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\tfunctionName: \"quoteNative\",\n\t\t\targs: [dispatchPost] as any,\n\t\t})\n\n\t\treturn quoteNative\n\t}\n\n\t/**\n\t * Checks if an order has been filled by verifying the commitment status on-chain.\n\t * Reads the storage slot corresponding to the order's commitment hash.\n\t *\n\t * @param order - The order to check\n\t * @returns True if the order has been filled, false otherwise\n\t */\n\tasync isOrderFilled(order: Order): Promise<boolean> {\n\t\torder = transformOrder(order)\n\t\tconst intentGatewayAddress = this.source.configService.getIntentGatewayAddress(order.destChain)\n\n\t\tconst filledSlot = await this.dest.client.readContract({\n\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\taddress: intentGatewayAddress,\n\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\targs: [order.id as HexString],\n\t\t})\n\n\t\tconst filledStatus = await this.dest.client.getStorageAt({\n\t\t\taddress: intentGatewayAddress,\n\t\t\tslot: filledSlot,\n\t\t})\n\t\treturn filledStatus !== \"0x0000000000000000000000000000000000000000000000000000000000000000\"\n\t}\n\n\t/**\n\t * Checks if an order has been refunded by verifying the escrowed token amounts on-chain.\n\t * Reads the storage slots for the `_orders` mapping on the source chain (where the escrow is held).\n\t * An order is considered refunded when all input token amounts in the `_orders` mapping are 0.\n\t *\n\t * @param order - The order to check\n\t * @returns True if the order has been refunded (all token amounts are 0), false otherwise\n\t */\n\tasync isOrderRefunded(order: Order): Promise<boolean> {\n\t\torder = transformOrder(order)\n\t\tconst intentGatewayAddress =\n\t\t\tthis.destIntentGatewayAddress ?? this.source.configService.getIntentGatewayAddress(order.sourceChain)\n\n\t\tconst commitment = order.id as HexString\n\t\tconst ORDERS_MAPPING_SLOT = 4n\n\n\t\tconst firstLevelSlot = keccak256(\n\t\t\tencodeAbiParameters([{ type: \"bytes32\" }, { type: \"uint256\" }], [commitment, ORDERS_MAPPING_SLOT]),\n\t\t)\n\n\t\tfor (const input of order.inputs) {\n\t\t\tconst tokenAddress = bytes32ToBytes20(input.token)\n\n\t\t\tconst storageSlot = keccak256(\n\t\t\t\tencodeAbiParameters(\n\t\t\t\t\t[{ type: \"address\" }, { type: \"bytes32\" }],\n\t\t\t\t\t[tokenAddress as `0x${string}`, firstLevelSlot as `0x${string}`],\n\t\t\t\t),\n\t\t\t)\n\n\t\t\tconst escrowedAmount = await this.source.client.getStorageAt({\n\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\tslot: storageSlot,\n\t\t\t})\n\n\t\t\tif (escrowedAmount !== \"0x0000000000000000000000000000000000000000000000000000000000000000\") {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\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\tconsole.log(\"No receipt found. Attempting to submit...\")\n\t\t\ttry {\n\t\t\t\tawait hyperbridge.submitUnsigned(message)\n\t\t\t} catch {\n\t\t\t\tconsole.warn(\"Submission failed. Awaiting network confirmation...\")\n\t\t\t}\n\n\t\t\tconsole.log(\"Waiting for network state update...\")\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\n\t\tconsole.log(\"Hyperbridge Receipt confirmed.\")\n\t}\n\n\t/**\n\t * Returns the native token amount required to dispatch a cancellation GET request for the given order.\n\t * Internally constructs the IGetRequest and calls quoteNative.\n\t */\n\tasync quoteCancelNative(order: Order): Promise<bigint> {\n\t\tconst orderWithCommitment = transformOrder(order)\n\n\t\tconst height = (orderWithCommitment.deadline as bigint) + 1n\n\n\t\tconst destIntentGateway = this.dest.configService.getIntentGatewayAddress(orderWithCommitment.destChain)\n\t\tconst slotHash = await this.dest.client.readContract({\n\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\taddress: destIntentGateway,\n\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\targs: [orderWithCommitment.id as HexString],\n\t\t})\n\t\tconst key = concatHex([destIntentGateway as HexString, slotHash as HexString]) as HexString\n\n\t\tconst context = encodeAbiParameters(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tname: \"requestBody\",\n\t\t\t\t\ttype: \"tuple\",\n\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t{ name: \"commitment\", type: \"bytes32\" },\n\t\t\t\t\t\t{ name: \"beneficiary\", type: \"bytes32\" },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"tokens\",\n\t\t\t\t\t\t\ttype: \"tuple[]\",\n\t\t\t\t\t\t\tcomponents: [\n\t\t\t\t\t\t\t\t{ name: \"token\", type: \"bytes32\" },\n\t\t\t\t\t\t\t\t{ name: \"amount\", type: \"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\t[\n\t\t\t\t{\n\t\t\t\t\tcommitment: orderWithCommitment.id as HexString,\n\t\t\t\t\tbeneficiary: orderWithCommitment.user as HexString,\n\t\t\t\t\ttokens: orderWithCommitment.inputs,\n\t\t\t\t},\n\t\t\t],\n\t\t) as HexString\n\n\t\tconst getRequest: IGetRequest = {\n\t\t\tsource: orderWithCommitment.sourceChain,\n\t\t\tdest: orderWithCommitment.destChain,\n\t\t\tfrom: this.source.configService.getIntentGatewayAddress(orderWithCommitment.destChain),\n\t\t\tnonce: await this.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\treturn await this.source.quoteNative(getRequest, 0n)\n\t}\n\n\t/**\n\t * Cancels an order through the cross-chain protocol by generating and submitting proofs.\n\t * This is an async generator function that yields status updates throughout the cancellation process.\n\t *\n\t * The cancellation process involves:\n\t * 1. Fetching proof from the destination chain that the order exists\n\t * 2. Creating a GET request to retrieve the order state\n\t * 3. Waiting for the source chain to finalize the request\n\t * 4. Fetching proof from the source chain\n\t * 5. Waiting for the challenge period to complete\n\t * 6. Submitting the request message to Hyperbridge\n\t * 7. Monitoring until Hyperbridge finalizes the cancellation\n\t *\n\t * @param order - The order to cancel, containing source/dest chains, deadline, and other order details\n\t * @param indexerClient - Client for querying the indexer and interacting with Hyperbridge\n\t *\n\t * @yields {CancelEvent} Status updates during the cancellation process:\n\t * - DESTINATION_FINALIZED: Destination proof has been obtained\n\t * - AWAITING_GET_REQUEST: Waiting for GET request to be provided\n\t * - SOURCE_FINALIZED: Source chain has finalized the request\n\t * - HYPERBRIDGE_DELIVERED: Hyperbridge has delivered the request\n\t * - HYPERBRIDGE_FINALIZED: Cancellation is complete\n\t *\n\t * @throws {Error} If GET request is not provided when needed\n\t *\n\t * @example\n\t * ```typescript\n\t * // Using default IntentGateway address\n\t * const intentGateway = new IntentGateway(sourceChain, destChain);\n\t * const cancelStream = intentGateway.cancelOrder(order, indexerClient);\n\t *\n\t * // Using custom IntentGateway address (e.g., for old contract version)\n\t * const intentGateway = new IntentGateway(\n\t * sourceChain,\n\t * destChain,\n\t * \"0xd54165e45926720b062C192a5bacEC64d5bB08DA\"\n\t * );\n\t * const cancelStream = intentGateway.cancelOrder(order, indexerClient);\n\t *\n\t * // Or set it after instantiation\n\t * const intentGateway = new IntentGateway(sourceChain, destChain);\n\t * intentGateway.destIntentGatewayAddress = \"0xd54165e45926720b062C192a5bacEC64d5bB08DA\";\n\t * const cancelStream = intentGateway.cancelOrder(order, indexerClient);\n\t *\n\t * for await (const event of cancelStream) {\n\t * switch (event.status) {\n\t * case 'SOURCE_FINALIZED':\n\t * console.log('Source finalized at block:', event.data.metadata.blockNumber);\n\t * break;\n\t * case 'HYPERBRIDGE_FINALIZED':\n\t * console.log('Cancellation complete');\n\t * break;\n\t * }\n\t * }\n\t * ```\n\t */\n\tasync *cancelOrder(order: Order, indexerClient: IndexerClient): AsyncGenerator<CancelEvent> {\n\t\tconst orderId = orderCommitment(order)\n\n\t\tconst hyperbridge = indexerClient.hyperbridge as SubstrateChain\n\t\tconst sourceStateMachine = hexToString(order.sourceChain as HexString)\n\t\tconst sourceConsensusStateId = this.source.configService.getConsensusStateId(sourceStateMachine)\n\n\t\tlet destIProof: IProof | null = await this.storage.getItem(STORAGE_KEYS.destProof(orderId))\n\t\tif (!destIProof) {\n\t\t\tdestIProof = yield* this.fetchDestinationProof(order, indexerClient)\n\t\t\tawait this.storage.setItem(STORAGE_KEYS.destProof(orderId), destIProof)\n\t\t} else {\n\t\t\tyield { status: \"DESTINATION_FINALIZED\", data: { proof: destIProof } }\n\t\t}\n\n\t\tlet getRequest: IGetRequest | null = await this.storage.getItem(STORAGE_KEYS.getRequest(orderId))\n\t\tif (!getRequest) {\n\t\t\tconst transactionHash = yield {\n\t\t\t\tstatus: \"AWAITING_GET_REQUEST\",\n\t\t\t\tdata: undefined,\n\t\t\t}\n\t\t\tconst receipt = await this.source.client.getTransactionReceipt({\n\t\t\t\thash: transactionHash,\n\t\t\t})\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.storage.setItem(STORAGE_KEYS.getRequest(orderId), getRequest)\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\tif (statusUpdate.status === RequestStatus.SOURCE_FINALIZED) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"SOURCE_FINALIZED\",\n\t\t\t\t\tdata: { metadata: statusUpdate.metadata },\n\t\t\t\t}\n\n\t\t\t\tconst sourceHeight = BigInt(statusUpdate.metadata.blockNumber)\n\t\t\t\tlet sourceIProof: IProof | null = await this.storage.getItem(STORAGE_KEYS.sourceProof(orderId))\n\t\t\t\tif (!sourceIProof) {\n\t\t\t\t\tsourceIProof = await fetchSourceProof(\n\t\t\t\t\t\tcommitment,\n\t\t\t\t\t\tthis.source,\n\t\t\t\t\t\tsourceStateMachine,\n\t\t\t\t\t\tsourceConsensusStateId,\n\t\t\t\t\t\tsourceHeight,\n\t\t\t\t\t)\n\t\t\t\t\tawait this.storage.setItem(STORAGE_KEYS.sourceProof(orderId), sourceIProof)\n\t\t\t\t}\n\n\t\t\t\tawait waitForChallengePeriod(hyperbridge, {\n\t\t\t\t\theight: sourceIProof.height,\n\t\t\t\t\tid: {\n\t\t\t\t\t\tstateId: parseStateMachineId(sourceStateMachine).stateId,\n\t\t\t\t\t\tconsensusStateId: sourceConsensusStateId,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tconst getRequestMessage: IGetRequestMessage = {\n\t\t\t\t\tkind: \"GetRequest\",\n\t\t\t\t\trequests: [getRequest],\n\t\t\t\t\tsource: sourceIProof,\n\t\t\t\t\tresponse: destIProof,\n\t\t\t\t\tsigner: pad(\"0x\"),\n\t\t\t\t}\n\n\t\t\t\tawait this.submitAndConfirmReceipt(hyperbridge, commitment, getRequestMessage)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (statusUpdate.status === RequestStatus.HYPERBRIDGE_DELIVERED) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"HYPERBRIDGE_DELIVERED\",\n\t\t\t\t\tdata: statusUpdate as RequestStatusWithMetadata,\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (statusUpdate.status === RequestStatus.HYPERBRIDGE_FINALIZED) {\n\t\t\t\tyield {\n\t\t\t\t\tstatus: \"HYPERBRIDGE_FINALIZED\",\n\t\t\t\t\tdata: statusUpdate as RequestStatusWithMetadata,\n\t\t\t\t}\n\t\t\t\tawait this.storage.removeItem(STORAGE_KEYS.destProof(orderId))\n\t\t\t\tawait this.storage.removeItem(STORAGE_KEYS.getRequest(orderId))\n\t\t\t\tawait this.storage.removeItem(STORAGE_KEYS.sourceProof(orderId))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetches proof for the destination chain.\n\t * @param order - The order to fetch proof for\n\t * @param indexerClient - Client for querying the indexer\n\t */\n\tprivate async *fetchDestinationProof(\n\t\torder: Order,\n\t\tindexerClient: IndexerClient,\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.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 intentGatewayAddress =\n\t\t\t\t\tthis.destIntentGatewayAddress ??\n\t\t\t\t\tthis.dest.configService.getIntentGatewayAddress(this.dest.config.stateMachineId)\n\t\t\t\tconst orderId = orderCommitment(order)\n\t\t\t\tconst slotHash = await this.dest.client.readContract({\n\t\t\t\t\tabi: IntentGatewayABI.ABI,\n\t\t\t\t\taddress: intentGatewayAddress,\n\t\t\t\t\tfunctionName: \"calculateCommitmentSlotHash\",\n\t\t\t\t\targs: [orderId],\n\t\t\t\t})\n\n\t\t\t\tconst proofHex = await this.dest.queryStateProof(latestHeight, [slotHash], intentGatewayAddress)\n\n\t\t\t\tconst proof: IProof = {\n\t\t\t\t\tconsensusStateId: this.dest.config.consensusStateId,\n\t\t\t\t\theight: latestHeight,\n\t\t\t\t\tproof: proofHex,\n\t\t\t\t\tstateMachine: this.dest.config.stateMachineId,\n\t\t\t\t}\n\n\t\t\t\tyield { status: \"DESTINATION_FINALIZED\", data: { 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\n/**\n * Transforms an Order object into the format expected by the smart contract.\n * Converts chain IDs to hex format and restructures input/output arrays.\n *\n * @param order - The order to transform\n * @returns The order in contract-compatible format\n */\nfunction transformOrder(order: Order) {\n\treturn {\n\t\t...order,\n\t\tid: orderCommitment(order),\n\t\tsourceChain: hexToString(order.sourceChain as HexString),\n\t\tdestChain: hexToString(order.destChain as HexString),\n\t}\n}\n\n/**\n * Fetches proof for the source chain.\n */\nasync function fetchSourceProof(\n\tcommitment: HexString,\n\tsource: EvmChain,\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\ninterface CancelEventMap {\n\tDESTINATION_FINALIZED: { proof: IProof }\n\tAWAITING_GET_REQUEST: undefined\n\tSOURCE_FINALIZED: { metadata: { blockNumber: number } }\n\tHYPERBRIDGE_DELIVERED: RequestStatusWithMetadata\n\tHYPERBRIDGE_FINALIZED: RequestStatusWithMetadata\n\tSOURCE_PROOF_RECEIVED: IProof\n}\n\ntype CancelEvent = {\n\t[K in keyof CancelEventMap]: { status: K; data: CancelEventMap[K] }\n}[keyof CancelEventMap]\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 { hexToBytes, pad, bytesToHex } from \"viem\"\nimport type { ApiPromise } from \"@polkadot/api\"\nimport { Struct, Vector, u8, u64, _void, Option, u128, bool } from \"scale-ts\"\nimport { H256, StateMachine } from \"@/utils/substrate\"\nimport type { HexString } from \"@/types\"\nimport { convertStateMachineIdToEnum } from \"@/chain\"\nimport { keccakAsU8a, xxhashAsU8a } from \"@polkadot/util-crypto\"\nimport type { Option as PolakdotOption } from \"@polkadot/types\"\nimport type { EventRecord, StorageData } from \"@polkadot/types/interfaces\"\nimport type { SignerOptions } from \"@polkadot/api/types\"\nimport type { HyperbridgeTxEvents } from \"./xcmGateway\"\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/// Receipient\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.tokenGatewayAddress - Gateway contract address\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 * @param options - Signer options\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}): Promise<ReadableStream<HyperbridgeTxEvents>> {\n\tconst { who, options, params, apiPromise } = teleport_param\n\n\tconst substrateComplianceAddr = (address: HexString, stateMachine: string) => {\n\t\tif (stateMachine.startsWith(\"EVM-\")) return pad(address, { size: 32, dir: \"left\" })\n\n\t\treturn address\n\t}\n\n\tconst assetId = keccakAsU8a(params.symbol)\n\n\t// Fetch scale encoded local asset id\n\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 destination = convertStateMachineIdToEnum(params.destination)\n\n\tconst recipient = hexToBytes(substrateComplianceAddr(params.recipient, params.destination))\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 tx = apiPromise.tx.tokenGateway.teleport(fullCallData)\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(who, 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\t// @ts-expect-error Type Mismatch\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"]}