{"version":3,"sources":["../src/utils/common.ts","../src/constants/partner.ts","../src/constants/protocol.ts","../src/constants/common.ts","../src/constants/pythPriceIds.ts","../src/contracts/addreses/zap.ts","../src/utils/index.ts","../src/contracts/abis/IERC7412.ts","../src/utils/parseError.ts","../src/contracts/addreses/oracleProxy.ts","../src/core/index.ts","../src/index.ts","../src/contracts/v3-contracts/42161/index.ts","../src/contracts/abis/zap.ts","../src/contracts/v3-contracts/421614/index.ts","../src/contracts/v3-contracts/8453/index.ts","../src/contracts/v3-contracts/84532/index.ts","../src/contracts/helpers.ts","../src/contracts/index.ts","../src/pyth/index.ts","../src/perps/index.ts","../src/utils/market.ts","../src/utils/override.ts","../src/constants/slots.ts","../src/spot/index.ts"],"sourcesContent":["import { Address, formatEther, maxUint128, parseEther } from 'viem';\n\nimport { mainnet, base, optimism, arbitrum, baseSepolia, arbitrumSepolia, Chain } from 'viem/chains';\nimport { randomBytes } from 'crypto';\nimport { publicRpcEndpoints } from '../constants';\nimport { ZAP_BY_CHAIN } from '../contracts/addreses/zap';\n\nexport function getPublicRpcEndpoint(chainId: number) {\n  return publicRpcEndpoints[chainId];\n}\n\n/**\n * Gets the chain object for the given chain id.\n * @param chainId - Chain id of the target EVM chain.\n * @returns Viem's chain object.\n */\nexport function getChain(chainId: number): Chain {\n  const chains = [mainnet, base, optimism, arbitrum, baseSepolia, arbitrumSepolia];\n  for (const chain of Object.values(chains)) {\n    if (chain.id === chainId) {\n      return chain;\n    }\n  }\n  throw new Error(`Chain with id ${chainId} not found`);\n}\n\nexport function convertWeiToEther(amountInWei: string | bigint | undefined): number {\n  if (amountInWei == undefined) {\n    throw new Error('Invalid amount received during conversion: undefined');\n  }\n  if (typeof amountInWei == 'bigint') {\n    return Number(formatEther(amountInWei));\n  } else if (typeof amountInWei == 'string') {\n    return Number(formatEther(BigInt(amountInWei)));\n  } else {\n    throw new Error('Expected string or bigint for conversion');\n  }\n}\n\nexport function convertEtherToWei(amount: string | number | undefined): bigint {\n  if (amount == undefined) {\n    throw new Error('Invalid amount received during conversion: undefined');\n  }\n  if (typeof amount == 'number') {\n    return parseEther(amount.toString());\n  } else if (typeof amount == 'string') {\n    return parseEther(amount);\n  } else {\n    throw new Error('Expected string or bigint for conversion');\n  }\n}\n\nexport function sleep(seconds: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n}\n\nexport function generateRandomAccountId(): bigint {\n  const maxUint128Half = maxUint128 / BigInt(2);\n\n  const buffer = randomBytes(8); // 8 bytes * 8 bits/byte = 64 bits\n  const randomAccountId = BigInt('0x' + buffer.toString('hex'));\n  if (randomAccountId > maxUint128Half) {\n    throw new Error('Account ID greater than Maxuint128');\n  }\n  return randomAccountId;\n}\n\n/**\n * @name batchArray\n * @description This function batches an array into smaller subarrays based on a given size. It uses the reduce method to iterate over the array and push each batch into an accumulator array.\n * @param {any[]} arr - The array that needs to be batched.\n * @param {number} batchSize - The number of elements to include in each subarray.\n * @returns {any[][]} - An array of arrays, where each inner array contains the batched subarrays.\n */\nexport const batchArray = <T>(arr: T[], batchSize: number): T[][] => {\n  return arr.reduce((acc, _, i) => (i % batchSize ? acc : [...acc, arr.slice(i, i + batchSize)]), [] as T[][]);\n};\n\nexport type QuoteParams = {\n  fromChain: number;\n  fromToken: Address;\n  toToken: Address;\n  fromAmount: string;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type FetcherArgs = Omit<RequestInit, 'body'> & { body?: any };\n\nexport const fetcher = (\n  url: string,\n  init: FetcherArgs = {\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  },\n) =>\n  fetch(url, {\n    ...init,\n    body: JSON.stringify(init.body),\n    headers: init.headers,\n    method: init.body && !init.method ? 'POST' : init.method,\n  });\n\nconst odoFetcher = async (url: string, options: FetcherArgs) => {\n  return fetcher(`https://api.odos.xyz/sor${url}`, options);\n};\n\nconst assemblePath = async (user: string, pathId: string) => {\n  const response = await odoFetcher(`/assemble`, {\n    body: {\n      userAddr: user,\n      pathId,\n    },\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\n  if (!response.ok) return '';\n  const data = (await response.json()) as { transaction: { data: string } };\n\n  return data.transaction.data;\n};\n\nexport const getOdosPath = async (quoteParams: QuoteParams) => {\n  if (!quoteParams.fromToken || !quoteParams.toToken || !quoteParams.fromAmount) {\n    throw new Error('Missing required parameters for Odos path generation');\n  }\n\n  const data = {\n    chainId: quoteParams.fromChain,\n    inputTokens: [{ tokenAddress: quoteParams.fromToken, amount: quoteParams.fromAmount }],\n    outputTokens: [{ tokenAddress: quoteParams.toToken, proportion: 1 }],\n    userAddr: ZAP_BY_CHAIN[quoteParams.fromChain],\n  };\n\n  const response = await odoFetcher('/quote/v2', {\n    body: data,\n    headers: {\n      'Content-Type': 'application/json',\n    },\n  });\n\n  if (!response.ok) {\n    console.error(`Failed to get Odos quote: ${response.status} ${response.statusText}`);\n    return { path: '' };\n  }\n\n  const quote = (await response.json()) as { pathId: string };\n  if (!quote?.pathId) {\n    console.error('Invalid response from Odos API: missing pathId');\n    return { path: '' };\n  }\n  const quoteId = quote.pathId;\n\n  const path = await assemblePath(data.userAddr, quoteId);\n  if (!path) {\n    console.error('Failed to assemble path from pathId');\n  }\n\n  return { path };\n};\n","export const DEFAULT_TRACKING_CODE = '0x5052460000000000000000000000000000000000000000000000000000000000';\nexport const DEFAULT_REFERRER = '0x32A74B2cE1a0783A182f607D29207e571a1cDD4D';\n","export const DEFAULT_NETWORK_ID = 8453;\n\nexport const DEFAULT_DECIMALS = 18;\nexport const DEFAULT_SLIPPAGE = 2.0;\nexport const DEFAULT_GAS_MULTIPLIER = 2.0;\n\nexport const PUBLIC_PYTH_ENDPOINT = 'https://hermes.pyth.network';\nexport const DEFAULT_PYTH_TIMEOUT = 15000; // 15 sec\n","import { Hex, zeroAddress } from 'viem';\nimport { MarketIdOrName } from '../interface/commonTypes';\nimport { SUPPORTED_CHAINS } from './chains';\n\nexport const ZERO_ADDRESS: Hex = zeroAddress;\n\nexport const SIG_ORACLE_DATA_REQUIRED = '0xcf2cabdf';\nexport const SIG_FEE_REQUIRED = '0x0e7186fb';\nexport const SIG_ERRORS = '0x0b42fd17';\n\n// for markets metadata it is requesting too much oracle updates\nexport const MAX_ERC7412_RETRIES = 80; // Limit the max failures to prevent infinite loops\n\n// List of market ids disabled by chainId\nexport const DISABLED_MARKETS: { [key: number]: number[] } = {\n  84532: [3, 6300],\n  8453: [6300],\n};\n\nexport const publicRpcEndpoints: { [key: number]: string } = {\n  8453: 'https://base.llamarpc.com',\n  84532: 'https://sepolia.base.org',\n  42161: 'https://arbitrum.llamarpc.com',\n  421614: 'https://sepolia-rollup.arbitrum.io/rpc',\n};\n\n// Logger constants\nexport type LOGGER_MESSAGE_TYPE = 'json' | 'pretty' | 'hidden';\n\n// 0: silly, 1: trace, 2: debug, 3: info, 4: warn, 5: error, 6: fatal\nexport const DEFAULT_LOGGER_LEVEL = 4; // https://tslog.js.org/#/?id=highlights to see more levels\nexport const CUSTOM_DECIMALS: Record<number, Record<MarketIdOrName, number>> = {\n  [SUPPORTED_CHAINS.ARBITUM_SEPOLIA]: {\n    2: 6,\n    USDC: 6,\n  },\n  [SUPPORTED_CHAINS.ARBITRUM]: {\n    2: 6,\n    USDC: 6,\n  },\n  [SUPPORTED_CHAINS.BASE_SEPOLIA]: {\n    1: 6,\n    USDC: 6,\n  },\n  [SUPPORTED_CHAINS.BASE]: {\n    1: 6,\n    USDC: 6,\n  },\n};\n","export const SYMBOL_TO_PYTH_FEED = new Map<string, string>([\n  // Markets\n  ['BTC', '0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33'],\n  ['SOL', '0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d'],\n  ['WIF', '0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc'],\n  ['ETH', '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace'],\n  ['AAVE', '0x2b9ab1e972a281585084148ba1389800799bd4be63b957507db1349314e47445'],\n  ['ADA', '0x2a01deaec9e51a579277b34b122399984d0bbf57e2458a7e42fecd2829867a0d'],\n  ['ARB', '0x3fa4252848f9f0a1480be62745a4629d9eb1322aebab8a791e344b3b9c1adcf5'],\n  ['AVAX', '0x93da3352f9f1d105fdfe4971cfa80e9dd777bfc5d0f683ebb6e1294b92137bb7'],\n  ['BCH', '0x3dd2b63686a450ec7290df3a1e0b583c0481f651351edfa7636f39aed55cf8a3'],\n  ['BNB', '0x2f95862b045670cd22bee3114c39763a4a08beeb663b145d283c31d7d1101c4f'],\n  ['CRV', '0xa19d04ac696c7a6616d291c7e5d1377cc8be437c327b75adb5dc1bad745fcae8'],\n  ['DOGE', '0xdcef50dd0a4cd2dcc17e45df1676dcb336a11a61c69df7a0299b0150c672d25c'],\n  ['DYDX', '0x6489800bb8974169adfe35937bf6736507097d13c190d760c557108c7e93a81b'],\n  ['GMX', '0xb962539d0fcb272a494d65ea56f94851c2bcf8823935da05bd628916e2e9edbf'],\n  ['LINK', '0x8ac0c70fff57e9aefdf5edf44b51d62c2d433653cbb2cf5cc06bb115af04d221'],\n  ['LTC', '0x6e3f3fa8253588df9326580180233eb791e03b443a3ba7a1d892e73874e19a54'],\n  ['MKR', '0x9375299e31c0deb9c6bc378e6329aab44cb48ec655552a70d4b9050346a30378'],\n  ['NEAR', '0xc415de8d2eba7db216527dff4b60e8f3a5311c740dadb233e13e12547e226750'],\n  ['OP', '0x385f64d993f7b77d8182ed5003d97c60aa3361f3cecfe711544d2d59165e9bdf'],\n  ['ORDI', '0x193c739db502aadcef37c2589738b1e37bdb257d58cf1ab3c7ebc8e6df4e3ec0'],\n  ['PEPE', '0xd69731a2e74ac1ce884fc3890f7ee324b6deb66147055249568869ed700882e4'],\n  ['POL', '0xffd11c5a1cfd42f80afb2df4d9f264c15f956d68153335374ec10722edd70472'],\n  ['PYTH', '0x0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff'],\n  ['RUNE', '0x5fcf71143bb70d41af4fa9aa1287e2efd3c5911cee59f909f915c9f61baacb1e'],\n  ['SHIB', '0xf0d57deca57b3da2fe63a493f4c25925fdfd8edf834b20f93e1f84dbd1504d4a'],\n  ['STX', '0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17'],\n  ['TIA', '0x09f7c1d7dfbb7df2b8fe3d3d87ee94a2259d212da4f30c1f0540d066dfa44723'],\n  ['UNI', '0x78d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501'],\n  ['XLM', '0xb7a8eba68a997cd0210c2e1e4ee811ad2d174b3611c22d9ebf16f4cb7e9ba850'],\n  ['XRP', '0xec5d399846a9209f3fe5881d70aae9268c94339ff9817e8d18ff19fa05eea1c8'],\n  ['ATOM', '0xb00b60f88b03a6a625a8d1c048c3f66653edf217439983d037e7222c4e612819'],\n  ['BLUR', '0x856aac602516addee497edf6f50d39e8c95ae5fb0da1ed434a8c2ab9c3e877e9'],\n  ['BOME', '0x30e4780570973e438fdb3f1b7ad22618b2fc7333b65c7853a7ca144c39052f7a'],\n  ['BONK', '0x72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419'],\n  ['COMP', '0x4a8e42861cabc5ecb50996f92e7cfa2bce3fd0a2423b0c44c9b423fb2bd25478'],\n  ['DOT', '0xca3eed9b267293f6595901c734c7525ce8ef49adafe8284606ceb307afa2ca5b'],\n  ['EIGEN', '0xc65db025687356496e8653d0d6608eec64ce2d96e2e28c530e574f0e4f712380'],\n  ['ENA', '0xb7910ba7322db020416fcac28b48c01212fd9cc8fbcbaf7d30477ed8605f6bd4'],\n  ['EOS', '0x06ade621dbc31ed0fc9255caaab984a468abe84164fb2ccc76f02a4636d97e31'],\n  ['ETC', '0x7f5cc8d963fc5b3d2ae41fe5685ada89fd4f14b435f8050f28c7fd409f40c2d8'],\n  ['ETHBTC', '0xc96458d393fe9deb7a7d63a0ac41e2898a67a7750dbd166673279e06c868df0a'],\n  ['ETHFI', '0xb27578a9654246cb0a2950842b92330e9ace141c52b63829cc72d5c45a5a595a'],\n  ['FIL', '0x150ac9b959aee0051e4091f0ef5216d941f590e1c5e7f91cf7635b5c11628c0e'],\n  ['FLOW', '0x2fb245b9a84554a0f15aa123cbb5f64cd263b59e9a87d80148cbffab50c69f30'],\n  ['FTM', '0x5c6c0d2386e3352356c3ab84434fafb5ea067ac2678a38a338c4a69ddc4bdb0c'],\n  ['FXS', '0x735f591e4fed988cd38df74d8fcedecf2fe8d9111664e0fd500db9aa78b316b1'],\n  ['GALA', '0x0781209c28fda797616212b7f94d77af3a01f3e94a5d421760aef020cf2bcb51'],\n  ['GRT', '0x4d1f8dae0d96236fb98e8f47471a366ec3b1732b47041781934ca3a9bb2f35e7'],\n  ['ICP', '0xc9907d786c5821547777780a1e4f89484f3417cb14dd244f2b0a34ea7a554d67'],\n  ['IMX', '0x941320a8989414874de5aa2fc340a75d5ed91fdff1613dd55f83844d52ea63a2'],\n  ['INJ', '0x7a5bc1d2b56ad029048cd63964b3ad2776eadf812edc1a43a31406cb54bff592'],\n  ['IO', '0x82595d1509b770fa52681e260af4dda9752b87316d7c048535d8ead3fa856eb1'],\n  ['JTO', '0xb43660a5f790c69354b0729a5ef9d50d68f1df92107540210b9cccba1f947cc2'],\n  ['JUP', '0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996'],\n  ['LDO', '0xc63e2a7f37a04e5e614c07238bedb25dcc38927fba8fe890597a593c0b2fa4ad'],\n  ['MEME', '0xcd2cee36951a571e035db0dfad138e6ecdb06b517cc3373cd7db5d3609b7927c'],\n  ['MEW', '0x514aed52ca5294177f20187ae883cec4a018619772ddce41efcc36a6448f5d5d'],\n  ['NOT', '0x75ec6f04d4bded6afdc1440689be4402dd1e23d2ff2c21e081871eb2739ceb36'],\n  ['PENDLE', '0x9a4df90b25497f66b1afb012467e316e801ca3d839456db028892fe8c70c8016'],\n  ['PEOPLE', '0xb7fe919d83815ca6074c82a3286b1cd6ffb7d3136e323cd2b1ef706cfc7e5945'],\n  ['POPCAT', '0xb9312a7ee50e189ef045aa3c7842e099b061bd9bdc99ac645956c3b660dc8cce'],\n  ['RENDER', '0x3d4a2bd9535be6ce8059d75eadeba507b043257321aa544717c56fa19b49e35d'],\n  ['SATS', '0x40440d18fb5ad809e2825ce7dfc035cfa57135c13062a04addafe0c7f54425e0'],\n  ['SEI', '0x53614f1cb0c031d4af66c04cb9c756234adad0e1cee85303795091499a4084eb'],\n  ['SNX', '0x39d020f60982ed892abbcd4a06a276a9f9b7bfbce003204c110b6e488f502da3'],\n  ['STRK', '0x6a182399ff70ccf3e06024898942028204125a819e519a335ffa4579e66cd870'],\n  ['SUI', '0x23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744'],\n  ['SUSHI', '0x26e4f737fde0263a9eea10ae63ac36dcedab2aaf629261a994e1eeb6ee0afe53'],\n  ['TAO', '0x410f41de235f2db824e562ea7ab2d3d3d4ff048316c61d629c0b93f58584e1af'],\n  ['TON', '0x8963217838ab4cf5cadc172203c1f0b763fbaa45f346d8ee50ba994bbcac3026'],\n  ['TRX', '0x67aed5a24fdad045475e7195c98a98aea119c763f272d4523f5bac93a4f33c2b'],\n  ['W', '0xeff7446475e218517566ea99e72a4abec2e1bd8498b43b7d8331e29dcb059389'],\n  ['WLD', '0xd6835ad1f773de4a378115eb6824bd0c0e42d84d1c84d9750e853fb6b6c7794a'],\n  ['YFI', '0x425f4b198ab2504936886c1e93511bb6720fbcf2045a4f3c0723bb213846022f'],\n  ['ZRO', '0x3bd860bea28bf982fa06bcf358118064bb114086cc03993bd76197eaab0b8018'],\n  ['ALGO', '0xfa17ceaf30d19ba51112fdcc750cc83454776f47fb0112e4af07f15f4bb1ebc0'],\n  ['APT', '0x03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5'],\n  ['ARKM', '0x7677dd124dee46cfcd46ff03cf405fb0ed94b1f49efbea3444aadbda939a7ad3'],\n  ['AXL', '0x60144b1d5c9e9851732ad1d9760e3485ef80be39b984f6bf60f82b28a2b7f126'],\n  ['AXS', '0xb7e3904c08ddd9c0c10c6d207d390fd19e87eb6aab96304f571ed94caebdefa0'],\n  ['BAL', '0x07ad7b4a7662d19a6bc675f6b467172d2f3947fa653ca97555a9b20236406628'],\n  ['GOAT', '0xf7731dc812590214d3eb4343bfb13d1b4cfa9b1d4e020644b5d5d8e07d60c66c'],\n  ['MOODENG', '0xffff73128917a90950cd0473fd2551d7cd274fd5a6cc45641881bbcc6ee73417'],\n  ['SAFE', '0x7b3576858506a94fad3a9cc55e32934f0c3931150fe3a3c7b83558dbae5b8e38'],\n  ['PNUT', '0x116da895807f81f6b5c5f01b109376e7f6834dc8b51365ab7cdfa66634340e54'],\n  ['CAT', '0xdf7b724fae4b9ecfd6081effb1ea3bb3b5c250c3641cf903b4d8fb10f4f452df'],\n  ['DEGEN', '0x9c93e4a22c56885af427ac4277437e756e7ec403fbc892f975d497383bb33560'],\n  ['SLERF', '0x1a483c4a63876d286991ac0d6e090298db42e88c3826b6e0cff89daca498eed5'],\n  ['AERO', '0x9db37f4d5654aad3e37e2e14ffd8d53265fb3026d1d8f91146539eebaa2ef45f'],\n  ['CHILLGUY', '0xd98869edbb4a0d2803dc1054405bceb1ddc546bfc9a3d0e31bb0e0448e6181e1'],\n  ['MORPHO', '0x5b2a4c542d4a74dd11784079ef337c0403685e3114ba0d9909b5c7a7e06fdc42'],\n  ['SOLETH', '0xde87506dabfadbef89af2d5d796ebae80ddaea240fc7667aa808fce3629cd8fb'],\n  // Collaterals\n  ['USDC', '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a'],\n  ['USDE', '0x6ec879b1e9963de5ee97e9c8710b742d6228252a5e2ca12d4ae81d7fe5ee8c5d'],\n  ['DAI', '0xb0948a5e5313200c632b51bb5ca32f6de0d36e9950a942d19751e833f70dabfd'],\n]);\n","import { Address, zeroAddress } from 'viem';\nimport { SUPPORTED_CHAINS } from '../../constants/chains';\n\nexport const ZAP_BY_CHAIN: Record<number, Address> = {\n  [SUPPORTED_CHAINS.BASE]: '0x459Bbb4231f0a606DC514BacD5712A5922CBe6c8',\n  [SUPPORTED_CHAINS.BASE_SEPOLIA]: zeroAddress,\n  [SUPPORTED_CHAINS.ARBITRUM]: '0x9ec181B2E69fB36C50031F0c87Bc0749b766A9f4',\n  [SUPPORTED_CHAINS.ARBITUM_SEPOLIA]: '0xb569ed692206a1d73996088ae646333b1d59d9c5',\n};\n\nexport const SYNTHETIX_ZAP: Record<number, Address> = {\n  [SUPPORTED_CHAINS.BASE_SEPOLIA]: '0xA6Fab50eB36F3eB2118eE2f4C12C968F8608bbc9',\n  [SUPPORTED_CHAINS.BASE]: '0xA6Fab50eB36F3eB2118eE2f4C12C968F8608bbc9',\n};\n","export * from './common';\n\nimport {\n  Abi,\n  Address,\n  CallExecutionError,\n  CallParameters,\n  decodeAbiParameters,\n  decodeErrorResult,\n  decodeFunctionResult,\n  encodeAbiParameters,\n  encodeFunctionData,\n  Hash,\n  Hex,\n  parseAbiParameters,\n  StateMapping,\n  StateOverride,\n} from 'viem';\nimport { SynthetixSdk } from '..';\nimport { IERC7412Abi } from '../contracts/abis/IERC7412';\nimport { Call3Value, Result } from '../interface/contractTypes';\nimport { parseError } from './parseError';\nimport { MAX_ERC7412_RETRIES, SIG_ERRORS, SIG_FEE_REQUIRED, SIG_ORACLE_DATA_REQUIRED } from '../constants';\nimport {\n  OverrideParamsRead,\n  OverrideParamsWrite,\n  TransactionData,\n  WriteContractParams,\n  WriteErc7412,\n  WriteReturnType,\n} from '../interface/commonTypes';\nimport { batchArray } from './common';\nimport { ORACLE_PROXY_BY_CHAIN } from '../contracts/addreses/oracleProxy';\n/**\n * Utility class\n *\n */\nexport class Utils {\n  sdk: SynthetixSdk;\n  constructor(synthetixSdk: SynthetixSdk) {\n    this.sdk = synthetixSdk;\n  }\n\n  public async isOracleCall(data: TransactionData | Address) {\n    return Object.values(ORACLE_PROXY_BY_CHAIN)\n      .map((a) => a.toLowerCase())\n      .includes(typeof data === 'string' ? data.toLowerCase() : data.to.toLowerCase());\n  }\n\n  /**\n   * Returns the Pyth price ids array\n   * @param oracleQueryData\n   * @returns Pyth Price IDs array\n   */\n  public getPythPriceIdsFromOracleQuery(oracleQueryData: Hex): Hex[] {\n    const values = decodeAbiParameters(parseAbiParameters('uint8, uint64, bytes32[]'), oracleQueryData);\n    return values[2] as Hex[];\n  }\n\n  /**\n   * Decodes the response from a Smart contract function call\n   * @param abi Contract ABI\n   * @param functionName Function name to decode\n   * @param result Response from function call that needs to be decoded\n   * @returns Decoded result\n   */\n  public decodeResponse(abi: unknown, functionName: string, result: Hex) {\n    const decodedResult = decodeFunctionResult({\n      abi: abi as Abi,\n      functionName: functionName,\n      data: result,\n    });\n\n    return decodedResult;\n  }\n\n  /**\n   * Determines the type of Error emitted by ERC7412 contract and prepares signed update data\n   * @param data Error data emitted from ERC7412 contract\n   * @returns Encoded data for oracle price update transaction\n   */\n  public async fetchOracleUpdateData(data: Hex): Promise<Hex> {\n    const [updateType] = decodeAbiParameters([{ name: 'updateType', type: 'uint8' }], data);\n\n    if (updateType === 1) {\n      const [updateType, stalenessOrTime, priceIds] = decodeAbiParameters(\n        [\n          { name: 'updateType', type: 'uint8' },\n          { name: 'stalenessTolerance', type: 'uint64' },\n          { name: 'priceIds', type: 'bytes32[]' },\n        ],\n        data,\n      );\n\n      const stalenessTolerance = stalenessOrTime;\n      const updateData = (await this.sdk.pyth.pythConnection.getPriceFeedsUpdateData(\n        priceIds as string[],\n      )) as unknown as Address[];\n\n      return encodeAbiParameters(\n        [\n          { type: 'uint8', name: 'updateType' },\n          { type: 'uint64', name: 'stalenessTolerance' },\n          { type: 'bytes32[]', name: 'priceIds' },\n          { type: 'bytes[]', name: 'updateData' },\n        ],\n        [updateType, stalenessTolerance, priceIds, updateData],\n      );\n    } else if (updateType === 2) {\n      const [updateType, requestedTime, priceId] = decodeAbiParameters(\n        [\n          { name: 'updateType', type: 'uint8' },\n          { name: 'requestedTime', type: 'uint64' },\n          { name: 'priceIds', type: 'bytes32' },\n        ],\n        data,\n      );\n      this.sdk.logger.info('Update type: ', updateType);\n      this.sdk.logger.info('priceIds: ', priceId);\n\n      const [priceFeedUpdateVaa] = await this.sdk.pyth.pythConnection.getVaa(\n        priceId as string,\n        Number((requestedTime as unknown as bigint).toString()),\n      );\n      const priceFeedUpdate = '0x' + Buffer.from(priceFeedUpdateVaa, 'base64').toString('hex');\n\n      return encodeAbiParameters(\n        [\n          { type: 'uint8', name: 'updateType' },\n          { type: 'uint64', name: 'timestamp' },\n          { type: 'bytes32[]', name: 'priceIds' },\n          { type: 'bytes[]', name: 'updateData' },\n        ],\n        [updateType, requestedTime, [priceId], [priceFeedUpdate as Address]],\n      );\n    } else {\n      throw new Error(`Error encoding/decoding data`);\n    }\n  }\n\n  async handleOracleDataRequiredError(parsedError: Hash): Promise<Call3Value> {\n    const err = decodeErrorResult({\n      abi: IERC7412Abi,\n      data: parsedError,\n    });\n\n    const oracleAddress = err.args![0] as Address;\n    const oracleQuery = err.args![1] as Hex;\n    const signedRequiredData = await this.fetchOracleUpdateData(oracleQuery);\n    const dataVerificationTx = this.generateDataVerificationTx(oracleAddress, signedRequiredData);\n\n    return dataVerificationTx;\n  }\n\n  /**\n   * Handles ERC7412 error by creating a price update tx which is prepended to the existing calls\n   * @param error Error thrown by the call function\n   * @param calls Multicall call data\n   * @returns call array with ERC7412 fulfillOracleQuery transaction\n   */\n  public async handleErc7412Error(parsedError: Hash): Promise<Call3Value[]> {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    let err: any;\n\n    try {\n      err = decodeErrorResult({\n        abi: IERC7412Abi,\n        data: parsedError,\n      });\n    } catch (decodeErr) {\n      this.sdk.logger.error('Decode Error: ', decodeErr);\n      throw new Error('Handle ERC7412 error');\n    }\n    if (!['OracleDataRequired', 'FeeRequired', 'Errors'].includes(err?.errorName))\n      throw new Error('Handle ERC7412 error');\n\n    if (err?.errorName === 'Errors') {\n      const oracleErrors = err.args[0] as Hex[];\n      let oracleCalls: Call3Value[] = [];\n      const batchedOracleErrors = batchArray<Hex>(oracleErrors, 10);\n\n      for (const oracleErrors of batchedOracleErrors) {\n        const promiseOracleCalls = oracleErrors.map((oracleError) => {\n          return this.handleErc7412Error(oracleError);\n        });\n        const resolvedCalls = await Promise.all(promiseOracleCalls);\n        oracleCalls = [...oracleCalls, ...resolvedCalls.flat()];\n      }\n\n      return oracleCalls.flat();\n    }\n\n    if (err?.errorName === 'OracleDataRequired') {\n      return [await this.handleOracleDataRequiredError(parsedError)];\n    }\n\n    // this.sdk.logger.info('Fee Required oracle error. Adding fee to tx.value', err);\n    // if (!calls.length) throw new Error('Handle ERC7412 error: Calls.length == 0');\n    //\n    // calls[0].value = err.args[0] as bigint;\n\n    return [];\n  }\n\n  /**\n   * Generates Call3Value tx for Price update data of Oracle\n   * @param oracleContract Oracle Contract address\n   * @param signedRequiredData Encoded Price Update data\n   * @returns Transaction Request for Oracle price update\n   */\n  public generateDataVerificationTx(_oracleContract: Hex, signedRequiredData: string): Call3Value {\n    const priceUpdateCall: Call3Value = {\n      target: ORACLE_PROXY_BY_CHAIN[this.sdk.rpcConfig.chainId],\n      callData: encodeFunctionData({\n        abi: IERC7412Abi as unknown as Abi,\n        functionName: 'fulfillOracleQuery',\n        args: [signedRequiredData],\n      }),\n      value: 0n,\n      requireSuccess: false,\n    };\n    return priceUpdateCall;\n  }\n\n  /**\n   * Calls the `functionName` on `contractAddress` target using the Multicall contract. If the call requires\n   * a price update, ERC7412 price update tx is prepended to the tx.\n   * @param contractAddress Target contract address for the call\n   * @param abi Contract ABI\n   * @param functionName Function to be called on the contract\n   * @param args Arguments list for the function call\n   * @param calls Array of Call3Value calls for Multicall contract\n   * @returns Response from the contract function call\n   */\n  public async callErc7412({ contractAddress, abi, args, functionName, calls = [] }: WriteContractParams) {\n    const multicallInstance = await this.sdk.contracts.getMulticallInstance();\n\n    const currentCall: Call3Value = {\n      target: contractAddress,\n      callData: encodeFunctionData({\n        abi: abi as Abi,\n        functionName: functionName,\n        args: args,\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    calls.push(currentCall);\n\n    const publicClient = this.sdk.getPublicClient();\n\n    const oracleCalls = await this.getMissingOracleCalls(calls);\n    const multicallData = encodeFunctionData({\n      abi: multicallInstance.abi,\n      functionName: 'aggregate3Value',\n      args: [[...oracleCalls, ...calls]],\n    });\n\n    const totalValue = [...oracleCalls, ...calls].reduce((acc, tx) => {\n      return acc + (tx.value || 0n);\n    }, 0n);\n\n    const finalTx = {\n      account: this.sdk.accountAddress,\n      to: multicallInstance.address,\n      data: multicallData,\n      value: totalValue,\n    };\n\n    const response = await publicClient.call(finalTx);\n    this.sdk.logger.info('=== response', response);\n    if (!response.data) throw new Error('Error decoding call data');\n    const multicallResult: Result[] = this.decodeResponse(\n      multicallInstance.abi,\n      'aggregate3Value',\n      response.data as Hex,\n    ) as unknown as Result[];\n\n    const returnData = multicallResult.at(-1);\n\n    if (!returnData?.success) throw new Error('Error decoding call data');\n\n    const decodedResult = this.decodeResponse(abi, functionName, returnData.returnData);\n    return decodedResult;\n  }\n\n  /**\n   * Calls the `functionName` on `contractAddress` target using the Multicall contract. If the call requires\n   * a price update, ERC7412 price update tx is prepended to the tx.\n   * @param contractAddress Target contract address for the call\n   * @param abi Contract ABI\n   * @param functionName Function to be called on the contract\n   * @param argsList Array of arguments list for the function call\n   * @param calls Array of Call3Value calls for Multicall contract\n   * @returns Array of responses from the contract function call for the multicalls\n   */\n  public async multicallErc7412({\n    contractAddress,\n    abi,\n    functionName,\n    args: argsList,\n    calls = [],\n  }: WriteContractParams) {\n    const multicallInstance = await this.sdk.contracts.getMulticallInstance();\n    // Format the args to the required array format\n    argsList = argsList.map((args) => (Array.isArray(args) ? args : [args]));\n\n    argsList.forEach((args) => {\n      const currentCall: Call3Value = {\n        target: contractAddress,\n        callData: encodeFunctionData({\n          abi: abi as Abi,\n          functionName: functionName,\n          args: args as unknown[],\n        }),\n        value: 0n,\n        requireSuccess: true,\n      };\n      calls.push(currentCall);\n    });\n    calls = calls.map((call) => {\n      return {\n        ...call,\n        requireSuccess: call.value === 0n ? true : false,\n      };\n    });\n    const oracleCalls = await this.getMissingOracleCalls(calls);\n\n    const numCalls = calls.length - oracleCalls.length;\n\n    const publicClient = this.sdk.getPublicClient();\n\n    const totalValue = [...oracleCalls, ...calls].reduce((acc, tx) => {\n      return acc + (tx.value || 0n);\n    }, 0n);\n\n    const multicallData = encodeFunctionData({\n      abi: multicallInstance.abi,\n      functionName: 'aggregate3Value',\n      args: [[...oracleCalls, ...calls]],\n    });\n\n    const finalTx = {\n      account: this.sdk.accountAddress,\n      to: multicallInstance.address,\n      data: multicallData,\n      value: totalValue,\n    };\n\n    const response = await publicClient.call(finalTx);\n    const multicallResult: Result[] = this.decodeResponse(\n      multicallInstance.abi,\n      'aggregate3Value',\n      response.data as Hex,\n    ) as unknown as Result[];\n\n    const callsToDecode = multicallResult.slice(-numCalls);\n\n    const decodedResult = callsToDecode.map((result) => this.decodeResponse(abi, functionName, result.returnData));\n    return decodedResult;\n  }\n  protected isWriteContractParams(data: WriteErc7412): data is WriteContractParams {\n    return (data as WriteContractParams).contractAddress !== undefined;\n  }\n\n  /**\n   * Simulates the `functionName` on `contractAddress` target using the Multicall contract and returns the\n   * final transaction call with ERC7412 price update data if required\n   * @param contractAddress Target contract address for the call\n   * @param abi Contract ABI\n   * @param functionName Function to be called on the contract\n   * @param args Arguments list for the function call\n   * @param calls Array of Call3Value calls for Multicall contract\n   * @param override Override parameters for the transaction\n   * @returns Final transaction call with ERC7412 price update data if required\n   */\n  public async writeErc7412(\n    data: WriteErc7412,\n    override: OverrideParamsWrite = {\n      shouldRevertOnTxFailure: true,\n    },\n  ): Promise<TransactionData> {\n    const calls: Call3Value[] = data.calls ?? [];\n    const multicallInstance = await this.sdk.contracts.getMulticallInstance();\n\n    if (this.isWriteContractParams(data)) {\n      const { contractAddress, abi, functionName, args } = data as WriteContractParams;\n      const currentCall: Call3Value = {\n        target: contractAddress,\n        callData: encodeFunctionData({\n          abi: abi as Abi,\n          functionName: functionName,\n          args: args,\n        }),\n        value: 0n,\n        requireSuccess: true,\n      };\n      calls.push(currentCall);\n    }\n\n    const multicallData = encodeFunctionData({\n      abi: multicallInstance.abi,\n      functionName: 'aggregate3Value',\n      args: [calls],\n    });\n\n    let totalValue = 0n;\n    for (const tx of calls) {\n      totalValue += tx.value || 0n;\n    }\n\n    const finalTx = {\n      account: override.account || this.sdk.accountAddress,\n      to: multicallInstance.address,\n      data: multicallData,\n      value: totalValue,\n    };\n\n    const publicClient = this.sdk.getPublicClient();\n\n    if (override.shouldRevertOnTxFailure) await publicClient.call(finalTx);\n\n    return this._fromCallDataToTransactionData(finalTx);\n  }\n\n  /**\n   * Calls the `functionName` on `contractAddress` target using the Multicall contract. If the call requires\n   * a price update, ERC7412 price update tx is prepended to the tx.\n   * @param contractAddress Target contract address for the call\n   * @param abi Contract ABI\n   * @param functionNames Function to be called on the contract\n   * @param argsList Array of arguments list for the function call\n   * @param calls Array of Call3Value calls for Multicall contract\n   * @returns Array of responses from the contract function call for the multicalls\n   */\n  public async multicallMultifunctionErc7412(\n    {\n      contractAddress,\n      abi,\n      functionNames,\n      args: argsList,\n      calls = [],\n    }: Omit<WriteContractParams, 'functionName'> & { functionNames: string[] },\n    override: OverrideParamsRead = {},\n  ) {\n    const multicallInstance = await this.sdk.contracts.getMulticallInstance();\n\n    // Format the args to the required array format\n    argsList = argsList.map((args) => (Array.isArray(args) ? args : [args]));\n\n    if (argsList.length != functionNames.length) {\n      throw new Error(\"Inconsistent data: args and functionName don't match\");\n    }\n    argsList.forEach((args, index) => {\n      const currentCall: Call3Value = {\n        target: contractAddress,\n        callData: encodeFunctionData({\n          abi: abi as Abi,\n          functionName: functionNames[index],\n          args: args as unknown[],\n        }),\n        value: 0n,\n        requireSuccess: true,\n      };\n      calls.push(currentCall);\n    });\n\n    const publicClient = this.sdk.getPublicClient();\n    const oracleCalls = await this.getMissingOracleCalls(calls);\n\n    const multicallData = encodeFunctionData({\n      abi: multicallInstance.abi,\n      functionName: 'aggregate3Value',\n      args: [[...oracleCalls, ...calls]],\n    });\n\n    let totalValue = 0n;\n    for (const tx of [...oracleCalls, ...calls]) {\n      totalValue += tx.value || 0n;\n    }\n\n    const finalTx = {\n      account: override.account || this.sdk.accountAddress,\n      to: multicallInstance.address,\n      data: multicallData,\n      value: totalValue,\n    };\n\n    const response = await publicClient.call(finalTx);\n    this.sdk.logger.info('=== response', response);\n    const multicallResult: Result[] = this.decodeResponse(\n      multicallInstance.abi,\n      'aggregate3Value',\n      response.data as Hex,\n    ) as unknown as Result[];\n\n    const callsToDecode = multicallResult.slice(-oracleCalls.length);\n\n    const decodedResult = callsToDecode.map((result, idx) =>\n      this.decodeResponse(abi, functionNames[idx], result.returnData),\n    );\n    return decodedResult;\n  }\n\n  public async getMissingOracleCalls(\n    calls: Call3Value[],\n    oracleCalls: Call3Value[] = [],\n    {\n      attemps = MAX_ERC7412_RETRIES,\n      account,\n      stateOverride,\n    }: { account?: Address; attemps?: number; stateOverride?: StateOverride } = {},\n  ): Promise<Call3Value[]> {\n    const publicClient = this.sdk.getPublicClient();\n    const totalValue = [...oracleCalls, ...calls].reduce((acc, tx) => {\n      return acc + (tx.value || 0n);\n    }, 0n);\n    this.sdk.logger.info('=== init data', { oracleCalls, calls, attemps });\n    const multicallInstance = await this.sdk.contracts.getMulticallInstance();\n    const multicallData = encodeFunctionData({\n      abi: multicallInstance.abi,\n      functionName: 'aggregate3Value',\n      args: [[...oracleCalls, ...calls]],\n    });\n\n    const parsedTx = {\n      account: account || this.sdk.accountAddress,\n      to: multicallInstance.address,\n      data: multicallData,\n      value: totalValue,\n      stateOverride,\n    };\n\n    try {\n      await publicClient.call(parsedTx);\n      return oracleCalls;\n    } catch (error) {\n      const parsedError = parseError(error as CallExecutionError);\n      this.sdk.logger.error('=== parsedError in getMissingOracleCalls', parsedError);\n      const shouldRetry = this.shouldRetryLogic(error, attemps);\n      console.log('=== shouldRetry', { shouldRetry, error, attemps, parsedError });\n\n      if (!shouldRetry) return oracleCalls;\n      const data = await this.handleErc7412Error(parsedError);\n\n      return await this.getMissingOracleCalls(calls, [...oracleCalls, ...data], {\n        account,\n        attemps: attemps - 1,\n        stateOverride,\n      });\n    }\n  }\n\n  _fromCall3ToTransactionData(call: Call3Value): TransactionData {\n    return {\n      to: call.target,\n      data: call.callData,\n      value: call?.value?.toString() ?? '0',\n    } as TransactionData;\n  }\n\n  _fromTransactionDataToCall3(data: TransactionData, requireSuccess = true): Call3Value {\n    return {\n      target: data.to,\n      callData: data.data,\n      value: BigInt(data.value || 0),\n      requireSuccess,\n    } as Call3Value;\n  }\n\n  _fromCallDataToTransactionData(calls: CallParameters): TransactionData {\n    return {\n      to: calls.to as Address,\n\n      data: calls.data as Hash,\n      value: calls?.value?.toString() ?? '0',\n    } as TransactionData;\n  }\n  _fromTransactionDataToCallData(data: TransactionData): CallParameters {\n    return {\n      account: this.sdk.accountAddress,\n      to: data.to,\n      data: data.data,\n      value: BigInt(data.value || 0),\n    } as CallParameters;\n  }\n\n  async processTransactions(data: Call3Value[], override: OverrideParamsWrite): Promise<WriteReturnType> {\n    const useOracleCall = override.useOracleCalls ?? true;\n\n    const oracleCalls = useOracleCall\n      ? ((await this.getMissingOracleCalls(data, undefined, {\n          account: override.account,\n          stateOverride: override?.stateOverride?.reduce(\n            (acc, state) => {\n              const includedIndex = acc.findIndex((s) => s.address === state.address);\n              const included = override?.stateOverride?.[includedIndex];\n\n              if (!included && state.stateDiff) acc.push(state);\n\n              if (included) {\n                acc[includedIndex] = {\n                  address: state.address,\n                  stateDiff: [...state.stateDiff, ...included.stateDiff],\n                };\n              }\n              return acc;\n            },\n            [] as { address: Address; stateDiff: StateMapping }[],\n          ),\n        })) ?? undefined)\n      : [];\n\n    const txs = [\n      ...(!override.useMultiCall ? (override.prepend || []).map((a) => this._fromTransactionDataToCall3(a, true)) : []),\n      ...oracleCalls,\n      ...data,\n    ];\n    if (!override.useMultiCall && !override.submit) return txs.map(this.sdk.utils._fromCall3ToTransactionData);\n\n    const tx = await this.sdk.utils.writeErc7412({ calls: txs }, override);\n    if (!override.submit) return [...(override.prepend || []), tx];\n\n    return this.sdk.executeTransaction(this.sdk.utils._fromTransactionDataToCallData(tx));\n  }\n\n  shouldRetryLogic(error: unknown, attemps: number = 0): boolean {\n    const parsedError = parseError(error as CallExecutionError);\n    const isErc7412Error = this.isErc7412Error(parsedError);\n\n    this.sdk.logger.error('=== parsedError in  processTransactions ', {\n      parsedError,\n      isErc7412Error,\n    });\n    if (!attemps && !isErc7412Error) return false;\n    if (!isErc7412Error) {\n      return false;\n    }\n\n    return true;\n  }\n\n  isErc7412Error(parsedError: Hash): boolean {\n    return (\n      parsedError.startsWith(SIG_ORACLE_DATA_REQUIRED) ||\n      parsedError.startsWith(SIG_FEE_REQUIRED) ||\n      parsedError.startsWith(SIG_ERRORS)\n    );\n  }\n}\n","export const IERC7412Abi = [\n  {\n    type: 'function',\n    name: 'fulfillOracleQuery',\n    inputs: [{ name: 'signedOffchainData', type: 'bytes', internalType: 'bytes' }],\n    outputs: [],\n    stateMutability: 'payable',\n  },\n  {\n    type: 'function',\n    name: 'oracleId',\n    inputs: [],\n    outputs: [{ name: '', type: 'bytes32', internalType: 'bytes32' }],\n    stateMutability: 'view',\n  },\n  {\n    type: 'error',\n    name: 'FeeRequired',\n    inputs: [{ name: 'feeAmount', type: 'uint256', internalType: 'uint256' }],\n  },\n  {\n    type: 'error',\n    name: 'OracleDataRequired',\n    inputs: [\n      { name: 'oracleContract', type: 'address', internalType: 'address' },\n      { name: 'oracleQuery', type: 'bytes', internalType: 'bytes' },\n    ],\n  },\n  {\n    type: 'error',\n    name: 'Errors',\n    inputs: [\n      {\n        type: 'bytes[]',\n        name: 'revertReasons',\n      },\n    ],\n  },\n];\n","import { Hex } from 'viem';\n\n// TODO: Generalize this. See https://github.com/usecannon/cannon/blob/main/packages/builder/src/error/index.ts\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function parseError(error: any): Hex {\n  try {\n    if (error.cause?.data) {\n      return error.cause?.data;\n    }\n    if (error.cause?.cause?.data) {\n      return error.cause?.cause?.data;\n    }\n    if (error.cause?.cause?.cause?.data) {\n      return error.cause?.cause?.cause?.data;\n    }\n    if (error.cause?.cause?.error?.data) {\n      return error.cause?.cause?.error?.data;\n    }\n    if (error.cause?.cause?.cause?.error?.data) {\n      return error.cause?.cause?.cause?.error?.data;\n    }\n  } catch (err) {\n    console.log('=== exception in erc7412 error parser:', err);\n  }\n  console.log('=== a', JSON.stringify(error, null, 2));\n  // rethrow the error (and log it so we can see the original)\n  console.error('=== got unknown error in erc7412 parse', error);\n  return '0x';\n}\n","import { Address } from 'viem';\nimport { SUPPORTED_CHAINS } from '../../constants/chains';\n\nexport const ORACLE_PROXY_BY_CHAIN: Record<number, Address> = {\n  [SUPPORTED_CHAINS.ARBITUM_SEPOLIA]: '0x59d6ec32e05900949d7fff679a4adc7f94f0208c',\n  [SUPPORTED_CHAINS.ARBITRUM]: '0xe87ceB87b63267ef925E2897B629052eb815bB7d',\n  [SUPPORTED_CHAINS.BASE]: '0xa03A0Be2f3B85B76765A442683d62E992972d816',\n  [SUPPORTED_CHAINS.BASE_SEPOLIA]: '0x4Bc47c016EE6Ead253152CCfe6427D0bC06F544c',\n};\n","import { Address, encodeFunctionData, formatEther, Hex, parseUnits } from 'viem';\nimport { SynthetixSdk } from '..';\nimport { ZERO_ADDRESS } from '../constants/common';\nimport { CoreRepository } from '../interface/Core';\nimport { OverrideParamsWrite, WriteReturnType } from '../interface/commonTypes';\nimport { Call3Value } from '../interface/contractTypes';\n\n/**\n * Class for interacting with Synthetix V3 core contracts\n * @remarks\n *\n */\nexport class Core implements CoreRepository {\n  sdk: SynthetixSdk;\n  defaultAccountId?: bigint;\n  accountIds: bigint[];\n\n  constructor(synthetixSdk: SynthetixSdk) {\n    this.sdk = synthetixSdk;\n    this.accountIds = [];\n  }\n\n  async initCore() {\n    await this.getAccountIds();\n  }\n\n  /**\n   * Returns the Owner wallet address for an account ID\n   * @param accountId - Account ID\n   * @returns string - Address of the account owning the accountId\n   */\n  public async getAccountOwner(accountId: bigint): Promise<Hex> {\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n    const response = await this.sdk.utils.callErc7412({\n      contractAddress: coreProxy.address,\n      abi: coreProxy.abi,\n      functionName: 'getAccountOwner',\n      args: [accountId],\n    });\n\n    this.sdk.logger.info(`Core account Owner for id ${accountId} is ${response}`);\n\n    return response as Hex;\n  }\n\n  /**\n   * Get the address of the USD stablecoin token\n   *\n   * @returns Address of the USD stablecoin token\n   */\n  public async getUsdToken(): Promise<Hex> {\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n    const response = await this.sdk.utils.callErc7412({\n      contractAddress: coreProxy.address,\n      abi: coreProxy.abi,\n      functionName: 'getUsdToken',\n      args: [],\n    });\n\n    this.sdk.logger.info('USD Token address: ', response);\n    return response as Hex;\n  }\n\n  /**\n   *  Get the core account IDs owned by an address.\n   *  Fetches the account IDs for the given address by checking the balance of\n   *  the AccountProxy contract, which is an NFT owned by the address.\n   *  If no address is provided, uses the connected wallet address.\n   * @param address The address to get accounts for. Uses connected address if not provided.\n   * @param defaultAccountId The default account ID to set after fetching.\n   * @returns A list of account IDs owned by the address\n   */\n\n  public async getAccountIds({\n    address: accountAddress = this.sdk.accountAddress || ZERO_ADDRESS,\n    accountId: defaultAccountId = undefined,\n  }: {\n    address?: string;\n    accountId?: bigint;\n  } = {}): Promise<bigint[]> {\n    if (accountAddress == ZERO_ADDRESS) {\n      throw new Error('Invalid address');\n    }\n\n    const accountProxy = await this.sdk.contracts.getAccountProxyInstance();\n    const balance = await accountProxy.read.balanceOf([accountAddress]);\n    this.sdk.logger.info('balance', balance);\n\n    const argsList = [];\n\n    for (let index = 0; index < Number(balance); index++) {\n      argsList.push([accountAddress, index]);\n    }\n    const accountIds = (await this.sdk.utils.multicallErc7412({\n      contractAddress: accountProxy.address,\n      abi: accountProxy.abi,\n      functionName: 'tokenOfOwnerByIndex',\n      args: argsList,\n    })) as unknown[] as bigint[];\n\n    // Set Core account ids\n    this.accountIds = accountIds;\n    this.sdk.logger.info('accountIds', accountIds);\n    if (defaultAccountId) {\n      this.defaultAccountId = defaultAccountId;\n    } else if (this.accountIds.length > 0) {\n      this.defaultAccountId = this.accountIds[0];\n      this.sdk.logger.info('Using default account id as ', this.defaultAccountId);\n    }\n    return accountIds;\n  }\n\n  /**\n   * Get the available collateral for an account for a specified collateral type\n   * of ``token_address``\n   * Fetches the amount of undelegated collateral available for withdrawal\n   * for a given token and account.\n   * @param tokenAddress The address of the collateral token\n   * @param accountId The ID of the account to check. Uses default if not provided.\n   * @returns The available collateral as an ether value.\n   */\n  public async getAvailableCollateral({\n    tokenAddress,\n    accountId = this.defaultAccountId,\n  }: {\n    tokenAddress: Address;\n    accountId?: bigint;\n  }): Promise<string> {\n    if (!accountId) throw new Error('Invalid account ID');\n\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n\n    const availableCollateral = await this.sdk.utils.callErc7412({\n      contractAddress: coreProxy.address,\n      abi: coreProxy.abi,\n      functionName: 'getAccountAvailableCollateral',\n      args: [accountId, tokenAddress],\n    });\n\n    return formatEther(availableCollateral as bigint);\n  }\n\n  /**\n   * Retrieves the unique system preferred pool\n   * @returns poolId The id of the pool that is currently set as preferred in the system.\n   */\n  public async getPreferredPool(): Promise<bigint> {\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n\n    const preferredPool = await this.sdk.utils.callErc7412({\n      contractAddress: coreProxy.address,\n      abi: coreProxy.abi,\n      functionName: 'getPreferredPool',\n      args: [],\n    });\n    this.sdk.logger.info(preferredPool);\n    return preferredPool as bigint;\n  }\n\n  public async createAccount(\n    accountId?: bigint,\n    override: Omit<OverrideParamsWrite, 'useOracleCalls'> = { shouldRevertOnTxFailure: false },\n  ): Promise<WriteReturnType> {\n    const txArgs = [];\n    if (accountId != undefined) {\n      txArgs.push(accountId);\n    }\n\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n    const createAccountTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'createAccount',\n        args: txArgs,\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n    const txs = [createAccountTx];\n    return this.sdk.utils.processTransactions(txs, { ...override, useOracleCalls: false });\n  }\n\n  public async deposit(\n    {\n      tokenAddress,\n      amount,\n      decimals = 18,\n      accountId = this.defaultAccountId,\n    }: {\n      tokenAddress: string;\n      amount: number;\n      decimals: number;\n      accountId?: bigint;\n    },\n    override: OverrideParamsWrite = { shouldRevertOnTxFailure: false },\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Invalid account ID');\n\n    const amountInWei = parseUnits(amount.toString(), decimals);\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n\n    const depositTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'deposit',\n        args: [accountId, tokenAddress, amountInWei],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    const txs = [depositTx];\n    return this.sdk.utils.processTransactions(txs, override);\n  }\n\n  public async withdraw(\n    {\n      tokenAddress,\n      amount,\n      decimals = 18,\n      accountId = this.defaultAccountId,\n    }: {\n      tokenAddress: string;\n      amount: number;\n      decimals: number;\n      accountId?: bigint;\n    },\n    override: OverrideParamsWrite = { shouldRevertOnTxFailure: false },\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Account ID is required for withdrawal');\n\n    const amountInWei = parseUnits(amount.toString(), decimals);\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n\n    const withdrawTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'withdraw',\n        args: [accountId, tokenAddress, amountInWei],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    const txs = [withdrawTx];\n    return this.sdk.utils.processTransactions(txs, override);\n  }\n\n  public async delegateCollateral(\n    {\n      tokenAddress,\n      amount,\n      poolId,\n      leverage,\n      accountId = this.defaultAccountId,\n    }: {\n      tokenAddress: string;\n      amount: number;\n      poolId: bigint;\n      leverage: number;\n      accountId?: bigint;\n    },\n    override: OverrideParamsWrite = { shouldRevertOnTxFailure: false },\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Invalid account ID');\n\n    const amountInWei = parseUnits(amount.toString(), 18);\n    const leverageInWei = parseUnits(leverage.toString(), 18);\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n\n    const delegateCollateralTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'delegateCollateral',\n        args: [accountId, poolId, tokenAddress, amountInWei, leverageInWei],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    const txs = [delegateCollateralTx];\n    return this.sdk.utils.processTransactions(txs, override);\n  }\n\n  public async mintUsd(\n    {\n      tokenAddress,\n      amount,\n      poolId,\n      accountId = this.defaultAccountId,\n    }: {\n      tokenAddress: Address;\n      amount: number;\n      poolId: bigint;\n      accountId?: bigint;\n    },\n    override: OverrideParamsWrite = { shouldRevertOnTxFailure: false },\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Invalid account ID');\n\n    const amountInWei = parseUnits(amount.toString(), 18);\n    const coreProxy = await this.sdk.contracts.getCoreProxyInstance();\n\n    const mintUsdTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'mintUsd',\n        args: [accountId, poolId, tokenAddress, amountInWei],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    const txs = [mintUsdTx];\n    return this.sdk.utils.processTransactions(txs, override);\n  }\n}\n","import { AccountConfig, RpcConfig, SdkConfigParams } from './interface/classConfigs';\nimport { getPublicRpcEndpoint, getChain, Utils, convertWeiToEther, convertEtherToWei } from './utils';\nimport { Core } from './core';\nimport {\n  Address,\n  CallParameters,\n  createPublicClient,\n  createWalletClient,\n  encodeFunctionData,\n  erc20Abi,\n  getContract,\n  Hash,\n  Hex,\n  http,\n  maxUint256,\n  PrivateKeyAccount,\n  PublicClient,\n  webSocket,\n} from 'viem';\nimport { DEFAULT_LOGGER_LEVEL, ZERO_ADDRESS } from './constants/common';\nimport { Contracts } from './contracts';\nimport { Pyth } from './pyth';\nimport { Perps } from './perps';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { Spot } from './spot';\nimport { DEFAULT_REFERRER, DEFAULT_TRACKING_CODE } from './constants';\nexport { generateRandomAccountId } from './utils';\nimport {  ILogObj, Logger } from 'tslog';\n\n/**\n * The main class for interacting with the Synthetix protocol. The class\n * requires a provider RPC endpoint and a wallet address (or a private key which is used from .env.PRIVATE_KEY)\n *    const sdk = new SynthetixSdk({accountConfig, partnerConfig, pythConfig, rpcConfig});\n *    await sdk.init();\n *\n * The only required parameters for the SDK to initialize are the `chainId` and (`address` or `env.PRIVATE_KEY`).\n * All other parameters are optional and are set to default values if uninitialized.\n *    const accountConfig = { address: '0x' }\n *    const rpcConfig = { chainId: 8453, rpcEndpoint: 'https://https://base-sepolia.g.alchemy.com/v2/ALCHEMY_KEY', preset: 'andromeda'}\n *    const sdk = new SynthetixSdk({accountConfig, rpcConfig })\n *    const markets = await sdk.perps.getMarkets()\n */\nexport class SynthetixSdk {\n  accountConfig: AccountConfig;\n  rpcConfig: RpcConfig;\n\n  // Account fields\n  accountAddress: Address = ZERO_ADDRESS;\n\n  // Public client should always be defined either using the rpcConfig or using the public endpoint\n  publicClient: PublicClient;\n  privateKeyAccount?: PrivateKeyAccount;\n\n  // Partner config\n  trackingCode: string;\n  referrer: string;\n\n  // Default SDK configs\n  resolveMarketNames: boolean;\n  maxPriceImpact: number;\n  logger: Logger<ILogObj>;\n\n  core: Core;\n  contracts: Contracts;\n  utils: Utils;\n  pyth: Pyth;\n  perps: Perps;\n  spot: Spot;\n\n  public initialized: boolean = false;\n\n  constructor({ accountConfig, partnerConfig, pythConfig, rpcConfig, defaultConfig }: SdkConfigParams) {\n    this.accountConfig = accountConfig;\n    this.rpcConfig = rpcConfig;\n    this.core = new Core(this);\n    this.contracts = new Contracts(this);\n    this.utils = new Utils(this);\n    this.pyth = new Pyth(this, pythConfig);\n    this.perps = new Perps(this);\n    this.spot = new Spot(this);\n\n    this.trackingCode = partnerConfig?.trackingCode ?? DEFAULT_TRACKING_CODE;\n    this.referrer = partnerConfig?.referrer ?? DEFAULT_REFERRER;\n\n    // Default sdk configs\n    this.resolveMarketNames = defaultConfig?.resolveMarketName ?? true;\n    this.maxPriceImpact = defaultConfig?.maxPriceImpact ?? 1;\n    this.logger = new Logger({ minLevel: defaultConfig?.logLevel ?? DEFAULT_LOGGER_LEVEL });\n\n    /**\n     * Initialize Public client to RPC chain rpc\n     */\n\n    // Get viem chain for client initialization\n    const viemChain = getChain(this.rpcConfig.chainId);\n    const rpcEndpoint = this.rpcConfig.rpcEndpoint;\n\n    if (rpcEndpoint?.startsWith('http')) {\n      this.publicClient = createPublicClient({\n        chain: viemChain,\n        transport: http(rpcEndpoint),\n        batch: {\n          multicall: true,\n        },\n      });\n    } else if (rpcEndpoint?.startsWith('wss')) {\n      this.publicClient = createPublicClient({\n        chain: viemChain,\n        transport: webSocket(rpcEndpoint),\n        batch: {\n          multicall: true,\n        },\n      });\n    } else {\n      // Use the default public RPC provider if rpcEndpoint is missing\n      console.info('Using public RPC endpoint for chainId ', this.rpcConfig.chainId);\n      const publicEndpoint = getPublicRpcEndpoint(this.rpcConfig.chainId);\n      this.publicClient = createPublicClient({\n        chain: viemChain,\n        transport: http(publicEndpoint),\n      });\n    }\n  }\n\n  async init() {\n    if (this.initialized) return;\n    /**\n     * Initialize user wallet\n     */\n    try {\n      if (this.accountConfig.privateKeyAccount != undefined) {\n        // Set the wallet in SDK if passed\n        this.privateKeyAccount = this.accountConfig.privateKeyAccount;\n        const address0 = this.privateKeyAccount.address;\n        if (this.accountConfig.address == undefined) {\n          this.accountConfig.address = address0;\n          console.info('Using address from private key account', address0);\n        } else {\n          // Check the address matches the wallet signer address\n          if (this.accountConfig.address != address0) {\n            throw new Error('Wallet signer does not match the provided address');\n          }\n          console.info('Using address from wallet signer', address0);\n        }\n      } else {\n        if (this.accountConfig.address == undefined) {\n          console.info('Wallet or Account address not provided');\n        } else {\n          console.info('Using provided address without signer: ', this.accountConfig.address);\n        }\n      }\n      this.accountAddress = this.accountConfig.address as Hex;\n    } catch (error) {\n      this.logger.error(`Error: while init ${error}`);\n      throw error;\n    }\n\n    // Run all initialization functions concurrently\n    await Promise.all([this.pyth.initPyth(), this.perps.initPerps(), this.spot.initSpot(), this.core.initCore()]);\n\n    this.initialized = true;\n  }\n\n  public getPublicClient(): PublicClient {\n    if (this.publicClient != undefined) {\n      return this.publicClient;\n    } else {\n      throw new Error('PublicClient not initialized');\n    }\n  }\n\n  /**\n   * Executes a transaction from the user wallet.\n   * Checks if privateKeyAccount is initialized in the SDK. If uninitialized,\n   * it checks process.env PRIVATE_KEY if available. If both are unavailable, the SDK\n   * will throw an error\n   * @param tx Call parameters for the tx\n   * @returns txHash Transaction hash after tx execution\n   */\n  public async executeTransaction(tx: CallParameters): Promise<Hash> {\n    let account;\n    if (this.privateKeyAccount != undefined) {\n      account = this.privateKeyAccount;\n    } else {\n      if (process.env.PRIVATE_KEY != undefined) {\n        account = privateKeyToAccount(process.env.PRIVATE_KEY as Hex);\n        this.privateKeyAccount = account;\n      } else {\n        throw new Error('Signer account not initialized');\n      }\n    }\n\n    const viemChain = getChain(this.rpcConfig.chainId);\n    const wClient = createWalletClient({\n      chain: viemChain,\n      transport: http(this.rpcConfig.rpcEndpoint),\n    });\n\n    const request = await wClient.prepareTransactionRequest({\n      account: account,\n      to: tx.to,\n      data: tx.data,\n      value: tx.value,\n      gas: 10000000n,\n    });\n\n    const serializedTransaction = await wClient.signTransaction(request);\n    const txHash = await wClient.sendRawTransaction({ serializedTransaction });\n    await this.publicClient.waitForTransactionReceipt({\n      hash: txHash,\n    });\n    return txHash;\n  }\n\n  /**\n   * Gets current sUSD balance in wallet. Supports only V3 sUSD.\n   * @param address Address to check balances for\n   */\n  public async getSusdBalance(address?: string): Promise<number> {\n    if (address == undefined) {\n      address = this.accountAddress;\n    }\n\n    const susdToken = await this.contracts.getUSDProxyInstance();\n    const balance = (await susdToken.read.balanceOf([address])) as bigint;\n    return convertWeiToEther(balance);\n  }\n\n  /**\n   * Gets current ETH balance for the address\n   * @param address Address to check balances for\n   */\n  public async getEthBalance(address?: string) {\n    if (address == undefined) {\n      address = this.accountAddress;\n    }\n\n    const ethBalance = await this.publicClient.getBalance({\n      address: address as Hex,\n    });\n    return convertWeiToEther(ethBalance);\n  }\n\n  /**\n   *   Approve an address to spend a specified ERC20 token. This is a general\n   * implementation that can be used for any ERC20 token. Specify the amount\n   * as an ether value, otherwise it will default to the maximum amount\n   * For example:\n   * const tx = await sdk.approve(tokenAddress,marketProxyAddress,1000)\n   * @param tokenAddress address of the token to approve\n   * @param targetAddress address to approve to spend the token\n   * @param amount amount of the token to approve\n   * @param submit submit the transaction if true and return txHash, else return encoded txData\n   * @returns If ``submit``, returns a transaction hash. Otherwise, returns the transaction data.\n   */\n  public async approve(tokenAddress: string, targetAddress: string, amount?: number, submit: boolean = false) {\n    const amountInWei = amount == undefined ? maxUint256 : convertEtherToWei(amount);\n\n    const tx: CallParameters = {\n      account: this.accountAddress,\n      to: tokenAddress as Hex,\n      data: encodeFunctionData({\n        abi: erc20Abi,\n        functionName: 'approve',\n        args: [targetAddress as Hex, amountInWei],\n      }),\n    };\n\n    if (submit) {\n      const txHash = await this.executeTransaction(tx);\n      return txHash;\n    } else {\n      return tx;\n    }\n  }\n\n  /**\n   * Get the allowance for a target address to spend a specified ERC20 token for an owner.\n   * This is a general implementation that can be used for any ERC20 token.\n   * @param tokenAddress address of the token to check allowance for\n   * @param spenderAddress  address to spender of the token\n   * @param ownerAddress  address of the token owner. If not specified,\n   * the default address is used.\n   * @returns The formatted allowance for the target address to spend the token of the owner\n   */\n  public async getAllowance(tokenAddress: string, spenderAddress: string, ownerAddress?: string): Promise<number> {\n    if (ownerAddress == undefined) {\n      ownerAddress = this.accountAddress;\n    }\n\n    const erc20Token = getContract({\n      address: tokenAddress as Hex,\n      abi: erc20Abi,\n      client: this.publicClient,\n    });\n\n    const allowance = (await erc20Token.read.allowance([ownerAddress as Hex, spenderAddress as Hex])) as bigint;\n    return convertWeiToEther(allowance);\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// 42161-main immport\nimport * as ARBTokenMain from '@synthetixio/v3-contracts/42161-main/ARBToken.json';\nimport * as AccountProxyMain from '@synthetixio/v3-contracts/42161-main/AccountProxy.json';\nimport * as AllErrorsMain from '@synthetixio/v3-contracts/42161-main/AllErrors.json';\nimport * as CollateralToken_ARBMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_ARB.json';\nimport * as CollateralToken_USDCMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_USDC.json';\nimport * as CollateralToken_USDeMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_USDe.json';\nimport * as CollateralToken_WETHMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_WETH.json';\nimport * as CollateralToken_sETHMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_sETH.json';\nimport * as CollateralToken_stBTCMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_stBTC.json';\nimport * as CollateralToken_tBTCMain from '@synthetixio/v3-contracts/42161-main/CollateralToken_tBTC.json';\nimport * as CoreProxyMain from '@synthetixio/v3-contracts/42161-main/CoreProxy.json';\nimport * as OracleManagerProxyMain from '@synthetixio/v3-contracts/42161-main/OracleManagerProxy.json';\nimport * as PerpsAccountProxyMain from '@synthetixio/v3-contracts/42161-main/PerpsAccountProxy.json';\nimport * as PerpsMarketProxyMain from '@synthetixio/v3-contracts/42161-main/PerpsMarketProxy.json';\nimport * as PythERC7412WrapperMain from '@synthetixio/v3-contracts/42161-main/PythERC7412Wrapper.json';\nimport * as RewardsDistributor_1_ARB_ARBMain from '@synthetixio/v3-contracts/42161-main/RewardsDistributor_1_ARB_ARB.json';\nimport * as RewardsDistributor_1_USDC_ARBMain from '@synthetixio/v3-contracts/42161-main/RewardsDistributor_1_USDC_ARB.json';\nimport * as RewardsDistributor_1_USDe_ARBMain from '@synthetixio/v3-contracts/42161-main/RewardsDistributor_1_USDe_ARB.json';\nimport * as RewardsDistributor_1_WETH_ARBMain from '@synthetixio/v3-contracts/42161-main/RewardsDistributor_1_WETH_ARB.json';\nimport * as RewardsDistributor_1_sETHMain from '@synthetixio/v3-contracts/42161-main/RewardsDistributor_1_sETH.json';\nimport * as RewardsDistributor_1_stBTCMain from '@synthetixio/v3-contracts/42161-main/RewardsDistributor_1_stBTC.json';\nimport * as SpotMarketProxyMain from '@synthetixio/v3-contracts/42161-main/SpotMarketProxy.json';\nimport * as SynthToken_sETHMain from '@synthetixio/v3-contracts/42161-main/SynthToken_sETH.json';\nimport * as SynthToken_sUSDCMain from '@synthetixio/v3-contracts/42161-main/SynthToken_sUSDC.json';\nimport * as SynthToken_stBTCMain from '@synthetixio/v3-contracts/42161-main/SynthToken_stBTC.json';\nimport * as SynthUSDCTokenMain from '@synthetixio/v3-contracts/42161-main/SynthUSDCToken.json';\nimport * as TrustedMulticallForwarderMain from '@synthetixio/v3-contracts/42161-main/TrustedMulticallForwarder.json';\nimport * as USDCTokenMain from '@synthetixio/v3-contracts/42161-main/USDCToken.json';\nimport * as USDProxyMain from '@synthetixio/v3-contracts/42161-main/USDProxy.json';\nimport * as WETHTokenMain from '@synthetixio/v3-contracts/42161-main/WETHToken.json';\nimport * as CannonMain from '@synthetixio/v3-contracts/42161-main/cannon.json';\nimport * as CollateralTokensMain from '@synthetixio/v3-contracts/42161-main/collateralTokens.json';\nimport * as ExtrasMain from '@synthetixio/v3-contracts/42161-main/extras.json';\nimport * as mainMeta from '@synthetixio/v3-contracts/42161-main/meta.json';\nimport * as MintableTokensMain from '@synthetixio/v3-contracts/42161-main/mintableTokens.json';\nimport * as RewardsDistributorsMain from '@synthetixio/v3-contracts/42161-main/rewardsDistributors.json';\nimport * as SynthTokensMain from '@synthetixio/v3-contracts/42161-main/synthTokens.json';\nimport * as SystemTokenMain from '@synthetixio/v3-contracts/42161-main/systemToken.json';\nimport { ZAP_ABI } from '../../abis/zap';\n\nexport const metaMappingArb = {\n  main: (mainMeta as any).default, // Access the default export for JSON data\n};\n\nexport const abiMappingArb = {\n  main: {\n    ARBToken: (ARBTokenMain as any).default,\n    AccountProxy: (AccountProxyMain as any).default,\n    AllErrors: (AllErrorsMain as any).default,\n    CollateralToken_ARB: (CollateralToken_ARBMain as any).default,\n    CollateralToken_USDC: (CollateralToken_USDCMain as any).default,\n    CollateralToken_USDe: (CollateralToken_USDeMain as any).default,\n    CollateralToken_WETH: (CollateralToken_WETHMain as any).default,\n    CollateralToken_sETH: (CollateralToken_sETHMain as any).default,\n    CollateralToken_stBTC: (CollateralToken_stBTCMain as any).default,\n    CollateralToken_tBTC: (CollateralToken_tBTCMain as any).default,\n    CoreProxy: (CoreProxyMain as any).default,\n    OracleManagerProxy: (OracleManagerProxyMain as any).default,\n    PerpsAccountProxy: (PerpsAccountProxyMain as any).default,\n    PerpsMarketProxy: (PerpsMarketProxyMain as any).default,\n    PythERC7412Wrapper: (PythERC7412WrapperMain as any).default,\n    RewardsDistributor_1_ARB_ARB: (RewardsDistributor_1_ARB_ARBMain as any).default,\n    RewardsDistributor_1_USDC_ARB: (RewardsDistributor_1_USDC_ARBMain as any).default,\n    RewardsDistributor_1_USDe_ARB: (RewardsDistributor_1_USDe_ARBMain as any).default,\n    RewardsDistributor_1_WETH_ARB: (RewardsDistributor_1_WETH_ARBMain as any).default,\n    RewardsDistributor_1_sETH: (RewardsDistributor_1_sETHMain as any).default,\n    RewardsDistributor_1_stBTC: (RewardsDistributor_1_stBTCMain as any).default,\n    SpotMarketProxy: (SpotMarketProxyMain as any).default,\n    SynthToken_sETH: (SynthToken_sETHMain as any).default,\n    SynthToken_sUSDC: (SynthToken_sUSDCMain as any).default,\n    SynthToken_stBTC: (SynthToken_stBTCMain as any).default,\n    SynthUSDCToken: (SynthUSDCTokenMain as any).default,\n    TrustedMulticallForwarder: (TrustedMulticallForwarderMain as any).default,\n    USDCToken: (USDCTokenMain as any).default,\n    USDProxy: (USDProxyMain as any).default,\n    WETHToken: (WETHTokenMain as any).default,\n    systemToken: (SystemTokenMain as any).default,\n    cannon: (CannonMain as any).default,\n    collateralTokens: (CollateralTokensMain as any).default,\n    extras: (ExtrasMain as any).default,\n    mintableTokens: (MintableTokensMain as any).default,\n    rewardsDistributors: (RewardsDistributorsMain as any).default,\n    synthTokens: (SynthTokensMain as any).default,\n    SynthZap: ZAP_ABI,\n  },\n};\n","export const ZAP_ABI = [\n  {\n    inputs: [\n      { internalType: 'address', name: '_usdc', type: 'address' },\n      { internalType: 'address', name: '_usdx', type: 'address' },\n      { internalType: 'address', name: '_spotMarket', type: 'address' },\n      { internalType: 'address', name: '_perpsMarket', type: 'address' },\n      { internalType: 'address', name: '_referrer', type: 'address' },\n      { internalType: 'uint128', name: '_susdcSpotId', type: 'uint128' },\n      { internalType: 'address', name: '_aave', type: 'address' },\n      { internalType: 'address', name: '_router', type: 'address' },\n      { internalType: 'address', name: '_quoter', type: 'address' },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  {\n    inputs: [{ internalType: 'string', name: 'reason', type: 'string' }],\n    name: 'BuyFailed',\n    type: 'error',\n  },\n  { inputs: [], name: 'NotPermitted', type: 'error' },\n  {\n    inputs: [{ internalType: 'address', name: 'caller', type: 'address' }],\n    name: 'OnlyAave',\n    type: 'error',\n  },\n  { inputs: [], name: 'OnlyPlumber', type: 'error' },\n  {\n    inputs: [{ internalType: 'bytes', name: 'reason', type: 'bytes' }],\n    name: 'PullFailed',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'bytes', name: 'reason', type: 'bytes' }],\n    name: 'PushFailed',\n    type: 'error',\n  },\n  {\n    inputs: [\n      { internalType: 'enum Reentrancy.Stage', name: 'actual', type: 'uint8' },\n      {\n        internalType: 'enum Reentrancy.Stage',\n        name: 'expected',\n        type: 'uint8',\n      },\n    ],\n    name: 'ReentrancyDetected',\n    type: 'error',\n  },\n  { inputs: [], name: 'ReentrancyGuardReentrantCall', type: 'error' },\n  {\n    inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n    name: 'SafeERC20FailedOperation',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'string', name: 'reason', type: 'string' }],\n    name: 'SellFailed',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'string', name: 'reason', type: 'string' }],\n    name: 'SwapFailed',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'string', name: 'reason', type: 'string' }],\n    name: 'UnwrapFailed',\n    type: 'error',\n  },\n  {\n    inputs: [{ internalType: 'string', name: 'reason', type: 'string' }],\n    name: 'WrapFailed',\n    type: 'error',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: 'address',\n        name: 'plumber',\n        type: 'address',\n      },\n    ],\n    name: 'PlumberDesignated',\n    type: 'event',\n  },\n  {\n    inputs: [],\n    name: 'AAVE',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'BURN_PERMISSION',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'FEE_TIER',\n    outputs: [{ internalType: 'uint24', name: '', type: 'uint24' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'MODIFY_PERMISSION',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'PERPS_MARKET',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'PLUMBER',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'QUOTER',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'REFERRAL_CODE',\n    outputs: [{ internalType: 'uint16', name: '', type: 'uint16' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'REFERRER',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'ROUTER',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'SPOT_MARKET',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'SUSDC_SPOT_ID',\n    outputs: [{ internalType: 'uint128', name: '', type: 'uint128' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'USDC',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'USDX',\n    outputs: [{ internalType: 'address', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'USDX_ID',\n    outputs: [{ internalType: 'uint128', name: '', type: 'uint128' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint128', name: '_accountId', type: 'uint128' },\n    ],\n    name: 'burn',\n    outputs: [{ internalType: 'uint256', name: 'excess', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint128', name: '_synthId', type: 'uint128' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_minAmountOut', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'buy',\n    outputs: [\n      { internalType: 'uint256', name: 'received', type: 'uint256' },\n      { internalType: 'address', name: 'synth', type: 'address' },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: '_newPlumber', type: 'address' }],\n    name: 'designatePlumber',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: '', type: 'address' },\n      { internalType: 'uint256', name: '_flashloan', type: 'uint256' },\n      { internalType: 'uint256', name: '_premium', type: 'uint256' },\n      { internalType: 'address', name: '', type: 'address' },\n      { internalType: 'bytes', name: '_params', type: 'bytes' },\n    ],\n    name: 'executeOperation',\n    outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'address', name: '_token', type: 'address' }],\n    name: 'flush',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes', name: '_path', type: 'bytes' },\n      { internalType: 'uint256', name: '_amountOut', type: 'uint256' },\n    ],\n    name: 'quoteSwapFor',\n    outputs: [\n      { internalType: 'uint256', name: 'amountIn', type: 'uint256' },\n      {\n        internalType: 'uint160[]',\n        name: 'sqrtPriceX96AfterList',\n        type: 'uint160[]',\n      },\n      {\n        internalType: 'uint32[]',\n        name: 'initializedTicksCrossedList',\n        type: 'uint32[]',\n      },\n      { internalType: 'uint256', name: 'gasEstimate', type: 'uint256' },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes', name: '_path', type: 'bytes' },\n      { internalType: 'uint256', name: '_amountIn', type: 'uint256' },\n    ],\n    name: 'quoteSwapWith',\n    outputs: [\n      { internalType: 'uint256', name: 'amountOut', type: 'uint256' },\n      {\n        internalType: 'uint160[]',\n        name: 'sqrtPriceX96AfterList',\n        type: 'uint160[]',\n      },\n      {\n        internalType: 'uint32[]',\n        name: 'initializedTicksCrossedList',\n        type: 'uint32[]',\n      },\n      { internalType: 'uint256', name: 'gasEstimate', type: 'uint256' },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint128', name: '_synthId', type: 'uint128' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_minAmountOut', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'sell',\n    outputs: [{ internalType: 'uint256', name: 'received', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: '_from', type: 'address' },\n      { internalType: 'bytes', name: '_path', type: 'bytes' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_maxAmountIn', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'swapFor',\n    outputs: [{ internalType: 'uint256', name: 'deducted', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: '_from', type: 'address' },\n      { internalType: 'bytes', name: '_path', type: 'bytes' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_amountOutMinimum', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'swapWith',\n    outputs: [{ internalType: 'uint256', name: 'received', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint128', name: '_accountId', type: 'uint128' },\n      { internalType: 'uint128', name: '_collateralId', type: 'uint128' },\n      { internalType: 'uint256', name: '_collateralAmount', type: 'uint256' },\n      { internalType: 'address', name: '_collateral', type: 'address' },\n      { internalType: 'bytes', name: '_path', type: 'bytes' },\n      { internalType: 'uint256', name: '_zapMinAmountOut', type: 'uint256' },\n      { internalType: 'uint256', name: '_unwrapMinAmountOut', type: 'uint256' },\n      { internalType: 'uint256', name: '_swapMaxAmountIn', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'unwind',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: '_token', type: 'address' },\n      { internalType: 'uint128', name: '_synthId', type: 'uint128' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_minAmountOut', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'unwrap',\n    outputs: [{ internalType: 'uint256', name: 'unwrapped', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint128', name: '_synthId', type: 'uint128' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint128', name: '_accountId', type: 'uint128' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'withdraw',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'address', name: '_token', type: 'address' },\n      { internalType: 'uint128', name: '_synthId', type: 'uint128' },\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_minAmountOut', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'wrap',\n    outputs: [{ internalType: 'uint256', name: 'wrapped', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_minAmountOut', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'zapIn',\n    outputs: [{ internalType: 'uint256', name: 'zapped', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_amount', type: 'uint256' },\n      { internalType: 'uint256', name: '_minAmountOut', type: 'uint256' },\n      { internalType: 'address', name: '_receiver', type: 'address' },\n    ],\n    name: 'zapOut',\n    outputs: [{ internalType: 'uint256', name: 'zapped', type: 'uint256' }],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n];\n\nexport const SYNTHETIX_ZAP_ABI = [\n  {\n    type: 'constructor',\n    inputs: [\n      { name: 'perps', type: 'address', internalType: 'address' },\n      { name: 'spot', type: 'address', internalType: 'address' },\n      { name: 'account', type: 'address', internalType: 'address' },\n    ],\n    stateMutability: 'nonpayable',\n  },\n  {\n    type: 'function',\n    name: 'createAccountAndDeposit',\n    inputs: [\n      { name: 'accountId', type: 'uint128', internalType: 'uint128' },\n      { name: 'token', type: 'address', internalType: 'contract IERC20' },\n      { name: 'sToken', type: 'address', internalType: 'contract IERC20' },\n      { name: 'amount', type: 'uint256', internalType: 'uint256' },\n      { name: 'collateralId', type: 'uint128', internalType: 'uint128' },\n    ],\n    outputs: [{ name: '', type: 'uint128', internalType: 'uint128' }],\n    stateMutability: 'nonpayable',\n  },\n\n  {\n    inputs: [\n      {\n        internalType: 'uint128',\n        name: 'accountId',\n        type: 'uint128',\n      },\n      {\n        internalType: 'contract IERC20[]',\n        name: 'token',\n        type: 'address[]',\n      },\n      {\n        internalType: 'contract IERC20[]',\n        name: 'sToken',\n        type: 'address[]',\n      },\n      {\n        internalType: 'uint256[]',\n        name: 'amount',\n        type: 'uint256[]',\n      },\n      {\n        internalType: 'uint128[]',\n        name: 'collateralId',\n        type: 'uint128[]',\n      },\n    ],\n    stateMutability: 'nonpayable',\n    type: 'function',\n    name: 'createAccountAndDeposits',\n    outputs: [{ internalType: 'uint128', name: '', type: 'uint128' }],\n  },\n\n  {\n    type: 'function',\n    name: 'deposit',\n    inputs: [\n      { name: 'accountId', type: 'uint128', internalType: 'uint128' },\n      { name: 'token', type: 'address', internalType: 'contract IERC20' },\n      { name: 'sToken', type: 'address', internalType: 'contract IERC20' },\n      { name: 'amount', type: 'uint256', internalType: 'uint256' },\n      { name: 'collateralId', type: 'uint128', internalType: 'uint128' },\n    ],\n    stateMutability: 'nonpayable',\n  },\n\n  {\n    type: 'function',\n    name: 'withdraw',\n    inputs: [\n      { name: 'accountId', type: 'uint128', internalType: 'uint128' },\n      {\n        name: 'token',\n        type: 'address',\n        internalType: 'contract IERC20',\n      },\n      { name: 'amount', type: 'int256', internalType: 'int256' },\n      { name: 'collateralId', type: 'uint128', internalType: 'uint128' },\n    ],\n    outputs: [],\n    stateMutability: 'nonpayable',\n  },\n  {\n    type: 'function',\n    name: 'createAccountDepositAndCommit',\n    inputs: [\n      { name: 'accountId', type: 'uint128', internalType: 'uint128' },\n      {\n        name: 'token',\n        type: 'address',\n        internalType: 'contract IERC20',\n      },\n      {\n        name: 'sToken',\n        type: 'address',\n        internalType: 'contract IERC20',\n      },\n      { name: 'amount', type: 'uint256', internalType: 'uint256' },\n      {\n        name: 'collateralId',\n        type: 'uint128',\n        internalType: 'uint128',\n      },\n      {\n        name: 'commit',\n        type: 'tuple',\n        internalType: 'struct SynthetixZap.Commit',\n        components: [\n          {\n            name: 'marketId',\n            type: 'uint128',\n            internalType: 'uint128',\n          },\n          { name: 'sizeDelta', type: 'int128', internalType: 'int128' },\n          {\n            name: 'settlementStrategyId',\n            type: 'uint128',\n            internalType: 'uint128',\n          },\n          {\n            name: 'acceptablePrice',\n            type: 'uint256',\n            internalType: 'uint256',\n          },\n          {\n            name: 'trackingCode',\n            type: 'bytes32',\n            internalType: 'bytes32',\n          },\n          { name: 'referrer', type: 'address', internalType: 'address' },\n        ],\n      },\n    ],\n    outputs: [{ name: '', type: 'uint128', internalType: 'uint128' }],\n    stateMutability: 'nonpayable',\n  },\n];\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as ARBTokenMain from '@synthetixio/v3-contracts/421614-main/ARBToken.json';\nimport * as AccountProxyMain from '@synthetixio/v3-contracts/421614-main/AccountProxy.json';\nimport * as AllErrorsMain from '@synthetixio/v3-contracts/421614-main/AllErrors.json';\nimport * as CollateralToken_fARBMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_fARB.json';\nimport * as CollateralToken_USDCMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_USDC.json';\nimport * as CollateralToken_fsUSDeMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_fsUSDe.json';\nimport * as CollateralToken_fUSDeMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_fUSDe.json';\nimport * as CollateralToken_sETHMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_sETH.json';\nimport * as CollateralToken_WETHMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_WETH.json';\nimport * as CoreProxyMain from '@synthetixio/v3-contracts/421614-main/CoreProxy.json';\nimport * as OracleManagerProxyMain from '@synthetixio/v3-contracts/421614-main/OracleManagerProxy.json';\nimport * as PerpsAccountProxyMain from '@synthetixio/v3-contracts/421614-main/PerpsAccountProxy.json';\nimport * as PerpsMarketProxyMain from '@synthetixio/v3-contracts/421614-main/PerpsMarketProxy.json';\nimport * as PythERC7412WrapperMain from '@synthetixio/v3-contracts/421614-main/PythERC7412Wrapper.json';\nimport * as RewardsDistributor_1_sETHMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_sETH.json';\nimport * as RewardsDistributor_1_sBTCMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_sBTC.json';\nimport * as SynthToken_sETHMain from '@synthetixio/v3-contracts/421614-main/SynthToken_sETH.json';\nimport * as SynthToken_sUSDCMain from '@synthetixio/v3-contracts/421614-main/SynthToken_sUSDC.json';\nimport * as SynthToken_sBTCMain from '@synthetixio/v3-contracts/421614-main/SynthToken_sBTC.json';\nimport * as SynthUSDCTokenMain from '@synthetixio/v3-contracts/421614-main/SynthUSDCToken.json';\nimport * as TrustedMulticallForwarderMain from '@synthetixio/v3-contracts/421614-main/TrustedMulticallForwarder.json';\nimport * as USDCTokenMain from '@synthetixio/v3-contracts/421614-main/USDCToken.json';\nimport * as USDProxyMain from '@synthetixio/v3-contracts/421614-main/USDProxy.json';\nimport * as WETHTokenMain from '@synthetixio/v3-contracts/421614-main/WETHToken.json';\nimport * as CannonMain from '@synthetixio/v3-contracts/421614-main/cannon.json';\nimport * as CollateralTokensMain from '@synthetixio/v3-contracts/421614-main/collateralTokens.json';\nimport * as ExtrasMain from '@synthetixio/v3-contracts/421614-main/extras.json';\nimport * as mainMeta from '@synthetixio/v3-contracts/421614-main/meta.json';\nimport * as MintableTokensMain from '@synthetixio/v3-contracts/421614-main/mintableTokens.json';\nimport * as SynthTokensMain from '@synthetixio/v3-contracts/421614-main/synthTokens.json';\nimport * as SystemTokenMain from '@synthetixio/v3-contracts/421614-main/systemToken.json';\nimport * as RewardsDistributorsMain from '@synthetixio/v3-contracts/421614-main/rewardsDistributors.json';\nimport * as SpotMarketProxyMain from '@synthetixio/v3-contracts/421614-main/SpotMarketProxy.json';\nimport * as CollateralToken_fBTCMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_fBTC.json';\nimport * as CollateralToken_fDAIMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_fDAI.json';\nimport * as CollateralToken_fSOLMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_fSOL.json';\nimport * as CollateralToken_fBTC__1Main from '@synthetixio/v3-contracts/421614-main/CollateralToken_fBTC__1.json';\nimport * as CollateralToken_sBTCMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_sBTC.json';\nimport * as CollateralToken_sSOLMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_sSOL.json';\nimport * as CollateralToken_sUSDeMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_sUSDe.json';\nimport * as CollateralToken_weETHMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_weETH.json';\nimport * as CollateralToken_wstETHMain from '@synthetixio/v3-contracts/421614-main/CollateralToken_wstETH.json';\nimport * as DAITokenMain from '@synthetixio/v3-contracts/421614-main/DAIToken.json';\nimport * as FakeCollateralfARBMain from '@synthetixio/v3-contracts/421614-main/FakeCollateralfARB.json';\nimport * as FakeCollateralfDAIMain from '@synthetixio/v3-contracts/421614-main/FakeCollateralfDAI.json';\nimport * as MintableToken_fARBMain from '@synthetixio/v3-contracts/421614-main/MintableToken_fARB.json';\nimport * as MintableToken_fBTCMain from '@synthetixio/v3-contracts/421614-main/MintableToken_fBTC.json';\nimport * as MintableToken_fDAIMain from '@synthetixio/v3-contracts/421614-main/MintableToken_fDAI.json';\nimport * as MintableToken_fSOLMain from '@synthetixio/v3-contracts/421614-main/MintableToken_fSOL.json';\nimport * as MintableToken_fsUSDCeMain from '@synthetixio/v3-contracts/421614-main/MintableToken_fsUSDe.json';\nimport * as MintableToken_fUSDeMain from '@synthetixio/v3-contracts/421614-main/MintableToken_fUSDe.json';\nimport * as MintableToken_weETHMain from '@synthetixio/v3-contracts/421614-main/MintableToken_weETH.json';\nimport * as MintableToken_wastETHMain from '@synthetixio/v3-contracts/421614-main/MintableToken_wstETH.json';\nimport * as RewardsDistributor_1_fARB_fARBMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fARB_fARB.json';\nimport * as RewardsDistributor_1_fARB_sBTCMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fARB_sBTC.json';\nimport * as RewardsDistributor_1_fARB_sETHMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fARB_sETH.json';\nimport * as RewardsDistributor_1_fARBMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fARB.json';\nimport * as RewardsDistributor_1_fDAI_sBTCMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fDAI_sBTC.json';\nimport * as RewardsDistributor_1_fDAI_sETHMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fDAI_sETH.json';\nimport * as RewardsDistributor_1_fsUSDe_fARBMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fsUSDe_fARB.json';\nimport * as RewardsDistributor_1_fsUSDe_sBTCMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fsUSDe_sBTC.json';\nimport * as RewardsDistributor_1_fsUSDe_sETHMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_fsUSDe_sETH.json';\nimport * as RewardsDistributor_1_sSOLMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_sSOL.json';\nimport * as RewardsDistributor_1_sUSDeMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_sUSDe.json';\nimport * as RewardsDistributor_1_USDC_fARBMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_USDC_fARB.json';\nimport * as RewardsDistributor_1_USDC_sBTCMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_USDC_sBTC.json';\nimport * as RewardsDistributor_1_USDC_sETHMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_USDC_sETH.json';\nimport * as RewardsDistributor_1_WETH_fARBMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_WETH_fARB.json';\nimport * as RewardsDistributor_1_WETH_sBTCMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_WETH_sBTC.json';\nimport * as RewardsDistributor_1_WETH_sETHMain from '@synthetixio/v3-contracts/421614-main/RewardsDistributor_1_WETH_sETH.json';\nimport * as SynthDAITokenMain from '@synthetixio/v3-contracts/421614-main/SynthDAIToken.json';\nimport * as SynthToken_sSOLMain from '@synthetixio/v3-contracts/421614-main/SynthToken_sSOL.json';\nimport * as SynthToken_sUSDeMain from '@synthetixio/v3-contracts/421614-main/SynthToken_sUSDe.json';\nimport { ZAP_ABI } from '../../abis/zap';\n\nexport const metaMappingArbSepolia = {\n  main: (mainMeta as any).default, // Access the default export for JSON data\n};\n\nexport const abiMappingArbSepolia = {\n  main: {\n    ARBToken: (ARBTokenMain as any).default,\n    AccountProxy: (AccountProxyMain as any).default,\n    AllErrors: (AllErrorsMain as any).default,\n    CollateralToken_USDC: (CollateralToken_USDCMain as any).default,\n    CollateralToken_WETH: (CollateralToken_WETHMain as any).default,\n    CollateralToken_sETH: (CollateralToken_sETHMain as any).default,\n    CoreProxy: (CoreProxyMain as any).default,\n    OracleManagerProxy: (OracleManagerProxyMain as any).default,\n    PerpsAccountProxy: (PerpsAccountProxyMain as any).default,\n    PerpsMarketProxy: (PerpsMarketProxyMain as any).default,\n    PythERC7412Wrapper: (PythERC7412WrapperMain as any).default,\n    RewardsDistributor_1_sETH: (RewardsDistributor_1_sETHMain as any).default,\n    RewardsDistributor_1_stBTC: (RewardsDistributor_1_sBTCMain as any).default,\n    SpotMarketProxy: (SpotMarketProxyMain as any).default,\n    SynthToken_sETH: (SynthToken_sETHMain as any).default,\n    SynthToken_sUSDC: (SynthToken_sUSDCMain as any).default,\n    SynthToken_sBTC: (SynthToken_sBTCMain as any).default,\n    SynthUSDCToken: (SynthUSDCTokenMain as any).default,\n    TrustedMulticallForwarder: (TrustedMulticallForwarderMain as any).default,\n    USDCToken: (USDCTokenMain as any).default,\n    USDProxy: (USDProxyMain as any).default,\n    WETHToken: (WETHTokenMain as any).default,\n    systemToken: (SystemTokenMain as any).default,\n    cannon: (CannonMain as any).default,\n    collateralTokens: (CollateralTokensMain as any).default,\n    extras: (ExtrasMain as any).default,\n    mintableTokens: (MintableTokensMain as any).default,\n    rewardsDistributors: (RewardsDistributorsMain as any).default,\n    synthTokens: (SynthTokensMain as any).default,\n    CollateralToken_fARB: (CollateralToken_fARBMain as any).default,\n    CollateralToken_fsUSDe: (CollateralToken_fsUSDeMain as any).default,\n    CollateralToken_fUSDe: (CollateralToken_fUSDeMain as any).default,\n    CollateralToken_fBTC: (CollateralToken_fBTCMain as any).default,\n    CollateralToken_fDAI: (CollateralToken_fDAIMain as any).default,\n    CollateralToken_fSOL: (CollateralToken_fSOLMain as any).default,\n    CollateralToken_fBTC__1: (CollateralToken_fBTC__1Main as any).default,\n    CollateralToken_sBTC: (CollateralToken_sBTCMain as any).default,\n    CollateralToken_sSOL: (CollateralToken_sSOLMain as any).default,\n    CollateralToken_sUSDe: (CollateralToken_sUSDeMain as any).default,\n    CollateralToken_weETH: (CollateralToken_weETHMain as any).default,\n    CollateralToken_wstETH: (CollateralToken_wstETHMain as any).default,\n    DAIToken: (DAITokenMain as any).default,\n    FakeCollateralfARB: (FakeCollateralfARBMain as any).default,\n    FakeCollateralfDAI: (FakeCollateralfDAIMain as any).default,\n    MintableToken_fARB: (MintableToken_fARBMain as any).default,\n    MintableToken_fBTC: (MintableToken_fBTCMain as any).default,\n    MintableToken_fDAI: (MintableToken_fDAIMain as any).default,\n    MintableToken_fSOL: (MintableToken_fSOLMain as any).default,\n    MintableToken_fsUSDe: (MintableToken_fsUSDCeMain as any).default,\n    MintableToken_fUSDe: (MintableToken_fUSDeMain as any).default,\n    MintableToken_weETH: (MintableToken_weETHMain as any).default,\n    MintableToken_wstETH: (MintableToken_wastETHMain as any).default,\n    RewardsDistributor_1_fARB_fARB: (RewardsDistributor_1_fARB_fARBMain as any).default,\n    RewardsDistributor_1_fARB_sBTC: (RewardsDistributor_1_fARB_sBTCMain as any).default,\n    RewardsDistributor_1_fARB_sETH: (RewardsDistributor_1_fARB_sETHMain as any).default,\n    RewardsDistributor_1_fARB: (RewardsDistributor_1_fARBMain as any).default,\n    RewardsDistributor_1_fDAI_sBTC: (RewardsDistributor_1_fDAI_sBTCMain as any).default,\n    RewardsDistributor_1_fDAI_sETH: (RewardsDistributor_1_fDAI_sETHMain as any).default,\n    RewardsDistributor_1_fsUSDe_fARB: (RewardsDistributor_1_fsUSDe_fARBMain as any).default,\n    RewardsDistributor_1_fsUSDe_sBTC: (RewardsDistributor_1_fsUSDe_sBTCMain as any).default,\n    RewardsDistributor_1_fsUSDe_sETH: (RewardsDistributor_1_fsUSDe_sETHMain as any).default,\n    RewardsDistributor_1_sSOL: (RewardsDistributor_1_sSOLMain as any).default,\n    RewardsDistributor_1_sUSDe: (RewardsDistributor_1_sUSDeMain as any).default,\n    RewardsDistributor_1_USDC_fARB: (RewardsDistributor_1_USDC_fARBMain as any).default,\n    RewardsDistributor_1_USDC_sBTC: (RewardsDistributor_1_USDC_sBTCMain as any).default,\n    RewardsDistributor_1_USDC_sETH: (RewardsDistributor_1_USDC_sETHMain as any).default,\n    RewardsDistributor_1_WETH_fARB: (RewardsDistributor_1_WETH_fARBMain as any).default,\n    RewardsDistributor_1_WETH_sBTC: (RewardsDistributor_1_WETH_sBTCMain as any).default,\n    RewardsDistributor_1_WETH_sETH: (RewardsDistributor_1_WETH_sETHMain as any).default,\n    SynthDAIToken: (SynthDAITokenMain as any).default,\n    SynthToken_sSOL: (SynthToken_sSOLMain as any).default,\n    SynthToken_sUSDe: (SynthToken_sUSDeMain as any).default,\n    SynthZap: ZAP_ABI,\n  },\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n//8453-andromeda\nimport * as AccountProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/AccountProxy.json';\nimport * as AllErrorsAndromeda from '@synthetixio/v3-contracts/8453-andromeda/AllErrors.json';\nimport * as CollateralToken_USDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/CollateralToken_USDC.json';\nimport * as CoreProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/CoreProxy.json';\nimport * as OracleManagerProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/OracleManagerProxy.json';\nimport * as PerpsAccountProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/PerpsAccountProxy.json';\nimport * as PerpsMarketProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/PerpsMarketProxy.json';\nimport * as PythERC7412WrapperAndromeda from '@synthetixio/v3-contracts/8453-andromeda/PythERC7412Wrapper.json';\nimport * as SpotMarketProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/SpotMarketProxy.json';\nimport * as SynthToken_sUSDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/SynthToken_sUSDC.json';\nimport * as SynthUSDCTokenAndromeda from '@synthetixio/v3-contracts/8453-andromeda/SynthUSDCToken.json';\nimport * as TrustedMulticallForwarderAndromeda from '@synthetixio/v3-contracts/8453-andromeda/TrustedMulticallForwarder.json';\nimport * as USDCTokenAndromeda from '@synthetixio/v3-contracts/8453-andromeda/USDCToken.json';\nimport * as USDProxyAndromeda from '@synthetixio/v3-contracts/8453-andromeda/USDProxy.json';\nimport * as CannonAndromeda from '@synthetixio/v3-contracts/8453-andromeda/cannon.json';\nimport * as CollateralTokensAndromeda from '@synthetixio/v3-contracts/8453-andromeda/collateralTokens.json';\nimport * as ExtrasAndromeda from '@synthetixio/v3-contracts/8453-andromeda/extras.json';\nimport * as MetaAndromeda from '@synthetixio/v3-contracts/8453-andromeda/meta.json';\nimport * as MintableTokensAndromeda from '@synthetixio/v3-contracts/8453-andromeda/mintableTokens.json';\nimport * as RewardsDistributorsAndromeda from '@synthetixio/v3-contracts/8453-andromeda/rewardsDistributors.json';\nimport * as SynthTokensAndromeda from '@synthetixio/v3-contracts/8453-andromeda/synthTokens.json';\nimport * as SystemTokenAndromeda from '@synthetixio/v3-contracts/8453-andromeda/systemToken.json';\nimport * as CollateralToken_sStataUSDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/CollateralToken_sStataUSDC.json';\nimport * as CollateralToken_stataBasUSDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/CollateralToken_stataBasUSDC.json';\nimport * as RewardsDistributor_1_sUSDC_SNXAndromeda from '@synthetixio/v3-contracts/8453-andromeda/RewardsDistributor_1_sUSDC_SNX.json';\nimport * as RewardsDistributor_1_sUSDC_USDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/RewardsDistributor_1_sUSDC_USDC.json';\nimport * as RewardsDistributorForSpartanCouncilPoolSNXAndromeda from '@synthetixio/v3-contracts/8453-andromeda/RewardsDistributorForSpartanCouncilPoolSNX.json';\nimport * as RewardsDistributorForSpartanCouncilPoolUSDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/RewardsDistributorForSpartanCouncilPoolUSDC.json';\nimport * as SNXTokenAndromeda from '@synthetixio/v3-contracts/8453-andromeda/SNXToken.json';\nimport * as SynthToken_sStataUSDCAndromeda from '@synthetixio/v3-contracts/8453-andromeda/SynthToken_sStataUSDC.json';\nimport { erc20Abi } from 'viem';\nimport { ZAP_ABI } from '../../abis/zap';\n\nexport type ABI = Record<string, any>[];\n\nexport const metaMappingBase = {\n  andromeda: (MetaAndromeda as any).default, // Access the default export for JSON data\n};\n\nexport const abiMappingBase = {\n  andromeda: {\n    AccountProxy: (AccountProxyAndromeda as any).default,\n    AllErrors: (AllErrorsAndromeda as any).default,\n    CoreProxy: (CoreProxyAndromeda as any).default,\n    OracleManagerProxy: (OracleManagerProxyAndromeda as any).default,\n    PerpsAccountProxy: (PerpsAccountProxyAndromeda as any).default,\n    PerpsMarketProxy: (PerpsMarketProxyAndromeda as any).default,\n    PythERC7412Wrapper: (PythERC7412WrapperAndromeda as any).default,\n    SpotMarketProxy: (SpotMarketProxyAndromeda as any).default,\n    SynthToken_sUSDC: (SynthToken_sUSDCAndromeda as any).default,\n    SynthUSDCToken: (SynthUSDCTokenAndromeda as any).default,\n    TrustedMulticallForwarder: (TrustedMulticallForwarderAndromeda as any).default,\n    USDCToken: (USDCTokenAndromeda as any).default,\n    USDProxy: (USDProxyAndromeda as any).default,\n    cannon: (CannonAndromeda as any).default,\n    collateralTokens: (CollateralTokensAndromeda as any).default,\n    extras: (ExtrasAndromeda as any).default,\n    mintableTokens: (MintableTokensAndromeda as any).default,\n    rewardsDistributors: (RewardsDistributorsAndromeda as any).default,\n    synthTokens: (SynthTokensAndromeda as any).default,\n    systemToken: (SystemTokenAndromeda as any).default,\n\n    CollateralToken_USDC: (CollateralToken_USDCAndromeda as any).default,\n    CollateralToken_sStataUSDC: (CollateralToken_sStataUSDCAndromeda as any).default,\n    CollateralToken_stataBasUSDC: (CollateralToken_stataBasUSDCAndromeda as any).default,\n    CollateralToken_sUSDC: erc20Abi,\n    CollateralToken_cbBTC: erc20Abi,\n    CollateralToken_cbETH: erc20Abi,\n    CollateralToken_WETH: erc20Abi,\n    CollateralToken_wstETH: erc20Abi,\n    CollateralToken_scbBTC: erc20Abi,\n    CollateralToken_scbETH: erc20Abi,\n    CollateralToken_sWETH: erc20Abi,\n    CollateralToken_swstETH: erc20Abi,\n\n    RewardsDistributor_1_sUSDC_SNX: (RewardsDistributor_1_sUSDC_SNXAndromeda as any).default,\n    RewardsDistributor_1_sUSDC_USDC: (RewardsDistributor_1_sUSDC_USDCAndromeda as any).default,\n    RewardsDistributorForSpartanCouncilPoolSNX: (RewardsDistributorForSpartanCouncilPoolSNXAndromeda as any).default,\n    RewardsDistributorForSpartanCouncilPoolUSDC: (RewardsDistributorForSpartanCouncilPoolUSDCAndromeda as any).default,\n    SNXToken: (SNXTokenAndromeda as any).default,\n    SynthToken_sStataUSDC: (SynthToken_sStataUSDCAndromeda as any).default,\n    SynthZap: ZAP_ABI,\n  },\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n//84532-andromeda\nimport * as AccountProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/AccountProxy.json';\nimport * as AllErrorsAndromeda from '@synthetixio/v3-contracts/84532-andromeda/AllErrors.json';\nimport * as CoreProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/CoreProxy.json';\nimport * as OracleManagerProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/OracleManagerProxy.json';\nimport * as PerpsAccountProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/PerpsAccountProxy.json';\nimport * as PerpsMarketProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/PerpsMarketProxy.json';\nimport * as PythERC7412WrapperAndromeda from '@synthetixio/v3-contracts/84532-andromeda/PythERC7412Wrapper.json';\nimport * as SpotMarketProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/SpotMarketProxy.json';\nimport * as SynthToken_sUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/SynthToken_sUSDC.json';\nimport * as SynthUSDCTokenAndromeda from '@synthetixio/v3-contracts/84532-andromeda/SynthUSDCToken.json';\nimport * as TrustedMulticallForwarderAndromeda from '@synthetixio/v3-contracts/84532-andromeda/TrustedMulticallForwarder.json';\nimport * as USDProxyAndromeda from '@synthetixio/v3-contracts/84532-andromeda/USDProxy.json';\nimport * as CannonAndromeda from '@synthetixio/v3-contracts/84532-andromeda/cannon.json';\nimport * as CollateralTokensAndromeda from '@synthetixio/v3-contracts/84532-andromeda/collateralTokens.json';\nimport * as ExtrasAndromeda from '@synthetixio/v3-contracts/84532-andromeda/extras.json';\nimport * as MetaAndromeda from '@synthetixio/v3-contracts/84532-andromeda/meta.json';\nimport * as MintableTokensAndromeda from '@synthetixio/v3-contracts/84532-andromeda/mintableTokens.json';\nimport * as RewardsDistributorsAndromeda from '@synthetixio/v3-contracts/84532-andromeda/rewardsDistributors.json';\nimport * as SynthTokensAndromeda from '@synthetixio/v3-contracts/84532-andromeda/synthTokens.json';\nimport * as SystemTokenAndromeda from '@synthetixio/v3-contracts/84532-andromeda/systemToken.json';\nimport * as CollateralToken_sStataUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/CollateralToken_sStataUSDC.json';\nimport * as CollateralToken_sUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/CollateralToken_sUSDC.json';\nimport * as RewardsDistributorForSpartanCouncilPoolSNXAndromeda from '@synthetixio/v3-contracts/84532-andromeda/RewardsDistributorForSpartanCouncilPoolSNX.json';\nimport * as RewardsDistributorForSpartanCouncilPoolUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/RewardsDistributorForSpartanCouncilPoolUSDC.json';\nimport * as SynthToken_sStataUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/SynthToken_sStataUSDC.json';\nimport * as CollateralToken_fUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/CollateralToken_fUSDC.json';\nimport * as CollateralToken_stataUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/CollateralToken_stataUSDC.json';\nimport * as FakeCollateralfUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/FakeCollateralfUSDC.json';\nimport * as FakeCollateralfwSNXAndromeda from '@synthetixio/v3-contracts/84532-andromeda/FakeCollateralfwSNX.json';\nimport * as MintableToken_fUSDCAndromeda from '@synthetixio/v3-contracts/84532-andromeda/MintableToken_fUSDC.json';\nimport * as MintableToken_fwSNXAndromeda from '@synthetixio/v3-contracts/84532-andromeda/MintableToken_fwSNX.json';\n\nexport const metaMappingBaseSepolia = {\n  andromeda: (MetaAndromeda as any).default, // Access the default export for JSON data\n};\n\nexport const abiMappingBaseSepolia = {\n  andromeda: {\n    AccountProxy: (AccountProxyAndromeda as any).default,\n    AllErrors: (AllErrorsAndromeda as any).default,\n    CoreProxy: (CoreProxyAndromeda as any).default,\n    OracleManagerProxy: (OracleManagerProxyAndromeda as any).default,\n    PerpsAccountProxy: (PerpsAccountProxyAndromeda as any).default,\n    PerpsMarketProxy: (PerpsMarketProxyAndromeda as any).default,\n    PythERC7412Wrapper: (PythERC7412WrapperAndromeda as any).default,\n    SpotMarketProxy: (SpotMarketProxyAndromeda as any).default,\n    SynthToken_sUSDC: (SynthToken_sUSDCAndromeda as any).default,\n    SynthUSDCToken: (SynthUSDCTokenAndromeda as any).default,\n    TrustedMulticallForwarder: (TrustedMulticallForwarderAndromeda as any).default,\n    USDProxy: (USDProxyAndromeda as any).default,\n    cannon: (CannonAndromeda as any).default,\n    collateralTokens: (CollateralTokensAndromeda as any).default,\n    extras: (ExtrasAndromeda as any).default,\n    mintableTokens: (MintableTokensAndromeda as any).default,\n    rewardsDistributors: (RewardsDistributorsAndromeda as any).default,\n    synthTokens: (SynthTokensAndromeda as any).default,\n    systemToken: (SystemTokenAndromeda as any).default,\n    CollateralToken_sStataUSDC: (CollateralToken_sStataUSDCAndromeda as any).default,\n    CollateralToken_sUSDC: (CollateralToken_sUSDCAndromeda as any).default,\n    RewardsDistributorForSpartanCouncilPoolSNX: (RewardsDistributorForSpartanCouncilPoolSNXAndromeda as any).default,\n    RewardsDistributorForSpartanCouncilPoolUSDC: (RewardsDistributorForSpartanCouncilPoolUSDCAndromeda as any).default,\n    SynthToken_sStataUSDC: (SynthToken_sStataUSDCAndromeda as any).default,\n    CollateralToken_fUSDC: (CollateralToken_fUSDCAndromeda as any).default,\n    CollateralToken_stataUSDC: (CollateralToken_stataUSDCAndromeda as any).default,\n    FakeCollateralfUSDC: (FakeCollateralfUSDCAndromeda as any).default,\n    FakeCollateralfwSNX: (FakeCollateralfwSNXAndromeda as any).default,\n    MintableToken_fUSDC: (MintableToken_fUSDCAndromeda as any).default,\n    MintableToken_fwSNX: (MintableToken_fwSNXAndromeda as any).default,\n  },\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { abiMappingArb, metaMappingArb } from './v3-contracts/42161';\nimport { abiMappingArbSepolia, metaMappingArbSepolia } from './v3-contracts/421614';\nimport { ABI, abiMappingBase, metaMappingBase } from './v3-contracts/8453';\nimport { abiMappingBaseSepolia, metaMappingBaseSepolia } from './v3-contracts/84532';\n\n// Define the structure for Meta and ABI\ninterface Meta {\n  name: string;\n  preset: string;\n  version: string;\n  generator: string;\n  timestamp: number;\n  miscUrl: string;\n  contracts: {\n    CoreProxy: string;\n    AccountProxy: string;\n    USDProxy: string;\n    OracleManagerProxy: string;\n    TrustedMulticallForwarder: string;\n    SpotMarketProxy: string;\n    PerpsMarketProxy: string;\n    PerpsAccountProxy: string;\n    PythERC7412Wrapper: string;\n    CollateralToken_USDC: string;\n    CollateralToken_sUSDC: string;\n    CollateralToken_stataBasUSDC: string;\n    CollateralToken_sStataUSDC: string;\n    SynthToken_sUSDC: string;\n    SynthToken_sStataUSDC: string;\n    RewardsDistributor_1_sUSDC_USDC: string;\n    RewardsDistributor_1_sUSDC_SNX: string;\n  };\n}\n\nconst metaMapping: Record<number, Record<string, Meta>> = {\n  42161: metaMappingArb,\n  8453: metaMappingBase,\n  84532: metaMappingBaseSepolia,\n  421614: metaMappingArbSepolia,\n};\n\nconst abiMapping: Record<number, Record<string, Record<string, any>>> = {\n  42161: abiMappingArb,\n  8453: abiMappingBase,\n  84532: abiMappingBaseSepolia,\n  421614: abiMappingArbSepolia,\n};\n\n// Function to dynamically import metadata\nexport async function dynamicImportMeta(chainId: number, preset: string = 'main'): Promise<Meta> {\n  const meta = metaMapping[chainId]?.[preset];\n  if (!meta) {\n    throw new Error(`Meta not found for chainId ${chainId} and preset ${preset}`);\n  }\n  return meta;\n}\n\n// Function to import ABI based on chain ID, preset, and contract name\nexport async function dynamicImportAbi(chainId: number, preset: string = 'main', contractName: string): Promise<ABI> {\n  const abi = abiMapping[chainId]?.[preset]?.[contractName];\n  if (!abi) {\n    throw new Error(`ABI not found for contract ${contractName} on chainId ${chainId} and preset ${preset}`);\n  }\n  return abi;\n}\n","import { SynthetixSdk } from '..';\nimport { ZAP_BY_CHAIN } from './addreses/zap';\nimport { dynamicImportAbi, dynamicImportMeta } from './helpers';\nimport { erc20Abi, getContract, Hex } from 'viem';\n\nexport class Contracts {\n  sdk: SynthetixSdk;\n\n  constructor(synthetixSdk: SynthetixSdk) {\n    this.sdk = synthetixSdk;\n  }\n\n  /**\n   * The function returns an instance of the Core Proxy smart contract\n   * @returns Contract - Instance of Core Proxy smart contract\n   */\n  public async getMulticallInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(\n        this.sdk.rpcConfig.chainId,\n        this.sdk.rpcConfig.preset,\n        'TrustedMulticallForwarder',\n      );\n      const multicallInstance = getContract({\n        address: meta.contracts.TrustedMulticallForwarder as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return multicallInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getMulticallInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for MulticallInstance`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the Core Proxy smart contract\n   * @returns Contract - Instance of Core Proxy smart contract\n   */\n  public async getCoreProxyInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'CoreProxy');\n      const coreProxyInstance = getContract({\n        address: meta.contracts.CoreProxy as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return coreProxyInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getCoreProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for CoreProxy`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the Account Proxy smart contract\n   * @returns Contract - Instance of Account Proxy smart contract\n   */\n  public async getAccountProxyInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'AccountProxy');\n      const accountProxyInstance = getContract({\n        address: meta.contracts.AccountProxy as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return accountProxyInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getAccountProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for AccountProxy`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the PerpsMarketProxy smart contract\n   * @returns Contract - Instance of PerpsMarketProxy smart contract\n   */\n  public async getPerpsMarketProxyInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'PerpsMarketProxy');\n      const perpsMarketProxyInstance = getContract({\n        address: meta.contracts.PerpsMarketProxy as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return perpsMarketProxyInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getPerpsMarketProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for PerpsMarketProxy`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the PerpsAccount Proxy smart contract\n   * @returns Contract - Instance of PerpsAccount Proxy smart contract\n   */\n  public async getPerpsAccountProxyInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'PerpsAccountProxy');\n      const perpsAccountProxyInstance = getContract({\n        address: meta.contracts.PerpsAccountProxy as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return perpsAccountProxyInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getPerpsAccountProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for PerpsAccountProxy`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the PythERC7412Wrapper smart contract\n   * @returns Contract - Instance of PythERC7412Wrapper smart contract\n   */\n  public async getPythErc7412WrapperInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'PythERC7412Wrapper');\n      const pythERC7412WrapperInstance = getContract({\n        address: meta.contracts.PythERC7412Wrapper as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return pythERC7412WrapperInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getPythErc7412WrapperInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for PythERC7412Wrapper`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the SpotMarket Proxy smart contract\n   * @returns Contract - Instance of SpotMarket Proxy smart contract\n   */\n  public async getSpotMarketProxyInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'SpotMarketProxy');\n      const spotMarketProxyInstance = getContract({\n        address: meta.contracts.SpotMarketProxy as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return spotMarketProxyInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getSpotMarketProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for SpotMarketProxy`,\n      );\n    }\n  }\n\n  /**\n   * The function returns an instance of the USD Proxy smart contract\n   * @returns Contract - Instance of USD Proxy smart contract\n   */\n  public async getUSDProxyInstance() {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'USDProxy');\n      const usdProxyInstance = getContract({\n        address: meta.contracts.USDProxy as Hex,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return usdProxyInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getUSDProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for USDProxy`,\n      );\n    }\n  }\n\n  public async getZapInstance() {\n    try {\n      const address = ZAP_BY_CHAIN[this.sdk.rpcConfig.chainId];\n      const abi = await dynamicImportAbi(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset, 'SynthZap');\n      const zapInstance = getContract({\n        address,\n        abi: abi,\n        client: this.sdk.publicClient,\n      });\n      return zapInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getZapInstance ${error}`);\n      throw new Error(`Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for Zap`);\n    }\n  }\n\n  public async getCollateralInstance(symbol: string) {\n    try {\n      const meta = await dynamicImportMeta(this.sdk.rpcConfig.chainId, this.sdk.rpcConfig.preset);\n\n      const contracts = Object.keys(meta.contracts);\n      const contract = contracts.find((contract) => contract.toLowerCase().includes(symbol.toLowerCase()));\n      console.log('=== contracts', contracts, symbol, contract);\n\n      // @ts-expect-error correct type\n      const address = meta.contracts[contract as string] as Hex;\n\n      if (!address) {\n        throw new Error(`CollateralToken_${symbol} not found in meta`);\n      }\n\n      const collateralInstance = getContract({\n        address,\n        abi: erc20Abi,\n        client: this.sdk.publicClient,\n      });\n      return collateralInstance;\n    } catch (error) {\n      this.sdk.logger.error(`Error: while getAccountProxyInstance ${error}`);\n      throw new Error(\n        `Unsupported chain ${this.sdk.rpcConfig.chainId} or preset ${this.sdk.rpcConfig.preset} for CollateralToken_${symbol}`,\n      );\n    }\n  }\n}\n","import axios, { AxiosInstance } from 'axios';\nimport { SynthetixSdk } from '..';\nimport { DEFAULT_PYTH_TIMEOUT, PUBLIC_PYTH_ENDPOINT } from '../constants';\nimport { EvmPriceServiceConnection, PriceFeed } from '@pythnetwork/pyth-evm-js';\nimport { PythConfig } from '../interface/classConfigs';\nimport { formatUnits, Hex } from 'viem';\nimport { SYMBOL_TO_PYTH_FEED } from '../constants';\n\n/**\n * Pyth class for interacting with the Pyth price service. The price service is\n * connected to the endpoint specified as ``pythEndpoint`` when initializing\n * the ``Synthetix`` class\n * If an endpoint isn't specified, the default endpoint is used.\n * The default endpoint should be considered unreliable for production applications.\n * The ``Pyth`` class is used to fetch the latest price update data for a list\n * of tokens or feed ids\n */\nexport class Pyth {\n  sdk: SynthetixSdk;\n  pythConnection: EvmPriceServiceConnection;\n\n  pythConfig?: PythConfig;\n  pythClient: AxiosInstance;\n\n  // To store Market Symbol to Pyth Price ID mapping\n  priceFeedIds: Map<string, string>;\n\n  constructor(synthetixSdk: SynthetixSdk, pythConfig?: PythConfig) {\n    this.sdk = synthetixSdk;\n    this.pythClient = {} as AxiosInstance;\n    this.pythConfig = pythConfig;\n\n    let pythEndpoint;\n    if (pythConfig != undefined) {\n      pythEndpoint = pythConfig.pythEndpoint ?? PUBLIC_PYTH_ENDPOINT;\n    } else {\n      pythEndpoint = PUBLIC_PYTH_ENDPOINT;\n    }\n\n    this.pythConnection = new EvmPriceServiceConnection(pythEndpoint, {\n      timeout: DEFAULT_PYTH_TIMEOUT,\n    });\n\n    // Initialize empty priceIds data\n    this.priceFeedIds = new Map<string, string>();\n  }\n\n  async initPyth() {\n    this.pythClient = await this.getPythClient();\n  }\n\n  /**\n   * Get Pyth client instance\n   * @returns Pyth client object based on the params provided\n   */\n  async getPythClient(): Promise<AxiosInstance> {\n    let pythServiceEndpoint, pythServiceUsername, pythServicePassword;\n\n    if (this.pythConfig == undefined || this.pythConfig.pythEndpoint == undefined) {\n      pythServiceEndpoint = PUBLIC_PYTH_ENDPOINT;\n    } else {\n      pythServiceEndpoint = this.pythConfig.pythEndpoint;\n      pythServiceUsername = this.pythConfig.username;\n      pythServicePassword = this.pythConfig.password;\n    }\n\n    try {\n      if (pythServiceEndpoint) {\n        if (pythServiceUsername && pythServicePassword) {\n          // If Username and password is provided, connect using credentials\n          return axios.create({\n            baseURL: pythServiceEndpoint,\n            auth: {\n              username: pythServiceUsername,\n              password: pythServicePassword,\n            },\n            timeout: this.pythConfig?.cacheTtl ?? DEFAULT_PYTH_TIMEOUT,\n          });\n        } else {\n          // Connect to the PYTH service endpoint without authentication\n          return axios.create({\n            baseURL: pythServiceEndpoint,\n          });\n        }\n      } else {\n        // If Pyth service endpoint is not provided, connect to public endpoints\n        return axios.create({\n          baseURL: PUBLIC_PYTH_ENDPOINT,\n          timeout: this.pythConfig?.cacheTtl ?? DEFAULT_PYTH_TIMEOUT,\n        });\n      }\n    } catch (error) {\n      console.error('Error when creating Pyth instance:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * The function accepts an array of priceIds and publish Timestamp and\n   * returns the priceUpdateData from Pyth for price ids array\n   * @param priceIds Pyth Price IDs array\n   * @param publishTime Publish time for benchmark data\n   * @returns Encoded Pyth price update data\n   */\n  public getVaaPriceUpdateData = async (priceIds: string[], publishTime: number): Promise<Hex[]> => {\n    let priceUpdateData: string[] = [];\n\n    try {\n      const response = await this.pythClient.get(`/v2/updates/price/${publishTime}`, {\n        params: {\n          ids: priceIds,\n          encoding: 'hex',\n        },\n      });\n      if (response.status == 200) {\n        const responseData = response.data;\n        priceUpdateData = responseData.binary?.data ?? [];\n      } else {\n        throw new Error('Error fetching data from Pyth');\n      }\n    } catch (error) {\n      this.sdk.logger.error('Error fetching data from Pyth', error);\n      throw error;\n    }\n    const updateData = priceUpdateData.map((vaa) => '0x' + vaa);\n    return updateData as Hex[];\n  };\n\n  /**\n   * Update the price feed IDs for the Pyth price service.\n   * Additionally sets a lookup for feedId to symbol.\n   * @param updatedPriceFeeds Dictionary of feed IDs to update\n   */\n  public updatePriceFeedIds(updatedPriceFeeds: { symbol: string; feedId: string }[]) {\n    updatedPriceFeeds.forEach((feed) => {\n      this.priceFeedIds.set(feed.symbol, feed.feedId);\n    });\n  }\n\n  /**\n   * Fetch the latest Pyth price data for a list of feed ids. This is the most reliable way to\n   * specify the exact feed you want to fetch data for.\n   * @param feedIds An array of price feed ids to fetch the data for\n   */\n  public async getPriceFromIds(feedIds: Hex[]): Promise<PriceFeed[] | undefined> {\n    const pythPrice = await this.pythConnection.getLatestPriceFeeds(feedIds);\n    return pythPrice;\n  }\n\n  /**\n   * Fetch the latest Pyth price data for a list of market symbols. This\n   * function is the same as ``getPriceFromIds`` but uses the symbol\n   * to fetch the feed id from the lookup table.\n   * @param symbols Array of token symbols to get the price details\n   */\n  public async getPriceFromSymbols(symbols: string[]) {\n    const feedIds: Hex[] = [];\n    symbols.forEach((tokenSymbol) => {\n      const feedId = this.priceFeedIds.get(tokenSymbol) as Hex;\n      if (feedId != undefined) {\n        feedIds.push(feedId);\n      }\n    });\n\n    return this.getPriceFromIds(feedIds);\n  }\n\n  /**\n   * Gets price update data which then can be submitted to Pyth contract to update the prices.\n   * This will throw an axios error if there is a network problem or the price service returns\n   * a non-ok response (e.g: Invalid price ids)\n   * @param priceIds Array of hex-encoded price ids.\n   * @returns Array of price update data.\n   */\n  public async getPriceFeedsUpdateData(feedIds: Hex[]): Promise<Hex[]> {\n    const priceUpdateData = await this.pythConnection.getPriceFeedsUpdateData(feedIds);\n    return priceUpdateData as Hex[];\n  }\n\n  /**\n   *\n   * @param priceId Pyth price id of the token symbol to fetch the price for\n   * @param publishTime Publish time for benchmark data\n   * @returns\n   */\n  public async getFormattedPrice(priceId: Hex, publishTime?: number): Promise<number> {\n    let pythPrice: PriceFeed;\n\n    // Get latest price if publishTime is not provided, else fetch benchmark data\n    if (publishTime != undefined) {\n      pythPrice = await this.pythConnection.getPriceFeed(priceId, publishTime);\n    } else {\n      const price = await this.pythConnection.getLatestPriceFeeds([priceId]);\n      if (price != undefined && price.length > 0) {\n        pythPrice = price[0];\n      } else {\n        throw new Error('Error while fetching Pyth price');\n      }\n    }\n\n    const priceUnchecked = pythPrice.getPriceUnchecked();\n    const price = Number(formatUnits(BigInt(priceUnchecked.price), Math.abs(priceUnchecked.expo)));\n    if (price == 0) {\n      throw new Error('Invalid price: 0');\n    }\n    return price;\n  }\n\n  /**\n   *\n   * @param priceId Pyth price id of the token symbol to fetch the price for\n   * @param publishTime Publish time for benchmark data\n   * @returns\n   */\n  public async getFormattedPriceSymbol(symbol: string, publishTime?: number): Promise<number> {\n    const feedId = this.priceFeedIds.get(symbol);\n    if (feedId != undefined) {\n      return this.getFormattedPrice(feedId as Hex, publishTime);\n    } else {\n      throw new Error('Invalid token symbol');\n    }\n  }\n\n  /**\n   * Returns a mapping of token symbol to price ids from constants\n   * @returns A map of Token symbol to price id\n   */\n  public getPriceIdsFromConstants(): Map<string, string> {\n    return SYMBOL_TO_PYTH_FEED;\n  }\n}\n","import { encodeFunctionData, erc20Abi, formatEther, formatUnits, getAbiItem, Hex } from 'viem';\nimport { SynthetixSdk } from '..';\nimport {\n  CollateralData,\n  FundingParameters,\n  MarketData,\n  MarketMetadata,\n  MarketSummary,\n  MarketSummaryResponse,\n  MaxMarketValue,\n  OpenPositionData,\n  OrderData,\n  OrderFees,\n  OrderQuote,\n  PayDebtAndWithdraw,\n  SettlementStrategy,\n  SettlementStrategyResponse,\n  SpotMarketData,\n} from './interface';\nimport {\n  batchArray,\n  convertEtherToWei,\n  convertWeiToEther,\n  generateRandomAccountId,\n  getOdosPath,\n  sleep,\n} from '../utils';\nimport { Call3Value } from '../interface/contractTypes';\nimport { MarketIdOrName, OverrideParamsRead, OverrideParamsWrite, WriteReturnType } from '../interface/commonTypes';\nimport {\n  AccountPermissions,\n  CommitOrder,\n  CreateAccountAndDeposit,\n  CreateAccountAndDepositMany,\n  CreateAccountDepositAndCreateOrder,\n  CreateIsolateOrder,\n  GetPermissions,\n  GetPerpsQuote,\n  GrantPermission,\n  ModifyCollateral,\n  PayDebt,\n} from '../interface/Perps';\nimport { PerpsRepository } from '../interface/Perps/repositories';\nimport { Market } from '../utils/market';\nimport { PERPS_PERMISSIONS } from '../constants/perpsPermissions';\nimport { MetadataResponse, PythPriceId } from '../interface/Markets';\nimport { erc20StateOverrideBalanceAndAllowance } from '../utils/override';\nimport { SYNTHETIX_ZAP_ABI } from '../contracts/abis/zap';\nimport { SYNTHETIX_ZAP } from '../contracts/addreses/zap';\nimport { DEFAULT_DECIMALS } from '../constants';\n\n/**\n * Class for interacting with Synthetix Perps V3 contracts\n * Provides methods for creating and managing accounts, depositing and withdrawing\n * collateral, committing and settling orders, and liquidating accounts.\n *\n * Use ``get`` methods to fetch information about accounts, markets, and orders::\n *    const markets = await sdk.perps.getMarkets()\n *    const openPositions = await sdk.perps.getOpenPositions()\n * Other methods prepare transactions, and submit them to your RPC::\n *    const createTxHash = await sdk.perps.createAccount(submit=True)\n *    const collateralTxHash = await sdk.perps.modifyCollateral(amount=1000, market_name='sUSD', submit=True)\n *    const orderTxHash = await sdk.perps.commitOrder(size=10, market_name='ETH', desired_fill_price=2000, submit=True)\n * An instance of this module is available as ``sdk.perps``. If you are using a network without\n * perps deployed, the contracts will be unavailable and the methods will raise an error.\n * The following contracts are required:\n * - PerpsMarketProxy\n * - PerpsAccountProxy\n * - PythERC7412Wrapper\n * @param synthetixSdk An instance of the Synthetix class\n */\nexport class Perps extends Market<MarketData> implements PerpsRepository {\n  sdk: SynthetixSdk;\n  defaultAccountId?: bigint;\n  accountIds: bigint[];\n  marketMetadata: Map<number, MarketMetadata>;\n\n  // Markets data\n\n  isErc7412Enabled: boolean = true;\n  // Set multicollateral to false by default\n  isMulticollateralEnabled: boolean = false;\n  disabledMarkets: number[] = [];\n  isInitialized: boolean = false;\n\n  constructor(synthetixSdk: SynthetixSdk) {\n    super(synthetixSdk);\n    this.sdk = synthetixSdk;\n    this.accountIds = [];\n\n    this.marketMetadata = new Map<number, MarketMetadata>();\n  }\n\n  // === READ CALLS ===\n\n  async initPerps() {\n    if (this.isInitialized) return;\n    await this.getAccountIds();\n\n    // Check if the Multicollateral is enabled\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const debtFunctionData = getAbiItem({\n      abi: marketProxy.abi,\n      name: 'debt',\n    });\n\n    const payDebtFunctionData = getAbiItem({\n      abi: marketProxy.abi,\n      name: 'payDebt',\n    });\n\n    if (debtFunctionData != undefined && payDebtFunctionData != undefined) {\n      this.isMulticollateralEnabled = true;\n      this.sdk.logger.info('Multicollateral perps is enabled');\n    }\n    this.isInitialized = true;\n  }\n\n  /**\n   * Fetch a list of perps ``account_id`` owned by an address. Perps accounts\n   * are minted as an NFT to the owner's address. The ``account_id`` is the\n   * token id of the NFTs held by the address.\n   * @param {string} address The address to get accounts for. Uses connected address if not provided.\n   * @param {bigint} defaultAccountId The default account ID to set after fetching.\n   * @returns A list of account IDs owned by the address\n   */\n\n  public async getAccountIds(accountAddress = this.sdk.accountAddress, defaultAccountId?: bigint): Promise<bigint[]> {\n    if (!accountAddress) throw new Error('Invalid address');\n\n    const accountProxy = await this.sdk.contracts.getPerpsAccountProxyInstance();\n    const balance = await accountProxy.read.balanceOf([accountAddress]);\n    this.sdk.logger.info('balance', balance);\n    const argsList = [];\n\n    for (let index = 0; index < Number(balance); index++) {\n      argsList.push([accountAddress, index]);\n    }\n    const accountIds = (await this.sdk.utils.multicallErc7412({\n      contractAddress: accountProxy.address,\n      abi: accountProxy.abi,\n      functionName: 'tokenOfOwnerByIndex',\n      args: argsList,\n    })) as unknown[];\n\n    if (accountIds == undefined) return [];\n    // Set Perps account ids\n    this.accountIds = accountIds as bigint[];\n    this.sdk.logger.info('accountIds', accountIds);\n    if (defaultAccountId) {\n      this.defaultAccountId = defaultAccountId;\n    } else if (this.accountIds.length > 0) {\n      this.defaultAccountId = this.accountIds[0] as bigint;\n      this.sdk.logger.info('Using default account id as ', this.defaultAccountId);\n    }\n    return accountIds as bigint[];\n  }\n\n  public async getMarkets(): Promise<MarketData[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const marketIdResponse: bigint[] = (await perpsMarketProxy.read.getMarkets()) as bigint[];\n\n    const marketMetadataResponse = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'metadata',\n      args: marketIdResponse as unknown[],\n    })) as MetadataResponse[];\n\n    const marketIds = marketIdResponse.map((id) => Number(id));\n\n    const settlementStrategies = await this.getSettlementStrategies(marketIds);\n    const { marketMetadatas, pythPriceIds } = marketMetadataResponse.reduce(\n      (acc, market, index) => {\n        const [name, symbol] = market;\n        const strategy = settlementStrategies.find((strategy) => strategy.marketId == marketIds[index]);\n\n        acc.pythPriceIds.push({\n          symbol,\n          feedId: strategy?.feedId ?? '0x',\n        });\n\n        acc.marketMetadatas.push({\n          marketName: name,\n          symbol,\n          feedId: strategy?.feedId ?? '0x',\n        });\n\n        return acc;\n      },\n      {\n        pythPriceIds: [],\n        marketMetadatas: [],\n      } as { pythPriceIds: PythPriceId[]; marketMetadatas: MarketMetadata[] },\n    );\n\n    this.sdk.pyth.updatePriceFeedIds(pythPriceIds);\n\n    const [marketSummaries, fundingParameters, orderFees, maxMarketValues] = await Promise.all([\n      this.getMarketSummaries(marketIds),\n      this.getFundingParameters(marketIds),\n      this.getOrderFees(marketIds),\n      this.getMaxMarketValues(marketIds),\n    ]);\n\n    const datas = marketMetadatas.map((marketMetadata, index) => {\n      const marketId = Number(marketIds.at(index) || 0);\n      const marketSummary = marketSummaries.find((summary) => summary.marketId == marketId);\n      const fundingParam = fundingParameters.find((fundingParam) => fundingParam.marketId == marketId);\n      const orderFee = orderFees.find((orderFee) => orderFee.marketId == marketId);\n      const maxMarketValue = maxMarketValues.find((maxMarketValue) => maxMarketValue.marketId == marketId);\n      const result = {\n        marketId: marketIds[index],\n        marketName: marketMetadata.marketName,\n        symbol: marketMetadata.symbol,\n        feedId: marketMetadata.feedId,\n        skew: marketSummary?.skew,\n        size: marketSummary?.size,\n        maxOpenInterest: marketSummary?.maxOpenInterest,\n        interestRate: marketSummary?.interestRate,\n        currentFundingRate: marketSummary?.currentFundingRate,\n        currentFundingVelocity: marketSummary?.currentFundingVelocity,\n        indexPrice: marketSummary?.indexPrice,\n        skewScale: fundingParam?.skewScale,\n        maxFundingVelocity: fundingParam?.maxFundingVelocity,\n        makerFee: orderFee?.makerFeeRatio,\n        takerFee: orderFee?.takerFeeRatio,\n        maxMarketValue: maxMarketValue?.maxMarketValue,\n      };\n\n      this.marketMetadata.set(marketId, marketMetadata);\n      this.marketsById.set(marketId, result);\n      this.marketsByName.set(marketMetadata.marketName, result);\n      this.marketsBySymbol.set(marketMetadata.symbol, result);\n\n      return result;\n    });\n\n    return datas;\n  }\n\n  public async getMarket(marketIdOrName: MarketIdOrName): Promise<MarketData> {\n    // Smart contract calls to populate MarketData\n    // 0. Fetch all marketIds - Only if marketName is provided, else use the market id\n    // 1. metadata - To get market name and symbol\n    // 2. getSettlementStrategy - To get feedId\n    // 3. getMarketSummary - To get skew, size, maxOi, currentFundingRate, currentFundingVelocity, indexPrice\n    // 4. interestRate - To get interestRate\n    // 5. getFundingParameters - To get skewScale and maxFundingVelocity\n    // 6. getOrderFees - To get maker and taker fee\n    // 7. getMaxMarketValue - To get maxMarketValue\n\n    const market =\n      (this.marketsById.get(Number(marketIdOrName)) ?? this.marketsByName.get(marketIdOrName as string)) || {};\n    if (market.marketId) {\n      return market;\n    }\n\n    let marketId, marketName, marketSymbol;\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    // If the market id is known, avoid fetching fetching all the markets and their metadata\n    if (typeof marketIdOrName === 'number' || typeof marketIdOrName === 'bigint') {\n      const marketMetadataResponse = (await this.sdk.utils.callErc7412({\n        contractAddress: perpsMarketProxy.address,\n        abi: perpsMarketProxy.abi,\n\n        functionName: 'metadata',\n        args: [marketIdOrName],\n      })) as MetadataResponse;\n\n      marketId = Number(marketIdOrName);\n      marketName = marketMetadataResponse[0];\n      marketSymbol = marketMetadataResponse[1];\n    } else {\n      const marketIdResponse: bigint[] = (await perpsMarketProxy.read.getMarkets()) as bigint[];\n      const marketMetadataResponse = (await this.sdk.utils.multicallErc7412({\n        contractAddress: perpsMarketProxy.address,\n        abi: perpsMarketProxy.abi,\n        functionName: 'metadata',\n        args: marketIdResponse as unknown[],\n      })) as MetadataResponse[];\n\n      marketMetadataResponse.forEach((metadata, idx) => {\n        if (metadata[0] == marketIdOrName) {\n          marketId = marketIdResponse[idx];\n          marketName = metadata[0];\n          marketSymbol = metadata[1];\n        }\n      });\n    }\n\n    const functionNames: string[] = [];\n    const argsList: unknown[] = [];\n\n    // 0. Get settlement strategy\n    functionNames.push('getSettlementStrategy');\n    argsList.push([marketId, 0]);\n\n    // 1. Get market Summary\n    functionNames.push('getMarketSummary');\n    argsList.push([marketId]);\n\n    // 2. Get interest rate\n    functionNames.push('interestRate');\n    argsList.push([]);\n\n    // 3. Get funding values\n    functionNames.push('getFundingParameters');\n    argsList.push([marketId]);\n\n    // 4. Get maker and taker fees\n    functionNames.push('getOrderFees');\n    argsList.push([marketId]);\n\n    // 5. Get max market value\n    functionNames.push('getMaxMarketValue');\n    argsList.push([marketId]);\n\n    const multicallResponse: unknown[] = await this.sdk.utils.multicallMultifunctionErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionNames,\n      args: argsList,\n    });\n\n    const settlementStrategy = multicallResponse.at(0) as SettlementStrategyResponse;\n    const marketSummary = multicallResponse.at(1) as MarketSummaryResponse;\n    const interestRate = multicallResponse.at(2) as bigint;\n    const fundingParams = multicallResponse.at(3) as bigint[];\n    const orderFees = multicallResponse.at(4) as bigint[];\n    const maxMarketValue = multicallResponse.at(5) as bigint;\n\n    market.marketId = marketId || 0;\n    market.marketName = marketName || 'INVALID MARKET';\n    market.symbol = marketSymbol || 'INVALID';\n\n    // From settlementStrategy data\n    market.feedId = settlementStrategy.feedId;\n\n    // From marketSummary data\n    market.skew = Number(formatEther(marketSummary.skew));\n    market.size = Number(formatEther(marketSummary.size));\n    market.maxOpenInterest = Number(formatEther(marketSummary.maxOpenInterest));\n    market.interestRate = Number(formatEther(interestRate));\n    market.currentFundingRate = Number(formatEther(marketSummary.currentFundingRate));\n    market.currentFundingVelocity = Number(formatEther(marketSummary.currentFundingVelocity));\n    market.indexPrice = Number(formatEther(marketSummary.indexPrice));\n    // From fundingParams data\n    market.skewScale = Number(formatEther(fundingParams.at(0) || 0n));\n    market.maxFundingVelocity = Number(formatEther(fundingParams.at(1) || 0n));\n\n    // From orderFees data\n    market.makerFee = Number(formatEther(orderFees.at(0) || 0n));\n    market.takerFee = Number(formatEther(orderFees.at(1) || 0n));\n\n    market.maxMarketValue = Number(formatEther(maxMarketValue));\n\n    this.marketMetadata.set(market.marketId || 0, {\n      marketName: market.marketName,\n      symbol: market.symbol,\n      feedId: market.feedId,\n    });\n\n    this.marketsById.set(market.marketId, market);\n    this.marketsByName.set(market.marketName, market);\n    this.marketsBySymbol.set(market.symbol, market);\n    return market;\n  }\n\n  /**\n   * Fetch the market summaries for an array of marketIds\n   * @param marketIds Array of market ids to fetch\n   * @returns Summary of market ids data fetched from the contract\n   */\n  public async getMarketSummaries(marketIds: number[]): Promise<MarketSummary[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const interestRate = await this.sdk.utils.callErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'interestRate',\n      args: [],\n    });\n\n    const marketSummariesInput = marketIds.map((marketId) => [marketId]);\n    const marketSummariesResponse: MarketSummaryResponse[] = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getMarketSummary',\n      args: marketSummariesInput,\n    })) as MarketSummaryResponse[];\n\n    if (marketIds.length !== marketSummariesResponse.length) {\n      this.sdk.logger.info('Inconsistent data');\n    }\n\n    const marketSummaries: MarketSummary[] = [];\n    const batchedResponse = batchArray(\n      marketSummariesResponse.map((market, index) => {\n        return {\n          ...market,\n          marketId: marketIds[index],\n        };\n      }),\n      10,\n    );\n\n    for (const batch of batchedResponse) {\n      const promises = batch.map(async (market) => {\n        const marketId = market.marketId;\n\n        marketSummaries.push({\n          marketId: marketId,\n          marketName: (await this.getMarket(marketId)).marketName,\n          feedId: (await this.getMarket(marketId)).feedId,\n          indexPrice: Number(formatEther(market.indexPrice)),\n          skew: Number(formatEther(market.skew)),\n          size: Number(formatEther(market.size)),\n          maxOpenInterest: Number(formatEther(market.maxOpenInterest)),\n          interestRate: Number(formatEther(interestRate as bigint)),\n          currentFundingRate: Number(formatEther(market.currentFundingRate)),\n          currentFundingVelocity: Number(formatEther(market.currentFundingVelocity)),\n        });\n      });\n      await Promise.allSettled(promises);\n    }\n    return marketSummaries;\n  }\n\n  /**\n   * @name getMarketSummary\n   * @description Fetches the summary of a given market. This includes information like skew, size, max open interest, current funding rate, and more.\n   * @param {string|number} marketIdOrName - The identifier or name of the market to fetch the summary for.\n   * @returns {MarketSummary} - An object containing the summary data for the specified market.\n   */\n\n  public async getMarketSummary(marketIdOrName: MarketIdOrName): Promise<MarketSummary> {\n    const { resolvedMarketId, resolvedMarketName } = await this.resolveMarket(marketIdOrName);\n\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const interestRate = await this.sdk.utils.callErc7412({\n      contractAddress: perpsMarketProxy.address,\n\n      abi: perpsMarketProxy.abi,\n      functionName: 'interestRate',\n      args: [],\n    });\n\n    const marketSummaryResponse: MarketSummaryResponse = (await this.sdk.utils.callErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getMarketSummary',\n      args: [resolvedMarketId],\n    })) as MarketSummaryResponse;\n    this.sdk.logger.info('marketSummaryResponse', marketSummaryResponse);\n    return {\n      marketId: resolvedMarketId,\n      marketName: resolvedMarketName,\n      feedId: '',\n      indexPrice: Number(formatEther(marketSummaryResponse.indexPrice)),\n      skew: Number(formatEther(marketSummaryResponse.skew)),\n      size: Number(formatEther(marketSummaryResponse.size)),\n      maxOpenInterest: Number(formatEther(marketSummaryResponse.maxOpenInterest)),\n      interestRate: Number(formatEther(interestRate as bigint)),\n      currentFundingRate: Number(formatEther(marketSummaryResponse.currentFundingRate)),\n      currentFundingVelocity: Number(formatEther(marketSummaryResponse.currentFundingVelocity)),\n    } as MarketSummary;\n  }\n\n  /**\n   * @name getSettlementStrategy\n   * @description This function retrieves the settlement strategy for a given market by its ID and either Market ID or Name.\n   * @param {number} settlementStrategyId - The ID of the settlement strategy to retrieve.\n   * @param {MarketIdOrName} marketIdOrName - The unique identifier (ID or Name) of the market this settlement strategy belongs to.\n   * @returns {SettlementStrategy} - An object containing the details of the retrieved settlement strategy, including its strategy type, delay times, associated contract addresses, feed ID, settlement reward, and whether it is disabled or not.\n   */\n  public async getSettlementStrategy(\n    settlementStrategyId: number,\n    marketIdOrName: MarketIdOrName,\n  ): Promise<SettlementStrategy> {\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const settlementStrategy: SettlementStrategyResponse = (await this.sdk.utils.callErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n\n      functionName: 'getSettlementStrategy',\n      args: [resolvedMarketId, settlementStrategyId],\n    })) as SettlementStrategyResponse;\n\n    return {\n      marketId: resolvedMarketId,\n      strategyType: settlementStrategy.strategyType,\n      settlementDelay: Number(settlementStrategy.settlementDelay),\n      settlementWindowDuration: Number(settlementStrategy.settlementWindowDuration),\n      priceVerificationContract: settlementStrategy.priceVerificationContract,\n      feedId: settlementStrategy.feedId,\n      settlementReward: Number(formatEther(settlementStrategy.settlementReward ?? 0n)),\n      disabled: settlementStrategy.disabled,\n      commitmentPriceDelay: Number(settlementStrategy.commitmentPriceDelay),\n    } as SettlementStrategy;\n  }\n\n  /**\n   * Fetch the settlement strategies for an array of market ids. Settlement strategies describe the\n   * conditions under which an order can be settled.\n   * @param marketIds Array of marketIds to fetch settlement strategy\n   * @returns Settlement strategy array for markets\n   */\n  public async getSettlementStrategies(marketIds: number[]): Promise<SettlementStrategy[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const settlementStrategies: SettlementStrategy[] = [];\n\n    const argsList: [number, number][] = marketIds.map((marketId) => [marketId, 0]);\n\n    const settlementStrategiesResponse: SettlementStrategyResponse[] = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getSettlementStrategy',\n      args: argsList,\n    })) as SettlementStrategyResponse[];\n\n    settlementStrategiesResponse.forEach((strategy, index) => {\n      settlementStrategies.push({\n        marketId: marketIds[index],\n        strategyType: strategy.strategyType,\n        settlementDelay: Number(strategy.settlementDelay),\n        settlementWindowDuration: Number(strategy.settlementWindowDuration),\n        priceVerificationContract: strategy.priceVerificationContract,\n        feedId: strategy.feedId,\n        settlementReward: Number(formatEther(strategy.settlementReward ?? 0n)),\n        disabled: strategy.disabled,\n        commitmentPriceDelay: Number(strategy.commitmentPriceDelay),\n      });\n    });\n    return settlementStrategies;\n  }\n\n  /**\n   * Fetch funding parameters for an array of market ids.\n   * @param marketIds Array of marketIds to fetch settlement strategy\n   * @returns Funding Parameters array for markets\n   */\n  public async getFundingParameters(marketIds: number[]): Promise<FundingParameters[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    type FundingParamsResponse = [bigint, bigint];\n    const fundingParams: FundingParameters[] = [];\n\n    const fundingParamsResponse = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getFundingParameters',\n      args: marketIds,\n    })) as FundingParamsResponse[];\n\n    fundingParamsResponse.forEach((param, index) => {\n      fundingParams.push({\n        marketId: marketIds[index],\n        skewScale: Number(formatEther(param[0])),\n        maxFundingVelocity: Number(formatEther(param[1])),\n      });\n    });\n    return fundingParams;\n  }\n\n  /**\n   * Gets the order fees of a market.\n   * @param marketIds Array of market ids.\n   * @return Order fees array for markets\n   */\n  public async getOrderFees(marketIds: number[]): Promise<OrderFees[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    type OrderFeesResponse = [bigint, bigint];\n    const orderFees: OrderFees[] = [];\n\n    const orderFeesResponse = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getOrderFees',\n      args: marketIds,\n    })) as OrderFeesResponse[];\n\n    orderFeesResponse.forEach((param, index) => {\n      orderFees.push({\n        marketId: marketIds[index],\n        makerFeeRatio: Number(formatEther(param[0])),\n        takerFeeRatio: Number(formatEther(param[1])),\n      });\n    });\n    return orderFees;\n  }\n\n  /**\n   * Gets the max size (in value) of an array of marketIds.\n   * @param marketIds Array of market ids.\n   * @return Max market size in market USD value for each market\n   */\n  public async getMaxMarketValues(marketIds: number[]): Promise<MaxMarketValue[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const maxMarketValues: MaxMarketValue[] = [];\n\n    const maxMarketValuesResponse = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getMaxMarketValue',\n      args: marketIds,\n    })) as bigint[];\n\n    maxMarketValuesResponse.forEach((maxMarketValue, index) => {\n      maxMarketValues.push({\n        marketId: marketIds[index],\n        maxMarketValue: Number(formatEther(maxMarketValue)),\n      });\n    });\n    return maxMarketValues;\n  }\n\n  /**\n   *   Fetches the open order for an account. Optionally fetches the settlement strategy,\n   * which can be useful for order settlement and debugging.\n   * @param {bigint} accountId The id of the account. If not provided, the default account is used\n   * @param {boolean} fetchSettlementStrategy Flag to indicate whether to fetch the settlement strategy\n   * @returns {OrderData} The order data for the account\n   */\n  public async getOrder(\n    accountId = this.defaultAccountId,\n    fetchSettlementStrategy: boolean = true,\n  ): Promise<OrderData> {\n    if (!accountId) throw new Error('Invalid account id');\n\n    interface OrderCommitmentRequestRes {\n      marketId: bigint;\n      accountId: bigint;\n      sizeDelta: bigint;\n      settlementStrategyId: bigint;\n      acceptablePrice: bigint;\n      trackingCode: string;\n      referrer: string;\n    }\n\n    interface AsyncOrderDataRes {\n      commitmentTime: bigint;\n      request: OrderCommitmentRequestRes;\n    }\n\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const orderResponse = (await this.sdk.utils.callErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'getOrder',\n      args: [accountId],\n    })) as AsyncOrderDataRes;\n    const orderReq = orderResponse.request;\n\n    const orderData: OrderData = {\n      marketId: Number(orderReq.marketId),\n      commitmentTime: Number(orderResponse.commitmentTime),\n      accountId: orderReq.accountId,\n      sizeDelta: Number(formatEther(orderReq.sizeDelta)),\n      settlementStrategyId: Number(orderReq.settlementStrategyId),\n      acceptablePrice: Number(orderReq.acceptablePrice),\n      trackingCode: orderReq.trackingCode,\n      referrer: orderReq.referrer,\n    };\n\n    if (fetchSettlementStrategy) {\n      const strategy = await this.getSettlementStrategy(\n        Number(orderReq.settlementStrategyId),\n        Number(orderReq.marketId),\n      );\n      orderData.settlementStrategy = strategy;\n    }\n    return orderData;\n  }\n\n  /**\n   * Fetch information about an account's margin requirements and balances.\n   * Accounts must maintain an ``available_margin`` above the ``maintenance_margin_requirement``\n   * to avoid liquidation. Accounts with ``available_margin`` below the ``initial_margin_requirement``\n   * can not interact with their position unless they deposit more collateral.\n   * @param {bigint} accountId  The id of the account to fetch the margin info for. If not provided, the default account is used\n   * @returns {CollateralData} The margin information for the account\n   */\n  public async getMarginInfo(accountId = this.defaultAccountId): Promise<CollateralData> {\n    if (!accountId) throw new Error('Invalid account ID');\n\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const functionNames: string[] = [];\n    const argsList: unknown[] = [];\n\n    // 0. Get Total collateral value\n    functionNames.push('totalCollateralValue');\n    argsList.push([accountId]);\n\n    // 1. Get available margin\n    functionNames.push('getAvailableMargin');\n    argsList.push([accountId]);\n\n    // 2. Get withdrawable margin\n    functionNames.push('getWithdrawableMargin');\n    argsList.push([accountId]);\n\n    // 3. Get required margins\n    functionNames.push('getRequiredMargins');\n    argsList.push([accountId]);\n\n    const multicallResponse: unknown[] = await this.sdk.utils.multicallMultifunctionErc7412({\n      contractAddress: marketProxy.address,\n      abi: marketProxy.abi,\n      functionNames,\n      args: argsList,\n    });\n\n    const totalCollateralValue = multicallResponse.at(0) as bigint;\n    const availableMargin = multicallResponse.at(1) as bigint;\n    const withdrawableMargin = multicallResponse.at(2) as bigint;\n\n    // returns (uint256 requiredInitialMargin,uint256 requiredMaintenanceMargin,uint256 maxLiquidationReward)\n    const requiredMarginsResponse = multicallResponse.at(3) as bigint[];\n    const requiredInitialMargin = requiredMarginsResponse.at(0) as bigint;\n    const requiredMaintenanceMargin = requiredMarginsResponse.at(1) as bigint;\n    const maxLiquidationReward = requiredMarginsResponse.at(2) as bigint;\n\n    const collateralAmountsRecord: Record<number, number> = [];\n    let debt = 0;\n    if (this.isMulticollateralEnabled) {\n      const fNames: string[] = []; // Function names\n      const aList: unknown[] = []; // Argument list\n\n      // 0. Get account collateral ids\n      fNames.push('getAccountCollateralIds');\n      aList.push([accountId]);\n\n      // 1. Get account debt\n      fNames.push('debt');\n      aList.push([accountId]);\n\n      const response: unknown[] = await this.sdk.utils.multicallMultifunctionErc7412({\n        contractAddress: marketProxy.address,\n        abi: marketProxy.abi,\n        functionNames: fNames,\n        args: aList,\n      });\n\n      // returns and array of collateral ids(uint256[] memory)\n      const collateralIds = response.at(0) as bigint[];\n      debt = convertWeiToEther(response.at(1) as bigint);\n\n      // 'debt' function is only available for markets with Multicollateral enabled\n      if (collateralIds.length != 0) {\n        const inputs = collateralIds.map((id) => {\n          return [accountId, id];\n        });\n        this.sdk.logger.info('inputs', inputs);\n        const collateralAmounts = (await this.sdk.utils.multicallErc7412({\n          contractAddress: marketProxy.address,\n          abi: marketProxy.abi,\n          functionName: 'getCollateralAmount',\n          args: inputs,\n        })) as bigint[];\n\n        collateralIds.forEach((collateralId, index) => {\n          collateralAmountsRecord[Number(collateralId)] = convertWeiToEther(collateralAmounts.at(index));\n        });\n      }\n    } else {\n      collateralAmountsRecord[0] = convertWeiToEther(totalCollateralValue);\n    }\n\n    const marginInfo: CollateralData = {\n      totalCollateralValue: convertWeiToEther(totalCollateralValue),\n      collateralBalances: collateralAmountsRecord,\n      debt,\n      availableMargin: convertWeiToEther(availableMargin),\n      withdrawableMargin: convertWeiToEther(withdrawableMargin),\n      initialMarginRequirement: convertWeiToEther(requiredInitialMargin),\n      maintenanceMarginRequirement: convertWeiToEther(requiredMaintenanceMargin),\n      maxLiquidationReward: convertWeiToEther(maxLiquidationReward),\n    };\n    this.sdk.logger.info(`${marginInfo}marginInfo`);\n    return marginInfo;\n  }\n\n  /**\n   * @name buildModifyCollateral\n   * @description This function builds the call to modify collateral in a perp market. It takes an amount, market ID or name, account ID, and collateral ID as parameters and returns an array of Call3Value objects.\n   * @param {string | number} data.amount - The amount of the underlying asset to modify collateral for.\n   * @param {string | number} data.marketIdOrName - The ID or name of the perp market where the collateral will be modified.\n   * @param {string} data.accountId - The ID of the account whose collateral is being modified.\n   * @param {string} data.collateralId - The ID of the collateral being modified.\n   * @returns {Call3Value[]} - An array of Call3Value objects containing the target contract address, call data, value, requireSuccess flag, and other relevant information for executing the 'modifyCollateral' function on the market proxy contract.\n   */\n  async buildModifyCollateral({ amount, collateralMarketIdOrName, accountId }: ModifyCollateral): Promise<Call3Value> {\n    const { resolvedMarketId: collateralMarketId, resolvedMarketName: collateralMarketName } =\n      await this.sdk.spot.resolveMarket(collateralMarketIdOrName);\n\n    this.sdk.logger.info(`Building ${amount} ${collateralMarketName} for account ${accountId}`);\n\n    const synthCollateral = await this.sdk.spot.getMarket(collateralMarketId);\n\n    // Remove Synthetix asset's `s` from market name.\n    // For example, remove `s` from `sUSDe` to get `USDe`\n    const collateral = await this.sdk.contracts.getCollateralInstance(\n      (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n    );\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n    const formattedAmount = await this.formatSize(amount, amount > 0 ? collateralMarketId : 0);\n\n    if (amount > 0)\n      return {\n        target: zapContract,\n        callData: encodeFunctionData({\n          abi: SYNTHETIX_ZAP_ABI,\n          functionName: 'deposit',\n          // all wrap versions have 18 decimals so setting collateralId default to 0\n          args: [accountId, collateral.address, synthCollateral.contractAddress, formattedAmount, collateralMarketId],\n        }),\n        value: 0n,\n        requireSuccess: true,\n      };\n\n    return {\n      target: zapContract,\n      callData: encodeFunctionData({\n        abi: SYNTHETIX_ZAP_ABI,\n        functionName: 'withdraw',\n        args: [accountId, collateral.address, formattedAmount, collateralMarketId],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n  }\n\n  /**\n   * Fetch the balance of each collateral type for an account.\n   * @param {bigint} accountId The id of the account to fetch the collateral balances for. If not provided, the default account is used.\n   * @returns {Promise<number>} The balance of the account's collateral.\n   */\n\n  public async getCollateralBalances(accountId?: bigint): Promise<number> {\n    // const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    // if (accountId == undefined) {\n    // accountId = this.defaultAccountId;\n    // }\n    throw new Error('Not implemented ' + accountId);\n  }\n\n  /**\n   * Check if an `accountId` is eligible for liquidation.\n   * @param accountId The id of the account to check. If not provided, the default account is used.\n   * @returns {Promise<boolean>} A boolean indicating whether the account can be liquidated.\n   */\n  public async getCanLiquidate(accountId = this.defaultAccountId): Promise<boolean> {\n    if (!accountId) throw new Error('Invalid account ID');\n\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const canBeLiquidated = (await this.sdk.utils.callErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'canLiquidate',\n      args: [accountId],\n    })) as boolean;\n    this.sdk.logger.info('canBeLiquidated', canBeLiquidated);\n    return canBeLiquidated;\n  }\n\n  /**\n   * Check if a batch of `accountId`'s are eligible for liquidation.\n   * @param {string[]} accountIds An array of account ids\n   * @returns {Promise<{ accountId: bigint; canLiquidate: boolean }[]>} An array of objects containing the account id and whether the account can be liquidated.\n   */\n  public async getCanLiquidates(\n    accountIds: bigint[] | undefined = undefined,\n  ): Promise<{ accountId: bigint; canLiquidate: boolean }[]> {\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    if (accountIds == undefined) {\n      if (this.defaultAccountId != undefined) {\n        accountIds = this.accountIds;\n      } else {\n        throw new Error('Invalid account ID');\n      }\n    }\n\n    // Format the args to the required array format\n    const input = accountIds.map((accountId) => [accountId]);\n\n    const canLiquidatesResponse = (await this.sdk.utils.multicallErc7412({\n      contractAddress: perpsMarketProxy.address,\n      abi: perpsMarketProxy.abi,\n      functionName: 'canLiquidate',\n      args: input,\n    })) as boolean[];\n\n    const canLiquidates = canLiquidatesResponse.map((response, index) => {\n      return {\n        accountId: accountIds.at(index) ?? 0n,\n        canLiquidate: response,\n      };\n    });\n    this.sdk.logger.info('canLiquidates', canLiquidates);\n    return canLiquidates;\n  }\n\n  /**\n   * Fetch the position for a specified account and market. The result includes the unrealized\n   * pnl since the last interaction with this position, any accrued funding, and the position size.\n   * Provide either a ``marketId`` or a ``marketName``::\n   * @param {string | number} marketIdOrName - The identifier or name of the market for which the collateral is being modified\n   * @param {bigint} accountId The id of the account to fetch the position for. If not provided, the default account is used.\n   * @returns {OpenPositionData} An object containing the open position data for the specified market.\n   */\n  public async getOpenPosition(\n    marketIdOrName: MarketIdOrName,\n    accountId = this.defaultAccountId,\n  ): Promise<OpenPositionData> {\n    if (!accountId) throw new Error('Account ID is required');\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const { resolvedMarketId, resolvedMarketName } = await this.resolveMarket(marketIdOrName);\n\n    // Smart contract response:\n    // returns (int256 totalPnl, int256 accruedFunding, int128 positionSize, uint256 owedInterest);\n    const response = (await this.sdk.utils.callErc7412({\n      contractAddress: marketProxy.address,\n      abi: marketProxy.abi,\n      functionName: 'getOpenPosition',\n      args: [accountId, resolvedMarketId],\n    })) as bigint[];\n\n    const openPositionData: OpenPositionData = {\n      accountId: accountId,\n      marketId: resolvedMarketId,\n      marketName: resolvedMarketName,\n      totalPnl: convertWeiToEther(response.at(0)),\n      accruedFunding: convertWeiToEther(response.at(1)),\n      positionSize: convertWeiToEther(response.at(2)),\n      owedInterest: convertWeiToEther(response.at(3)),\n    };\n    this.sdk.logger.info('openPositionData', openPositionData);\n    return openPositionData;\n  }\n\n  /**\n   * Fetch positions for an array of specified markets. The result includes the unrealized\n   * pnl since the last interaction with this position, any accrued funding, and the position size.\n   * Provide either an array of ``marketIds`` or a ``marketNames``::\n   * @param {MarketIdOrName} marketIdsOrNames - The ID or name of the Perpetual market to get a quote for.\n   * @param {bigint} accountId The id of the account to fetch the position for. If not provided, the default account is used.\n   * @returns {OpenPositionData[]} An array of objects containing the open position data for the specified markets.\n   */\n  // NOTE: maybe is better use subgraph?\n  public async getOpenPositions(\n    marketIdsOrNames?: MarketIdOrName[],\n    accountId = this.defaultAccountId,\n  ): Promise<OpenPositionData[]> {\n    if (!accountId) throw new Error('Account ID is required');\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const marketIds: number[] = !marketIdsOrNames\n      ? Array.from(this.marketsById.keys())\n      : await Promise.all(marketIdsOrNames.map(async (market) => (await this.resolveMarket(market)).resolvedMarketId));\n\n    const inputs = marketIds?.map((marketId) => {\n      return [accountId, marketId];\n    }) as unknown[];\n\n    // Smart contract response:\n    // returns (int256 totalPnl, int256 accruedFunding, int128 positionSize, uint256 owedInterest);\n    const response = (await this.sdk.utils.multicallErc7412({\n      contractAddress: marketProxy.address,\n      abi: marketProxy.abi,\n      functionName: 'getOpenPosition',\n      args: inputs,\n    })) as bigint[][];\n\n    const openPositionsData: OpenPositionData[] = [];\n    const batchedResponse = batchArray(\n      response.map((data, index) => {\n        return {\n          data,\n          marketId: marketIds?.at(index) ?? 0,\n        };\n      }),\n      10,\n    );\n\n    for (const batch of batchedResponse) {\n      const promises = batch.map(async ({ data: positionData, marketId }) => {\n        const positionSize = convertWeiToEther(positionData.at(2));\n        if (Math.abs(positionSize) > 0) {\n          openPositionsData.push({\n            accountId: accountId,\n            marketId: marketId,\n            marketName: (await this.getMarket(marketId)).marketName ?? 'Unresolved market',\n            totalPnl: convertWeiToEther(positionData.at(0)),\n            accruedFunding: convertWeiToEther(positionData.at(1)),\n            positionSize: positionSize,\n            owedInterest: convertWeiToEther(positionData.at(3)),\n          });\n        }\n      });\n      await Promise.allSettled(promises);\n    }\n\n    return openPositionsData;\n  }\n\n  /**\n   * Retrieves open positions for multiple accounts and markets using a multicall.\n   * @param positions - An array of objects representing the positions,\n   * where each object contains:\n   * - accountId: {bigint} The id of the account to fetch the position for .\n   * - marketIdOrName: {MarketIdOrName} The market ID or name.\n   * @returns An array of OpenPositionData objects. */\n  public async getOpenPositionsMulticall(\n    positions: { accountId: bigint; marketIdOrName: MarketIdOrName }[],\n  ): Promise<OpenPositionData[]> {\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const marketIds: number[] = await Promise.all(\n      positions.map(async (position) => (await this.resolveMarket(position.marketIdOrName)).resolvedMarketId),\n    );\n\n    const inputs = positions.map((position, idx) => {\n      return [position.accountId, marketIds.at(idx)];\n    }) as unknown[];\n\n    // Smart contract response:\n    // returns (int256 totalPnl, int256 accruedFunding, int128 positionSize, uint256 owedInterest);\n    const response = (await this.sdk.utils.multicallErc7412({\n      contractAddress: marketProxy.address,\n      abi: marketProxy.abi,\n      functionName: 'getOpenPosition',\n      args: inputs,\n    })) as bigint[][];\n\n    const openPositionsData: OpenPositionData[] = [];\n    const batchedResponse = batchArray(\n      response.map((market, index) => {\n        return { data: market, marketId: marketIds.at(index)! };\n      }),\n      10,\n    );\n    for (const batch of batchedResponse) {\n      const promises = batch.map(async ({ data: positionData, marketId }, idx) => {\n        const positionSize = convertWeiToEther(positionData.at(2));\n        if (Math.abs(positionSize) > 0) {\n          openPositionsData.push({\n            accountId: positions.at(idx)?.accountId ?? 0n,\n            marketId: marketId,\n            marketName: (await this.getMarket(marketId)).marketName ?? 'Unresolved market',\n            totalPnl: convertWeiToEther(positionData.at(0)),\n            accruedFunding: convertWeiToEther(positionData.at(1)),\n            positionSize: positionSize,\n            owedInterest: convertWeiToEther(positionData.at(3)),\n          });\n        }\n      });\n      await Promise.allSettled(promises);\n    }\n    return openPositionsData;\n  }\n\n  /**\n   * @name getQuote\n   * @description Fetches a quote for a Perpetual market, calculating the fees, fill price and required margin.\n   * @param {number} data.size - The size of the order in base asset units\n   * @param {number} data.price - The price of the order in quote asset units. If not provided, it will be fetched from Pyth Oracle.\n   * @param {MarketIdOrName} data.marketIdOrName - The ID or name of the Perpetual market to get a quote for.\n   * @param {number} [data.accountId=this.defaultAccountId] - The account ID of the user requesting the quote. Defaults to the default account ID.\n   * @param {number} [data.settlementStrategyId=0] - The settlement strategy ID of the market. Defaults to 0 (no leverage).\n   * @param {boolean} [data.includeRequiredMargin=true] - Whether to include the required margin in the quote. Defaults to true.\n   * @returns {OrderQuote} An object containing the order size, index price, order fees, settlement reward cost, fill price and required margin (if provided).\n   */\n  public async getQuote({\n    size,\n    price,\n    marketIdOrName,\n    accountId = this.defaultAccountId,\n    settlementStrategyId = 0,\n    includeRequiredMargin = true,\n  }: GetPerpsQuote): Promise<OrderQuote> {\n    if (!accountId) throw new Error('No account Id!');\n\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n\n    const feedId = (await this.getMarket(resolvedMarketId)).feedId;\n    if (!feedId) throw new Error('Invalid feed id received from market data');\n\n    if (!price) {\n      price = await this.sdk.pyth.getFormattedPrice(feedId as Hex);\n      this.sdk.logger.info('Formatted price:', price);\n    }\n    const [orderFeesWithPriceResponse, settlementRewardCost, requiredMargin] = await Promise.all([\n      this.sdk.utils.callErc7412({\n        contractAddress: marketProxy.address,\n        abi: marketProxy.abi,\n        functionName: 'computeOrderFeesWithPrice',\n        args: [resolvedMarketId, convertEtherToWei(size), convertEtherToWei(price)],\n      }) as Promise<[bigint, bigint]>,\n      this.sdk.utils.callErc7412({\n        contractAddress: marketProxy.address,\n        abi: marketProxy.abi,\n        functionName: 'getSettlementRewardCost',\n        args: [resolvedMarketId, settlementStrategyId],\n      }) as Promise<bigint>,\n      includeRequiredMargin && accountId\n        ? (this.sdk.utils.callErc7412({\n            contractAddress: marketProxy.address,\n            abi: marketProxy.abi,\n            functionName: 'requiredMarginForOrderWithPrice',\n            args: [accountId, resolvedMarketId, convertEtherToWei(size), convertEtherToWei(price)],\n          }) as Promise<bigint>)\n        : 0n,\n    ]);\n    const orderQuote: OrderQuote = {\n      orderSize: size,\n      indexPrice: price,\n      orderFees: convertWeiToEther(orderFeesWithPriceResponse[0]),\n      settlementRewardCost: convertWeiToEther(settlementRewardCost),\n      fillPrice: convertWeiToEther(orderFeesWithPriceResponse[1]),\n    };\n\n    if (includeRequiredMargin && accountId) {\n      orderQuote.requiredMargin = convertWeiToEther(requiredMargin);\n    }\n    return orderQuote;\n  }\n\n  /**\n   * Returns the debt of the account id\n   * @param accountId The id of the account to get the debt for. If not provided, the default account is used.\n   * @returns debt Account debt in ether\n   */\n  public async getDebt(accountId = this.defaultAccountId): Promise<number> {\n    if (!accountId) throw new Error('No account id selected');\n    if (!this.isMulticollateralEnabled)\n      throw new Error(`Multicollateral is not enabled for chainId ${this.sdk.rpcConfig.chainId}`);\n\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const debt = (await this.sdk.utils.callErc7412({\n      contractAddress: marketProxy.address,\n      abi: marketProxy.abi,\n      functionName: 'debt',\n      args: [accountId],\n    })) as bigint;\n    this.sdk.logger.info('Account Debt: ', debt);\n    return convertWeiToEther(debt);\n  }\n\n  /**\n   * Fetch Position and related margin details from contracts\n   * @param accountId The id of the account to get the debt for\n   * @param marketIdOrName Market\n   * @param override override params for the call\n   * @returns Formatted values in decimal numbers for position and margin data\n   */\n  protected async _getPositionData(accountId: bigint, marketIdOrName: MarketIdOrName, override?: OverrideParamsRead) {\n    if (!accountId) throw new Error('Account ID is required');\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n\n    const functionNames: string[] = [];\n    const argsList: unknown[] = [];\n\n    // 0. Get available margin\n    functionNames.push('getAvailableMargin');\n    argsList.push([accountId]);\n\n    // 1. Get required margins\n    functionNames.push('getRequiredMargins');\n    argsList.push([accountId]);\n\n    // 2. Get position size\n    functionNames.push('getOpenPositionSize');\n    argsList.push([accountId, resolvedMarketId]);\n\n    // 3. Get market index price\n    functionNames.push('indexPrice');\n    argsList.push([resolvedMarketId]);\n\n    const multicallResponse: unknown[] = await this.sdk.utils.multicallMultifunctionErc7412(\n      {\n        contractAddress: marketProxy.address,\n        abi: marketProxy.abi,\n        functionNames,\n        args: argsList,\n      },\n      override,\n    );\n\n    const availableMargin = multicallResponse.at(0) as bigint;\n    const requiredMaintenanceMargin = (multicallResponse.at(1) as bigint[]).at(1) as bigint;\n    const requiredInitialMargin = (multicallResponse.at(1) as bigint[]).at(0) as bigint;\n    const positionSize = multicallResponse.at(2) as bigint;\n    const indexPrice = multicallResponse.at(3) as bigint;\n\n    return {\n      availableMargin: Number(formatUnits(availableMargin, DEFAULT_DECIMALS)),\n      requiredMaintenanceMargin: Number(formatUnits(requiredMaintenanceMargin, DEFAULT_DECIMALS)),\n      requiredInitialMargin: Number(formatUnits(requiredInitialMargin, DEFAULT_DECIMALS)),\n      positionSize: Number(formatUnits(positionSize, DEFAULT_DECIMALS)),\n      indexPrice: Number(formatUnits(indexPrice, DEFAULT_DECIMALS)),\n    };\n  }\n\n  /**\n   * Calculate the approximate liquidation price for an account with single position\n   * Provide either a ``marketId`` or a ``marketName``\n   * @param {string | number} marketIdOrName - The identifier or name of the market for which the collateral is being modified\n   * @param {bigint} accountId The id of the account to fetch the position for. If not provided, the default account is used.\n   * @returns {healthFactor: bigint, liquidationPrice: bigint}\n   * liquidation price = ((maintenance margin -  available margin) / position size) + index price\n   */\n  public async getApproxLiquidationPrice(\n    marketIdOrName: MarketIdOrName,\n    accountId = this.defaultAccountId,\n    override?: OverrideParamsRead,\n  ): Promise<{ healthFactor: number; liquidationPrice: number }> {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const { positionSize, availableMargin, requiredMaintenanceMargin, indexPrice } = await this._getPositionData(\n      accountId,\n      marketIdOrName,\n      override,\n    );\n\n    const healthFactor = (availableMargin * 100) / (requiredMaintenanceMargin + 1);\n\n    // For invalid position, return current market price\n    if (positionSize == 0) return { healthFactor, liquidationPrice: indexPrice };\n\n    const lossPerToken = Math.abs((requiredMaintenanceMargin - availableMargin) / positionSize);\n\n    let liquidationPrice;\n    if (positionSize > 0) {\n      liquidationPrice = indexPrice - lossPerToken;\n    } else {\n      liquidationPrice = indexPrice + lossPerToken;\n    }\n\n    return { healthFactor, liquidationPrice };\n  }\n\n  /**\n   * Calculate the health factor for an account\n   * @param {bigint} accountId The id of the account to calculate health factor.\n   * If not provided, the default account is used.\n   * @returns healthFactor percentage;\n   * @returns availableMargin Formatted available margin in USD;\n   * @returns requiredMaintenanceMargin Formatted required maintenance margin in USD\n   * healthFactor = (available margin * 100) / maintenance margin\n   */\n  public async getHealthFactor(\n    accountId = this.defaultAccountId,\n    override?: OverrideParamsRead,\n  ): Promise<{ healthFactor: number; availableMargin: number; requiredMaintenanceMargin: number }> {\n    if (!accountId) throw new Error('Account ID is required');\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const functionNames: string[] = [];\n    const argsList: unknown[] = [];\n\n    // 0. Get available margin\n    functionNames.push('getAvailableMargin');\n    argsList.push([accountId]);\n\n    // 1. Get required margins\n    functionNames.push('getRequiredMargins');\n    argsList.push([accountId]);\n\n    const multicallResponse: unknown[] = await this.sdk.utils.multicallMultifunctionErc7412(\n      {\n        contractAddress: marketProxy.address,\n        abi: marketProxy.abi,\n        functionNames,\n        args: argsList,\n      },\n      override,\n    );\n\n    // 0. Available Margin\n    const availableMargin = Number(formatUnits(multicallResponse.at(0) as bigint, DEFAULT_DECIMALS));\n\n    // 1. Required margin\n    // returns (uint256 requiredInitialMargin,uint256 requiredMaintenanceMargin,uint256 maxLiquidationReward)\n    const requiredMarginsResponse = multicallResponse.at(1) as bigint[];\n    const requiredMaintenanceMargin = Number(formatUnits(requiredMarginsResponse.at(1) as bigint, DEFAULT_DECIMALS));\n\n    const healthFactor = (availableMargin * 100) / (requiredMaintenanceMargin + 1);\n    return { healthFactor, availableMargin, requiredMaintenanceMargin };\n  }\n\n  /**\n   * Returns an array of supported collaterals for perps\n   * @returns Array of supported collateral ids;\n   */\n  public async getSupportedCollaterals(): Promise<SpotMarketData[]> {\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const response = (await marketProxy.read.getSupportedCollaterals()) as bigint[];\n    const supportedCollaterals: SpotMarketData[] = [];\n\n    response.forEach((collateralId) => {\n      const spotMarket = this.sdk.spot.marketsById.get(Number(collateralId));\n      if (spotMarket) {\n        supportedCollaterals.push(spotMarket);\n      }\n    });\n    return supportedCollaterals;\n  }\n\n  // === WRITE CALLS ===\n\n  /**\n   * @name buildCommitOrder\n   * @description Builds a commit order for a given size, settlement strategy ID, market ID or name, account ID (default to the defaultAccountId), desired fill price, and max price impact.\n   * @param {number} size - The size of the order in the base asset unit.\n   * @param {string|number} data.settlementStrategyId - The ID of the settlement strategy for the market.\n   * @param {string|number} data.marketIdOrName - The ID or name of the market to trade on.\n   * @param {string|undefined} data.accountId - The ID of the account for which the order is being built (default to defaultAccountId).\n   * @param {number|undefined} data.desiredFillPrice - The desired fill price for the order in the base asset unit.\n   * @param {number|undefined} data.maxPriceImpact - The maximum price impact for the order as a percentage of the market index price.\n   * @returns {Call3Value[]} An array containing the details of the transaction to be executed on the contract, including the target contract address, call data, value, and requireSuccess flag.\n   */\n  async buildCommitOrder({\n    size,\n    settlementStrategyId,\n    marketIdOrName,\n    accountId = this.defaultAccountId,\n    desiredFillPrice,\n    maxPriceImpact,\n  }: CommitOrder): Promise<Call3Value> {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    const { resolvedMarketId, resolvedMarketName: marketName } = await this.resolveMarket(marketIdOrName);\n    if (desiredFillPrice != undefined && maxPriceImpact != undefined) {\n      throw new Error('Cannot set both desiredFillPrice and maxPriceImpact');\n    }\n    const isShort = size < 0 ? -1 : 1;\n    const sizeInWei = (await this.sdk.perps.formatSize(Math.abs(size), resolvedMarketId)) * BigInt(isShort);\n    let acceptablePrice: number;\n    this.sdk.logger.info(\n      `Building order size ${sizeInWei} (${size}) to ${marketName} (id: ${resolvedMarketId}) for account ${accountId}`,\n    );\n    // If desired price is provided, use the provided price, else fetch price\n    if (desiredFillPrice) {\n      acceptablePrice = desiredFillPrice;\n    } else {\n      const updatedMaxPriceImpact = maxPriceImpact ?? this.sdk.maxPriceImpact;\n      const market = await this.getMarket(resolvedMarketId);\n      const priceImpact = 1 + (isShort * updatedMaxPriceImpact) / 100;\n      acceptablePrice = (market.indexPrice ?? 0) * priceImpact;\n    }\n\n    const txArgs = [\n      resolvedMarketId,\n      accountId,\n      sizeInWei,\n      settlementStrategyId,\n      convertEtherToWei(acceptablePrice),\n      this.sdk.trackingCode,\n      this.sdk.referrer,\n    ];\n\n    return {\n      target: perpsMarketProxy.address,\n      callData: encodeFunctionData({ abi: perpsMarketProxy.abi, functionName: 'commitOrder', args: [txArgs] }),\n      value: 0n,\n      requireSuccess: true,\n    };\n  }\n\n  /**\n   * @name commitOrder\n   * @description This function commits an order by building the necessary transactions and either executing them or returning them for later submission.\n   * @param {CommitOrder} data - The details of the order to be committed.\n   * @param {OverrideParamsWrite} [override] - Optional parameters to override default write settings, specifically whether to submit the transaction immediately (when `submit` is true). If not provided, the function will return the transaction object.\n   * @returns {WriteReturnType} - Returns either a transaction hash if `submit` is true, or the transaction object for later submission when `submit` is false.\n   */\n  public async commitOrder(data: CommitOrder, override: OverrideParamsWrite = {}): Promise<WriteReturnType> {\n    const builtTx = await this.buildCommitOrder(data);\n    const txs = [builtTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n  /**\n   * @name modifyCollateral\n   * @description This function modifies the collateral for a given market and account. It builds the necessary transaction, then writes it to the ERC7412 contract. If submit is not provided in the override object, it returns the built transaction object. Otherwise, it executes the transaction and logs the transaction hash.\n   * @param {string} data.amount - The amount of collateral to modify\n   * @param {string | number} data.marketIdOrName - The identifier or name of the market for which the collateral is being modified\n   * @param {string} data.accountId - The ID of the account (default is the defaultAccountId)\n   * @param {OverrideParamsWrite} [override] - An optional object that overrides the function behavior. If provided, submit must be truthy to execute the transaction and log the transaction hash.\n   * @returns {WriteReturnType} The built transaction object if override.submit is falsy, otherwise the transaction hash.\n   */\n  public async modifyCollateral(\n    { amount, collateralMarketIdOrName, accountId = this.defaultAccountId }: ModifyCollateral,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const modifyPerpsPermission = PERPS_PERMISSIONS.PERPS_MODIFY_COLLATERAL;\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n    console.log('=== collateralMarketIdOrName', collateralMarketIdOrName);\n\n    const { resolvedMarketId: spotCollateralId } = await this.sdk.spot.resolveMarket(collateralMarketIdOrName);\n    console.log('=== spotCollateralId', spotCollateralId);\n\n    const formattedAmount = amount > 0 ? await this.formatSize(amount, spotCollateralId) : 0n;\n\n    const synthCollateral = await this.sdk.spot.getMarket(spotCollateralId);\n    const collateral = await this.sdk.contracts.getCollateralInstance(\n      (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n    );\n\n    const processedTx = await this.buildModifyCollateral({\n      amount,\n      collateralMarketIdOrName,\n      accountId,\n    });\n\n    const grantPermissionTx = await this.buildGrantPermission({\n      accountId: accountId,\n      permission: modifyPerpsPermission,\n      user: zapContract,\n    });\n\n    const approveTx =\n      amount > 0\n        ? {\n            to: collateral.address,\n            data: encodeFunctionData({\n              abi: erc20Abi,\n              functionName: 'approve',\n              args: [zapContract, formattedAmount],\n            }),\n            value: '0',\n          }\n        : undefined;\n\n    const txs = [grantPermissionTx, processedTx];\n    const stateOverrideSpot = erc20StateOverrideBalanceAndAllowance({\n      token: collateral.address,\n      owner: this.sdk.accountAddress,\n      spender: zapContract,\n    });\n\n    return this.sdk.utils.processTransactions(txs, {\n      ...override,\n      stateOverride: [...stateOverrideSpot],\n      prepend: [\n        ...(approveTx ? [approveTx] : []),\n        // this.sdk.utils._fromCall3ToTransactionData(grantPermissionTx),\n        ...(override.prepend || []),\n      ],\n    });\n  }\n  /**\n   * @name payDebt\n   * @description This function is used to repay a debt on Perps market using the SDK. It takes an amount and accountId as parameters, and optionally accepts an override for write operations. If no amount is provided, it will first fetch the current debt of the given accountId.\n   * @param {number} data.amount - The amount to be repaid in Ether. Defaults to 0 if not provided.\n   * @param {string} data.accountId - The ID of the account whose debt is being repaid. If not provided, it defaults to the defaultAccountId of the SDK instance.\n   * @param {OverrideParamsWrite} override - An optional object for overriding parameters for write operations.\n   * @returns {Promise<ReturnWriteCall>} A promise that resolves to a transaction hash when the debt is successfully repaid.\n   */\n  public async payDebt(\n    { amount = 0, accountId = this.defaultAccountId }: PayDebt = { amount: 0 },\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Account ID is required');\n\n    if (!this.isMulticollateralEnabled) {\n      throw new Error(`Multicollateral is not enabled for chainId ${this.sdk.rpcConfig.chainId}`);\n    }\n\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    // `debt` and `payDebt` functions are only available for multicollateral perps\n    if (!amount) {\n      amount = await this.getDebt(accountId);\n    }\n\n    const rawTx: Call3Value = {\n      target: marketProxy.address,\n      callData: encodeFunctionData({\n        abi: marketProxy.abi,\n        functionName: 'payDebt',\n        args: [accountId, convertEtherToWei(amount)],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n    const txs = [rawTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n  /**\n   * Submit a liquidation for an account, or static call the liquidation function to fetch\n   * the liquidation reward. The static call is important for accounts which have been\n   * partially liquidated. Due to the throughput limit on liquidated value, the static call\n   * returning a nonzero value means more value can be liquidated (and rewards collected).\n   * This function can not be called if ``submit`` and ``staticCall`` are true.\n   * @param {bigint} accountId The id of the account to liquidate. If not provided, the default account is used.\n   * @param {OverrideParamsWrite} override - An optional object for overriding parameters for write operations.\n   */\n  public async liquidate(\n    accountId = this.defaultAccountId,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    // if (override.staticCall) {\n    //   const liquidationReward = (await this.sdk.utils.callErc7412({\n    //     contractAddress: marketProxy.address,\n    //     abi: marketProxy.abi,\n    //     functionName: 'liquidate',\n    //     args: [accountId],\n    //   })) as bigint;\n    //   return convertWeiToEther(liquidationReward);\n    // }\n    const rawTx: Call3Value = {\n      target: marketProxy.address,\n      callData: encodeFunctionData({\n        abi: marketProxy.abi,\n        functionName: 'liquidate',\n        args: [accountId],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    const txs = [rawTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n  /**\n   * @name settleOrderperps\n   * @description Settles an open order by executing the 'settleOrder' function on Perps Market Proxy contract.\n   * @param {bigint} accountId - The ID of the account associated with the order. Defaults to `this.defaultAccountId`.\n   * @param {OverrideParamsWrite} override - Optional override parameters for writing transactions (defaults to default values).\n   * @returns The transaction receipt if the order is successfully settled, otherwise throws an error.\n   */\n  public async settleOrder(\n    accountId = this.defaultAccountId,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const marketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const order = await this.getOrder(accountId);\n    const settlementStrategy = order.settlementStrategy;\n    const settlementTime = order.commitmentTime + (settlementStrategy?.settlementDelay ?? 0);\n    const expirationTime = order.commitmentTime + (settlementStrategy?.settlementWindowDuration ?? 0);\n    const currentTimestamp = Math.floor(Date.now() / 1000);\n\n    if (order.sizeDelta == 0) {\n      throw new Error(`Order is already settled for account ${accountId}`);\n    } else if (settlementTime > currentTimestamp) {\n      const duration = settlementTime - currentTimestamp;\n      this.sdk.logger.info(`Waiting ${duration} seconds to settle order`);\n      await sleep(duration);\n    } else if (expirationTime < currentTimestamp) {\n      throw new Error(`Order has expired for account ${accountId}`);\n    } else {\n      this.sdk.logger.info('Order is ready to be settled');\n    }\n\n    const settleTx: Call3Value = {\n      requireSuccess: true,\n      target: marketProxy.address,\n      callData: encodeFunctionData({\n        abi: marketProxy.abi,\n        functionName: 'settleOrder',\n        args: [accountId],\n      }),\n      value: 0n,\n    };\n    const txs = [settleTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n\n  /**\n   * @name buildCreateAccount\n   * @description This function builds the data for creating an account in the PerpsMarketProxy contract using the given accountId.\n   * @param {bigint} accountId - The optional accountId to be created. If not provided, a new account will be generated.\n   * @returns {Call3Value[]} - An array of Call3Value objects representing the target contract, call data, value, requireSuccess flag and other necessary details for executing the function in the blockchain.\n   */\n  async buildCreateAccount(accountId?: bigint): Promise<Call3Value> {\n    const txArgs = [];\n    if (accountId != undefined) {\n      txArgs.push(accountId);\n    }\n    const perpsMarketProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    return {\n      target: perpsMarketProxy.address,\n      callData: encodeFunctionData({\n        abi: perpsMarketProxy.abi,\n        functionName: 'createAccount',\n        args: txArgs,\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n  }\n\n  /**\n   * @ame createAccount\n   * @description Creates a new account and returns either the transaction hash or the transaction parameters. If `submit` is provided in `override`, the transaction will be submitted and the transaction hash will be returned. Otherwise, the transaction parameters will be returned.\n   * @param {bigint | undefined} accountId - The ID of the account to create (optional)\n   * @param {OverrideParamsWrite} override - Options for submitting or returning the transaction parameters\n   * @returns {WriteReturnType} - If `submit` is provided in `override`, a string representing the transaction hash. Otherwise, an object containing the transaction parameters as defined by the CallParameters type.\n   */\n  public async createAccount(\n    accountId?: bigint,\n    override: Omit<OverrideParamsWrite, 'useOracleCalls'> = {},\n  ): Promise<WriteReturnType> {\n    const processedTx = await this.buildCreateAccount(accountId);\n    const txs = [processedTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n\n  /*\n   * @name _createAccountAndDeposit\n   * @ description create a synthetix account and then deposits fund\n   * */\n  protected async _createAccountAndDeposit({\n    amount,\n    collateralMarketIdOrName,\n    accountId: _accountId,\n  }: ModifyCollateral) {\n    const accountId = _accountId || generateRandomAccountId();\n\n    const { resolvedMarketId: spotCollateralId } = await this.sdk.spot.resolveMarket(collateralMarketIdOrName);\n    const formattedSize = await this.formatSize(amount, spotCollateralId);\n\n    const synthCollateral = await this.sdk.spot.getMarket(spotCollateralId);\n\n    // Remove Synthetix asset's `s` from market name.\n    // For example, remove `s` from `sUSDe` to get `USDe`\n    const collateral = await this.sdk.contracts.getCollateralInstance(\n      (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n    );\n\n    const data = encodeFunctionData({\n      abi: SYNTHETIX_ZAP_ABI,\n      functionName: 'createAccountAndDeposit',\n      args: [accountId, collateral.address, synthCollateral.contractAddress, formattedSize, spotCollateralId],\n    });\n\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n\n    return [\n      {\n        target: zapContract,\n        callData: data,\n        value: 0n,\n        requireSuccess: true,\n      },\n    ];\n  }\n\n  protected async _createAccountDepositAndCommit({\n    amount,\n    collateralMarketIdOrName,\n    accountId: _accountId,\n    order: rawOrder,\n  }: CreateAccountDepositAndCreateOrder) {\n    const accountId = _accountId || generateRandomAccountId();\n\n    const { resolvedMarketId: spotCollateralId } = await this.sdk.spot.resolveMarket(collateralMarketIdOrName);\n    const { resolvedMarketId: perpsMarketId } = await this.resolveMarket(rawOrder.marketIdOrName);\n    const formattedCollateral = await this.formatSize(amount, spotCollateralId);\n\n    const synthCollateral = await this.sdk.spot.getMarket(spotCollateralId);\n\n    // Remove Synthetix asset's `s` from market name.\n    // For example, remove `s` from `sUSDe` to get `USDe`\n    const collateral = await this.sdk.contracts.getCollateralInstance(\n      (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n    );\n\n    const isShort = rawOrder.size < 0 ? -1 : 1;\n\n    const order = {\n      marketId: perpsMarketId,\n      sizeDelta: (await this.formatSize(Math.abs(rawOrder.size), perpsMarketId)) * BigInt(isShort),\n      settlementStrategyId: rawOrder.settlementStrategyId || 0,\n      acceptablePrice: convertEtherToWei(rawOrder.acceptablePrice),\n      trackingCode: rawOrder.trackingCode,\n      referrer: rawOrder.referrer,\n    };\n\n    const data = encodeFunctionData({\n      abi: SYNTHETIX_ZAP_ABI,\n      functionName: 'createAccountDepositAndCommit',\n      args: [\n        accountId,\n        collateral.address,\n        synthCollateral.contractAddress,\n        formattedCollateral,\n        spotCollateralId,\n        order,\n      ],\n    });\n\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n\n    return [\n      {\n        target: zapContract,\n        callData: data,\n        value: 0n,\n        requireSuccess: true,\n      },\n    ];\n  }\n\n  public async createAccountAndDeposit(data: CreateAccountAndDeposit, override: OverrideParamsWrite = {}) {\n    const txs = await this._createAccountAndDeposit(data);\n    const { resolvedMarketId: spotCollateralId } = await this.sdk.spot.resolveMarket(data.collateralMarketIdOrName);\n    const synthCollateral = await this.sdk.spot.getMarket(spotCollateralId);\n    const formattedSize = await this.formatSize(data.amount, spotCollateralId);\n\n    const collateral = await this.sdk.contracts.getCollateralInstance(\n      (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n    );\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n\n    const stateOverrideZap = erc20StateOverrideBalanceAndAllowance({\n      token: collateral.address,\n      owner: this.sdk.accountAddress,\n      spender: zapContract,\n    });\n\n    const approveTx = {\n      target: collateral.address,\n      callData: encodeFunctionData({\n        abi: erc20Abi,\n        functionName: 'approve',\n        args: [zapContract, formattedSize],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    return this.sdk.utils.processTransactions(txs, {\n      ...override,\n      stateOverride: [...stateOverrideZap],\n      prepend: [this.sdk.utils._fromCallDataToTransactionData(approveTx)],\n    });\n  }\n\n  protected async _createAccountAndDepositMany({\n    tokens,\n    sTokens,\n    amounts,\n    collateralIds,\n    accountId: _accountId,\n  }: {\n    tokens: string[];\n    sTokens: string[];\n    amounts: bigint[];\n    collateralIds: MarketIdOrName[];\n    accountId?: bigint;\n  }) {\n    const accountId = _accountId || generateRandomAccountId();\n\n    const data = encodeFunctionData({\n      abi: SYNTHETIX_ZAP_ABI,\n      functionName: 'createAccountAndDeposits',\n      args: [accountId, tokens, sTokens, amounts, collateralIds],\n    });\n\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n\n    return [\n      {\n        target: zapContract,\n        callData: data,\n        value: 0n,\n        requireSuccess: true,\n      },\n    ];\n  }\n\n  public async createAccountAndDepositMany(data: CreateAccountAndDepositMany, override: OverrideParamsWrite = {}) {\n    const collateralsPromise = data.collateralMarketIdOrNames.map(async (collateralId) => {\n      const { resolvedMarketId } = await this.sdk.spot.resolveMarket(collateralId);\n      const synthCollateral = await this.sdk.spot.getMarket(resolvedMarketId);\n\n      const collateral = await this.sdk.contracts.getCollateralInstance(\n        (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n      );\n\n      return {\n        synthCollateral,\n        collateral,\n        resolvedMarketId,\n      };\n    });\n\n    const collaterals = await Promise.all(collateralsPromise);\n\n    const formattedAmountsPromise = data.amounts.map(async (amount, index) => {\n      return await this.formatSize(amount, collaterals[index].resolvedMarketId);\n    });\n    const formattedAmounts = await Promise.all(formattedAmountsPromise);\n\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n\n    const stateOverrideZap = collaterals.map((collateral) =>\n      erc20StateOverrideBalanceAndAllowance({\n        token: collateral.collateral.address,\n        owner: this.sdk.accountAddress,\n        spender: zapContract,\n      }),\n    );\n\n    const approveTxs = collaterals.map((collateral, index) => ({\n      to: collateral.collateral.address,\n      data: encodeFunctionData({\n        abi: erc20Abi,\n        functionName: 'approve',\n        args: [zapContract, formattedAmounts[index]],\n      }),\n      value: '0',\n    }));\n    console.log('=== approveTxs', approveTxs);\n\n    const txs = await this._createAccountAndDepositMany({\n      tokens: collaterals.map((collateral) => collateral.collateral.address),\n      sTokens: collaterals.map((collateral) => collateral.synthCollateral.contractAddress),\n      amounts: formattedAmounts,\n      collateralIds: data.collateralMarketIdOrNames,\n      accountId: data.accountId,\n    });\n\n    return this.sdk.utils.processTransactions(txs, {\n      ...override,\n      stateOverride: [...stateOverrideZap].flat(),\n      prepend: approveTxs,\n    });\n  }\n\n  /**\n   * @name createIsolatedAccountOrder\n   * @description Creates an isolated account order for a given market, adding the specified collateral and creating the order.\n   * @param {CreateIsolateOrder} params - The parameters to create an isolated account order.\n   * @param {OverrideParamsWrite} override - Optional override parameters for writing transactions (defaults to default values).\n   * @returns An array of CallParameters if multi-call is not used, or the transaction hash if it is submitted.\n   */\n  public async createIsolatedAccountOrder(\n    {\n      collateralAmount,\n      size,\n      marketIdOrName,\n      settlementStrategyId = 0,\n      accountId = generateRandomAccountId(),\n      desiredFillPrice,\n      maxPriceImpact,\n      collateralMarketId,\n    }: CreateIsolateOrder,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    const { resolvedMarketId: spotCollateralId } = await this.sdk.spot.resolveMarket(collateralMarketId);\n\n    const synthCollateral = await this.sdk.spot.getMarket(spotCollateralId);\n\n    // Remove Synthetix asset's `s` from market name.\n    // For example, remove `s` from `sUSDe` to get `USDe`\n    const collateral = await this.sdk.contracts.getCollateralInstance(\n      (synthCollateral.marketName ?? 'Unresolved Market').replace('s', ''),\n    );\n    const zapContract = SYNTHETIX_ZAP[this.sdk.rpcConfig.chainId];\n\n    const approveTx = {\n      to: collateral.address,\n      data: encodeFunctionData({\n        abi: erc20Abi,\n        functionName: 'approve',\n        args: [zapContract, await this.formatSize(collateralAmount, spotCollateralId)],\n      }),\n\n      value: '0',\n    };\n\n    let acceptablePrice = desiredFillPrice;\n\n    if (!acceptablePrice) {\n      const isShort = size < 0 ? -1 : 1;\n      const { resolvedMarketId } = await this.sdk.spot.resolveMarket(marketIdOrName);\n      const updatedMaxPriceImpact = maxPriceImpact ?? this.sdk.maxPriceImpact;\n      const market = await this.getMarket(resolvedMarketId);\n      const priceImpact = 1 + (isShort * updatedMaxPriceImpact) / 100;\n      acceptablePrice = (market.indexPrice ?? 0) * priceImpact;\n    }\n\n    // 1. create and deposit\n    const createAndDepositTx = await this._createAccountDepositAndCommit({\n      amount: collateralAmount,\n      collateralMarketIdOrName: spotCollateralId,\n      accountId,\n      order: {\n        size,\n        settlementStrategyId,\n        marketIdOrName,\n        acceptablePrice,\n        trackingCode: this.sdk.trackingCode,\n        referrer: this.sdk.referrer,\n      },\n    });\n\n    const rawTxs = [...createAndDepositTx].flat();\n\n    const stateOverrideSpot = erc20StateOverrideBalanceAndAllowance({\n      token: collateral.address,\n      owner: this.sdk.accountAddress,\n      spender: zapContract,\n    });\n\n    return this.sdk.utils.processTransactions(rawTxs, {\n      ...override,\n      prepend: [approveTx, ...(override?.prepend ? override.prepend : [])],\n      stateOverride: [...stateOverrideSpot],\n    });\n  }\n\n  async buildGrantPermission({ accountId, permission, user }: GrantPermission): Promise<Call3Value> {\n    const coreProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const grantPermissionTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'grantPermission',\n        args: [accountId, permission, user],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    return grantPermissionTx;\n  }\n\n  /*\n   * @notice Grant a permission to a user for a specific account\n   * @param accountId Account ID\n   * @param permission Permission to grant\n   * @param user Address of the user to grant permission to\n   * @param override Override parameters\n   * */\n\n  public async grantPermission(\n    { accountId = this.defaultAccountId, permission, user }: GrantPermission,\n    override: Omit<OverrideParamsWrite, 'useOracleCalls'> = {},\n  ) {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const grantPermissionTx = await this.buildGrantPermission({ accountId, permission, user });\n\n    const txs = [grantPermissionTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override, useOracleCalls: false });\n  }\n\n  /*\n   * @notice Revoke a permission from a user for a specific account\n   * @param accountId Account ID\n   * @param permission Permission to revoke\n   * @param user Address of the user to revoke permission from\n   * @param override Override parameters\n   * */\n\n  public async revokePermission(\n    { accountId = this.defaultAccountId, permission, user }: GrantPermission,\n    override: Omit<OverrideParamsWrite, 'useOracleCalls'> = {},\n  ) {\n    if (!accountId) throw new Error('Account ID is required');\n\n    const coreProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n\n    const grantPermissionTx: Call3Value = {\n      target: coreProxy.address,\n      callData: encodeFunctionData({\n        abi: coreProxy.abi,\n        functionName: 'revokePermission',\n        args: [accountId, permission, user],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    const txs = [grantPermissionTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override, useOracleCalls: false });\n  }\n\n  /*\n   * @notice Get account permissions\n   * @param accountId Account ID\n   * @param override Override parameters\n   * */\n\n  public async getAccountPermissions({ accountId = this.defaultAccountId }: GetPermissions) {\n    if (!accountId) throw new Error('Account ID is required to get permission');\n\n    const coreProxy = await this.sdk.contracts.getPerpsMarketProxyInstance();\n    return (await coreProxy.read.getAccountPermissions([accountId])) as AccountPermissions[];\n  }\n\n  public async payDebtAndWithdraw(params: PayDebtAndWithdraw, override: OverrideParamsWrite) {\n    const zapInstance = await this.sdk.contracts.getZapInstance();\n    const modifyPerpsPermission = PERPS_PERMISSIONS.PERPS_MODIFY_COLLATERAL;\n    const { resolvedMarketId } = await this.sdk.spot.resolveMarket(params.collateralIdOrName);\n\n    const grantPermissionTx = await this.buildGrantPermission({\n      accountId: params.accountId,\n      permission: modifyPerpsPermission,\n      user: zapInstance.address,\n    });\n\n    const amount = await this.formatSize(params.collateralAmount, 18);\n\n    const swapMaxAmountIn = amount;\n\n    const minAmount = await this.formatSize(params.minToReceive, resolvedMarketId);\n\n    params.path =\n      params.path ??\n      (\n        await getOdosPath({\n          fromToken: params.collateral,\n          fromChain: this.sdk.rpcConfig.chainId,\n          toToken: (await this.sdk.contracts.getCollateralInstance('USDC')).address,\n          fromAmount: amount.toString(),\n        })\n      ).path;\n\n    const unwindTx = {\n      target: zapInstance.address,\n      callData: encodeFunctionData({\n        abi: zapInstance.abi,\n        functionName: 'unwind',\n        args: [\n          params.accountId,\n          resolvedMarketId,\n          amount,\n          params.collateral,\n          params.path,\n          minAmount,\n          minAmount,\n          swapMaxAmountIn,\n          params.receiver,\n        ],\n      }),\n      requireSuccess: true,\n      value: 0n,\n    } as Call3Value;\n    const txs = [grantPermissionTx, unwindTx];\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n}\n","import { encodeAbiParameters, Hex, parseUnits } from 'viem';\nimport { SynthetixSdk } from '..';\nimport { CUSTOM_DECIMALS, DISABLED_MARKETS } from '../constants';\nimport { MarketIdOrName } from '../interface/commonTypes';\nimport { MarketData, SpotMarketData } from '../perps/interface';\nimport { Call3Value } from '../interface/contractTypes';\n\nexport abstract class Market<T extends MarketData | SpotMarketData> {\n  sdk: SynthetixSdk;\n  marketsById: Map<number, T>;\n  marketsByName: Map<string, T>;\n\n  // Mapping of Market Symbol to T.\n  // @note Ideally prefer using market symbol over market name\n  marketsBySymbol: Map<string, T>;\n  disabledMarkets: number[] = [];\n\n  constructor(synthetixSdk: SynthetixSdk) {\n    this.sdk = synthetixSdk;\n    // Initialize empty market data\n    this.marketsById = new Map<number, T>();\n    this.marketsByName = new Map<string, T>();\n    this.marketsBySymbol = new Map<string, T>();\n\n    // Set disabled markets\n    if (synthetixSdk.rpcConfig.chainId in DISABLED_MARKETS) {\n      this.disabledMarkets = DISABLED_MARKETS[synthetixSdk.rpcConfig.chainId];\n    }\n  }\n  /**\n   * Look up the market_id and market_name for a market. If only one is provided,\n   * the other is resolved. If both are provided, they are checked for consistency.\n   * @param marketIdOrName Id or name of the market to resolve\n   */\n  public async resolveMarket(\n    marketIdOrName: MarketIdOrName,\n  ): Promise<{ resolvedMarketId: number; resolvedMarketName: string }> {\n    // Do not resolve markets if flag is not set or if market name is passed as\n    // an argument\n    if (!this.sdk.resolveMarketNames && typeof marketIdOrName === 'number') {\n      console.log('Resolve markets set to false. Returning market id without validating...');\n      return { resolvedMarketName: 'Unresolved Market', resolvedMarketId: Number(marketIdOrName) };\n    }\n\n    const market = await this.getMarket(marketIdOrName);\n    if (!market?.marketName || market?.marketId === undefined)\n      throw new Error(`Market not found for ${marketIdOrName}`);\n\n    return { resolvedMarketName: market.marketName, resolvedMarketId: market.marketId };\n  }\n\n  /**\n   * Format the size of a synth for an order. This is used for synths whose base asset\n   * does not use 18 decimals. For example, USDC uses 6 decimals, so we need to handle size\n   * differently from other assets.\n   * @param size The size as an ether value (e.g. 100).\n   * @param marketId The id of the market.\n   * @returns The formatted size in wei. (e.g. 100 = 100000000000000000000)\n   */\n  public async formatSize(size: number, marketId: MarketIdOrName) {\n    // TODO: think in a better solution maybe get the collateral and query the decimals from the contract\n\n    return parseUnits(size.toString(), CUSTOM_DECIMALS[this.sdk.rpcConfig.chainId][marketId] || 18);\n  }\n\n  async prepareOracleCallsWithPriceId(priceFeedIds: string[]): Promise<Call3Value[]> {\n    if (!priceFeedIds.length) {\n      return [];\n    }\n    const stalenessTolerance = 30n; // 30 seconds\n    const updateData = await this.sdk.pyth.getPriceFeedsUpdateData(priceFeedIds as Hex[]);\n\n    const signedRequiredData = encodeAbiParameters(\n      [\n        { type: 'uint8', name: 'updateType' },\n        { type: 'uint64', name: 'stalenessTolerance' },\n        { type: 'bytes32[]', name: 'priceIds' },\n        { type: 'bytes[]', name: 'updateData' },\n      ],\n      [1, stalenessTolerance, priceFeedIds as Hex[], updateData],\n    );\n\n    const pythWrapper = await this.sdk.contracts.getPythErc7412WrapperInstance();\n    const dataVerificationTx = this.sdk.utils.generateDataVerificationTx(pythWrapper.address, signedRequiredData);\n\n    // set `requireSuccess` to false in this case, since sometimes\n    // the wrapper will return an error if the price has already been updated\n\n    // @note A better approach would be to fetch the priceUpdateFee for tx dynamically\n    // from the Pyth contract instead of using arbitrary values for pyth price update fees\n    return [{ ...dataVerificationTx, value: 0n, requireSuccess: false }];\n  }\n\n  /**\n   *   Prepare a call to the external node with oracle updates for the specified market names.\n   * The result can be passed as the first argument to a multicall function to improve performance\n   * of ERC-7412 calls. If no market names are provided, all markets are fetched. This is useful for\n   * read functions since the user does not pay gas for those oracle calls, and reduces RPC calls and\n   * runtime.\n   * @param {number[]} marketIds An array of market ids to fetch prices for. If not provided, all markets are fetched\n   * @returns {Promise<Call3Value[]>} objects representing the target contract, call data, value, requireSuccess flag and other necessary details for executing the function in the blockchain.\n   */\n  public async prepareOracleCall(marketIds: number[] = []): Promise<Call3Value[]> {\n    let priceFeedIds: string[] = [];\n\n    if (marketIds.length != 0) {\n      const marketSymbols: string[] = [];\n      marketIds.forEach((marketId) => {\n        const marketSymbol = this.marketsById.get(marketId)?.symbol;\n        if (!marketSymbol) return;\n        marketSymbols.push(marketSymbol);\n      });\n\n      marketSymbols.forEach((marketSymbol) => {\n        const feedId = this.sdk.pyth.priceFeedIds.get(marketSymbol);\n        if (!feedId) return;\n        priceFeedIds.push(feedId);\n      });\n    } else {\n      priceFeedIds = Array.from(this.sdk.pyth.priceFeedIds.values());\n    }\n\n    return this.prepareOracleCallsWithPriceId(priceFeedIds);\n  }\n\n  public async getMarket(marketIdOrName: MarketIdOrName): Promise<T> {\n    throw new Error('Method not implemented. ' + marketIdOrName);\n  }\n}\n","import { keccak256, encodeAbiParameters, toHex, Address, StateMapping } from 'viem';\nimport { tokensSlots } from '../constants/slots';\n\nexport type Erc20BalanceOverrideParameters = {\n  token: string;\n  owner: string;\n  slot: bigint;\n  balance?: bigint;\n};\n\nexport function erc20BalanceOverride({\n  token,\n  owner,\n  slot,\n  balance = BigInt('0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'),\n}: Erc20BalanceOverrideParameters): { address: Address; stateDiff: StateMapping }[] {\n  const smartAccountErc20BalanceSlot = keccak256(\n    encodeAbiParameters(\n      [\n        {\n          type: 'address',\n        },\n        {\n          type: 'uint256',\n        },\n      ],\n      [owner as Address, slot],\n    ),\n  );\n\n  return [\n    {\n      address: token as Address,\n      stateDiff: [\n        {\n          slot: smartAccountErc20BalanceSlot,\n          value: toHex(balance),\n        },\n      ],\n    },\n  ];\n}\n\nexport type Erc20AllowanceOverrideParameters = {\n  token: string;\n  owner: string;\n  spender: string;\n  slot: bigint;\n  amount?: bigint;\n};\n\nexport function erc20AllowanceOverride({\n  token,\n  owner,\n  spender,\n  slot,\n  amount = BigInt('0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'),\n}: Erc20AllowanceOverrideParameters): { address: Address; stateDiff: StateMapping }[] {\n  const smartAccountErc20AllowanceSlot = keccak256(\n    encodeAbiParameters(\n      [\n        {\n          type: 'address',\n        },\n        {\n          type: 'bytes32',\n        },\n      ],\n      [\n        spender as Address,\n        keccak256(\n          encodeAbiParameters(\n            [\n              {\n                type: 'address',\n              },\n              {\n                type: 'uint256',\n              },\n            ],\n            [owner as Address, BigInt(slot)],\n          ),\n        ),\n      ],\n    ),\n  );\n\n  return [\n    {\n      address: token as Address,\n      stateDiff: [\n        {\n          slot: smartAccountErc20AllowanceSlot,\n          value: toHex(amount),\n        },\n      ],\n    },\n  ];\n}\nexport const erc20StateOverrideBalanceAndAllowance = ({\n  token,\n  owner,\n  balance = BigInt('0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'),\n  spender,\n}: {\n  token: string;\n  owner: string;\n  balance?: bigint;\n  spender: string;\n}) => {\n  const balanceSlot = tokensSlots.find((slotData) => slotData.address.toLowerCase() === token.toLowerCase());\n\n  if (!balanceSlot) throw new Error('No balance slot');\n\n  const balanceOverride = erc20BalanceOverride({ balance, slot: BigInt(balanceSlot.balanceSlot), token, owner });\n  const approveOverride = erc20AllowanceOverride({\n    spender,\n    amount: balance,\n    token,\n    slot: BigInt(balanceSlot.approveSlot),\n    owner,\n  });\n\n  return [...balanceOverride, ...approveOverride];\n};\n","export const tokensSlots = [\n  { address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', balanceSlot: 9, approveSlot: 10 },\n  { address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', balanceSlot: 9, approveSlot: 10 },\n  { address: '0x4EA71A20e655794051D1eE8b6e4A3269B13ccaCc', balanceSlot: 5, approveSlot: 6 },\n  { address: '0x4EA71A20e655794051D1eE8b6e4A3269B13ccaCc', balanceSlot: 5, approveSlot: 6 },\n  { address: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', balanceSlot: 9, approveSlot: 10 },\n  { address: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', balanceSlot: 9, approveSlot: 10 },\n  { address: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22', balanceSlot: 51, approveSlot: 52 },\n  { address: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22', balanceSlot: 51, approveSlot: 52 },\n  { address: '0x4200000000000000000000000000000000000006', balanceSlot: 3, approveSlot: 4 },\n  { address: '0x4200000000000000000000000000000000000006', balanceSlot: 3, approveSlot: 4 },\n  { address: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452', balanceSlot: 1, approveSlot: 2 },\n  { address: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452', balanceSlot: 1, approveSlot: 2 },\n\n  {\n    address: '0xc43708f8987Df3f3681801e5e640667D86Ce3C30',\n    balanceSlot: 0,\n    approveSlot: 1,\n  },\n  {\n    address: '0x8608d511E224180051A36d34121725D978064e6E',\n    balanceSlot: 0,\n    approveSlot: 1,\n  },\n  {\n    address: '0x4200000000000000000000000000000000000006',\n    balanceSlot: 3,\n    approveSlot: 4,\n  },\n  {\n    address: '0xB3f05d39504dA95876EA0174D25Ae51Ac2422a70',\n    balanceSlot: 0,\n    approveSlot: 1,\n  },\n  {\n    address: '0x00ab6b818652bB3bFE334983171edFD38184DbeD',\n    balanceSlot: 0,\n    approveSlot: 1,\n  },\n  {\n    address: '0x7Bf65af7EFBd0E933fb87dD2C9cE7A17d959b822',\n    balanceSlot: 0,\n    approveSlot: 1,\n  },\n];\n","import { Address, ContractFunctionParameters, encodeFunctionData, erc20Abi, getContract, Hex, maxUint256 } from 'viem';\nimport { SynthetixSdk } from '..';\nimport { SpotMarketData } from '../perps/interface';\nimport { ZERO_ADDRESS } from '../constants';\nimport { convertEtherToWei, convertWeiToEther, sleep } from '../utils';\nimport { SpotSettlementStrategy, SpotOrder, Side } from './interface';\nimport {\n  Approve,\n  AtomicOrder,\n  CommitOrderSpot,\n  GetOrder,\n  GetSettlementStrategies,\n  GetSettlementStrategy,\n  SettlementStrategyResponse,\n  SettleOrder,\n  Wrap,\n} from '../interface/Spot';\nimport { Market } from '../utils/market';\nimport { MarketIdOrName, OverrideParamsWrite, WriteReturnType } from '../interface/commonTypes';\nimport { Call3Value } from '../interface/contractTypes';\n\n/**\n * Class for interacting with Synthetix V3 spot market contracts.\n * Provider methods for wrapping and unwrapping assets, approvals, atomic orders, and async orders.\n * Use ``get`` methods to fetch information about balances, allowances, and markets\n * const { marketsById, marketsByName } = await sdk.perps.getMarkets();\n *\n * Other methods prepare transactions, and submit them to your RPC.\n * An instance of this module is available as ``sdk.spot``. If you are using a network without\n * spot contracts deployed, the contracts will be unavailable and the methods will raise an error.\n * The following contracts are required:\n * - SpotMarketProxy\n */\nexport class Spot extends Market<SpotMarketData> {\n  sdk: SynthetixSdk;\n  defaultAccountId?: bigint;\n  accountIds: bigint[];\n\n  asyncOrderEnabled: boolean = false;\n  disabledMarkets: number[] = [];\n\n  constructor(synthetixSdk: SynthetixSdk) {\n    super(synthetixSdk);\n    this.sdk = synthetixSdk;\n    this.accountIds = [];\n\n    if (synthetixSdk.rpcConfig.chainId == 42161 || synthetixSdk.rpcConfig.chainId == 421614) {\n      this.asyncOrderEnabled = true;\n    }\n  }\n\n  async initSpot() {\n    await this.getMarkets();\n  }\n\n  public async getMarket(marketIdOrName: MarketIdOrName): Promise<SpotMarketData> {\n    const market = this.marketsById.get(Number(marketIdOrName)) ?? this.marketsByName.get(marketIdOrName as string);\n    if (!market) {\n      this.sdk.logger.warn(`Spot market ${marketIdOrName} not available. Available markets: ${this.marketsById}`);\n      throw new Error(`Invalid market id or name: ${marketIdOrName}`);\n    }\n\n    return market;\n  }\n\n  /**\n   * Fetches contracts and metadata about all spot markets on the network. This includes\n   * the market id, synth name, contract address, and the underlying synth contract. Each\n   * synth is an ERC20 token, so these contracts can be used for transfers and allowances.\n   * The metadata is also used to simplify interactions in the SDK by mapping market ids\n   * and names to their metadata\n   * For example:\n   *    sdk.spot.wrap(100, market_name='sUSDC', submit=True)\n   * This will look up the market id for the sUSDC market and use that to wrap 100 USDC into sUSDC.\n   * The market metadata is returned from the method as a mapping object of two dictionaries/records.\n   * The first is keyed by ``marketsById`` and the second is keyed by ``marketsByName``\n   * For example: sdk.spot.marketsByName\n   * Response: {\n      'sUSD' => {\n        marketId: 0,\n        marketName: 'sUSD',\n        contractAddress: '0x682f0d17feDC62b2a0B91f8992243Bf44cAfeaaE'\n      },\n\n   * Example:  sdk.spot.marketsById\n   * Response: {\n      0 => {\n        marketId: 0,\n        marketName: 'sUSD',\n        contractAddress: '0x682f0d17feDC62b2a0B91f8992243Bf44cAfeaaE'\n      },...\n   */\n  public async getMarkets(): Promise<{\n    marketsById: Map<number, SpotMarketData>;\n    marketsByName: Map<string, SpotMarketData>;\n  }> {\n    // Initialize markets with defaults\n    const usdProxy = await this.sdk.contracts.getUSDProxyInstance();\n    this.marketsById.set(0, {\n      marketId: 0,\n      marketName: 'sUSD',\n      symbol: 'sUSD',\n      contractAddress: usdProxy.address,\n    });\n\n    this.marketsByName.set('sUSD', {\n      marketId: 0,\n      marketName: 'sUSD',\n      symbol: 'sUSD',\n      contractAddress: usdProxy.address,\n    });\n\n    const spotProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n    const finalSynths: SpotMarketData[] = [];\n\n    // Iterate through all the market IDs until ADDRESS_ZERO is returned\n    const MAX_MARKETS = 100;\n    const ITEMS_PER_ITER = 5;\n\n    for (let index = 0; index < MAX_MARKETS; index += ITEMS_PER_ITER) {\n      const argsList = Array.from({ length: ITEMS_PER_ITER }, (_, i) => index + i);\n      const synthAddresses = (await this.sdk.utils.multicallErc7412({\n        contractAddress: spotProxy.address,\n        abi: spotProxy.abi,\n        functionName: 'getSynth',\n        args: argsList,\n      })) as Address[];\n\n      synthAddresses.forEach((synthAddress, idx) => {\n        // Filter disabled and invalid markets\n        const isMarketDisabled = this.disabledMarkets.includes(argsList[idx]);\n        if (synthAddress != ZERO_ADDRESS && !isMarketDisabled) {\n          finalSynths.push({\n            marketId: argsList[idx],\n            contractAddress: synthAddress,\n          });\n        }\n      });\n\n      // Do not query additional markets if the last fetched market was zero address\n      if (synthAddresses.at(-1) == ZERO_ADDRESS) {\n        break;\n      }\n    }\n\n    let settlementStrategies: SpotSettlementStrategy[];\n    if (this.asyncOrderEnabled) {\n      // const marketIds = Array.from(finalSynths.keys());\n      // Get settlement strategies\n      // settlementStrategies = await this.getSettlementStrategies(0, marketIds);\n    } else {\n      this.sdk.logger.info('Async orders not enabled on network ', this.sdk.rpcConfig.chainId);\n    }\n\n    // Query ERC20 contract for market details for each synth\n    const multicallInputs: ContractFunctionParameters[] = [];\n    finalSynths.forEach((synth) => {\n      multicallInputs.push({\n        address: synth.contractAddress as Address,\n        abi: erc20Abi,\n        functionName: 'symbol',\n      });\n    });\n\n    const synthSymbols = await this.sdk.publicClient.multicall({\n      contracts: multicallInputs,\n    });\n\n    finalSynths.forEach((synth, idx) => {\n      if (synthSymbols.at(idx)?.status == 'success') {\n        const name = synthSymbols.at(idx)?.result as string;\n        synth.marketName = name;\n        synth.symbol = name.slice(1); // Example: Remove initial character 's' from sETH.\n      }\n    });\n\n    // Populate the final market objects\n    finalSynths.forEach((synth) => {\n      if (settlementStrategies != undefined && settlementStrategies.length > 0) {\n        const strategy = settlementStrategies.find((strategy) => strategy.marketId == synth.marketId);\n        synth.settlementStrategy = strategy;\n      }\n      this.marketsById.set(synth.marketId, synth);\n      this.marketsByName.set(synth.marketName ?? 'INVALID', synth);\n    });\n\n    return { marketsById: this.marketsById, marketsByName: this.marketsByName };\n  }\n\n  /**\n   * @name getSynthContract\n   * @description This function retrieves the Synth contract for a given market based on its ID or name. It returns the Synth contract instance.\n   * @param {MarketIdOrName} marketIdOrName - The unique identifier or name of the market.\n   * @returns {Contract<Synth>} - An instance of the Synth contract associated with the provided market.\n   */\n  public async getSynthContract(marketIdOrName: MarketIdOrName) {\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n\n    const contractAddress = this.marketsById.get(resolvedMarketId)?.contractAddress;\n    if (contractAddress == undefined) {\n      throw new Error('Invalid market - contractAddress');\n    }\n\n    const synthContract = getContract({\n      address: contractAddress as Hex,\n      abi: erc20Abi,\n      client: this.sdk.publicClient,\n    });\n    return synthContract;\n  }\n\n  /**\n   * Get the balance of a spot synth. Provide either a ``marketId`` or ``marketName``\n   * to choose the synth.\n   * @param {string} address The address to check the balance of. If not provided, the\n   * current account will be used.\n   * @param {MarketIdOrName} marketIdOrName - The unique identifier or name of the market.\n   * @returns {number} The balance of the synth in ether.\n   */\n  public async getBalance(address: string = this.sdk.accountAddress, marketIdOrName: MarketIdOrName): Promise<number> {\n    const synthContract = await this.getSynthContract(marketIdOrName);\n    const balance = await synthContract.read.balanceOf([address as Hex]);\n    return convertWeiToEther(balance);\n  }\n\n  /**\n   * Get the allowance for a ``target_address`` to transfer from ``address``. Provide either\n   * a ``marketId`` or ``marketName`` to choose the synth.\n   * @param {string} targetAddress The address for which to check allowance.\n   * @param {string} address The owner address to check allowance for.\n   * @param {MarketIdOrName} marketIdOrName - The unique identifier or name of the market.\n   * @returns The allowance in ether.\n   */\n  public async getAllowance(\n    targetAddress: string,\n    address: string = this.sdk.accountAddress,\n    marketIdOrName: MarketIdOrName,\n  ): Promise<number> {\n    const synthContract = await this.getSynthContract(marketIdOrName);\n    const allowance = await synthContract.read.allowance([address as Hex, targetAddress as Hex]);\n    return convertWeiToEther(allowance);\n  }\n\n  /**\n   * Get details about an async order by its ID.\n   * Retrieves order details like owner, amount escrowed, settlement strategy, etc.\n   * Can also fetch the full settlement strategy parameters if ``fetchSettlementStrategy``\n   * is ``true``.\n   * Requires either a ``market_id`` or ``market_name`` to be provided to resolve the market.\n   * @param {string} data.asyncOrderId The ID of the async order to retrieve.\n   * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.\n   * @param {boolean} data.fetchSettlementStrategy Whether to fetch the full settlement strategy parameters. Default is true.\n   * @returns {SpotOrder} The order details.\n   */\n  public async getOrder({\n    asyncOrderId,\n    marketIdOrName,\n    fetchSettlementStrategy = true,\n  }: GetOrder): Promise<SpotOrder> {\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n\n    const spotProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n\n    const order = (await spotProxy.read.getAsyncOrderClaim([resolvedMarketId, asyncOrderId])) as unknown as SpotOrder;\n    this.sdk.logger.info('order', order);\n\n    if (fetchSettlementStrategy) {\n      const settlementStrategy = await this.getSettlementStrategy({\n        settlementStrategyId: Number(order.settlementStrategyId) || 0,\n        marketIdOrName: resolvedMarketId,\n      });\n      order.settlementStrategy = settlementStrategy;\n    }\n\n    return order;\n  }\n\n  /**\n   * Fetch the settlement strategy for a spot market.\n   * @param {GetSettlementStrategy} data The data for fetching the settlement strategy.\n   * @param {number} data.settlementStrategyId The id of the settlement strategy to retrieve.\n   * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.\n   * @returns {SpotSettlementStrategy} The settlement strategy for the market.\n   */\n  public async getSettlementStrategy({\n    settlementStrategyId,\n    marketIdOrName,\n  }: GetSettlementStrategy): Promise<SpotSettlementStrategy> {\n    const { resolvedMarketId, resolvedMarketName } = await this.resolveMarket(marketIdOrName);\n    const spotProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n\n    const settlementStrategy: SettlementStrategyResponse = (await this.sdk.utils.callErc7412({\n      contractAddress: spotProxy.address,\n      abi: spotProxy.abi,\n      functionName: 'getSettlementStrategy',\n      args: [resolvedMarketId, settlementStrategyId],\n    })) as SettlementStrategyResponse;\n\n    return {\n      marketId: resolvedMarketId,\n      marketName: resolvedMarketName,\n      strategyType: settlementStrategy.strategyType,\n      settlementDelay: Number(settlementStrategy.settlementDelay),\n      settlementWindowDuration: Number(settlementStrategy.settlementWindowDuration),\n      priceVerificationContract: settlementStrategy.priceVerificationContract,\n      feedId: settlementStrategy.feedId,\n      url: settlementStrategy.url,\n      settlementReward: convertWeiToEther(settlementStrategy.settlementReward),\n      priceDeviationTolerance: convertWeiToEther(settlementStrategy.priceDeviationTolerance),\n      minimumUsdExchangeAmount: convertWeiToEther(settlementStrategy.minimumUsdExchangeAmount),\n      maxRoundingLoss: convertWeiToEther(settlementStrategy.maxRoundingLoss),\n      disabled: settlementStrategy.disabled,\n    } as SpotSettlementStrategy;\n  }\n\n  /**\n   * Fetch the settlement strategies for all spot markets.\n   * @param {GetSettlementStrategies} data The data for fetching the settlement strategies.\n   * @param {number} data.stragegyId The id of the settlement strategy to retrieve.\n   * @param {number[]} data.marketIds Array of marketIds to fetch settlement strategy\n   * @returns {SpotSettlementStrategy[]} The settlement strategies for the markets.\n   */\n  public async getSettlementStrategies({\n    settlementStrategyId: stragegyId,\n    marketIds,\n  }: GetSettlementStrategies): Promise<SpotSettlementStrategy[]> {\n    const spotProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n\n    interface SettlementStrategyResponse {\n      strategyType?: number;\n      settlementDelay?: bigint;\n      settlementWindowDuration?: bigint;\n      priceVerificationContract?: string;\n      feedId?: string;\n      url?: string;\n      settlementReward?: bigint;\n      priceDeviationTolerance?: bigint;\n      minimumUsdExchangeAmount?: bigint;\n      maxRoundingLoss?: bigint;\n      disabled?: boolean;\n    }\n\n    const settlementStrategies: SpotSettlementStrategy[] = [];\n    let settlementStrategiesResponse: SettlementStrategyResponse[];\n\n    const argsList: [number, number][] = marketIds.map((marketId) => [marketId, stragegyId]);\n\n    const response = await this.sdk.utils.multicallErc7412({\n      contractAddress: spotProxy.address,\n      abi: spotProxy.abi,\n      functionName: 'getSettlementStrategy',\n      args: argsList,\n    });\n\n    if (response == undefined) {\n      settlementStrategiesResponse = [];\n    } else {\n      settlementStrategiesResponse = response as unknown[] as SettlementStrategyResponse[];\n    }\n\n    this.sdk.logger.info('settlementStrategiesResponse', settlementStrategiesResponse);\n\n    settlementStrategiesResponse.forEach((strategy, index) => {\n      settlementStrategies.push({\n        marketId: marketIds[index],\n        strategyType: strategy.strategyType,\n        settlementDelay: Number(strategy.settlementDelay),\n        settlementWindowDuration: Number(strategy.settlementWindowDuration),\n        priceVerificationContract: strategy.priceVerificationContract,\n        feedId: strategy.feedId,\n        url: strategy.url,\n        settlementReward: convertWeiToEther(strategy.settlementReward),\n        priceDeviationTolerance: convertWeiToEther(strategy.priceDeviationTolerance),\n        minimumUsdExchangeAmount: convertWeiToEther(strategy.minimumUsdExchangeAmount),\n        maxRoundingLoss: convertWeiToEther(strategy.maxRoundingLoss),\n        disabled: strategy.disabled,\n      });\n    });\n    return settlementStrategies;\n  }\n\n  // === WRITE CALLS ===\n  async buildAtomicOrder({\n    side,\n    size,\n    slippageTolerance = 0,\n    minAmountReceived,\n    marketIdOrName,\n  }: AtomicOrder): Promise<Call3Value> {\n    const { resolvedMarketId, resolvedMarketName } = await this.resolveMarket(marketIdOrName);\n    const spotMarketProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n\n    // If network is Base where USDC and sUSDC are 1:1, set minAmount to actual amount\n    if (\n      this.sdk.rpcConfig.chainId in [8453, 84532] &&\n      resolvedMarketName in ['sUSDC'] &&\n      minAmountReceived == undefined\n    ) {\n      minAmountReceived = size;\n    } else if (minAmountReceived == undefined) {\n      // Get asset price\n      const tokenSymbol = this.marketsById.get(resolvedMarketId)?.symbol;\n      if (tokenSymbol == undefined) {\n        throw new Error(`Invalid token symbol for market id: ${resolvedMarketId}`);\n      }\n\n      const feedId =\n        this.sdk.pyth.priceFeedIds.get(tokenSymbol) ??\n        '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a';\n\n      const price = await this.sdk.pyth.getFormattedPrice(feedId as Hex);\n      this.sdk.logger.info('Formatted price:', price);\n\n      let tradeSize;\n      if (side == Side.BUY) {\n        tradeSize = size / price;\n      } else {\n        tradeSize = size * price;\n      }\n      minAmountReceived = tradeSize * (1 - slippageTolerance);\n    }\n\n    const minAmountReceivedInWei = convertEtherToWei(minAmountReceived);\n    const sizeInWei = convertEtherToWei(size);\n\n    const functionName = side == Side.BUY ? 'buy' : 'sell';\n    const args = [resolvedMarketId, sizeInWei, minAmountReceivedInWei, this.sdk.referrer];\n\n    return {\n      target: spotMarketProxy.address,\n      callData: encodeFunctionData({\n        abi: spotMarketProxy.abi,\n        functionName,\n        args,\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n  }\n\n  /**\n   * Execute an atomic order on the spot market.\n   * Atomically executes a buy or sell order for the given size.\n   * Amounts are transferred directly, no need to settle later. This function\n   * is useful for swapping sUSDC with sUSD on Base Andromeda contracts. The default\n   * slippage is set to zero, since sUSDC and sUSD can be swapped 1:1\n   * For example:\n   *    const tx = await atomicOrder(Side.BUY, 100, 0, undefined, undefined, \"sUSDC\");\n   * Requires either a ``market_id`` or ``market_name`` to be provided to resolve the market.\n   * @param {AtomicOrder} data The data for the atomic order.\n   * @param {Side} data.side The side of the order (buy/sell).\n   * @param {number} data.size The order size in ether.\n   * @param {number} data.slippageTolerance The slippage tolerance for the order as a percentage (0.01 = 1%). Default is 0.\n   * @param {number} data.minAmountReceived The minimum amount to receive in ether units. This will override the slippage_tolerance.\n   * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.\n   * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.\n   * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.\n   */\n  public async atomicOrder(\n    { side, size, slippageTolerance = 0, minAmountReceived, marketIdOrName }: AtomicOrder,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    const atomicOrderTx = await this.buildAtomicOrder({\n      side,\n      size,\n      slippageTolerance,\n      minAmountReceived,\n      marketIdOrName,\n    });\n\n    const txs = [atomicOrderTx];\n\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n  public async buildWrap({ size, marketIdOrName }: Wrap): Promise<Call3Value> {\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n    const spotMarketProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n    const tokenToWrap = resolvedMarketId;\n\n    const sizeInWei = await this.formatSize(Math.abs(size), tokenToWrap);\n    const functionName = size > 0 ? 'wrap' : 'unwrap';\n    const offset = (sizeInWei * 100n) / 1000n;\n\n    const wrapTx: Call3Value = {\n      target: spotMarketProxy.address,\n      callData: encodeFunctionData({\n        abi: spotMarketProxy.abi,\n        functionName,\n        args: [resolvedMarketId, sizeInWei, sizeInWei - offset],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    return wrapTx;\n  }\n  /**\n   * Wrap an underlying asset into a synth or unwrap back to the asset.\n   * Wraps an asset into a synth if size > 0, unwraps if size < 0.\n   * The default slippage is set to zero, since the synth and asset can be swapped 1:1.\n   * For example:\n   *    const tx = wrap(100, undefined, \"sUSDC\")  # wrap 100 USDC into sUSDC\n   *    const tx = wrap(-100, undefined, \"sUSDC\") # unwrap 100 sUSDC into USDC\n   * Requires either a ``market_id`` or ``market_name`` to be provided to resolve the market.\n   * @param {Wrap} data The data for the wrap/unwrap transaction.\n   * @param data.size The amount of the asset to wrap/unwrap.\n   * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.\n   * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.\n   * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.\n   */\n  public async wrap({ size, marketIdOrName }: Wrap, override: OverrideParamsWrite = {}): Promise<WriteReturnType> {\n    const wrapTx = await this.buildWrap({ size, marketIdOrName });\n\n    const txs = [wrapTx];\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n\n  async buildCommitOrder({\n    side,\n    size,\n    slippageTolerance,\n    minAmountReceived,\n    settlementStrategyId = 0,\n    marketIdOrName,\n  }: CommitOrderSpot): Promise<Call3Value> {\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n    const spotMarketProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n\n    if (!minAmountReceived) {\n      const settlementReward = this.marketsById.get(resolvedMarketId)?.settlementStrategy?.settlementReward ?? 0;\n\n      // Get asset price\n      const feedId =\n        this.marketsById.get(resolvedMarketId)?.settlementStrategy?.feedId ??\n        '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a';\n\n      const price = await this.sdk.pyth.getFormattedPrice(feedId as Hex);\n      this.sdk.logger.info('Formatted price:', price);\n\n      let tradeSize = size * price;\n      if (side == Side.BUY) {\n        tradeSize = size / price;\n      }\n\n      minAmountReceived = tradeSize * (1 - slippageTolerance) - settlementReward;\n    }\n\n    const minAmountReceivedInWei = convertEtherToWei(minAmountReceived);\n    const sizeInWei = convertEtherToWei(size);\n    const orderType = side == Side.BUY ? 3 : 4;\n\n    const args = [\n      resolvedMarketId,\n      orderType,\n      sizeInWei,\n      settlementStrategyId,\n      minAmountReceivedInWei,\n      this.sdk.referrer,\n    ];\n\n    return {\n      target: spotMarketProxy.address,\n      callData: encodeFunctionData({\n        abi: spotMarketProxy.abi,\n        functionName: 'commitOrder',\n        args,\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n  }\n\n  /**\n   * Commit an async order to the spot market.\n   * Commits a buy or sell order of the given size. The order will be settled\n   * according to the settlement strategy.\n   * Requires either a ``marketId`` or ``marketName`` to be provided to resolve the market.\n   * @param {CommitOrderSpot} data The data for the async order.\n   * @param {Side} data.side The side of the order (buy/sell).\n   * @param {number} data.size The order size in ether. If ``side`` is \"buy\", this is the amount\n   * of the synth to buy. If ``side`` is \"sell\", this is the amount of the synth to sell.\n   * @param {number} data.slippageTolerance The slippage tolerance for the order as a percentage (0.01 = 1%). Default is 0.\n   * @param {number} data.minAmountReceived The minimum amount to receive in ether units. This will override the slippage_tolerance.\n   * @param {number} data.settlementStrategyId The settlement strategy ID. Default 2.\n   * @param {MarketIdOrName} data.marketIdOrName - The unique identifier or name of the market.\n   * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.\n   */\n  public async commitOrder(\n    { side, size, slippageTolerance, minAmountReceived, settlementStrategyId = 0, marketIdOrName }: CommitOrderSpot,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    const commitTx = await this.buildCommitOrder({\n      side,\n      size,\n      slippageTolerance,\n      minAmountReceived,\n      settlementStrategyId,\n      marketIdOrName,\n    });\n    const txs = [commitTx];\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n\n  /**\n   * Settle an async Pyth order after price data is available.\n   * Fetches the price for the order from Pyth and settles the order.\n   * Retries up to ``maxTxTries`` times on failure with a delay of ``txDelay`` seconds.\n   * Requires either a ``marketId`` or ``marketName`` to be provided to resolve the market.\n   * @param {SettleOrder} data The data for the async order.\n   * @param {string} asyncOrderId The ID of the async order to settle.\n   * @param {MarketIdOrName} marketIdOrName The unique identifier or name of the market.\n   * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.\n   * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.\n   */\n  public async settleOrder(\n    { asyncOrderId, marketIdOrName }: SettleOrder,\n    override: OverrideParamsWrite = {},\n  ): Promise<WriteReturnType> {\n    const { resolvedMarketId } = await this.resolveMarket(marketIdOrName);\n    const spotMarketProxy = await this.sdk.contracts.getSpotMarketProxyInstance();\n\n    const order = await this.getOrder({ asyncOrderId, marketIdOrName: resolvedMarketId });\n    if (order.settledAt == undefined || order.commitmentTime == undefined) {\n      throw new Error('Invalid fields for order: undefined');\n    }\n    const settlementStrategy = order.settlementStrategy;\n    const settlementTime = order.commitmentTime + (settlementStrategy?.settlementDelay ?? 0);\n    const expirationTime = order.commitmentTime + (settlementStrategy?.settlementWindowDuration ?? 0);\n\n    const currentTimestamp = Math.floor(Date.now() / 1000);\n\n    if (order.settledAt > 0)\n      throw new Error(`Order ${asyncOrderId} on market ${resolvedMarketId} is already settled for account`);\n\n    if (expirationTime < currentTimestamp)\n      throw new Error(`Order ${asyncOrderId} on market ${resolvedMarketId} has expired`);\n\n    if (settlementTime > currentTimestamp) {\n      const duration = settlementTime - currentTimestamp;\n      this.sdk.logger.info(`Waiting ${duration} seconds to settle order`);\n      await sleep(duration);\n    }\n\n    this.sdk.logger.info(`Order ${asyncOrderId} on market ${resolvedMarketId} is ready to be settled`);\n    const settleTx: Call3Value = {\n      target: spotMarketProxy.address,\n      callData: encodeFunctionData({\n        abi: spotMarketProxy.abi,\n        functionName: 'settleOrder',\n        args: [resolvedMarketId, asyncOrderId],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n    const txs = [settleTx];\n    return this.sdk.utils.processTransactions(txs, { ...override });\n  }\n\n  public async buildApprove({\n    spender,\n    amount,\n    token,\n  }: {\n    spender: Address;\n    amount: number;\n    token: Address;\n  }): Promise<Call3Value> {\n    const amountInWei = convertEtherToWei(amount);\n    const tx = {\n      target: token,\n      callData: encodeFunctionData({\n        abi: erc20Abi,\n        functionName: 'approve',\n        args: [spender as Hex, amountInWei],\n      }),\n      value: 0n,\n      requireSuccess: true,\n    };\n\n    return tx;\n  }\n\n  /**\n   * Approve an address to transfer a specified synth from the connected address.\n   * Approves the ``targetAddress`` to transfer up to the ``amount`` from your account.\n   * If ``amount`` is ``undefined``, approves the maximum possible amount.\n   * Requires either a ``marketId`` or ``marketName`` to be provided to resolve the market.\n   * @param {string} data.targetAddress The address to approve.\n   * @param {number} data.amount The amount in ether to approve. Default is max uint256.\n   * @param {MarketIdOrName} dart.marketIdOrName - The unique identifier or name of the market.\n   * @param {OverrideParamsWrite} override - Override the default parameters for the transaction.\n   * @returns {WriteReturnType} The transaction hash if ``submit`` is ``true``.\n   */\n  public async approve(\n    { targetAddress, amount = 0, marketIdOrName }: Approve,\n    override: Omit<OverrideParamsWrite, 'useOracleCalls'> = {},\n  ): Promise<WriteReturnType> {\n    let amountInWei: bigint = maxUint256;\n    if (amount) {\n      amountInWei = convertEtherToWei(amount);\n    }\n\n    const synthContract = await this.getSynthContract(marketIdOrName);\n\n    const txs = [\n      {\n        target: synthContract.address,\n        callData: encodeFunctionData({\n          abi: synthContract.abi,\n          functionName: 'approve',\n          args: [targetAddress as Hex, amountInWei],\n        }),\n        value: 0n,\n        requireSuccess: true,\n      },\n    ];\n\n    return this.sdk.utils.processTransactions(txs, { ...override, useOracleCalls: false });\n  }\n}\n"],"mappings":"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","names":["zeroAddress","zeroAddress","updateType","oracleErrors","encodeFunctionData","formatEther","formatEther","encodeFunctionData","encodeFunctionData","erc20Abi","getContract","maxUint256","ARBTokenMain","AccountProxyMain","AllErrorsMain","CollateralToken_USDCMain","CollateralToken_sETHMain","CollateralToken_WETHMain","CoreProxyMain","OracleManagerProxyMain","PerpsAccountProxyMain","PerpsMarketProxyMain","PythERC7412WrapperMain","RewardsDistributor_1_sETHMain","SynthToken_sETHMain","SynthToken_sUSDCMain","SynthUSDCTokenMain","TrustedMulticallForwarderMain","USDCTokenMain","USDProxyMain","WETHTokenMain","CannonMain","CollateralTokensMain","ExtrasMain","mainMeta","MintableTokensMain","SynthTokensMain","SystemTokenMain","RewardsDistributorsMain","SpotMarketProxyMain","AccountProxyAndromeda","AllErrorsAndromeda","CoreProxyAndromeda","OracleManagerProxyAndromeda","PerpsAccountProxyAndromeda","PerpsMarketProxyAndromeda","PythERC7412WrapperAndromeda","SpotMarketProxyAndromeda","SynthToken_sUSDCAndromeda","SynthUSDCTokenAndromeda","TrustedMulticallForwarderAndromeda","USDProxyAndromeda","CannonAndromeda","CollateralTokensAndromeda","ExtrasAndromeda","MetaAndromeda","MintableTokensAndromeda","RewardsDistributorsAndromeda","SynthTokensAndromeda","SystemTokenAndromeda","CollateralToken_sStataUSDCAndromeda","RewardsDistributorForSpartanCouncilPoolSNXAndromeda","RewardsDistributorForSpartanCouncilPoolUSDCAndromeda","SynthToken_sStataUSDCAndromeda","erc20Abi","contract","price","encodeFunctionData","erc20Abi","formatEther","formatUnits","encodeAbiParameters","parseUnits","parseUnits","encodeAbiParameters","encodeAbiParameters","encodeAbiParameters","strategy","fundingParam","orderFee","maxMarketValue","formatEther","encodeFunctionData","formatUnits","erc20Abi","encodeFunctionData","erc20Abi","getContract","erc20Abi","strategy","getContract","encodeFunctionData","maxUint256","encodeFunctionData","erc20Abi","getContract"]}