{"version":3,"sources":["../../src/core/index.ts","../../src/constants/common.ts"],"sourcesContent":["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 { 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"],"mappings":"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","names":[]}