@strobelabs/perpcity-sdk 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts","../src/entities/perp.ts","../src/entities/position.ts","../src/utils/constants.ts","../src/utils/conversions.ts","../src/utils/approve.ts","../src/utils/liquidity.ts","../src/entities/perp-collection.ts","../src/entities/perp-manager.ts","../src/addresses.ts","../src/endpoints.ts","../src/abis/perp-manager.ts","../src/abis/beacon.ts"],"sourcesContent":["import type { WalletClient, Abi, Address} from \"viem\";\nimport { publicActions } from \"viem\";\nimport { GraphQLClient } from 'graphql-request'\n\nexport type PerpCityContextConfig = {\n walletClient: WalletClient;\n goldskyEndpoint: string;\n perpManagerAddress: Address;\n perpManagerAbi: Abi;\n beaconAbi: Abi;\n}\n\nexport class PerpCityContext {\n public readonly walletClient: WalletClient;\n // below will be hard-coded in addresses.ts, abis.ts, and endpoints.ts once they are frozen\n // they are currently being rapidly redeployed so can be specified by the sdk consumer for now\n public readonly goldskyClient: GraphQLClient;\n public readonly perpManagerAddress: Address;\n public readonly perpManagerAbi: Abi;\n public readonly beaconAbi: Abi;\n\n constructor(config: PerpCityContextConfig) {\n this.walletClient = config.walletClient.extend(publicActions);\n this.goldskyClient = new GraphQLClient(config.goldskyEndpoint);\n this.perpManagerAddress = config.perpManagerAddress;\n this.perpManagerAbi = config.perpManagerAbi;\n this.beaconAbi = config.beaconAbi;\n }\n}","import type {Hex} from \"viem\";\nimport { publicActions } from \"viem\";\nimport { PerpCityContext } from \"../context\";\nimport { Position } from \"./position\";\nimport { estimateLiquidity, priceToTick, scale6Decimals, scaleX96 } from \"../utils\";\nimport { nearestUsableTick } from \"@uniswap/v3-sdk\";\nimport { approveUsdc } from \"../utils/approve\";\n\nexport type OpenMakerPositionParams = {\n margin: number;\n priceLower: number;\n priceUpper: number;\n maxAmt0In: number;\n maxAmt1In: number;\n}\n\nexport type OpenTakerPositionParams = {\n isLong: boolean;\n margin: number;\n leverage: number;\n unspecifiedAmountLimit: number;\n}\n\nexport class Perp {\n public readonly context: PerpCityContext;\n public readonly id: Hex;\n\n constructor(context: PerpCityContext, id: Hex) {\n this.context = context;\n this.id = id;\n }\n\n // READS\n\n async getTickSpacing(): Promise<number> {\n const tickSpacing: bigint = await this.context.walletClient.extend(publicActions).readContract({\n address: this.context.perpManagerAddress,\n abi: this.context.perpManagerAbi,\n functionName: 'tickSpacing',\n args: [this.id]\n }) as bigint;\n\n return Number(tickSpacing);\n }\n\n // WRITES\n\n async approveAndOpenMakerPosition(params: OpenMakerPositionParams): Promise<Position> {\n await approveUsdc(this.context, scale6Decimals(params.margin));\n return await this.openMakerPosition(params);\n }\n\n async approveAndOpenTakerPosition(params: OpenTakerPositionParams): Promise<Position> {\n await approveUsdc(this.context, scale6Decimals(params.margin));\n return await this.openTakerPosition(params);\n }\n\n async openMakerPosition(params: OpenMakerPositionParams): Promise<Position> {\n const tickSpacing = await this.getTickSpacing();\n\n const scaledUsd = scale6Decimals(params.margin);\n const tickLower = BigInt(nearestUsableTick(priceToTick(params.priceLower, true), tickSpacing));\n const tickUpper = BigInt(nearestUsableTick(priceToTick(params.priceUpper, false), tickSpacing));\n\n const contractParams = {\n margin: scaledUsd,\n liquidity: await estimateLiquidity(this.context, tickLower, tickUpper, scaledUsd),\n tickLower: tickLower,\n tickUpper: tickUpper,\n maxAmt0In: scale6Decimals(params.maxAmt0In),\n maxAmt1In: scale6Decimals(params.maxAmt1In),\n };\n\n const { result, request } = await this.context.walletClient.extend(publicActions).simulateContract({\n address: this.context.perpManagerAddress,\n abi: this.context.perpManagerAbi,\n functionName: 'openMakerPosition',\n args: [this.id, contractParams],\n account: this.context.walletClient.account,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return new Position(this.context, this.id, result as bigint);\n }\n\n async openTakerPosition(params: OpenTakerPositionParams): Promise<Position> {\n const contractParams = {\n isLong: params.isLong,\n margin: scale6Decimals(params.margin),\n levX96: scaleX96(params.leverage),\n unspecifiedAmountLimit: scale6Decimals(params.unspecifiedAmountLimit),\n };\n \n const { result, request } = await this.context.walletClient.extend(publicActions).simulateContract({\n address: this.context.perpManagerAddress,\n abi: this.context.perpManagerAbi,\n functionName: 'openTakerPosition',\n args: [this.id, contractParams],\n account: this.context.walletClient.account,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return new Position(this.context, this.id, result as bigint);\n }\n}","import type { Hex } from \"viem\";\nimport { publicActions } from \"viem\";\nimport { PerpCityContext } from \"../context\";\nimport { scale6Decimals } from \"../utils\";\n\nexport type ClosePositionParams = {\n minAmt0Out: number;\n minAmt1Out: number;\n maxAmt1In: number;\n }\n\nexport class Position {\n public readonly context: PerpCityContext;\n public readonly perpId: Hex;\n public readonly positionId: bigint;\n\n constructor(context: PerpCityContext, perpId: Hex, positionId: bigint) {\n this.context = context;\n this.perpId = perpId;\n this.positionId = positionId;\n }\n\n// async closePosition(params: ClosePositionParams): Promise<Position | null> {\n// const contractParams = {\n// positionId: this.positionId,\n// minAmt0Out: scale6Decimals(params.minAmt0Out),\n// minAmt1Out: scale6Decimals(params.minAmt1Out),\n// maxAmt1In: scale6Decimals(params.maxAmt1In),\n// };\n \n// const { result, request } = await this.context.walletClient.extend(publicActions).simulateContract({\n// address: this.context.perpManagerAddress,\n// abi: this.context.perpManagerAbi,\n// functionName: 'closePosition',\n// args: [this.perpId, contractParams],\n// account: this.context.walletClient.account,\n// });\n\n// await this.context.walletClient.writeContract(request);\n\n// const takerPositionId = result[0];\n\n// if (takerPositionId === 0n) {\n// return null;\n// }\n \n// return new Position(this.context, this.perpId, takerPositionId);\n// }\n}","export const DECIMAL_PRECISION_6: number = 1000000; // 1e6\n\nexport const Q96: bigint = 79228162514264337593543950336n; // 2^96\n","import { DECIMAL_PRECISION_6, Q96 } from \"./constants\";\n\nexport function priceToSqrtPriceX96(price: number): bigint {\n if (price > Number.MAX_SAFE_INTEGER) {\n throw new Error('Price too large');\n }\n\n const scaledSqrtPrice: number = Math.sqrt(price) * DECIMAL_PRECISION_6;\n return BigInt(Math.floor(scaledSqrtPrice)) * Q96 / BigInt(DECIMAL_PRECISION_6);\n}\n\nexport function scale6Decimals(amount: number): bigint {\n if (amount > Number.MAX_SAFE_INTEGER / DECIMAL_PRECISION_6) {\n throw new Error('Amount too large');\n }\n\n return BigInt(Math.floor(amount * DECIMAL_PRECISION_6));\n}\n\nexport function scaleX96(amount: number): bigint {\n return BigInt(scale6Decimals(amount)) * Q96 / BigInt(DECIMAL_PRECISION_6);\n}\n\nexport function priceToTick(price: number, roundDown: boolean): number {\n const logSqrtPrice = Math.log(Math.sqrt(price)) / Math.log(1.0001);\n return roundDown ? Math.floor(logSqrtPrice) : Math.ceil(logSqrtPrice);\n}","import { PerpCityContext } from \"../context\";\nimport { erc20Abi, publicActions } from \"viem\";\nimport type { Address } from \"viem\";\n\nexport async function approveUsdc(context: PerpCityContext, amount: bigint) {\n const usdcAddress = await getUsdcAddress(context);\n\n const { request } = await context.walletClient.extend(publicActions).simulateContract({\n address: usdcAddress,\n abi: erc20Abi,\n functionName: 'approve',\n args: [context.perpManagerAddress, amount],\n account: context.walletClient.account,\n });\n\n const hash = await context.walletClient.writeContract(request);\n\n await context.walletClient.extend(publicActions).waitForTransactionReceipt({ \n confirmations: 2, \n hash \n });\n}\n\nexport async function getUsdcAddress(context: PerpCityContext): Promise<Address>{\n return await context.walletClient.extend(publicActions).readContract({\n address: context.perpManagerAddress,\n abi: context.perpManagerAbi,\n functionName: 'USDC',\n }) as Address;\n}","import { PerpCityContext } from \"../context\";\nimport { publicActions } from \"viem\";\n\nexport async function estimateLiquidity(context: PerpCityContext, tickLower: bigint, tickUpper: bigint, usdScaled: bigint): Promise<bigint> {\n return await context.walletClient.extend(publicActions).readContract({\n address: context.perpManagerAddress,\n abi: context.perpManagerAbi,\n functionName: 'estimateLiquidityForAount1',\n args: [tickLower, tickUpper, usdScaled],\n }) as bigint;\n}","import { PerpCityContext } from \"../context\";\nimport { Perp } from \"./perp\";\n\n// In the future, this is where multicalls are used to fetch data across many perps\nexport class PerpCollection {\n public readonly context: PerpCityContext;\n public readonly perps: Perp[];\n\n constructor(context: PerpCityContext, perps: Perp[]) {\n this.context = context;\n this.perps = perps;\n }\n}","import { PerpCityContext } from \"../context\";\nimport { Perp } from \"./perp\";\nimport { priceToSqrtPriceX96 } from \"../utils\";\nimport { PerpCollection } from \"./perp-collection\";\nimport type { Address, Hex } from \"viem\";\nimport { publicActions } from \"viem\";\nimport { gql } from \"graphql-request\";\nimport type { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { parse } from 'graphql';\n\nexport type CreatePerpParams = {\n startingPrice: number;\n beacon: Address;\n}\n\nexport class PerpManager {\n public readonly context: PerpCityContext;\n \n constructor(context: PerpCityContext) {\n this.context = context;\n }\n\n // READS\n\n async getPerps(): Promise<PerpCollection> {\n const query: TypedDocumentNode<{ perps: { id: Hex }[] }, Record<any, never>> = parse(gql`\n {\n perps {\n id\n }\n }\n `)\n\n const response = await this.context.goldskyClient.request(query);\n \n const perps = response.perps.map((perpData: { id: Hex }) => \n new Perp(this.context, perpData.id as Hex)\n );\n\n return new PerpCollection(this.context, perps);\n }\n\n // WRITES\n\n async createPerp(params: CreatePerpParams): Promise<Perp> {\n const sqrtPriceX96 = priceToSqrtPriceX96(params.startingPrice);\n\n const contractParams = {\n startingSqrtPriceX96: sqrtPriceX96,\n beacon: params.beacon,\n };\n\n const { result, request } = await this.context.walletClient.extend(publicActions).simulateContract({\n address: this.context.perpManagerAddress,\n abi: this.context.perpManagerAbi,\n functionName: 'createPerp',\n args: [contractParams],\n account: this.context.walletClient.account,\n chain: this.context.walletClient.chain,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return new Perp(this.context, result as Hex);\n }\n}","import { Address } from 'viem';\n\nexport const PERP_MANAGER_BASE_SEPOLIA_ADDRESS: Address = '0xA25aF834AA93Fe5Dca241955AF2383F04374c000';","export const GOLDSKY_BASE_SEPOLIA_URL: string = 'https://api.goldsky.com/api/public/project_cmbawn40q70fj01ws4jmsfj7f/subgraphs/perp-city/3fe61683-20250915_170731/gn';","export const PERP_MANAGER_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IPoolManager\",\n \"name\": \"poolManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"usdc\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"action\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"InvalidAction\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"expectedCaller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidCaller\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"holder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isLiquidated\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"InvalidClose\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"InvalidLiquidity\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidMargin\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentTimestamp\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lockupPeriodEnd\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MakerPositionLocked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maximumAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountRequested\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MaximumAmountExceeded\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"minimumAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountReceived\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MinimumAmountInsufficient\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotPoolManager\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"reason\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"UnexpectedRevertBytes\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"posId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newMargin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MarginAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"startingSqrtPriceX96\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"PerpCreated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"posId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"wasLiquidated\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"PositionClosed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"posId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"isMaker\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"PositionOpened\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"POOL_MANAGER\",\n \"outputs\": [\n {\n \"internalType\": \"contract IPoolManager\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"USDC\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IPerpManager.AddMarginParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"addMargin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"minAmt0Out\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"minAmt1Out\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt1In\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.ClosePositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"closePosition\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint160\",\n \"name\": \"startingSqrtPriceX96\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IPerpManager.CreatePerpParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"createPerp\",\n \"outputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"tickA\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickB\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"estimateLiquidityForAount1\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"getPosition\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"holder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"usdDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumX96\",\n \"type\": \"int256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"entryTimestamp\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumGrowthInsideX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumDivBySqrtPriceGrowthInsideX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumGrowthBelowX96\",\n \"type\": \"int256\"\n }\n ],\n \"internalType\": \"struct IPerpManager.MakerDetails\",\n \"name\": \"makerDetails\",\n \"type\": \"tuple\"\n }\n ],\n \"internalType\": \"struct IPerpManager.Position\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"secondsAgo\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getTimeWeightedAvg\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"increaseCardinalityNext\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"livePositionDetails\",\n \"outputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"pnl\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"fundingPayment\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"effectiveMargin\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isLiquidatable\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newPriceX96\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt0In\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt1In\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.OpenMakerPositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"openMakerPosition\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"makerPosId\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isLong\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"levX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"unspecifiedAmountLimit\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.OpenTakerPositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"openTakerPosition\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"takerPosId\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"perps\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"creator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"creationTimestamp\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"makerLockupPeriod\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"twapWindow\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"lastTwPremiumsUpdate\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"creatorFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"insuranceFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"liquidationFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"liquidatorFeeSplit\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"nextPosId\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceLowerMultiX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceUpperMultiX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minOpeningMargin\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minMakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"maxMakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"makerLiquidationMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minTakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"maxTakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"takerLiquidationMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"twPremiumX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"twPremiumDivBySqrtPriceX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"premiumPerSecondX96\",\n \"type\": \"int256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"Currency\",\n \"name\": \"currency0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"Currency\",\n \"name\": \"currency1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickSpacing\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"contract IHooks\",\n \"name\": \"hooks\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct PoolKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"baseFeeX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"startFeeX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"targetFeeX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"decay\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"volatilityScalerX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxFeeMultiplierX96\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct TradingFee.Config\",\n \"name\": \"tradingFeeConfig\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"index\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinality\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"blockTimestamp\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint216\",\n \"name\": \"cumulativeValue\",\n \"type\": \"uint216\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"initialized\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct TimeWeightedAvg.Observation[65535]\",\n \"name\": \"observations\",\n \"type\": \"tuple[65535]\"\n }\n ],\n \"internalType\": \"struct TimeWeightedAvg.State\",\n \"name\": \"twapState\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"tickSpacing\",\n \"outputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"\",\n \"type\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"unlockCallback\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"encodedDelta\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const;","export const BEACON_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IVerifierWrapper\",\n \"name\": \"verifierWrapper\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"initialData\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initialCardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"proof\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"publicSignals\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"InvalidProof\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"proof\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"publicSignals\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"ProofAlreadyUsed\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"data\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"DataUpdated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_DATA\",\n \"outputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"\",\n \"type\": \"int256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MIN_DATA\",\n \"outputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"\",\n \"type\": \"int256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"VERIFIER_WRAPPER\",\n \"outputs\": [\n {\n \"internalType\": \"contract IVerifierWrapper\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"data\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getData\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"twapSecondsAgo\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getTwap\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"twapPrice\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"increaseCardinalityNext\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNextOld\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNextNew\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"timestamp\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"twapState\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"index\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinality\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"proof\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"publicSignals\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"updateData\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"usedProofs\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n] as const;"],"mappings":"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","names":["publicActions","publicActions","publicActions","publicActions","publicActions"]}
1
+ {"version":3,"sources":["../src/context.ts","../src/deployments.ts","../src/entities/openPosition.ts","../src/utils/constants.ts","../src/utils/conversions.ts","../src/utils/approve.ts","../src/abis/perp-manager.ts","../src/utils/liquidity.ts","../src/entities/perp.ts","../src/entities/perp-manager.ts","../src/entities/user.ts","../src/abis/beacon.ts"],"sourcesContent":["import { GraphQLClient } from 'graphql-request'\nimport { DEPLOYMENTS } from \"./deployments\";\nimport { publicActions } from \"viem\";\nimport { PerpCityContextConfig, PerpCityDeployments } from \"./types\";\n\nexport class PerpCityContext {\n public readonly walletClient;\n public readonly goldskyClient: GraphQLClient;\n\n constructor(config: PerpCityContextConfig) {\n this.walletClient = config.walletClient.extend(publicActions);\n\n const chainId = this.validateChainId();\n const deployments = DEPLOYMENTS[chainId];\n\n const headers: Record<string, string> = {};\n let goldskyEndpoint: string;\n \n if (config.goldskyBearerToken) {\n headers.authorization = `Bearer ${config.goldskyBearerToken}`;\n goldskyEndpoint = deployments.goldskyPrivate;\n } else {\n goldskyEndpoint = deployments.goldskyPublic;\n }\n \n this.goldskyClient = new GraphQLClient(goldskyEndpoint, {\n headers,\n });\n }\n\n validateChainId(): number {\n const chainId = this.walletClient.chain?.id;\n\n if (!chainId) throw new Error(`Chain ID is not set.`);\n if (!DEPLOYMENTS[chainId]) throw new Error(`Unsupported chainId: ${chainId}.`);\n\n return chainId;\n }\n\n deployments(): PerpCityDeployments {\n return DEPLOYMENTS[this.validateChainId()];\n }\n}","import { PerpCityDeployments } from './types';\n\nexport const DEPLOYMENTS: {[chainId: number]: PerpCityDeployments} = {\n // Base Sepolia\n [84532]: {\n perpManager: '0x59F1766b77fd67af6c80217C2025A0D536998000',\n usdc: '0xC1a5D4E99BB224713dd179eA9CA2Fa6600706210',\n goldskyPublic: 'https://api.goldsky.com/api/public/project_cmbawn40q70fj01ws4jmsfj7f/subgraphs/perp-city/36ac28e6-20250925_150813/gn',\n goldskyPrivate: 'https://api.goldsky.com/api/private/project_cmbawn40q70fj01ws4jmsfj7f/subgraphs/perp-city/36ac28e6-20250925_150813/gn',\n },\n}","import type { Hex } from \"viem\";\nimport { publicActions } from \"viem\";\nimport { PerpCityContext } from \"../context\";\nimport { scale6Decimals, scaleFrom6Decimals } from \"../utils\";\nimport { PERP_MANAGER_ABI } from \"../abis/perp-manager\";\n\nexport type ClosePositionParams = {\n minAmt0Out: number;\n minAmt1Out: number;\n maxAmt1In: number;\n}\n\nexport type LiveDetails = {\n pnl: number;\n fundingPayment: number;\n effectiveMargin: number;\n isLiquidatable: boolean;\n}\n\nexport class OpenPosition {\n public readonly context: PerpCityContext;\n public readonly perpId: Hex;\n public readonly positionId: bigint;\n\n constructor(context: PerpCityContext, perpId: Hex, positionId: bigint) {\n this.context = context;\n this.perpId = perpId;\n this.positionId = positionId;\n }\n\n async closePosition(params: ClosePositionParams): Promise<OpenPosition | null> {\n const contractParams = {\n posId: this.positionId,\n minAmt0Out: scale6Decimals(params.minAmt0Out),\n minAmt1Out: scale6Decimals(params.minAmt1Out),\n maxAmt1In: scale6Decimals(params.maxAmt1In),\n };\n \n const { result, request } = await this.context.walletClient.extend(publicActions).simulateContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'closePosition',\n args: [this.perpId, contractParams],\n account: this.context.walletClient.account,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return result === null ? null : new OpenPosition(this.context, this.perpId, result);\n }\n\n async liveDetails(): Promise<LiveDetails> {\n const { result, request } = await this.context.walletClient.simulateContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'livePositionDetails',\n args: [this.perpId, this.positionId],\n account: this.context.walletClient.account,\n });\n\n return {\n pnl: scaleFrom6Decimals(Number(result[0])),\n fundingPayment: scaleFrom6Decimals(Number(result[1])),\n effectiveMargin: scaleFrom6Decimals(Number(result[2])),\n isLiquidatable: result[3],\n };\n }\n}","export const NUMBER_1E6: number = 1000000; // 1e6\nexport const BIGINT_1E6: bigint = 1000000n; // 1e6\n\n\nexport const Q96: bigint = 79228162514264337593543950336n; // 2^96\n","import { NUMBER_1E6, BIGINT_1E6, Q96 } from \"./constants\";\n\nexport function priceToSqrtPriceX96(price: number): bigint {\n if (price > Number.MAX_SAFE_INTEGER) {\n throw new Error('Price too large');\n }\n\n const scaledSqrtPrice: number = Math.sqrt(price) * NUMBER_1E6;\n return BigInt(Math.floor(scaledSqrtPrice)) * Q96 / BigInt(NUMBER_1E6);\n}\n\nexport function scale6Decimals(amount: number): bigint {\n if (amount > Number.MAX_SAFE_INTEGER / NUMBER_1E6) {\n throw new Error('Amount too large');\n }\n\n return BigInt(Math.floor(amount * NUMBER_1E6));\n}\n\nexport function scaleToX96(amount: number): bigint {\n return BigInt(scale6Decimals(amount)) * Q96 / BigInt(NUMBER_1E6);\n}\n\nexport function scaleFromX96(valueX96: bigint): number {\n const valueScaled6Decimals = valueX96 * BIGINT_1E6 / Q96;\n\n if (valueScaled6Decimals > Number.MAX_SAFE_INTEGER) {\n throw new Error('Value too large');\n }\n\n return Number(valueScaled6Decimals) / NUMBER_1E6;\n}\n\nexport function priceToTick(price: number, roundDown: boolean): number {\n const logPrice = Math.log(price) / Math.log(1.0001);\n return roundDown ? Math.floor(logPrice) : Math.ceil(logPrice);\n}\n\nexport function sqrtPriceX96ToPrice(sqrtPriceX96: bigint): number {\n const priceX96 = sqrtPriceX96 * sqrtPriceX96 / Q96;\n return scaleFromX96(priceX96);\n}\n\nexport function marginRatioToLeverage(marginRatio: number): number {\n return NUMBER_1E6 / marginRatio;\n}\n\nexport function scaleFrom6Decimals(value: number): number {\n return value / NUMBER_1E6;\n}","import { PerpCityContext } from \"../context\";\nimport { erc20Abi } from \"viem\";\n\nconst DEFAULT_CONFIRMATIONS = 2;\n\nexport async function approveUsdc(context: PerpCityContext, amount: bigint, confirmations: number = DEFAULT_CONFIRMATIONS) {\n const deployments = context.deployments();\n\n const { request } = await context.walletClient.simulateContract({\n address: deployments.usdc,\n abi: erc20Abi,\n functionName: 'approve',\n args: [deployments.perpManager, amount],\n account: context.walletClient.account,\n });\n\n const hash = await context.walletClient.writeContract(request);\n\n await context.walletClient.waitForTransactionReceipt({ \n confirmations: confirmations, \n hash \n });\n}","export const PERP_MANAGER_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IPoolManager\",\n \"name\": \"poolManager\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"usdc\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"action\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"InvalidAction\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"expectedCaller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"InvalidCaller\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"holder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isLiquidated\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"InvalidClose\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"InvalidLiquidity\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"InvalidMargin\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"currentTimestamp\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lockupPeriodEnd\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MakerPositionLocked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"maximumAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountRequested\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MaximumAmountExceeded\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"minimumAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountReceived\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MinimumAmountInsufficient\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotPoolManager\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"reason\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"UnexpectedRevertBytes\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"usdDelta\",\n \"type\": \"int256\"\n }\n ],\n \"name\": \"ZeroSizePosition\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"posId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newMargin\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MarginAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"startingSqrtPriceX96\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"indexPriceX96\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"PerpCreated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"posId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"holder\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"wasMaker\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"int256\",\n \"name\": \"pnl\",\n \"type\": \"int256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"wasLiquidated\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"int256\",\n \"name\": \"fundingPremiumPerSecX96\",\n \"type\": \"int256\"\n }\n ],\n \"name\": \"PositionClosed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"posId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"holder\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"isMaker\",\n \"type\": \"bool\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceX96\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"int256\",\n \"name\": \"fundingPremiumPerSecX96\",\n \"type\": \"int256\"\n }\n ],\n \"name\": \"PositionOpened\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"POOL_MANAGER\",\n \"outputs\": [\n {\n \"internalType\": \"contract IPoolManager\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"USDC\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct IPerpManager.AddMarginParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"addMargin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"minAmt0Out\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"minAmt1Out\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt1In\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.ClosePositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"closePosition\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint160\",\n \"name\": \"startingSqrtPriceX96\",\n \"type\": \"uint160\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct IPerpManager.CreatePerpParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"createPerp\",\n \"outputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"tickA\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickB\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount1\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"estimateLiquidityForAmount1\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"fees\",\n \"outputs\": [\n {\n \"internalType\": \"uint24\",\n \"name\": \"creatorFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"insurnaceFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"lpFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"liquidationFee\",\n \"type\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"getPosition\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"holder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"usdDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumX96\",\n \"type\": \"int256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"entryTimestamp\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumGrowthInsideX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumDivBySqrtPriceGrowthInsideX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"entryTwPremiumGrowthBelowX96\",\n \"type\": \"int256\"\n }\n ],\n \"internalType\": \"struct IPerpManager.MakerDetails\",\n \"name\": \"makerDetails\",\n \"type\": \"tuple\"\n }\n ],\n \"internalType\": \"struct IPerpManager.Position\",\n \"name\": \"\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"secondsAgo\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getTimeWeightedAvg\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"increaseCardinalityNext\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"posId\",\n \"type\": \"uint128\"\n }\n ],\n \"name\": \"livePositionDetails\",\n \"outputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"pnl\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"fundingPayment\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"effectiveMargin\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isLiquidatable\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newPriceX96\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt0In\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt1In\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.OpenMakerPositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"openMakerPosition\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"makerPosId\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isLong\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"levX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"unspecifiedAmountLimit\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.OpenTakerPositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"openTakerPosition\",\n \"outputs\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"takerPosId\",\n \"type\": \"uint128\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"perps\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"vault\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"beacon\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"creator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"creationTimestamp\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"makerLockupPeriod\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"twapWindow\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"lastTwPremiumsUpdate\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"creatorFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"insuranceFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"liquidationFee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"liquidatorFeeSplit\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"nextPosId\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceLowerMultiX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"sqrtPriceUpperMultiX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minOpeningMargin\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minMakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"maxMakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"makerLiquidationMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minTakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"maxTakerOpeningMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"takerLiquidationMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"twPremiumX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"twPremiumDivBySqrtPriceX96\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"premiumPerSecondX96\",\n \"type\": \"int256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"Currency\",\n \"name\": \"currency0\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"Currency\",\n \"name\": \"currency1\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"fee\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickSpacing\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"contract IHooks\",\n \"name\": \"hooks\",\n \"type\": \"address\"\n }\n ],\n \"internalType\": \"struct PoolKey\",\n \"name\": \"key\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint128\",\n \"name\": \"baseFeeX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"startFeeX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"targetFeeX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"decay\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"volatilityScalerX96\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxFeeMultiplierX96\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct TradingFee.Config\",\n \"name\": \"tradingFeeConfig\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"index\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinality\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"blockTimestamp\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint216\",\n \"name\": \"cumulativeValue\",\n \"type\": \"uint216\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"initialized\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct TimeWeightedAvg.Observation[65535]\",\n \"name\": \"observations\",\n \"type\": \"tuple[65535]\"\n }\n ],\n \"internalType\": \"struct TimeWeightedAvg.State\",\n \"name\": \"twapState\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"liquidity\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickLower\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"int24\",\n \"name\": \"tickUpper\",\n \"type\": \"int24\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt0In\",\n \"type\": \"uint128\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"maxAmt1In\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.OpenMakerPositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteMakerPosition\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"success\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"usdDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"creatorFeeAmt\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"insuranceFeeAmt\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lpFeeAmt\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"isLong\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"margin\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"levX96\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint128\",\n \"name\": \"unspecifiedAmountLimit\",\n \"type\": \"uint128\"\n }\n ],\n \"internalType\": \"struct IPerpManager.OpenTakerPositionParams\",\n \"name\": \"params\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"quoteTakerPosition\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"success\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"perpDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"int256\",\n \"name\": \"usdDelta\",\n \"type\": \"int256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"creatorFeeAmt\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"insuranceFeeAmt\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"lpFeeAmt\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"sqrtPriceX96\",\n \"outputs\": [\n {\n \"internalType\": \"uint160\",\n \"name\": \"sqrtPrice\",\n \"type\": \"uint160\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"tickSpacing\",\n \"outputs\": [\n {\n \"internalType\": \"int24\",\n \"name\": \"\",\n \"type\": \"int24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"PoolId\",\n \"name\": \"perpId\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"tradingBounds\",\n \"outputs\": [\n {\n \"internalType\": \"uint24\",\n \"name\": \"minOpeningMargin\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minMakerMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"maxMakerMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"makerLiquidationMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"minTakerMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"maxTakerMarginRatio\",\n \"type\": \"uint24\"\n },\n {\n \"internalType\": \"uint24\",\n \"name\": \"takerLiquidationMarginRatio\",\n \"type\": \"uint24\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"unlockCallback\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"encodedDelta\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const;","import { PerpCityContext } from \"../context\";\nimport { PERP_MANAGER_ABI } from \"../abis/perp-manager\";\n\nexport async function estimateLiquidity(context: PerpCityContext, tickLower: number, tickUpper: number, usdScaled: bigint): Promise<bigint> {\n return await context.walletClient.readContract({\n address: context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'estimateLiquidityForAmount1',\n args: [tickLower, tickUpper, usdScaled],\n }) as bigint;\n}","import type {Address, Hex} from \"viem\";\nimport { PerpCityContext } from \"../context\";\nimport { OpenPosition } from \"./openPosition\";\nimport { estimateLiquidity, priceToTick, scale6Decimals, scaleToX96, scaleFromX96, sqrtPriceX96ToPrice, marginRatioToLeverage, scaleFrom6Decimals } from \"../utils\";\nimport { nearestUsableTick } from \"@uniswap/v3-sdk\";\nimport { approveUsdc } from \"../utils/approve\";\nimport { PERP_MANAGER_ABI } from \"../abis/perp-manager\";\nimport { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport { gql } from \"graphql-request\";\nimport { parse } from \"graphql\";\n\nexport type OpenMakerPositionParams = {\n margin: number;\n priceLower: number;\n priceUpper: number;\n maxAmt0In: number;\n maxAmt1In: number;\n}\n\nexport type OpenTakerPositionParams = {\n isLong: boolean;\n margin: number;\n leverage: number;\n unspecifiedAmountLimit: number;\n}\n\nexport type OpenInterest = {\n takerLongNotional: number,\n takerShortNotional: number,\n}\n\nexport type TimeSeries<T extends number | OpenInterest> = {\n timestamp: number,\n value: T,\n}\n\nexport type SimulateOpenPositionResults = {\n success: boolean,\n size: number,\n notional: number,\n creatorFeeAmt: number,\n insuranceFeeAmt: number,\n lpFeeAmt: number,\n}\n\nexport type Fees = {\n creatorFee: number,\n insuranceFee: number,\n lpFee: number,\n liquidationFee: number,\n}\n\nexport type Bounds = {\n minMargin: number,\n minTakerLeverage: number,\n maxTakerLeverage: number,\n}\n\nexport class Perp {\n public readonly context: PerpCityContext;\n public readonly id: Hex;\n\n constructor(context: PerpCityContext, id: Hex) {\n this.context = context;\n this.id = id;\n }\n\n // READS\n\n async tickSpacing(): Promise<number> {\n return await this.context.walletClient.readContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'tickSpacing',\n args: [this.id]\n }) as number;\n }\n\n async mark(): Promise<number> {\n const sqrtPriceX96 = await this.context.walletClient.readContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'sqrtPriceX96',\n args: [this.id]\n }) as bigint;\n\n return sqrtPriceX96ToPrice(sqrtPriceX96);\n }\n\n async index(): Promise<number> {\n const beacon: Address = await this.beacon();\n\n const query: TypedDocumentNode<{ beaconSnapshots: { indexPrice: string }[] }, {beaconAddr: Address}> = parse(gql`\n query ($beaconAddr: Bytes!) {\n beaconSnapshots(\n first: 1\n orderBy: timestamp\n orderDirection: desc\n where: { beacon: $beaconAddr }\n ) { indexPrice }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { beaconAddr: beacon });\n \n return Number(response.beaconSnapshots[0].indexPrice);\n }\n\n async beacon(): Promise<Address> {\n const query: TypedDocumentNode<{ perp: { beacon: { id: Hex } } }, { perpId: Hex }> = parse(gql`\n query ($perpId: Bytes!) {\n perp(id: $perpId) {\n beacon { id }\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return response.perp.beacon.id as Address;\n }\n\n async lastIndexUpdate(): Promise<number> {\n const beacon: Address = await this.beacon();\n\n const query: TypedDocumentNode<{ beaconSnapshots: { timestamp: BigInt }[] }, {beaconAddr: Address}> = parse(gql`\n query ($beaconAddr: Bytes!) {\n beaconSnapshots(\n first: 1\n orderBy: timestamp\n orderDirection: desc\n where: { beacon: $beaconAddr }\n ) { timestamp }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { beaconAddr: beacon });\n \n return Number(response.beaconSnapshots[0].timestamp);\n }\n\n async openInterest(): Promise<OpenInterest> {\n const query: TypedDocumentNode<{ perpSnapshots: { takerLongNotional: string, takerShortNotional: string }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n perpSnapshots(\n first: 1\n orderBy: timestamp\n orderDirection: desc\n where: { perp: $perpId }\n ) {\n takerLongNotional\n takerShortNotional\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return {\n takerLongNotional: Number(response.perpSnapshots[0].takerLongNotional),\n takerShortNotional: Number(response.perpSnapshots[0].takerShortNotional),\n };\n }\n\n async markTimeSeries(): Promise<TimeSeries<number>[]> {\n const query: TypedDocumentNode<{ perpSnapshots: { timestamp: BigInt, markPrice: string }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n perpSnapshots(\n orderBy: timestamp\n orderDirection: asc\n where: { perp: $perpId }\n ) {\n timestamp\n markPrice\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return response.perpSnapshots.map((snapshot) => ({\n timestamp: Number(snapshot.timestamp),\n value: Number(snapshot.markPrice),\n }));\n }\n\n async indexTimeSeries(): Promise<TimeSeries<number>[]> {\n const beacon: Address = await this.beacon();\n\n const query: TypedDocumentNode<{ beaconSnapshots: { timestamp: BigInt, indexPrice: string }[] }, {beaconAddr: Address}> = parse(gql`\n query ($beaconAddr: Bytes!) {\n beaconSnapshots(\n orderBy: timestamp\n orderDirection: asc\n where: { beacon: $beaconAddr }\n ) {\n timestamp\n indexPrice\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { beaconAddr: beacon });\n \n return response.beaconSnapshots.map((snapshot) => ({\n timestamp: Number(snapshot.timestamp),\n value: Number(snapshot.indexPrice),\n }));\n }\n\n async fundingRate(): Promise<number> {\n const query: TypedDocumentNode<{ perpSnapshots: { fundingRate: string }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n perpSnapshots(\n first: 1\n orderBy: timestamp\n orderDirection: desc\n where: { perp: $perpId }\n ) {\n fundingRate\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return Number(response.perpSnapshots[0].fundingRate);\n }\n\n async bounds(): Promise<Bounds> {\n const result = await this.context.walletClient.readContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'tradingBounds',\n args: [this.id]\n });\n\n return {\n minMargin: Number(result[0]),\n minTakerLeverage: marginRatioToLeverage(result[5]),\n maxTakerLeverage: marginRatioToLeverage(result[4]),\n };\n }\n\n // TODO\n async maxTakerNotional(isLong: boolean): Promise<number> {\n return 0;\n }\n\n async simulateTaker(params: OpenTakerPositionParams): Promise<SimulateOpenPositionResults> {\n const contractParams = {\n isLong: params.isLong,\n margin: scale6Decimals(params.margin),\n levX96: scaleToX96(params.leverage),\n unspecifiedAmountLimit: scale6Decimals(params.unspecifiedAmountLimit),\n };\n\n const { result, request } = await this.context.walletClient.simulateContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'quoteTakerPosition',\n args: [this.id, contractParams],\n account: this.context.walletClient.account,\n });\n\n return {\n success: result[0],\n size: scaleFrom6Decimals(Math.abs(Number(result[1]))),\n notional: scaleFrom6Decimals(Math.abs(Number(result[2]))),\n creatorFeeAmt: scaleFrom6Decimals(Number(result[3])),\n insuranceFeeAmt: scaleFrom6Decimals(Number(result[4])),\n lpFeeAmt: scaleFrom6Decimals(Number(result[5])),\n };\n }\n\n async allMakerPositions(): Promise<OpenPosition[]> {\n const query: TypedDocumentNode<{ openPositions: { perp: { id: Hex }, inContractPosId: bigint }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n openPositions(\n where: { perp: $perpId, isMaker: true }\n ) {\n perp { id }\n inContractPosId\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return response.openPositions.map((position) => (new OpenPosition(this.context, position.perp.id, position.inContractPosId)));\n }\n\n async allTakerPositions(): Promise<OpenPosition[]> {\n const query: TypedDocumentNode<{ openPositions: { perp: { id: Hex }, inContractPosId: bigint }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n openPositions(\n where: { perp: $perpId, isMaker: false }\n ) {\n perp { id }\n inContractPosId\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return response.openPositions.map((position) => (new OpenPosition(this.context, position.perp.id, position.inContractPosId)));\n }\n\n async totalOpenMakerPnl(): Promise<number> {\n const positions = await this.allMakerPositions();\n const liveDetails = await Promise.all(positions.map((position) => position.liveDetails()));\n return liveDetails.reduce((acc, detail) => acc + detail.pnl - detail.fundingPayment, 0);\n }\n\n async totalOpenTakerPnl(): Promise<number> {\n const positions = await this.allTakerPositions();\n const liveDetails = await Promise.all(positions.map((position) => position.liveDetails()));\n return liveDetails.reduce((acc, detail) => acc + detail.pnl - detail.fundingPayment, 0);\n }\n\n async fees(): Promise<Fees> {\n const result = await this.context.walletClient.readContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'fees',\n args: [this.id]\n });\n\n return {\n creatorFee: scaleFrom6Decimals(result[0]),\n insuranceFee: scaleFrom6Decimals(result[1]),\n lpFee: scaleFrom6Decimals(result[2]),\n liquidationFee: scaleFrom6Decimals(result[3]),\n };\n }\n\n async openInterestTimeSeries(): Promise<TimeSeries<OpenInterest>[]> {\n const query: TypedDocumentNode<{ perpSnapshots: { timestamp: BigInt, takerLongNotional: string, takerShortNotional: string }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n perpSnapshots(\n orderBy: timestamp\n orderDirection: asc\n where: { perp: $perpId }\n ) {\n timestamp\n takerLongNotional\n takerShortNotional\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return response.perpSnapshots.map((snapshot) => ({\n timestamp: Number(snapshot.timestamp),\n value: {\n takerLongNotional: Number(snapshot.takerLongNotional),\n takerShortNotional: Number(snapshot.takerShortNotional),\n },\n }));\n }\n\n async fundingRateTimeSeries(): Promise<TimeSeries<number>[]> {\n const query: TypedDocumentNode<{ perpSnapshots: { timestamp: BigInt, fundingRate: string }[] }, {perpId: Hex}> = parse(gql`\n query ($perpId: Bytes!) {\n perpSnapshots(\n orderBy: timestamp\n orderDirection: asc\n where: { perp: $perpId }\n ) {\n timestamp\n fundingRate\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { perpId: this.id });\n \n return response.perpSnapshots.map((snapshot) => ({\n timestamp: Number(snapshot.timestamp),\n value: Number(snapshot.fundingRate),\n }));\n }\n\n // WRITES\n\n async approveAndOpenMakerPosition(params: OpenMakerPositionParams): Promise<OpenPosition> {\n await approveUsdc(this.context, scale6Decimals(params.margin));\n return await this.openMakerPosition(params);\n }\n\n async approveAndOpenTakerPosition(params: OpenTakerPositionParams): Promise<OpenPosition> {\n await approveUsdc(this.context, scale6Decimals(params.margin));\n return await this.openTakerPosition(params);\n }\n\n async openMakerPosition(params: OpenMakerPositionParams): Promise<OpenPosition> {\n const deployments = this.context.deployments();\n const tickSpacing = await this.tickSpacing();\n\n const scaledUsd = scale6Decimals(params.margin);\n const tickLower = nearestUsableTick(priceToTick(params.priceLower, true), tickSpacing);\n const tickUpper = nearestUsableTick(priceToTick(params.priceUpper, false), tickSpacing);\n\n const contractParams = {\n margin: scaledUsd,\n liquidity: await estimateLiquidity(this.context, tickLower, tickUpper, scaledUsd),\n tickLower: tickLower,\n tickUpper: tickUpper,\n maxAmt0In: scale6Decimals(params.maxAmt0In),\n maxAmt1In: scale6Decimals(params.maxAmt1In),\n };\n\n const { result, request } = await this.context.walletClient.simulateContract({\n address: deployments.perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'openMakerPosition',\n args: [this.id, contractParams],\n account: this.context.walletClient.account,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return new OpenPosition(this.context, this.id, result);\n }\n\n async openTakerPosition(params: OpenTakerPositionParams): Promise<OpenPosition> {\n const contractParams = {\n isLong: params.isLong,\n margin: scale6Decimals(params.margin),\n levX96: scaleToX96(params.leverage),\n unspecifiedAmountLimit: scale6Decimals(params.unspecifiedAmountLimit),\n };\n \n const { result, request } = await this.context.walletClient.simulateContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'openTakerPosition',\n args: [this.id, contractParams],\n account: this.context.walletClient.account,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return new OpenPosition(this.context, this.id, result as bigint);\n }\n}","import { PerpCityContext } from \"../context\";\nimport { Perp } from \"./perp\";\nimport { priceToSqrtPriceX96 } from \"../utils\";\nimport type { Address, Hex } from \"viem\";\nimport { gql } from \"graphql-request\";\nimport type { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { parse } from 'graphql';\nimport { PERP_MANAGER_ABI } from \"../abis/perp-manager\";\n\nexport type CreatePerpParams = {\n startingPrice: number;\n beacon: Address;\n}\n\nexport class PerpManager {\n public readonly context: PerpCityContext;\n \n constructor(context: PerpCityContext) {\n this.context = context;\n }\n\n // READS\n\n async getPerps(): Promise<Perp[]> {\n const query: TypedDocumentNode<{ perps: { id: Hex }[] }, {}> = parse(gql`\n {\n perps {\n id\n }\n }\n `)\n\n const response = await this.context.goldskyClient.request(query);\n \n return response.perps.map((perpData: { id: Hex }) => \n new Perp(this.context, perpData.id as Hex)\n );\n }\n\n // WRITES\n\n async createPerp(params: CreatePerpParams): Promise<Perp> {\n const sqrtPriceX96 = priceToSqrtPriceX96(params.startingPrice);\n\n const contractParams = {\n startingSqrtPriceX96: sqrtPriceX96,\n beacon: params.beacon,\n };\n\n const { result, request } = await this.context.walletClient.simulateContract({\n address: this.context.deployments().perpManager,\n abi: PERP_MANAGER_ABI,\n functionName: 'createPerp',\n args: [contractParams],\n account: this.context.walletClient.account,\n });\n\n await this.context.walletClient.writeContract(request);\n\n return new Perp(this.context, result as Hex);\n }\n}","import { Address, Hex } from \"viem\";\nimport { OpenPosition } from \"./openPosition\";\nimport { erc20Abi } from \"viem\";\nimport { scaleFrom6Decimals } from \"../utils\";\nimport { PerpCityContext } from \"../context\";\nimport { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport { parse } from \"graphql\";\nimport { gql } from \"graphql-request\";\n\nexport type ClosedPosition = {\n perpId: Hex;\n wasMaker: boolean;\n wasLong: boolean;\n pnlAtClose: number;\n}\n\nexport class User {\n public readonly context: PerpCityContext;\n public readonly walletAddress: Hex;\n\n constructor(context: PerpCityContext) {\n this.context = context;\n if (!context.walletClient.account) throw new Error(\"Wallet client account not found\");\n this.walletAddress = context.walletClient.account.address as Hex;\n }\n\n async usdcBalance(): Promise<number> {\n const result = await this.context.walletClient.readContract({\n address: this.context.deployments().usdc,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [this.walletAddress],\n });\n return scaleFrom6Decimals(Number(result));\n }\n\n async openPositions(): Promise<OpenPosition[]> {\n const query: TypedDocumentNode<{ openPositions: { perp: { id: Hex }, inContractPosId: bigint }[] }, {holder: Address}> = parse(gql`\n query ($holder: Bytes!) {\n openPositions(\n where: { holder: $holder }\n ) {\n perp { id }\n inContractPosId\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { holder: this.walletAddress });\n \n return response.openPositions.map((position) => (new OpenPosition(this.context, position.perp.id, position.inContractPosId)));\n }\n\n async closedPositions(): Promise<ClosedPosition[]> {\n const query: TypedDocumentNode<{ closedPositions: { perp: { id: Hex }, wasMaker: boolean, wasLong: boolean, pnlAtClose: string }[] }, {holder: Address}> = parse(gql`\n query ($holder: Bytes!) {\n closedPositions(\n where: { holder: $holder }\n ) {\n perp { id }\n wasMaker\n wasLong\n pnlAtClose\n }\n }\n `);\n\n const response = await this.context.goldskyClient.request(query, { holder: this.walletAddress });\n \n return response.closedPositions.map((position) => ({\n perpId: position.perp.id,\n wasMaker: position.wasMaker,\n wasLong: position.wasLong,\n pnlAtClose: Number(position.pnlAtClose),\n }));\n }\n\n async realizedPnl(): Promise<number> {\n return (await this.closedPositions()).reduce((acc, position) => acc + position.pnlAtClose, 0);\n }\n\n async unrealizedPnl(): Promise<number> {\n const openPositions = await this.openPositions();\n const liveDetails = await Promise.all(openPositions.map((position) => position.liveDetails()));\n return liveDetails.reduce((acc, detail) => acc + detail.pnl - detail.fundingPayment, 0);\n }\n}","export const BEACON_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IVerifierWrapper\",\n \"name\": \"verifierWrapper\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"initialData\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"initialCardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"proof\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"publicSignals\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"InvalidProof\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"proof\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"publicSignals\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"ProofAlreadyUsed\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"data\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"DataUpdated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"MAX_DATA\",\n \"outputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"\",\n \"type\": \"int256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MIN_DATA\",\n \"outputs\": [\n {\n \"internalType\": \"int256\",\n \"name\": \"\",\n \"type\": \"int256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"VERIFIER_WRAPPER\",\n \"outputs\": [\n {\n \"internalType\": \"contract IVerifierWrapper\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"data\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getData\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"twapSecondsAgo\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"getTwap\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"twapPrice\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"increaseCardinalityNext\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNextOld\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNextNew\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"timestamp\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"twapState\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"index\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinality\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"cardinalityNext\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"proof\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"publicSignals\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"updateData\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"usedProofs\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n] as const;"],"mappings":"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AgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,QACI,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ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","names":["publicActions","publicActions","gql","parse","parse","gql","erc20Abi","parse","gql","erc20Abi"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@strobelabs/perpcity-sdk",
3
3
  "author": "Strobe Labs",
4
4
  "description": "TypeScript SDK for interacting with Perp City contracts",
5
- "version": "0.1.5",
5
+ "version": "0.1.6",
6
6
  "license": "GPL-3.0",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist/index.mjs",
@@ -14,7 +14,9 @@
14
14
  "build": "tsup",
15
15
  "example-create-perp": "tsx -r dotenv/config examples/create-perp.ts",
16
16
  "example-maker": "tsx -r dotenv/config examples/maker.ts",
17
- "example-taker": "tsx -r dotenv/config examples/taker.ts"
17
+ "example-taker": "tsx -r dotenv/config examples/taker.ts",
18
+ "example-close": "tsx -r dotenv/config examples/close.ts",
19
+ "example-view": "tsx -r dotenv/config examples/view.ts"
18
20
  },
19
21
  "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0",
20
22
  "devDependencies": {
@@ -29,6 +31,6 @@
29
31
  "@uniswap/v3-sdk": "^3.25.2",
30
32
  "graphql": "^16.11.0",
31
33
  "graphql-request": "^7.2.0",
32
- "viem": "^2.37.6"
34
+ "viem": "^2.37.8"
33
35
  }
34
36
  }